From a2d2dc2e14d06453b6ed6e611f602333eb41bf0a Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期四, 30 三月 2023 10:57:08 +0800
Subject: [PATCH] 更改项目名称,命名空间,上传更改过的jar包,更改服务名,项目中的类引用路径

---
 Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application.yml                                                                          |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntAuthorityDTO.java                                        |  124 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOServiceI.java                                                 |  128 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/AuthClientServiceImpl.java                                |   33 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/CommonConstant.java                                                        |   77 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntAuthorityVO.java                                |  123 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeNoOpPasswordEncoder.java                                                   |   50 
 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.lastUpdated                                               |   11 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/NoticeMapper.xml                                                                 |   54 
 Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/config/BladeReportConfiguration.java                                       |   43 
 Source/UBCS/ubcs-gateway/Dockerfile                                                                                                           |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java                               |  127 
 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom                                                         |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeClassifyTemplateLC.java                                      |  144 
 Source/UBCS/pom.xml                                                                                                                           |  220 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrRangeDTO.java                                    |   82 
 Source/UBCS/ubcs-service-api/ubcs-system-api/pom.xml                                                                                          |   24 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/AuthClientMapper.xml                                                           |   27 
 Source/UBCS/doc/sql/dm/bladex-sword-dameng.dmp                                                                                                |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java                                   |  263 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java                             |   42 
 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom                                                     |   46 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessTempDO.java                                       |  169 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouter.java                                |   24 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/UserController.java                                |  172 
 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom                                                           |   51 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/AdminConfiguration.java                                               |   32 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntAuthorityDaoI.java                                               |  128 
 Source/UBCS/ubcs-auth/src/main/resources/static/js/popper.min.js                                                                              |    0 
 Source/UBCS/doc/nacos/routes/blade-gateway-dev.json                                                                                           |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-dev.yml                                                                         |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateMapServiceImpl.java                       |  278 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/CookieInterceptor.java                 |   43 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictBizEnum.java                                           |   39 
 Source/UBCS/doc/sql/mysql/bladex-flowable-mysql.sql                                                                                           |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleScope.java                                          |   71 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntBaseServiceI.java                                            |  101 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeAllCodeDO.java                                                   |  170 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java                                              |  112 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css              |    0 
 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.sha1                                                |    1 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml                                                                                             |   17 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobScheduleHelper.java                            |  354 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeButtonServiceI.java                                            |  115 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuSettingMapper.xml                                                       |    5 
 Source/UBCS/ubcs-auth/Dockerfile                                                                                                              |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/LogApplication.java                                                         |   35 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/layer.js                                                       |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobLogController.java                              |  230 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ParamController.java                                        |  107 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application.yml                                                                         |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/EnumVO.java                                                          |   25 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobRegistry.java                                |   55 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingTaskDaoI.java                                                   |  127 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserService.java                                           |  223 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IApiScopeService.java                                          |   29 
 Source/UBCS/ubcs-plugin-api/README.md                                                                                                         |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java                                      |  230 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RegionVO.java                                               |   89 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/OssVO.java                                                  |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntParamDO.java                                                   |   89 
 Source/UBCS/script/docker/elk/README.md                                                                                                       |    0 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayFilter.java                                                        |   41 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java                                   |  150 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrMappingDO.java                                         |  207 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTemplatePhaseServiceImpl.java                             |  509 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateDaoI.java                                          |  170 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingTaskDaoImpl.java                                           |  214 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantServiceImpl.java                                    |  337 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java                                      |   80 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataServiceI.java                                   |  152 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Model.java                                                        |   74 
 Source/UBCS/.gitignore                                                                                                                        |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java                                          |  145 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/LeaveMapper.xml                                                                  |    6 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java                                   |  517 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css              |    0 
 Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-test.yml                                                                      |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/update.json                                                   |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrRangeDaoImpl.java                                   |  204 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMapMethod.java                                    |   24 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application.yml                                                                     |   61 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/user/user.index.ftl                                                       |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeRuleDO.java                                                      |   79 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/templates/code.properties                                                                |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java      |   62 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/XxlJobServiceImpl.java                           |  372 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntBaseDO.java                                                    |   78 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingTaskVO.java                                    |  200 
 Source/UBCS/ubcs-auth/src/main/resources/static/css/bootstrap.min.css                                                                         |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantPackageController.java                                |  131 
 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom                                               |   33 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/ISmsService.java                                               |   56 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateMapController.java                          |  116 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java                                           |  669 
 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom                                                   |   40 
 Source/UBCS/doc/sql/update/bladex-update-postgresql-3.0.0~3.0.1.sql                                                                           |    0 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java                                                        |   67 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java                   |   39 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java                       |   70 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/result.json                                 |    0 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java                                        |   73 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogUsualService.java                                               |   29 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictServiceImpl.java                                      |  125 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSerialValueDaoI.java                                               |  128 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictBizService.java                                           |  101 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DataScopeController.java                                    |  123 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/enums/SmsCodeEnum.java                                         |   62 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css      |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java                       |  359 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantService.java                                            |   90 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java                                  |   56 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java                                   |   23 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateMapServiceI.java                               |  100 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java                               |   71 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/DictBizM.java                                                 |  108 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/User.java                                            |  113 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleMenu.java                                           |   70 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/BackXml.java                                                         |   42 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-prod.yml                                                                    |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/UserVO.java                                |   56 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ApiScope.java                                           |   71 
 Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.lastUpdated                                                 |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Json2XmlUtil.java                                                    |  121 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowFollowController.java                                    |   68 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml                                              |   71 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserDeptService.java                                       |   30 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/cache/CacheNames.java                                                               |   59 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/favicon.ico                                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogApiMapper.java                                                    |   29 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java                    |   19 
 Source/UBCS/LICENSE                                                                                                                           |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Pro.java                                                             |   40 
 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.sha1                                                |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java                              |   35 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClient.java                                          |   74 
 Source/UBCS/ubcs-service/ubcs-system/pom.xml                                                                                                  |   75 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionImporter.java                                              |   40 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/INoticeService.java                                                |   39 
 Source/UBCS/doc/nacos/README.md                                                                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobDynamicScheduler.java                          |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionsVO.java                            |   26 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkService.java                                                |  110 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleVO.java                                       |   72 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictMapper.java                                                 |   73 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobcode.index.1.js                                                        |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/PropertyVO.java                             |   48 
 Source/UBCS/ubcs-service-api/ubcs-desk-api/pom.xml                                                                                            |   17 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodePhaseAttrServiceI.java                                         |  107 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RegionWrapper.java                                             |   52 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java                                         | 4016 ++
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/FlowEntity.java                                            |   43 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/SystemApplication.java                                                 |   35 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java                     |   76 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmDuckingConstant.java                                           |  146 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryClassifyVO.java                    |   23 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java                                     |  122 
 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.sha1                                                    |    1 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuMapper.xml                                                              |   21 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthSecure.java                                                          |   37 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/launch/LauncherServiceImpl.java                                                     |   62 
 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.lastUpdated                                         |    5 
 Source/UBCS/ubcs-gateway/src/main/resources/application-dev.yml                                                                               |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataCondtionsVO.java                        |   20 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSynonymDaoI.java                                                   |  128 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ParamMapper.java                                                |   29 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.index.1.js                                                         |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogUsualController.java                                          |   66 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java                               | 1053 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java                                                 |   68 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMapper.java                                                 |   67 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/LocalCacheUtil.java                                 |  133 
 Source/UBCS/doc/sql/postgresql/bladex-flowable-postgresql.sql                                                                                 |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js         |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot   |    0 
 Source/UBCS/ubcs-service/pom.xml                                                                                                              |   57 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrRangeDO.java                                           |   95 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java                                         |  130 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntParamDaoI.java                                                   |  144 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/gennerAttrMapUtil.java                                               |   45 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java                                                          |   52 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ValueRangeMapper.xml                                                           |   85 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-prod.yml                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IUserPwdstrategyService.java                                   |   34 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Sms.java                                                |   82 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java                                          |  166 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java                                  |   33 
 Source/UBCS/script/docker/elk/undeploy.sh                                                                                                     |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/JsonRootDataDTO.java                         |   21 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TopMenuController.java                                      |  136 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/CombinationMapper.java                                          |   59 
 Source/UBCS/doc/nacos/blade.yaml                                                                                                              |    0 
 Source/UBCS/script/docker/app/prometheus/config/wechat.tmpl                                                                                   |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/tt.xml                                   |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/UserPwdstrategy.java                                    |   77 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/DeptDTO.java                                               |   33 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png                                   |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserWebMapper.xml                                                                |    5 
 Source/UBCS/script/docker/elk/logstash-filebeat.conf                                                                                          |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogUsualServiceImpl.java                                       |   33 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg                        |    0 
 Source/UBCS/script/docker/app/prometheus/dashboard/bladex-linux.json                                                                          |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/AttachMapper.java                                               |   42 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeTemplatePhaseDaoI.java                                             |  142 
 Source/UBCS/doc/sql/oracle/bladex-sword-oracle.sql                                                                                            |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js                      |    0 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/DingTalkConfiguration.java                                            |   52 
 Source/UBCS/doc/sql/oracle/bladex-flowable-oracle.sql                                                                                         |    0 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictBizCache.java                                          |  133 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeRuleDaoI.java                                                      |  155 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogReport.java                               |   54 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/constant/AuthConstant.java                                                              |   53 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/annotation/PermissionLimit.java                    |   29 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java                                   |  651 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java                              |  133 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataInfoDaoI.java                                       |  128 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java                                      |  116 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js                                     |    0 
 Source/UBCS/script/docker/elk/logstash.yml                                                                                                    |    0 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/utils/TokenUtil.java                                                                    |  177 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClientFallback.java                                    |   51 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IParamService.java                                             |   37 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRegionService.java                                            |   86 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/LeaveMapper.java                                                    |   29 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkNotifier.java                                               |  105 
 Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-dev.yml                                                                      |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfysVO.java                            |   30 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/RouterFunctionConfiguration.java                                           |   81 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IDictBizService.java                                                 |  109 
 Source/UBCS/script/docker/elk/kibana.yml                                                                                                      |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotSaveDatVO.java                              |   55 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogReportDao.java                                   |   26 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java                                            |  135 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/InterParameterVO.java                      |   21 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-test.yml                                                                    |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java                                         |   37 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java                                               |   61 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeRuleDTO.java                                               |   40 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java                   |   73 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserWebMapper.java                                           |   30 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSynonymDaoImpl.java                                           |  215 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js                                        |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeButtonDaoI.java                                                    |  142 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-test.yml                                                                    |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java                                             |   52 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingLogeVO.java                                    |  177 
 Source/UBCS/doc/nacos/blade-test.yaml                                                                                                         |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff  |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeTemplatePhaseDO.java                                             |   81 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/ILeaveService.java                                                 |   37 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryLibraryVO.java                     |   39 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessPhaseDO.java                                      |  127 
 Source/UBCS/ubcs-auth/src/main/resources/application-dev.yml                                                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/OssWrapper.java                                                |   49 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobFailMonitorHelper.java                         |  209 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-test.yml                                                                |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js                             |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserAppMapper.xml                                                                |    5 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js                                   |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js         |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/StrategyMapper.xml                                                             |  118 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserDeptServiceImpl.java                               |   34 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java                                      |  104 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java                                  |  177 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/ResourceApplication.java                                               |   36 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf                 |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java                                      |   17 
 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.lastUpdated                                   |   11 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeDeleteBatchDTO.java                                        |   49 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/index.ftl                                                                 |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-test.yml                                                                        |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ApiScopeMapper.java                                             |   29 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobcode/jobcode.index.ftl                                                 |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDTO.java                                            |  179 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java                                      |  685 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeSocialEndpoint.java                                                       |   88 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntInfoServiceImpl.java                                    | 1097 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/classfy.json                                 |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotResembleVO.java                             |   66 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java                                        |  130 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/CombinationMapper.xml                                                          |  109 
 Source/UBCS/ubcs-auth/src/main/resources/application-prod.yml                                                                                 |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java                                         |  167 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/QiniuSmsBuilder.java                                       |   47 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.index.ftl                                                   |    0 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/LeaveServiceImpl.java                                         |   81 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java                               |  123 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java                                   |  920 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js                                             |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateMapDO.java                                       |  114 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/UserPwdstrategyVO.java                                      |   29 
 Source/UBCS/ubcs-service/ubcs-desk/pom.xml                                                                                                    |   97 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/LoginService.java                                     |  106 
 Source/UBCS/ubcs-service/ubcs-desk/Dockerfile                                                                                                 |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/AliOssBuilder.java                                         |   63 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntHeaderVO.java                                   |   80 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf   |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuServiceImpl.java                                   |   63 
 Source/UBCS/doc/sql/sqlserver/bladex-flowable-sqlserver.sql                                                                                   |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateDaoImpl.java                                  |  321 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java                                |  377 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/PatternUtil.java                                                     |   49 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java                                      |  173 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/DictBizMapper.java                                                    |   64 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java                                                  |  144 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrMappingDaoImpl.java                                 |  205 
 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.sha1                                              |    1 
 Source/UBCS/script/docker/app/prometheus/config/prometheus.yml                                                                                |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/common.1.js                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IDatasourceService.java                                          |   29 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/ApiScopeWrapper.java                                           |   48 
 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.lastUpdated                                         |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateMapDaoI.java                                       |  141 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Attach.java                                             |   71 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSynonymServiceImpl.java                                   |  278 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictBizMapper.java                                              |   64 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClient.java                                     |   72 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/dto/ModelDTO.java                                                        |   42 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntParamDaoImpl.java                                           |  258 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictBizWrapper.java                                            |   61 
 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.lastUpdated                                         |   11 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/ErrorHandlerConfiguration.java                                             |   44 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java                                                  |   46 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/data.xml                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/BladeTest.java                                                                 |   46 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java                         |  112 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-test.yml                                                                         |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeDefaultLC.java                                               |  159 
 Source/UBCS/ubcs-gateway/src/main/resources/bootstrap.yml                                                                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/TencentSmsBuilder.java                                     |   46 
 Source/UBCS/script/docker/elk/filebeat.yml                                                                                                    |    0 
 Source/UBCS/ubcs-service/ubcs-omd/pom.xml                                                                                                     |   93 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java    |   62 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DataScopeClient.java                                             |  109 
 Source/UBCS/doc/sql/update/bladex-update-dameng-3.0.0~3.0.1.sql                                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/jobhandler/SampleXxlJob.java                                         |  195 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntInfoServiceI.java                                            |  159 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/TriggerTypeEnum.java                             |   26 
 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.lastUpdated                                       |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodePhaseAttrDO.java                                                 |   93 
 Source/UBCS/ubcs-auth/src/main/resources/static/js/jquery.min.js                                                                              |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineServiceI.java                                             |  362 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java                                             |  179 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-dev.yml                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java                                              |  166 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalRequestLogFilter.java                                                |  112 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.detail.ftl                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java                                                  |   36 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml                                                                       |   53 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ApiScopeController.java                                     |  123 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserOauthServiceImpl.java                              |   36 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfyVO.java                             |   83 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantTreeVO.java                                            |   40 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java                                               |   78 
 Source/UBCS/script/docker/app/prometheus/config/grafana.ini                                                                                   |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Dept.java                                               |  108 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/CodeMapper.xml                                                                    |   22 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java                                         |  167 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java                       | 1071 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/OssEndpoint.java                                              |  244 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css                                  |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java                                   |  122 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntBaseVO.java                                     |   25 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java                  |   23 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/xx.xml                                      |    0 
 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.lastUpdated                                       |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTempMapItemServiceImpl.java                       |  297 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobInfoDao.java                                        |   49 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/controller/UserController.java                                      |  345 
 Source/UBCS/ubcs-ops/ubcs-log/Dockerfile                                                                                                      |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyProcessTempServiceI.java                               |  124 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserApp.java                                         |   64 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictBizClient.java                                               |   63 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTempMapItemDO.java                                       |  181 
 Source/UBCS/doc/sql/db/database-info.md                                                                                                       |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message_en.properties                                                          |  262 
 Source/UBCS/ubcs-service-api/ubcs-user-api/pom.xml                                                                                            |   24 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetails.java                                                           |  121 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/ParamCache.java                                          |   72 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrMappingDaoI.java                                         |  133 
 Source/UBCS/ubcs-ops/ubcs-flow/doc/nacos/blade-flow-dev.yaml                                                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/layer.css                                        |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Strategy.java                                           |  175 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/feign/FlowClient.java                                                 |  107 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java                   |   19 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeFixedValueDaoImpl.java                                        |  222 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/JwtTokenStoreConfiguration.java                                                  |   77 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultClassifyVO.java                   |   21 
 Source/UBCS/script/docker/elk/deploy.sh                                                                                                       |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/GeneralMappingUtil.java                  |   30 
 Source/UBCS/service-start.sh                                                                                                                  |   83 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IOssService.java                                               |   56 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java                         |  344 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java                                                         |  130 
 Source/UBCS/ubcs-ops/ubcs-admin/README.md                                                                                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogUsualMapper.java                                                  |   29 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java                                              |  119 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/FlowBusinessService.java                                      |   72 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java                     |   48 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/AttachController.java                                       |  127 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeRuleServiceI.java                                              |  175 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictBizServiceImpl.java                                   |  119 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateAttrDaoI.java                                      |  128 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/pom.xml                                                                                           |   32 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js                               |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserSearchServiceImpl.java                             |   65 
 Source/UBCS/ubcs-ops/ubcs-report/pom.xml                                                                                                      |   70 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyProcessTempDaoImpl.java                               |  247 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml                                             |   62 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateMapVO.java                        |   96 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlUtil.java                                                         |  770 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyAttributeVO.java                          |   63 
 Source/UBCS/ubcs-ops/ubcs-log/pom.xml                                                                                                         |   66 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeTemplatePhaseServiceI.java                                     |  137 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/InternalAuthorizationManager.java                                   |   75 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/FtlUtil.java                                        |   31 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/ModelPrototype.java                                               |  119 
 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/_remote.repositories                                                                       |    4 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultDataVO.java                           |   47 
 Source/UBCS/script/docker/elk/es-slave2.yml                                                                                                   |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/tt.json                              |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserAppMapper.java                                           |   30 
 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.sha1                                              |    1 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg         |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/SmsMapper.xml                                                                    |   30 
 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.lastUpdated                                       |   11 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobUserDao.java                                        |   31 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataDTO.java                                    |  244 
 Source/UBCS/ubcs-ops/ubcs-admin/Dockerfile                                                                                                    |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/wrapper/UserWrapper.java                                            |   59 
 Source/UBCS/script/docker/app/nginx/web/nginx.conf                                                                                            |    0 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeAuthorizationServerConfiguration.java                                       |  120 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogErrorService.java                                               |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyServiceI.java                                          |  240 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreAttrMappingSeviceImpl.java                          |  531 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message.properties                                                             |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/DatasourceServiceImpl.java                                  |   33 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java                                 |   27 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleMenuVO.java                                             |   35 
 Source/UBCS/ubcs-ops-api/pom.xml                                                                                                              |   52 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowProcess.java                                                 |   65 
 Source/UBCS/script/docker/app/.env                                                                                                            |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/feign/LogClient.java                                                        |   68 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataDaoI.java                                           |  127 
 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.sha1                                              |    1 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-prod.yml                                                                  |    0 
 Source/UBCS/script/docker/app/nginx/api/nginx.conf                                                                                            |    0 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/props/AuthProperties.java                                                         |   59 
 Source/UBCS/doc/nacos/blade-prod.yaml                                                                                                         |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java                          |   98 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen.js                                                   |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataInfoServiceI.java                               |  100 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java                                         |  176 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatRuleController.java                            |  115 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserExcel.java                                                |   97 
 Source/UBCS/ubcs-common/pom.xml                                                                                                               |   46 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Combination.java                                        |  112 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java                                |   20 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/NoticeServiceImpl.java                                        |   43 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantPackageService.java                                     |   29 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java                                 |   83 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataObjectVO.java                           |   72 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/RegionCache.java                                         |   63 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/SmsMapper.java                                                  |   41 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobGroupDao.java                                       |   26 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/YunpianSmsBuilder.java                                     |   44 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/index.js                                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogGlueDao.java                                     |   24 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCompPreviewDTO.java                                        |   42 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataServiceImpl.java                           | 1119 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTempMapItemDaoI.java                                       |  127 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css |    0 
 Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.sha1                                                        |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntInfoDaoI.java                                                    |  127 
 Source/UBCS/ubcs-plugin/pom.xml                                                                                                               |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsAxis2ClientUtil.java                                               |   59 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java                             |  333 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ClassifyVO.java                         |  112 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelPrototypeMapper.java                                         |   29 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateDTO.java                                   |  104 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/dto/DictDTO.java                                                 |   33 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyValueDO.java                                             |  108 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/result.json                                      |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/CodeMapper.java                                                   |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataDaoImpl.java                                   |  214 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js                                         |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTempMapItemDTO.java                                |  184 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogErrorMapper.java                                                  |   29 
 Source/UBCS/ubcs-ops/ubcs-resource/pom.xml                                                                                                    |  120 
 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/_remote.repositories                                                                    |    4 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/SecurityConfiguration.java                                            |   73 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingServiceImpl.java                                   | 1111 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyProcessTempDaoI.java                                       |  141 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/utils/FlowCache.java                                                    |   78 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserSearchClient.java                                |   81 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotParmaDatVO.java                             |   41 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodePhaseAttrDaoImpl.java                                         |  246 
 Source/UBCS/script/docker/elk/es-slave1.yml                                                                                                   |    0 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/utils/SmsUtil.java                                             |  113 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js                             |    0 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClient.java                                            |  100 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-dev.yml                                                                      |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntBaseDaoI.java                                                    |  128 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/DictBizCache.java                                              |  133 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingDataDaoImpl.java                                           |  215 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java                                     |  190 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeAllCodeLC.java                                               |  165 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/entity/ProcessLeave.java                                                   |   67 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/TencentOssBuilder.java                                     |   66 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantPackageMapper.xml                                                        |   20 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantPackageMapper.java                                        |   29 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-dev.yml                                                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-prod.yml                                                                    |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogApiMapper.xml                                                                      |   26 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeResembleRuleVO.java                               |  119 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeOssConfiguration.java                                      |   44 
 Source/UBCS/ubcs-service-api/pom.xml                                                                                                          |   75 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/QiniuOssBuilder.java                                       |   52 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RegionMapper.java                                               |   62 
 Source/UBCS/ubcs-ops/ubcs-flow/Dockerfile                                                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java                             |  481 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java                             |  155 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateServiceImpl.java                          | 1091 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLifeCycleConstant.java                                         |   26 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/pom.xml                                                                                            |   28 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml                                                 |   87 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/CookieUtil.java                                     |   98 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RegionServiceImpl.java                                    |  120 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java                                      |  132 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java                |   48 
 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.lastUpdated                                       |   11 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DeptVO.java                                                 |   84 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOtherMapper.java                                         |   30 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryClsfDO.java                       |   42 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/scheduler/XxlJobScheduler.java                           |  112 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrMappingVO.java                          |  199 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingDataDaoI.java                                                   |  128 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Post.java                                               |   66 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/AttachMapper.xml                                                                 |   28 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ColumnVO.java                                         |   51 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java                                          |   72 
 Source/UBCS/ubcs-ops/ubcs-xxljob/pom.xml                                                                                                      |   62 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeBasicSecServiceI.java                                          |  182 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml                                                                                                |   19 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClient.java                                      |   60 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ParamMapper.xml                                                                |   20 
 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.sha1                                          |    1 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictBizController.java                                      |  179 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon.png                                         |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-dev.yml                                                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application.yml                                                                             |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-test.yml                                                                        |    0 
 Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application.yml                                                                           |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java                                                       |   44 
 Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-prod.yml                                                                      |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/ParamDTO.java                                              |   33 
 Source/UBCS/doc/sql/oracle/bladex-saber-oracle.sql                                                                                            |    0 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/DictBiz.java                                              |  108 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java                       |  114 
 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom                                                     |   35 
 Source/UBCS/doc/sql/dm/bladex-flowable-dameng.dmp                                                                                             |    0 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-dev.yml                                                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB官方文档.md                                                                                     | 1740 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOauthMapper.java                                         |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeServiceI.java                                        |   38 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntBaseServiceImpl.java                                    |  285 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java          |   85 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java                                |  138 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictBizOmdController.java                                         |  189 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantMapper.java                                               |   41 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobGroup.java                                   |   76 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClient.java                                            |   84 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeFixedValueDaoI.java                                                |  127 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataVO.java                            |  256 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Oss.java                                                |   87 
 Source/UBCS/ubcs-gateway/pom.xml                                                                                                              |  102 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeRuleDaoImpl.java                                              |  276 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/login.1.js                                                                |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java                                            |  120 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Menu.java                                               |  149 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ParamVO.java                                                |   35 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js       |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java                        |  167 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java                               |  636 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 |    0 
 Source/UBCS/ubcs-ops/ubcs-admin/pom.xml                                                                                                       |  118 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/DictBizMVO.java                                                   |   71 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ApiScopeServiceImpl.java                                  |   33 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java                                  | 1024 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeImprotDataGridVO.java                                            |    4 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrMappingDTO.java                                  |  200 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/clsfAttrMap.xml                          |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/PostController.java                                         |  149 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java                                  |  174 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java                                           |   47 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserSearchClient.java                                         |   65 
 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.sha1                                                      |    1 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java                                   |  121 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/AdminBizImpl.java                                |  171 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java                                           |  226 
 Source/UBCS/doc/sql/sqlserver/bladex-saber-sqlserver.sql                                                                                      |    0 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOther.java                                       |   64 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java                                             |  169 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/OssMapper.java                                                  |   42 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java                            |   72 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/DictBizEnum.java                                               |   39 
 Source/UBCS/ubcs-auth/README.md                                                                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogApiService.java                                                 |   29 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/PermissionInterceptor.java             |   59 
 Source/UBCS/script/docker/app/prometheus/dashboard/bladex-docker.json                                                                         |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultSystemVO.java                |   61 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOauthMapper.xml                                                              |   22 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DataScopeMapper.java                                            |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTempMapItemController.java                          |  116 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDataScopeService.java                                         |   29 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/DatasourceController.java                                     |  128 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java                                              |  157 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogApiServiceImpl.java                                         |   34 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/UserApplication.java                                                |   35 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntParamDTO.java                                            |   81 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/TaskUtil.java                                               |   71 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeResembleRuleServiceI.java                                      |  100 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenuSetting.java                                     |   38 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictEnum.java                                              |   95 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultVO.java                               |   21 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/HttpUtils.java                                                       |  194 
 Source/UBCS/script/docker/app/prometheus/config/dingtalk.yml                                                                                  |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ApiScopeVO.java                                             |   39 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/PostDTO.java                                               |   33 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntParamVO.java                                    |   80 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/DataScopeModelHandler.java                              |   65 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeClassifyFullInfoBO.java                                     |   66 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/LeaveController.java                                            |   66 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application.yml                                                                         |    0 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/vo/UserVO.java                                              |   90 
 Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-style.css                                                                           |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyProcessTempDTO.java                                |  152 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ProppertyVO.java                           |   56 
 Source/UBCS/ubcs-ops/ubcs-resource/Dockerfile                                                                                                 |   15 
 Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/entity/Notice.java                                                 |   64 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoderFactories.java                                              |   66 
 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom                                                           |   46 
 Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml                                                                                            |   61 
 Source/UBCS/script/docker/app/nacos/init.d/custom.properties                                                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/IndexController.java                               |   93 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntInfoVO.java                                     |  746 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java                                 |   21 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelMapper.xml                                                                   |   27 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionsVO.java                            |   48 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg   |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2       |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateButtonDO.java                                    |  135 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RegionController.java                                       |  202 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java                                   |  142 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/feign/SmsClient.java                                                   |   69 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobLogReportHelper.java                           |  152 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/tt.xml                                                        |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreAttrMappingSeviceI.java                                  |   48 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/application.yml                                                                           |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuSettingServiceImpl.java                            |   33 
 Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-test.yml                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java                                                   |  225 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyValueServiceI.java                                     |  152 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-test.yml                                                                    |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-prod.yml                                                                        |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/UserPwdstrategyMapper.xml                                                      |   60 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java                          |   50 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeTemplatePhaseDaoImpl.java                                     |  247 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataInfoServiceImpl.java                       |  277 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/config/BladeCommonConfiguration.java                                                |   32 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ParamServiceImpl.java                                     |   40 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DeptMapper.xml                                                                 |  115 
 Source/UBCS/doc/sql/update/bladex-update-oracle-3.0.0~3.0.1.sql                                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelPrototypeService.java                                      |   47 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js                                           |  234 
 Source/UBCS/doc/sql/sqlserver/bladex-sword-sqlserver.sql                                                                                      |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif                                    |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java                                    |  120 
 Source/UBCS/ubcs-ops/ubcs-swagger/src/main/java/com/vci/ubcs/swagger/SwaggerApplication.java                                                  |   36 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml                                                |   63 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntInfoDaoImpl.java                                            |  214 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/DateUtils.java                                                       |  527 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogDao.java                                         |   60 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobInfoController.java                             |  166 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/SmsWrapper.java                                                |   49 
 Source/UBCS/ubcs-service/ubcs-code/pom.xml                                                                                                    |  170 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java                                 |   57 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java                                  |   47 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserWeb.java                                         |   64 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java                                     |  116 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClientFallback.java                             |   45 
 Source/UBCS/ubcs-auth/src/main/resources/templates/confirm.ftl                                                                                |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java                                         |   84 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobRegistryDao.java                                    |   38 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java                                 |  115 
 Source/UBCS/ubcs-ops/ubcs-xxljob/Dockerfile                                                                                                   |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionVO.java                             |   42 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleScopeService.java                                         |   29 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuSettingService.java                                    |   29 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClientFallback.java                                    |   58 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/classify.xml                            |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/I18nUtil.java                                       |   80 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/SecurityConfiguration.java                                                       |   64 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClientFallback.java                                   |   46 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/config/FlowableConfiguration.java                                       |   44 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobinfo.index.1.js                                                        |    0 
 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/_remote.repositories                                                                          |    4 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-dev.yml                                                                   |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntHeaderDaoI.java                                                  |  143 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/pom.xml                                                                                                |  125 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataVO.java                |   19 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeAllCodeMapper.java                                              |   12 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/nacos/blade-xxljob-admin-dev.yaml                                                                  |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateButtonDaoI.java                                    |  127 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/AttributeMapConfig.java                                              |   33 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuSettingMapper.java                                       |   29 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictVO.java                                                   |   71 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoder.java                                                       |   39 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeExportAttrDTO.java                                         |  134 
 Source/UBCS/doc/nacos/routes/README.md                                                                                                        |    0 
 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/_remote.repositories                                                                      |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeFixedValueDO.java                                                |   93 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/NoticeController.java                                           |  150 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/DictBizMapper.xml                                                                 |   51 
 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/_remote.repositories                                                                          |    4 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java                     |   79 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/xxx.json                                |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/conf/XxlJobAdminConfig.java                              |  147 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobTriggerPoolHelper.java                         |  145 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/OssBuilder.java                                            |  160 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/OssController.java                                          |  149 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-prod.yml                                                                    |    0 
 Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom                                                             |   54 
 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.sha1                                                      |    1 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js                                       |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeBasicSecDO.java                                                  |  728 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeSynonymDTO.java                                            |  104 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingLogeDaoI.java                                                   |  128 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogApiController.java                                            |   66 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/XxlJobTrigger.java                               |  211 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/CombinationController.java                                  |  108 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserSearchService.java                                     |   64 
 Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/banner.txt                                                                               |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodePhaseAttrVO.java                                  |   77 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyDO.java                                                  |  276 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/resources/bootstrap.yml                                                                              |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMenuMapper.xml                                                             |   16 
 Source/UBCS/doc/sql/update/bladex-update-sqlserver-3.0.0~3.0.1.sql                                                                            |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/PostWrapper.java                                               |   47 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java                                                        |  157 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingScheduling.java                                          |   57 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/cache/UserCache.java                                        |   87 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js                               |    0 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/FlowUtil.java                                               |   66 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/SmsServiceImpl.java                                       |   67 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantPackageServiceImpl.java                             |   33 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/CodeController.java                                           |  188 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeKeyAttrRepeatRuleDaoI.java                                         |  148 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ValueRangeServiceImpl.java                                |  115 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingSyncServiceI.java                                       |   48 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js                                              |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.exception.ftl                                               |    0 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalResponseLogFilter.java                                               |   99 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/AttachVO.java                                               |   35 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeAllCodeDaoI.java                                                   |  141 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/enums/UserEnum.java                                         |   69 
 Source/UBCS/ubcs-ops/ubcs-develop/src/test/resources/templates/code.properties                                                                |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/SmsEndpoint.java                                              |  175 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/DatasourceMapper.xml                                                              |   22 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantController.java                                       |  245 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateDO.java                                          |   93 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/SearchController.java                                       |   98 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeKeyAttrRepeatRuleDTO.java                                  |   99 
 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.sha1                                                      |    1 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/appcode.xml                              |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleScopeMapper.xml                                                            |   12 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/SignSecure.java                                                          |   37 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/JacksonUtil.java                                    |   92 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/handler/ErrorExceptionHandler.java                                                |   96 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Code.java                                                         |  180 
 Source/UBCS/doc/docker/README.md                                                                                                              |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOtherMapper.xml                                                              |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeFixedValueServiceI.java                                        |  124 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSerialAlgorithmServiceI.java                                   |   18 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/AliSmsBuilder.java                                         |   50 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateController.java                             |  190 
 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/_remote.repositories                                                                         |    4 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/RequestFilter.java                                                         |   63 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobGroupController.java                            |  165 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/help.ftl                                                                  |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/PostMapper.java                                                 |   50 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeJwtTokenEnhancer.java                                                      |   87 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/constant/DictConstant.java                                       |   38 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/DashBoardController.java                                        |  207 
 Source/UBCS/script/docker/elk/docker-compose.yml                                                                                              |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js                                   |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTempMapItemServiceI.java                               |  101 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntHeaderDO.java                                                  |   90 
 Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java                                            |   43 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/logback.xml                                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js                                        |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserClient.java                                               |  102 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictBizMapper.xml                                                              |   51 
 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.lastUpdated                                               |   17 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeResembleRuleDTO.java                                       |  118 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/LibraryVO.java                          |   49 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/AdminApplication.java                                                        |   39 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Role.java                                               |  100 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateServiceI.java                                  |  199 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-test.yml                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java                                               |   72 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/login.ftl                                                                 |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IPostService.java                                              |   68 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserInfo.java                                        |   68 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java                              |  127 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfyVO.java             |   49 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserImporter.java                                             |   40 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/CaptchaTokenGranter.java                                                        |   65 
 Source/UBCS/service-stop.sh                                                                                                                   |  199 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataDO.java                                           |  266 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/DictBizClient.java                                                     |   69 
 Source/UBCS/doc/sql/mysql/bladex-saber-mysql.sql                                                                                              |    0 
 Source/UBCS/ubcs-auth/src/main/resources/static/js/md5.js                                                                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css                                      |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelPrototypeController.java                                 |  136 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/config/ScopeConfiguration.java                                  |   50 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java                                                      |  233 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java                                     | 2758 +
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/NoticeMapper.java                                                   |   50 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataInfoDTO.java                                |  126 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingServiceI.java                                           |   92 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java                                 |  301 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/DatasourceMapper.java                                             |   29 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateMapDTO.java                                |   96 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleScopeMapper.java                                            |   29 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css                                   |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/pom.xml                                                                                                        |  110 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySyncController.java                                    |  169 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java                               |  215 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSynonymDO.java                                                   |  121 
 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.sha1                                                |    1 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Datasource.java                                                   |   71 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeKeyAttrRepeatRuleServiceI.java                                 |  115 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/ICodeService.java                                                |   38 
 Source/UBCS/script/docker/app/prometheus/dashboard/bladex-nacos.json                                                                          |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuService.java                                           |   41 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DataScopeVO.java                                            |   39 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfysVO.java            |   21 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTempMapItemVO.java                        |  210 
 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.lastUpdated                                               |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java                          |  129 
 Source/UBCS/ubcs-service/ubcs-user/Dockerfile                                                                                                 |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntHeaderDTO.java                                           |   80 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png                                      |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryDO.java                           |   33 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js                                       |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodePhaseAttrDTO.java                                          |   64 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/ApiScopeClient.java                                              |   63 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClientFallback.java                                  |   44 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/DataScopeCache.java                                       |   96 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntAuthorityServiceI.java                                       |  101 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingTaskDO.java                                                   |  224 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultSystemVO.java              |   52 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DataScopeServiceImpl.java                                 |   33 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeKeyAttrRepeatRuleDO.java                                         |  120 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DataResembleVO.java                                   |   36 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-prod.yml                                                                    |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/MonitorProperties.java                                              |   67 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/CheckedTreeVO.java                                          |   37 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IAuthClientService.java                                        |   29 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf                        |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataAttributeVO.java                     |  112 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMap.java                                          |   28 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml                                                           |    0 
 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom                                                   |   57 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java                                        |  147 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Tenant.java                                             |  103 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java                         |  165 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml                                                                 |  478 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntHeaderDaoImpl.java                                          |  262 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/UserPwdstrategyMapper.java                                      |   41 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-prod.yml                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java                                  |  836 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLinkTypeConstant.java                                          |   13 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeDuckingController.java                                      |  293 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/SmsBuilder.java                                            |  157 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSynonymServiceI.java                                           |  101 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/TenantConstant.java                                                        |   66 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/TenantVO.java                                               |   40 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleMenuService.java                                          |   29 
 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.lastUpdated                                   |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSerialValueDO.java                                               |   88 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-dev.yml                                                                          |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/controller/TestController.java                                       |   23 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserMapper.xml                                                                   |   98 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClientFallback.java                              |   39 
 Source/UBCS/ubcs-auth/src/main/resources/static/js/bootstrap.min.js                                                                           |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyValueDaoI.java                                             |  147 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java                                            |   57 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictCache.java                                             |  160 
 Source/UBCS/doc/other/http-code.md                                                                                                            |    0 
 Source/UBCS/script/docker/app/prometheus/dashboard/bladex-jvm.json                                                                            |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateAttrServiceI.java                              |  133 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java                                 |  559 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js   |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntInfoDO.java                                                    |  656 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeBasicSecDaoImpl.java                                          |  271 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/DictBizServiceImpl.java                                         |  142 
 Source/UBCS/doc/nacos/blade-dev.yaml                                                                                                          |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserOauthService.java                                      |   30 
 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/_remote.repositories                                                                       |    4 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Param.java                                              |   64 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeButtonDTO.java                                             |   85 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeResembleRuleDO.java                                              |  137 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/feign/NoticeClient.java                                                    |   54 
 Source/UBCS/.editorconfig                                                                                                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobThreadPool.java                                |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/UpdateSysInfoStatusDTO.java                                    |   40 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteServiceListener.java                                          |   96 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserClient.java                                      |  137 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntAuthorityDO.java                                               |  159 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ConfigAttrMappingVO.java                              |    6 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/ApiScopeCache.java                                        |   77 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/OssServiceImpl.java                                       |   67 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobUser.java                                    |   73 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ApiScopeMapper.xml                                                             |    5 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleVO.java                                                 |   72 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java                                    |  324 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelController.java                                          |  228 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsErpClientUtil.java                                                 |   59 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/AuthApplication.java                                                                    |   36 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultData.java                         |   45 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultClassfyVO.java               |   60 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java                                     |  255 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobgroup.index.1.js                                                       |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java                              |  279 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java                              |  136 
 Source/UBCS/ubcs-plugin/README.md                                                                                                             |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDataVO.java                           |  119 
 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/_remote.repositories                                                                      |    4 
 Source/UBCS/ubcs-auth/src/main/resources/application-test.yml                                                                                 |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/PostServiceImpl.java                                      |   74 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/AuthClientController.java                                   |  118 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobInfo.java                                    |  218 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java                                       |  136 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/MenuVO.java                                                 |   93 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java                                                 |  183 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictBizVO.java                                                |   71 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrRangeDaoI.java                                           |  126 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/SmsController.java                                          |  150 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-prod.yml                                                                         |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuMapper.java                                              |   29 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java                                              |   92 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictClient.java                                                  |   63 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png                                     |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowExecution.java                                               |   50 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeButtonVO.java                                     |   98 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeBasicSecDaoI.java                                                  |  148 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/CodeServiceImpl.java                                        |   39 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxxxxxxxx.json                           |    0 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/AttachServiceImpl.java                                    |   40 
 Source/UBCS/script/docker/app/docker-compose.yml                                                                                              |    0 
 Source/UBCS/ubcs-service/ubcs-system/Dockerfile                                                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-dev.yml                                                                         |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataObjectVO.java                        |   24 
 Source/UBCS/doc/sql/dm/bladex-saber-dameng.dmp                                                                                                |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf         |    0 
 Source/UBCS/ubcs-ops/pom.xml                                                                                                                  |   36 
 Source/UBCS/doc/other/env.md                                                                                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java                                        |   52 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/SysCache.java                                            |  374 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingLogeDaoImpl.java                                           |  215 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java                         |   28 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java                                                               |   26 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/DataScope.java                                          |   86 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/RequestProvider.java                                                     |   49 
 Source/UBCS/ubcs-ops/ubcs-swagger/Dockerfile                                                                                                  |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.css.map                    |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/RootDataVO.java                            |   58 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ValueRangeController.java                                   |   92 
 Source/UBCS/ubcs-service/ubcs-user/pom.xml                                                                                                    |   76 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelPrototypeServiceImpl.java                              |   55 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java                               |  215 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java                     |  170 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/RowDatas.java                            |  125 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java                                            |  140 
 Source/UBCS/README.md                                                                                                                         |    0 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/BasicSecure.java                                                         |   37 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java                                           |  169 
 Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-prod.yml                                                                        |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java                            |  215 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ICombinationService.java                                       |   71 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogErrorMapper.xml                                                                    |   27 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff        |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeResembleRuleDaoImpl.java                                      |  247 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingLogeDO.java                                                   |  228 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/XxlJobService.java                                    |   86 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataVO.java                  |   19 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/TaskDuckingDO.java                                                   |  236 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java                              |  214 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayRoute.java                                                         |   57 
 Source/UBCS/ubcs-ops/ubcs-develop/src/test/java/com/vci/test/CodeGenerator.java                                                               |   95 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOauth.java                                       |  107 
 Source/UBCS/script/fatjar/service.sh                                                                                                          |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/AuthClientMapper.java                                           |   29 
 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.sha1                                          |    1 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMenuMapper.java                                             |   41 
 Source/UBCS/script/fatjar/service.cmd                                                                                                         |    0 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserDeptMapper.java                                          |   30 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/Dict.java                                                 |  102 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlData.java                                                         |  143 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoBseDTO.java                                          |   46 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSynonymVO.java                                    |  103 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java                    |  382 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictMapper.xml                                                                 |   54 
 Source/UBCS/script/docker/app/prometheus/dashboard/bladex-mysql.json                                                                          |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java                                      |  297 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ValueRange.java                                         |  104 
 Source/UBCS/doc/sql/update/bladex-update-mysql-3.0.0~3.0.1.sql                                                                                |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/config/XxlJobConfig.java                                             |   74 
 Source/UBCS/script/docker/app/nginx/web/html/index.html                                                                                       |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDO.java          |   26 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClientFallback.java                                |   46 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css                                        |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenu.java                                            |   61 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelService.java                                               |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateButtonServiceI.java                            |  133 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataInfoDO.java                                       |  103 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/MinioOssBuilder.java                                       |   48 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateAttrDO.java                                      |  858 
 Source/UBCS/script/docker/app/deploy.sh                                                                                                       |    0 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/pom.xml                                                                                            |   24 
 Source/UBCS/doc/sql/postgresql/bladex-sword-postgresql.sql                                                                                    |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java                                |  743 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-prod.yml                                                                |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/pom.xml                                                                                                     |   62 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-test.yml                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RegionMapper.xml                                                               |  105 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMapper.xml                                                                 |   63 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxx.json                                 |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java                                      |  106 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot                        |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntBaseDaoImpl.java                                            |  215 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java                                         |  284 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/AuthClient.java                                         |   98 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/wrapper/NoticeWrapper.java                                                 |   64 
 Source/UBCS/ubcs-plugin-api/pom.xml                                                                                                           |    0 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogUsualMapper.xml                                                                    |   22 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/constant/ProcessConstant.java                                     |   61 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java                                 |  132 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantMapper.xml                                                               |   30 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogErrorServiceImpl.java                                       |   33 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-dev.yml                                                                      |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeButtonDaoImpl.java                                            |  247 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultJsonDTO.java                             |   21 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelPrototypeMapper.xml                                                          |   35 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntBaseDTO.java                                             |   26 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryData.java                          |   45 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml                                                 |  229 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteService.java                                                  |  101 
 Source/UBCS/script/docker/elk/es-master.yml                                                                                                   |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantVO.java                                                |   49 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java                               |  124 
 Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogErrorController.java                                          |   66 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/OssMapper.xml                                                                    |   30 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java                      |  728 
 Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/feign/INoticeClient.java                                           |   49 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/logback.xml                                                                         |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java                              |   83 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml                                                  |  249 
 Source/UBCS/ubcs-common/src/main/resources/banner.txt                                                                                         |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/RemoteHttpJobBean.java                               |    0 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeClientDetailsServiceImpl.java                                              |   51 
 Source/UBCS/script/docker/app/prometheus/config/alert_rules.yml                                                                               |    0 
 Source/UBCS/ubcs-ops/ubcs-swagger/pom.xml                                                                                                     |   56 
 Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/SmsVO.java                                                  |   45 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css                      |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowModel.java                                                   |   58 
 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.lastUpdated                                               |   11 
 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.lastUpdated                                         |    5 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif                                    |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TenantPackage.java                                      |   56 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl                                                 |    0 
 Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/_remote.repositories                                                                           |    4 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayPredicate.java                                                     |   41 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobApiController.java                              |  129 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionVO.java                             |   60 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IAttachService.java                                            |   40 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/AuthFilter.java                                                            |  120 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/MenuDTO.java                                               |   33 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/Dockerfile                                                                                             |    0 
 Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.sha1                                                        |    1 
 Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-theme.css                                                                           |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyDaoImpl.java                                          |  520 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js                                |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoDTO.java                                             |  664 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobCodeController.java                             |   96 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java                           |   62 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleScopeServiceImpl.java                                 |   33 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeButtonDO.java                                                    |  125 
 Source/UBCS/doc/sql/mysql/bladex-sword-mysql.sql                                                                                              |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLog.java                                     |  157 
 Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/ApiScopePermissionHandler.java                          |   61 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot         |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeImprotDataDTO.java                                         |   66 
 Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/vo/NoticeVO.java                                                   |   23 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml                                            |   62 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js                                                |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelServiceImpl.java                                       |   33 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-dev.yml                                                                 |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleDTO.java                                               |   33 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java                                              |  135 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSerialValueDaoImpl.java                                       |  214 
 Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/ReportApplication.java                                                     |   35 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java                                            |  105 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java                                   |   96 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java                                      |  109 
 Source/UBCS/ubcs-ops/ubcs-report/Dockerfile                                                                                                   |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB架构图.pptx                                                                                    |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderSecDTO.java                                           |   44 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IValueRangeService.java                                        |   56 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictWrapper.java                                               |   60 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java                                |  130 
 Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClient.java                                           |   73 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css                                           |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrRangeVO.java                            |   83 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js                                        |    0 
 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.sha1                                              |    1 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingTaskDTO.java                                            |  197 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java                               |  247 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/PostMapper.xml                                                                 |   40 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/GateWayApplication.java                                                           |   39 
 Source/UBCS/script/docker/app/prometheus/config/alertmanager.yml                                                                              |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/Dockerfile                                                                                                  |    0 
 Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.lastUpdated                                                 |   11 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/UserPwdstrategyServiceImpl.java                           |   67 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/exception/XxlJobException.java                           |   14 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleMenuDTO.java                                           |   33 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif                                    |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java                |   47 
 Source/UBCS/doc/sql/postgresql/bladex-saber-postgresql.sql                                                                                    |    0 
 Source/UBCS/ubcs-auth/src/main/resources/application.yml                                                                                      |   65 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js                             |    0 
 Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserDept.java                                        |   64 
 Source/UBCS/ubcs-auth/src/main/resources/templates/login.ftl                                                                                  |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeResembleRuleDaoI.java                                              |  141 
 Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserDeptMapper.xml                                                               |    5 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css                    |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map              |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImProtRusultVO.java                               |   41 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogGlue.java                                 |   75 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntAuthorityServiceImpl.java                               |  290 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/OmdApplication.java                                                          |   35 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-test.yml                                                                  |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeAllCodeDaoImpl.java                                           |  247 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ValueRangeMapper.java                                           |   43 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntAuthorityDaoImpl.java                                       |  215 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java                                |  135 
 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.sha1                                                |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingDataDO.java                                                   |  148 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.detail.1.js                                                        |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/db/tables_xxl_job.sql                                                                              |    0 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/user.index.1.js                                                           |    0 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/FlowApplication.java                                                           |   37 
 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.sha1                                                      |    1 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/DictBizWrapper.java                                                  |   61 
 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.lastUpdated                                             |   11 
 Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-prod.yml                                                                     |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DataScopeMapper.xml                                                            |    5 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserMapper.java                                              |   63 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateVO.java                           |  105 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DataScopeWrapper.java                                          |   48 
 Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/ResponseProvider.java                                                    |   84 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyValueDaoImpl.java                                     |  257 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeSmsConfiguration.java                                      |   47 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Region.java                                             |  128 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff                       |    0 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictController.java                                         |  196 
 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.sha1                                                    |    1 
 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.lastUpdated                                             |   11 
 Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-test.yml                                                                    |    0 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelMapper.java                                                  |   29 
 Source/UBCS/ubcs-auth/pom.xml                                                                                                                 |  154 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java                                    |  115 
 Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-dev.yml                                                                       |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java                                |  146 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java                         |  127 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictService.java                                              |  109 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataInfoVO.java                        |  121 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java                             |   24 
 Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application.yml                                                                             |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyDaoI.java                                                  |  232 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodePhaseAttrDaoI.java                                                 |  141 
 Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/DevelopApplication.java                                                  |   36 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/resolver/WebExceptionResolver.java                 |   64 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/cron/CronExpression.java                                 | 1666 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.macro.ftl                                                   |    0 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/data.json                                        |    0 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java                                          |  324 
 Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/DeskApplication.java                                                       |   36 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDatasVO.java                          |   27 
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java                                                |  322 
 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/PostVO.java                                                 |   40 
 Source/UBCS/doc/mvn/mvn命令.md                                                                                                                  |    0 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEnumIdConstant.java                                            |   78 
 /dev/null                                                                                                                                     |  173 
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/enums/FlowModeEnum.java                                           |   45 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java                              |   62 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java                                 |  264 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/WebMvcConfig.java                      |   28 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java                     |  111 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionExcel.java                                                 |   90 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeALlCodeMapper.xml                                               |    7 
 1,214 files changed, 116,497 insertions(+), 173 deletions(-)

diff --git a/Source/BladeX/blade-auth/pom.xml b/Source/BladeX/blade-auth/pom.xml
deleted file mode 100644
index b79e5d7..0000000
--- a/Source/BladeX/blade-auth/pom.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>UBCS</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <artifactId>blade-auth</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springblade</groupId>
-                    <artifactId>blade-scope-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-db</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-cloud</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-metrics</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-redis</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-social</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-user-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-system-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <!--瀹夊叏妯″潡-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-security</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.security.oauth</groupId>
-            <artifactId>spring-security-oauth2</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.security</groupId>
-            <artifactId>spring-security-jwt</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-redis</artifactId>
-        </dependency>
-        <!-- 楠岃瘉鐮� -->
-        <dependency>
-            <groupId>com.github.whvcse</groupId>
-            <artifactId>easy-captcha</artifactId>
-        </dependency>
-        <!--freemarker-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-freemarker</artifactId>
-        </dependency>
-        <!--oracle椹卞姩-->
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-        <!-- 閾捐矾杩借釜銆佹湇鍔$洃鎺� -->
-        <!--<dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-trace</artifactId>
-        </dependency>-->
-        <!-- 瑙e喅Java11鏃犳硶杩愯鐨勯棶棰� -->
-        <!--<dependency>
-            <groupId>javax.xml.bind</groupId>
-            <artifactId>jaxb-api</artifactId>
-            <version>2.2.11</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-core</artifactId>
-            <version>2.2.11</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-impl</artifactId>
-            <version>2.2.11</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.activation</groupId>
-            <artifactId>activation</artifactId>
-            <version>1.1.1</version>
-        </dependency>-->
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
deleted file mode 100644
index fc4363d..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth;
-
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
-
-/**
- * 鐢ㄦ埛璁よ瘉鏈嶅姟鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class AuthApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
deleted file mode 100644
index db9033b..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.config;
-
-import lombok.AllArgsConstructor;
-import lombok.SneakyThrows;
-import org.springblade.auth.constant.AuthConstant;
-import org.springblade.auth.granter.BladeTokenGranter;
-import org.springblade.auth.service.BladeClientDetailsServiceImpl;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.social.props.SocialProperties;
-import org.springblade.system.user.feign.IUserClient;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.Order;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
-import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
-import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
-import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
-import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
-import org.springframework.security.oauth2.provider.TokenGranter;
-import org.springframework.security.oauth2.provider.token.TokenEnhancer;
-import org.springframework.security.oauth2.provider.token.TokenEnhancerChain;
-import org.springframework.security.oauth2.provider.token.TokenStore;
-import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
-
-import javax.sql.DataSource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * 璁よ瘉鏈嶅姟鍣ㄩ厤缃�
- *
- * @author Chill
- */
-@Order
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-@EnableAuthorizationServer
-public class BladeAuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
-
-	private final DataSource dataSource;
-
-	private final AuthenticationManager authenticationManager;
-
-	private final UserDetailsService userDetailsService;
-
-	private final TokenStore tokenStore;
-
-	private final TokenEnhancer jwtTokenEnhancer;
-
-	private final JwtAccessTokenConverter jwtAccessTokenConverter;
-
-	private final BladeRedis bladeRedis;
-
-	private final IUserClient userClient;
-
-	private final SocialProperties socialProperties;
-
-	@Override
-	public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
-		//鑾峰彇鑷畾涔塼okenGranter
-		TokenGranter tokenGranter = BladeTokenGranter.getTokenGranter(authenticationManager, endpoints, bladeRedis, userClient, socialProperties);
-
-		//閰嶇疆绔偣
-		endpoints.tokenStore(tokenStore)
-			.authenticationManager(authenticationManager)
-			.userDetailsService(userDetailsService)
-			.tokenGranter(tokenGranter);
-
-		//鎵╁睍token杩斿洖缁撴灉
-		if (jwtAccessTokenConverter != null && jwtTokenEnhancer != null) {
-			TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
-			List<TokenEnhancer> enhancerList = new ArrayList<>();
-			enhancerList.add(jwtTokenEnhancer);
-			enhancerList.add(jwtAccessTokenConverter);
-			tokenEnhancerChain.setTokenEnhancers(enhancerList);
-			//jwt澧炲己
-			endpoints.tokenEnhancer(tokenEnhancerChain).accessTokenConverter(jwtAccessTokenConverter);
-		}
-	}
-
-	/**
-	 * 閰嶇疆瀹㈡埛绔俊鎭�
-	 * 鏈嶅姟鍚姩鏃跺姞杞絪ql
-	 * 浣滅敤锛氭煡璇lient淇℃伅
-	 */
-	@Override
-	@SneakyThrows
-	public void configure(ClientDetailsServiceConfigurer clients) {
-		BladeClientDetailsServiceImpl clientDetailsService = new BladeClientDetailsServiceImpl(dataSource);
-		clientDetailsService.setSelectClientDetailsSql(AuthConstant.DEFAULT_SELECT_STATEMENT);
-		clientDetailsService.setFindClientDetailsSql(AuthConstant.DEFAULT_FIND_STATEMENT);
-		clients.withClientDetails(clientDetailsService);
-	}
-
-	@Override
-	public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
-		oauthServer
-			.allowFormAuthenticationForClients()
-			.tokenKeyAccess("permitAll()")
-			.checkTokenAccess("isAuthenticated()");
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeResourceServerConfiguration.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeResourceServerConfiguration.java
deleted file mode 100644
index c09af6a..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeResourceServerConfiguration.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.config;
-
-import lombok.AllArgsConstructor;
-import lombok.SneakyThrows;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
-
-/**
- * 鑷畾涔夎祫婧愭斁琛�
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-public class BladeResourceServerConfiguration extends ResourceServerConfigurerAdapter {
-
-	@Override
-	@SneakyThrows
-	public void configure(HttpSecurity http) {
-		http.authorizeRequests()
-			.antMatchers(
-				"/actuator/**",
-				"/oauth/captcha",
-				"/oauth/logout",
-				"/oauth/clear-cache",
-				"/oauth/render/**",
-				"/oauth/callback/**",
-				"/oauth/revoke/**",
-				"/oauth/refresh/**",
-				"/oauth/login",
-				"/oauth/form",
-				"/token/**",
-				"/mobile/**",
-				"/static/**",
-				"/v2/api-docs").permitAll()
-			.anyRequest().authenticated().and()
-			.csrf().disable();
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/JwtTokenStoreConfiguration.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/JwtTokenStoreConfiguration.java
deleted file mode 100644
index f3686f7..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/JwtTokenStoreConfiguration.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.config;
-
-import org.springblade.auth.support.BladeJwtTokenEnhancer;
-import org.springblade.core.jwt.props.JwtProperties;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.jwt.crypto.sign.MacSigner;
-import org.springframework.security.jwt.crypto.sign.SignatureVerifier;
-import org.springframework.security.oauth2.provider.token.TokenEnhancer;
-import org.springframework.security.oauth2.provider.token.TokenStore;
-import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
-import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
-
-/**
- * JwtTokenStore
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@ConditionalOnProperty(prefix = "blade.security.oauth2", name = "storeType", havingValue = "jwt", matchIfMissing = true)
-public class JwtTokenStoreConfiguration {
-
-	/**
-	 * 浣跨敤jwtTokenStore瀛樺偍token
-	 */
-	@Bean
-	public TokenStore jwtTokenStore(JwtProperties jwtProperties) {
-		return new JwtTokenStore(getJwtAccessTokenConverter(jwtProperties));
-	}
-
-	/**
-	 * 鐢ㄤ簬鐢熸垚jwt
-	 */
-	@Bean
-	public JwtAccessTokenConverter jwtAccessTokenConverter(JwtProperties jwtProperties) {
-		return getJwtAccessTokenConverter(jwtProperties);
-	}
-
-	/**
-	 * 鑷畾涔� JwtAccessTokenConverter
-	 */
-	private JwtAccessTokenConverter getJwtAccessTokenConverter(JwtProperties jwtProperties) {
-		JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
-		accessTokenConverter.setSigningKey(jwtProperties.getSignKey());
-		SignatureVerifier verifier = new MacSigner(jwtProperties.getSignKey());
-		accessTokenConverter.setVerifier(verifier);
-		return accessTokenConverter;
-	}
-
-	/**
-	 * 鐢ㄤ簬鎵╁睍jwt
-	 */
-	@Bean
-	@ConditionalOnMissingBean(name = "jwtTokenEnhancer")
-	public TokenEnhancer jwtTokenEnhancer(JwtAccessTokenConverter jwtAccessTokenConverter, JwtProperties jwtProperties) {
-		return new BladeJwtTokenEnhancer(jwtAccessTokenConverter, jwtProperties);
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/SecurityConfiguration.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/SecurityConfiguration.java
deleted file mode 100644
index 44440ef..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/SecurityConfiguration.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.config;
-
-import lombok.AllArgsConstructor;
-import lombok.SneakyThrows;
-import org.springblade.auth.support.BladePasswordEncoderFactories;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.builders.WebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-/**
- * Security閰嶇疆
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
-
-	@Bean
-	@Override
-	@SneakyThrows
-	public AuthenticationManager authenticationManagerBean() {
-		return super.authenticationManagerBean();
-	}
-
-	@Bean
-	public PasswordEncoder passwordEncoder() {
-		return BladePasswordEncoderFactories.createDelegatingPasswordEncoder();
-	}
-
-	@Override
-	@SneakyThrows
-	protected void configure(HttpSecurity http) {
-		http.headers().frameOptions().disable();
-		http.httpBasic().and().csrf().disable();
-		http.formLogin().loginPage("/oauth/login").loginProcessingUrl("/oauth/form");
-	}
-
-	@Override
-	public void configure(WebSecurity web) {
-		web.ignoring().antMatchers("/js/*.js", "/css/*.css");
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java
deleted file mode 100644
index dcc498a..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.constant;
-
-/**
- * 鎺堟潈鏍¢獙甯搁噺
- *
- * @author Chill
- */
-public interface AuthConstant {
-
-	/**
-	 * 瀵嗙爜鍔犲瘑瑙勫垯
-	 */
-	String ENCRYPT = "{blade}";
-
-	/**
-	 * pl_sys_client琛ㄥ瓧娈�
-	 */
-	String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, Autowired_ids, scope, authorized_grant_types, " +
-		"web_server_redirect_uri, authorities, access_token_validity, " +
-		"refresh_token_validity, additional_information, autoapprove";
-
-	/**
-	 * pl_sys_client鏌ヨ璇彞
-	 */
-	String BASE_STATEMENT = "select " + CLIENT_FIELDS + " from pl_sys_client";
-
-	/**
-	 * pl_sys_client鏌ヨ鎺掑簭
-	 */
-	String DEFAULT_FIND_STATEMENT = BASE_STATEMENT + " order by client_id";
-
-	/**
-	 * 鏌ヨclient_id
-	 */
-	String DEFAULT_SELECT_STATEMENT = BASE_STATEMENT + " where client_id = ?";
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeSocialEndpoint.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeSocialEndpoint.java
deleted file mode 100644
index eea704f..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeSocialEndpoint.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.endpoint;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import me.zhyd.oauth.model.AuthCallback;
-import me.zhyd.oauth.model.AuthToken;
-import me.zhyd.oauth.request.AuthRequest;
-import me.zhyd.oauth.utils.AuthStateUtils;
-import org.springblade.core.social.props.SocialProperties;
-import org.springblade.core.social.utils.SocialUtil;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * SocialEndpoint
- *
- * @author Chill
- */
-@NonDS
-@Slf4j
-@RestController
-@AllArgsConstructor
-@ConditionalOnProperty(value = "social.enabled", havingValue = "true")
-public class BladeSocialEndpoint {
-
-	private final SocialProperties socialProperties;
-
-	/**
-	 * 鎺堟潈瀹屾瘯璺宠浆
-	 */
-	@RequestMapping("/oauth/render/{source}")
-	public void renderAuth(@PathVariable("source") String source, HttpServletResponse response) throws IOException {
-		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
-		String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
-		response.sendRedirect(authorizeUrl);
-	}
-
-	/**
-	 * 鑾峰彇璁よ瘉淇℃伅
-	 */
-	@RequestMapping("/oauth/callback/{source}")
-	public Object login(@PathVariable("source") String source, AuthCallback callback) {
-		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
-		return authRequest.login(callback);
-	}
-
-	/**
-	 * 鎾ら攢鎺堟潈
-	 */
-	@RequestMapping("/oauth/revoke/{source}/{token}")
-	public Object revokeAuth(@PathVariable("source") String source, @PathVariable("token") String token) {
-		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
-		return authRequest.revoke(AuthToken.builder().accessToken(token).build());
-	}
-
-	/**
-	 * 缁湡浠ょ墝
-	 */
-	@RequestMapping("/oauth/refresh/{source}")
-	public Object refreshAuth(@PathVariable("source") String source, String token) {
-		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
-		return authRequest.refresh(AuthToken.builder().refreshToken(token).build());
-	}
-
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeTokenEndPoint.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeTokenEndPoint.java
deleted file mode 100644
index bbdeccb..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeTokenEndPoint.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.endpoint;
-
-import com.wf.captcha.SpecCaptcha;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.common.cache.CacheNames;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.jwt.JwtUtil;
-import org.springblade.core.jwt.props.JwtProperties;
-import org.springblade.core.launch.constant.TokenConstant;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.core.tool.utils.WebUtil;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.oauth2.common.OAuth2AccessToken;
-import org.springframework.security.oauth2.common.OAuth2RefreshToken;
-import org.springframework.security.oauth2.provider.AuthorizationRequest;
-import org.springframework.security.oauth2.provider.ClientDetailsService;
-import org.springframework.security.oauth2.provider.token.TokenStore;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpSession;
-import java.time.Duration;
-
-import static org.springblade.core.cache.constant.CacheConstant.*;
-
-/**
- * BladeEndPoint
- *
- * @author Chill
- */
-@NonDS
-@Slf4j
-@RestController
-@AllArgsConstructor
-public class BladeTokenEndPoint {
-
-	private final BladeRedis bladeRedis;
-	private final JwtProperties jwtProperties;
-	private final ClientDetailsService clientDetailsService;
-	private final TokenStore tokenStore;
-
-	/**
-	 * 鐧诲綍椤甸潰
-	 */
-	@GetMapping("/oauth/login")
-	public ModelAndView require(ModelAndView model) {
-		model.setViewName("login");
-		return model;
-	}
-
-	/**
-	 * 鎺堟潈椤甸潰
-	 */
-	@GetMapping("/oauth/confirm_access")
-	public ModelAndView confirm(HttpSession session, ModelAndView model) {
-		Object auth = session.getAttribute("authorizationRequest");
-		if (auth != null) {
-			AuthorizationRequest authorizationRequest = (AuthorizationRequest) auth;
-			model.addObject("client", clientDetailsService.loadClientByClientId(authorizationRequest.getClientId()));
-			model.addObject("principal", SecurityContextHolder.getContext().getAuthentication().getPrincipal());
-		}
-		model.setViewName("confirm");
-		return model;
-	}
-
-	/**
-	 * 鐢ㄦ埛淇℃伅
-	 */
-	@GetMapping("/oauth/user-info")
-	public R<Authentication> currentUser(Authentication authentication) {
-		return R.data(authentication);
-	}
-
-	/**
-	 * 楠岃瘉鐮�
-	 */
-	@GetMapping("/oauth/captcha")
-	public Kv captcha() {
-		SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
-		String verCode = specCaptcha.text().toLowerCase();
-		String key = StringUtil.randomUUID();
-		// 瀛樺叆redis骞惰缃繃鏈熸椂闂翠负30鍒嗛挓
-		bladeRedis.setEx(CacheNames.CAPTCHA_KEY + key, verCode, Duration.ofMinutes(30));
-		// 灏唊ey鍜宐ase64杩斿洖缁欏墠绔�
-		return Kv.create().set("key", key).set("image", specCaptcha.toBase64());
-	}
-
-	/**
-	 * 閫�鍑虹櫥褰�
-	 */
-	@GetMapping("/oauth/logout")
-	public Kv logout() {
-		BladeUser user = AuthUtil.getUser();
-		String token = JwtUtil.getToken(WebUtil.getRequest().getHeader(TokenConstant.HEADER));
-		// 娓呯┖redis淇濆瓨鐨則oken
-		if (user != null && jwtProperties.getState()) {
-			JwtUtil.removeAccessToken(user.getTenantId(), String.valueOf(user.getUserId()), token);
-		}
-		// 娓呯┖璧勬簮鏈嶅姟鍣ㄤ繚瀛樼殑token
-		OAuth2AccessToken accessToken = tokenStore.readAccessToken(token);
-		OAuth2RefreshToken refreshToken = null;
-		if (accessToken != null && StringUtil.isNoneBlank(accessToken.getValue())) {
-			refreshToken = accessToken.getRefreshToken();
-			tokenStore.removeAccessToken(accessToken);
-		}
-		if (refreshToken != null && StringUtil.isNoneBlank(refreshToken.getValue())) {
-			tokenStore.removeRefreshToken(refreshToken);
-		}
-		return Kv.create().set("success", "true").set("msg", "success");
-	}
-
-	/**
-	 * 缂撳瓨娓呯┖
-	 */
-	@GetMapping("/oauth/clear-cache")
-	public Kv clearCache() {
-		CacheUtil.clear(BIZ_CACHE);
-		CacheUtil.clear(USER_CACHE);
-		CacheUtil.clear(DICT_CACHE);
-		CacheUtil.clear(FLOW_CACHE);
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(PARAM_CACHE);
-		CacheUtil.clear(RESOURCE_CACHE);
-		CacheUtil.clear(MENU_CACHE);
-		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
-		CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		CacheUtil.clear(PARAM_CACHE, Boolean.FALSE);
-		return Kv.create().set("success", "true").set("msg", "success");
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java
deleted file mode 100644
index 9bab44f..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.granter;
-
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.social.props.SocialProperties;
-import org.springblade.system.user.feign.IUserClient;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
-import org.springframework.security.oauth2.provider.CompositeTokenGranter;
-import org.springframework.security.oauth2.provider.TokenGranter;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * 鑷畾涔夋嫇灞昑okenGranter
- *
- * @author Chill
- */
-public class BladeTokenGranter {
-
-	/**
-	 * 鑷畾涔塼okenGranter
-	 */
-	public static TokenGranter getTokenGranter(final AuthenticationManager authenticationManager, final AuthorizationServerEndpointsConfigurer endpoints, BladeRedis bladeRedis, IUserClient userClient, SocialProperties socialProperties) {
-		// 榛樿tokenGranter闆嗗悎
-		List<TokenGranter> granters = new ArrayList<>(Collections.singletonList(endpoints.getTokenGranter()));
-		// 澧炲姞楠岃瘉鐮佹ā寮�
-		granters.add(new CaptchaTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), bladeRedis));
-		// 澧炲姞绗笁鏂圭櫥闄嗘ā寮�
-		granters.add(new SocialTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), userClient, socialProperties));
-		// 缁勫悎tokenGranter闆嗗悎
-		return new CompositeTokenGranter(granters);
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java
deleted file mode 100644
index a2c837a..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.springblade.auth.granter;
-
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import org.springblade.auth.utils.TokenUtil;
-import org.springblade.common.cache.CacheNames;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.core.tool.utils.WebUtil;
-import org.springframework.security.authentication.*;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
-import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
-import org.springframework.security.oauth2.provider.*;
-import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
-import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * 楠岃瘉鐮乀okenGranter
- *
- * @author Chill
- */
-public class CaptchaTokenGranter extends AbstractTokenGranter {
-
-	private static final String GRANT_TYPE = "captcha";
-
-	private final AuthenticationManager authenticationManager;
-
-	private BladeRedis bladeRedis;
-
-	public CaptchaTokenGranter(AuthenticationManager authenticationManager,
-							   AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, BladeRedis bladeRedis) {
-		this(authenticationManager, tokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
-		this.bladeRedis = bladeRedis;
-	}
-
-	protected CaptchaTokenGranter(AuthenticationManager authenticationManager, AuthorizationServerTokenServices tokenServices,
-												ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, String grantType) {
-		super(tokenServices, clientDetailsService, requestFactory, grantType);
-		this.authenticationManager = authenticationManager;
-	}
-
-	@Override
-	protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
-		Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
-		String username = parameters.get("username");
-		String password = parameters.get("password");
-		// Protect from downstream leaks of password
-		parameters.remove("password");
-
-		Authentication userAuth = new UsernamePasswordAuthenticationToken(username, password);
-		((AbstractAuthenticationToken) userAuth).setDetails(parameters);
-		try {
-				userAuth = authenticationManager.authenticate(userAuth);
-		}
-		catch (AccountStatusException | BadCredentialsException ase) {
-			//covers expired, locked, disabled cases (mentioned in section 5.2, draft 31)
-			throw new InvalidGrantException(ase.getMessage());
-		}
-		// If the username/password are wrong the spec says we should send 400/invalid grant
-
-		if (userAuth == null || !userAuth.isAuthenticated()) {
-			throw new InvalidGrantException("Could not authenticate user: " + username);
-		}
-
-		OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
-		return new OAuth2Authentication(storedOAuth2Request, userAuth);
-	}
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
deleted file mode 100644
index 1727fcc..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.granter;
-
-import me.zhyd.oauth.model.AuthCallback;
-import me.zhyd.oauth.model.AuthResponse;
-import me.zhyd.oauth.model.AuthUser;
-import me.zhyd.oauth.request.AuthRequest;
-import org.springblade.auth.constant.AuthConstant;
-import org.springblade.auth.service.BladeUserDetails;
-import org.springblade.auth.utils.TokenUtil;
-import org.springblade.core.social.props.SocialProperties;
-import org.springblade.core.social.utils.SocialUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.WebUtil;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.entity.UserInfo;
-import org.springblade.system.user.entity.UserOauth;
-import org.springblade.system.user.feign.IUserClient;
-import org.springframework.security.authentication.AbstractAuthenticationToken;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.authority.AuthorityUtils;
-import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
-import org.springframework.security.oauth2.provider.*;
-import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
-import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * 绗笁鏂圭櫥褰曡璇佺被
- *
- * @author Chill
- */
-public class SocialTokenGranter extends AbstractTokenGranter {
-	private static final String GRANT_TYPE = "social";
-	private static final Integer AUTH_SUCCESS_CODE = 2000;
-
-	private final IUserClient userClient;
-	private final SocialProperties socialProperties;
-
-	protected SocialTokenGranter(AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, IUserClient userClient, SocialProperties socialProperties) {
-		super(tokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
-		this.userClient = userClient;
-		this.socialProperties = socialProperties;
-	}
-
-	@Override
-	protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
-		// 璇锋眰澶寸鎴蜂俊鎭�
-		HttpServletRequest request = WebUtil.getRequest();
-		String tenantId = Func.toStr(request.getHeader(TokenUtil.TENANT_HEADER_KEY), TokenUtil.DEFAULT_TENANT_ID);
-
-		Map<String, String> parameters = new LinkedHashMap<>(tokenRequest.getRequestParameters());
-		// 寮�鏀惧钩鍙版潵婧�
-		String sourceParameter = parameters.get("source");
-		// 鍖归厤鏄惁鏈夊埆鍚嶅畾涔�
-		String source = socialProperties.getAlias().getOrDefault(sourceParameter, sourceParameter);
-		// 寮�鏀惧钩鍙版巿鏉冪爜
-		String code = parameters.get("code");
-		// 寮�鏀惧钩鍙扮姸鎬佸悧
-		String state = parameters.get("state");
-
-		// 鑾峰彇寮�鏀惧钩鍙版巿鏉冩暟鎹�
-		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
-		AuthCallback authCallback = new AuthCallback();
-		authCallback.setCode(code);
-		authCallback.setState(state);
-		AuthResponse authResponse = authRequest.login(authCallback);
-		AuthUser authUser;
-		if (authResponse.getCode() == AUTH_SUCCESS_CODE) {
-			authUser = (AuthUser) authResponse.getData();
-		} else {
-			throw new InvalidGrantException("social grant failure, auth response is not success");
-		}
-
-		// 缁勮鏁版嵁
-		UserOauth userOauth = Objects.requireNonNull(BeanUtil.copy(authUser, UserOauth.class));
-		userOauth.setSource(authUser.getSource());
-		userOauth.setTenantId(tenantId);
-		userOauth.setUuid(authUser.getUuid());
-
-		// 杩滅▼璋冪敤锛岃幏鍙栬璇佷俊鎭�
-		R<UserInfo> result = userClient.userAuthInfo(userOauth);
-		BladeUserDetails bladeUserDetails;
-		if (result.isSuccess()) {
-			User user = result.getData().getUser();
-			Kv detail = result.getData().getDetail();
-			if (user == null || user.getId() == null) {
-				throw new InvalidGrantException("social grant failure, user is null");
-			}
-			bladeUserDetails = new BladeUserDetails(user.getId(),
-				tenantId, result.getData().getOauthId(), user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(result.getData().getRoles()), Func.toStr(userOauth.getAvatar(), TokenUtil.DEFAULT_AVATAR),
-				userOauth.getUsername(), AuthConstant.ENCRYPT + user.getPassword(), detail, true, true, true, true,
-				AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
-		} else {
-			throw new InvalidGrantException("social grant failure, feign client return error");
-		}
-
-		// 缁勮璁よ瘉鏁版嵁锛屽叧闂瘑鐮佹牎楠�
-		Authentication userAuth = new UsernamePasswordAuthenticationToken(bladeUserDetails, null, bladeUserDetails.getAuthorities());
-		((AbstractAuthenticationToken) userAuth).setDetails(parameters);
-		OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
-
-		// 杩斿洖 OAuth2Authentication
-		return new OAuth2Authentication(storedOAuth2Request, userAuth);
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java
deleted file mode 100644
index 35bf28e..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.service;
-
-import org.springframework.security.oauth2.provider.ClientDetails;
-import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService;
-import org.springframework.stereotype.Component;
-
-import javax.sql.DataSource;
-
-/**
- * 瀹㈡埛绔俊鎭�
- *
- * @author Chill
- */
-@Component
-public class BladeClientDetailsServiceImpl extends JdbcClientDetailsService {
-
-	public BladeClientDetailsServiceImpl(DataSource dataSource) {
-		super(dataSource);
-	}
-
-	/**
-	 * 缂撳瓨瀹㈡埛绔俊鎭�
-	 * clientId=saber
-	 * @param clientId 瀹㈡埛绔痠d
-	 */
-	@Override
-	public ClientDetails loadClientByClientId(String clientId) {
-		try {
-			return super.loadClientByClientId(clientId);
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			return null;
-		}
-	}
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
deleted file mode 100644
index 562c53d..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.service;
-
-import lombok.Getter;
-import org.springblade.core.tool.support.Kv;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.User;
-
-import java.util.Collection;
-
-/**
- * 鐢ㄦ埛淇℃伅鎷撳睍
- *
- * @author Chill
- */
-@Getter
-public class BladeUserDetails extends User {
-
-	/**
-	 * 鐢ㄦ埛id
-	 */
-	private final Long userId;
-	/**
-	 * 绉熸埛ID
-	 */
-	private final String tenantId;
-	/**
-	 * 绗笁鏂硅璇両D
-	 */
-	private final String oauthId;
-	/**
-	 * 鏄电О
-	 */
-	private final String name;
-	/**
-	 * 鐪熷悕
-	 */
-	private final String realName;
-	/**
-	 * 璐﹀彿
-	 */
-	private final String account;
-	/**
-	 * 閮ㄩ棬id
-	 */
-	private final String deptId;
-	/**
-	 * 宀椾綅id
-	 */
-	private final String postId;
-	/**
-	 * 瑙掕壊id
-	 */
-	private final String roleId;
-	/**
-	 * 瑙掕壊鍚�
-	 */
-	private final String roleName;
-	/**
-	 * 澶村儚
-	 */
-	private final String avatar;
-	/**
-	 * 鐢ㄦ埛璇︽儏
-	 */
-	private final Kv detail;
-	/**
-	 * 瀵嗙爜绛栫暐淇敼鐘舵��
-	 */
-	private Long strategyUpdateStatus;
-
-
-	public BladeUserDetails(Long userId, String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, Kv detail, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities,Long strategyUpdateStatus) {
-		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
-		this.userId = userId;
-		this.tenantId = tenantId;
-		this.oauthId = oauthId;
-		this.name = name;
-		this.realName = realName;
-		this.account = username;
-		this.deptId = deptId;
-		this.postId = postId;
-		this.roleId = roleId;
-		this.roleName = roleName;
-		this.avatar = avatar;
-		this.detail = detail;
-		this.strategyUpdateStatus = strategyUpdateStatus;
-	}
-
-	public BladeUserDetails(Long userId, String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, Kv detail, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
-		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
-		this.userId = userId;
-		this.tenantId = tenantId;
-		this.oauthId = oauthId;
-		this.name = name;
-		this.realName = realName;
-		this.account = username;
-		this.deptId = deptId;
-		this.postId = postId;
-		this.roleId = roleId;
-		this.roleName = roleName;
-		this.avatar = avatar;
-		this.detail = detail;
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
deleted file mode 100644
index 3efc4ed..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.service;
-
-import com.alibaba.nacos.common.utils.StringUtils;
-import io.jsonwebtoken.Claims;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import me.zhyd.oauth.log.Log;
-import org.springblade.auth.constant.AuthConstant;
-import org.springblade.auth.utils.TokenUtil;
-import org.springblade.common.cache.CacheNames;
-import org.springblade.core.jwt.JwtUtil;
-import org.springblade.core.jwt.props.JwtProperties;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.*;
-import org.springblade.system.cache.ParamCache;
-import org.springblade.system.entity.Strategy;
-import org.springblade.system.entity.Tenant;
-import org.springblade.system.feign.ISysClient;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.entity.UserInfo;
-import org.springblade.system.user.enums.UserEnum;
-import org.springblade.system.user.feign.IUserClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.AuthorityUtils;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
-import org.springframework.stereotype.Service;
-
-import javax.servlet.http.HttpServletRequest;
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 鐢ㄦ埛淇℃伅
- *
- * @author Chill
- */
-@Service
-@RequiredArgsConstructor
-public class BladeUserDetailsServiceImpl implements UserDetailsService {
-
-	/**
-	 * 鍏佽閿欒娆℃暟
-	 */
-	public static final Integer FAIL_COUNT = 5;
-	public static final String FAIL_COUNT_VALUE = "account.failCount";
-
-	/**
-	 * user鏈嶅姟璋冪敤绫�
-	 */
-	private final IUserClient userClient;
-
-	private final ISysClient sysClient;
-
-	private final BladeRedis bladeRedis;
-
-	private final JwtProperties jwtProperties;
-
-
-	/**
-	 * 瓒呯骇绠$悊鍛樹俊鎭�
-	 */
-	@Value("${user-info.tenant-id}")
-	private String tenantId;
-	@Value("${user-info.user-name}")
-	private String userName;
-	@Value("${user-info.passwrod}")
-	private String password;
-	@Value("${user-info.id}")
-	private String id;
-	@Value("${ip-whitelist.ip-enable}")
-	private Boolean ipEnable;
-	@Value("#{'${ip-whitelist.ip}'.split(',')}")
-	private List<String> ips;
-
-	@Override
-	@SneakyThrows
-	public BladeUserDetails loadUserByUsername(String username) {
-		HttpServletRequest request = WebUtil.getRequest();
-		// 鑾峰彇鐢ㄦ埛缁戝畾ID
-		String headerDept = request.getHeader(TokenUtil.DEPT_HEADER_KEY);
-		String headerRole = request.getHeader(TokenUtil.ROLE_HEADER_KEY);
-		// 鑾峰彇绉熸埛ID
-		String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
-		String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
-		String password = request.getParameter(TokenUtil.PASSWORD_KEY);
-		String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
-		// 鍒ゆ柇绉熸埛璇锋眰澶�
-		if (StringUtil.isAllBlank(headerTenant, paramTenant)) {
-			throw new UserDeniedAuthorizationException(TokenUtil.TENANT_NOT_FOUND);
-		}
-		// 鍒ゆ柇浠ょ墝鍚堟硶鎬�
-		if (!judgeRefreshToken(grantType, request)) {
-			throw new UserDeniedAuthorizationException(TokenUtil.TOKEN_NOT_PERMISSION);
-		}
-
-		// 鎸囧畾绉熸埛ID
-		String tenantId = StringUtils.isBlank(headerTenant) ? paramTenant : headerTenant;
-
-		Log.debug("褰撳墠鐧诲綍鐢ㄦ埛鐨勭鎴稩d涓猴細"+tenantId+"褰撳墠鐧诲綍鐢ㄦ埛鍚嶄负锛�"+username);
-		Strategy strategy = sysClient.getByTenantIdAndName(tenantId, username).getData();
-
-		// 鍒ゆ柇鐧诲綍鏄惁閿佸畾
-		int count = getFailCount(tenantId, username);
-		int failCount = Func.toInt(ParamCache.getValue(FAIL_COUNT_VALUE), Func.toInt(strategy.getLockingNum()));
-
-		if (count >= failCount) {
-			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_TOO_MANY_FAILS);
-		}
-		//瓒呯骇绠$悊鍛橀厤缃枃浠堕厤缃处鍙峰瘑鐮侊紝瀹炵幇鐧诲綍, 榛樿绉熸埛id涓�000000
-		if(tenantId.equals(this.tenantId)){
-			if (!this.userName.equals(username) && !password.equalsIgnoreCase(this.password)) {
-				setFailCount(tenantId, username, count,strategy.getLockingTime());
-				throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
-			}
-			//濡傛灉ip姣斿鍚巊et鎶涘嚭寮傚父No value present灏辩洿鎺ユ姏寮傚父缁撴潫鐧诲綍
-			if(ipEnable){
-				Log.debug("褰撳墠璁块棶IP锛�"+getIpAddress(request));
-				try {
-					ips.stream().filter(s -> s.equals(getIpAddress(request))).findFirst().get();
-				} catch (Exception e){
-					throw new UserDeniedAuthorizationException(TokenUtil.IP_NOT_FOND);
-				}
-			}
-
-			ArrayList<GrantedAuthority> authorities = new ArrayList<>();
-			authorities.add(new SimpleGrantedAuthority("administrator"));
-			// 鎴愬姛鍒欐竻闄ょ櫥褰曢敊璇鏁�
-			delFailCount(tenantId, username);
-			Kv kv = Kv.create();
-			kv.set("type","web");
-			return new BladeUserDetails(
-				new Long(this.id),this.tenantId, StringPool.EMPTY, "瓒呯骇绠$悊鍛�", "瓒呯骇绠$悊鍛�",this.id, this.id,"1123598816738675201",
-				"administrator","https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png" ,this.userName,AuthConstant.ENCRYPT + this.password,  kv,
-				true, true, true, true,authorities
-			);
-		}else {
-			R<Tenant> tenant = sysClient.getTenant(tenantId);
-
-			if (tenant.isSuccess()) {
-				if (TokenUtil.judgeTenant(tenant.getData())) {
-					throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
-				}
-			} else {
-				throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
-			}
-
-			// 鑾峰彇鐢ㄦ埛绫诲瀷
-			String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
-
-			// 杩滅▼璋冪敤杩斿洖鏁版嵁
-			R<UserInfo> result;
-			// 鏍规嵁涓嶅悓鐢ㄦ埛绫诲瀷璋冪敤瀵瑰簲鐨勬帴鍙h繑鍥炴暟鎹紝鐢ㄦ埛鍙嚜琛屾嫇灞�
-			if (userType.equals(UserEnum.WEB.getName())) {
-				result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
-			} else if (userType.equals(UserEnum.APP.getName())) {
-				result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
-			} else {
-				result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
-			}
-
-			// 鍒ゆ柇杩斿洖淇℃伅
-			if (result.isSuccess()) {
-				UserInfo userInfo = result.getData();
-				User user = userInfo.getUser();
-				// 鐢ㄦ埛涓嶅瓨鍦�,浣嗘彁绀虹敤鎴峰悕涓庡瘑鐮侀敊璇苟閿佸畾璐﹀彿
-				if (user == null || user.getId() == null) {
-					setFailCount(tenantId, username, count,strategy.getLockingTime());
-					throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
-				}
-				String hex = DigestUtil.hex(password);
-				// 鐢ㄦ埛瀛樺湪浣嗗瘑鐮侀敊璇�,瓒呰繃娆℃暟鍒欓攣瀹氳处鍙�
-				if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(hex)) {
-					setFailCount(tenantId, username, count,strategy.getLockingTime());
-					throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
-				}
-				// 鐢ㄦ埛瑙掕壊涓嶅瓨鍦�
-				if (Func.isEmpty(userInfo.getRoles())) {
-					throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
-				}
-				// 澶氶儴闂ㄦ儏鍐典笅鎸囧畾鍗曢儴闂�
-				if (Func.isNotEmpty(headerDept) && user.getDeptId().contains(headerDept)) {
-					user.setDeptId(headerDept);
-				}
-				// 澶氳鑹叉儏鍐典笅鎸囧畾鍗曡鑹�
-				if (Func.isNotEmpty(headerRole) && user.getRoleId().contains(headerRole)) {
-					R<List<String>> roleResult = sysClient.getRoleAliases(headerRole);
-					if (roleResult.isSuccess()) {
-						userInfo.setRoles(roleResult.getData());
-					}
-					user.setRoleId(headerRole);
-				}
-				// 鎴愬姛鍒欐竻闄ょ櫥褰曢敊璇鏁�
-				delFailCount(tenantId, username);
-				//濉厖鐢ㄦ埛淇℃伅鍒扮敤鎴蜂俊鎭墿灞曠被
-				BladeUserDetails bladeUserDetails = new BladeUserDetails(user.getId(),
-					user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
-					username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
-					AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())),user.getStrategyUpdateStatus());
-				return bladeUserDetails;
-			} else {
-				throw new UsernameNotFoundException(result.getMsg());
-			}
-		}
-	}
-
-	/**
-	 * 鑾峰彇瀹㈡埛绔痠p锛屽鎴风鍙兘缁忚繃浠g悊锛屼篃鍙兘娌$粡杩囦唬鐞�
-	 * 濡傚紑鍚櫄鎷熸満鐨勬儏鍐典篃鍙兘瀵艰嚧鑾峰彇鍒扮殑鏄櫄鎷熸満鐨刬p
-	 * @param request
-	 * @return
-	 */
-	public static String getIpAddress(HttpServletRequest request){
-		String ip = request.getHeader("x-forwarded-for");
-		if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
-			// 澶氭鍙嶅悜浠g悊鍚庝細鏈夊涓猧p鍊硷紝绗竴涓猧p鎵嶆槸鐪熷疄ip
-			ip = ip.split(",")[0];
-		}
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("Proxy-Client-IP");
-			System.out.println("Proxy-Client-IP"+ip);
-		}
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("WL-Proxy-Client-IP");
-			System.out.println("WL-Proxy-Client-IP"+ip);
-		}
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("HTTP_CLIENT_IP");
-			System.out.println("HTTP_CLIENT_IP"+ip);
-		}
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
-			System.out.println("HTTP_X_FORWARDED_FOR"+ip);
-		}
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("X-Real-IP");
-			System.out.println("X-Real-IP"+ip);
-		}
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getRemoteAddr();
-			System.out.println("getRemoteAddr"+ip);
-		}
-		//濡傛灉娌″彇鍒癷p锛岃繑鍥�""
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = "";
-		}
-		return ip;
-	}
-
-	/**
-	 * 鑾峰彇璐﹀彿閿欒娆℃暟
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @param username 璐﹀彿
-	 * @return int
-	 */
-	private int getFailCount(String tenantId, String username) {
-		return Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0);
-	}
-
-	/**
-	 * 璁剧疆璐﹀彿閿欒娆℃暟
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @param username 璐﹀彿
-	 * @param count    娆℃暟
-	 */
-	private void setFailCount(String tenantId, String username, int count, Long expir) {
-		bladeRedis.setEx(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username), count + 1, Duration.ofMinutes(expir));
-	}
-
-	/**
-	 * 娓呯┖璐﹀彿閿欒娆℃暟
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @param username 璐﹀彿
-	 */
-	private void delFailCount(String tenantId, String username) {
-		bladeRedis.del(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username));
-	}
-
-	/**
-	 * 鏍¢獙refreshToken鍚堟硶鎬�
-	 *
-	 * @param grantType 璁よ瘉绫诲瀷
-	 * @param request   璇锋眰
-	 */
-	private boolean judgeRefreshToken(String grantType, HttpServletRequest request) {
-		if (jwtProperties.getState() && jwtProperties.getSingle() && StringUtil.equals(grantType, TokenUtil.REFRESH_TOKEN_KEY)) {
-			String refreshToken = request.getParameter(TokenUtil.REFRESH_TOKEN_KEY);
-			Claims claims = JwtUtil.parseJWT(refreshToken);
-			String tenantId = String.valueOf(claims.get("tenant_id"));
-			String userId = String.valueOf(claims.get("user_id"));
-			String token = JwtUtil.getRefreshToken(tenantId, userId, refreshToken);
-			return StringUtil.equalsIgnoreCase(token, refreshToken);
-		}
-		return true;
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java
deleted file mode 100644
index 5baaaee..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.support;
-
-import lombok.AllArgsConstructor;
-import org.springblade.auth.service.BladeUserDetails;
-import org.springblade.auth.utils.TokenUtil;
-import org.springblade.core.jwt.JwtUtil;
-import org.springblade.core.jwt.props.JwtProperties;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
-import org.springframework.security.oauth2.common.OAuth2AccessToken;
-import org.springframework.security.oauth2.common.OAuth2RefreshToken;
-import org.springframework.security.oauth2.provider.OAuth2Authentication;
-import org.springframework.security.oauth2.provider.token.TokenEnhancer;
-import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * jwt杩斿洖鍙傛暟澧炲己
- *
- * @author Chill
- */
-@AllArgsConstructor
-public class BladeJwtTokenEnhancer implements TokenEnhancer {
-
-	private final JwtAccessTokenConverter jwtAccessTokenConverter;
-	private final JwtProperties jwtProperties;
-
-	@Override
-	public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
-		BladeUserDetails principal = (BladeUserDetails) authentication.getUserAuthentication().getPrincipal();
-
-		//token鍙傛暟澧炲己
-		Map<String, Object> info = new HashMap<>(16);
-		info.put(TokenUtil.CLIENT_ID, TokenUtil.getClientIdFromHeader());
-		info.put(TokenUtil.USER_ID, Func.toStr(principal.getUserId()));
-		info.put(TokenUtil.DEPT_ID, Func.toStr(principal.getDeptId()));
-		info.put(TokenUtil.POST_ID, Func.toStr(principal.getPostId()));
-		info.put(TokenUtil.ROLE_ID, Func.toStr(principal.getRoleId()));
-		info.put(TokenUtil.TENANT_ID, principal.getTenantId());
-		info.put(TokenUtil.OAUTH_ID, principal.getOauthId());
-		info.put(TokenUtil.ACCOUNT, principal.getAccount());
-		info.put(TokenUtil.USER_NAME, principal.getUsername());
-		info.put(TokenUtil.NICK_NAME, principal.getName());
-		info.put(TokenUtil.REAL_NAME, principal.getRealName());
-		info.put(TokenUtil.ROLE_NAME, principal.getRoleName());
-		info.put(TokenUtil.AVATAR, principal.getAvatar());
-		info.put(TokenUtil.DETAIL, principal.getDetail());
-		info.put(TokenUtil.LICENSE, TokenUtil.LICENSE_NAME);
-		info.put(TokenUtil.STRATEGYUPDATESTATUS, principal.getStrategyUpdateStatus());
-		((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(info);
-
-		//token鐘舵�佽缃�
-		if (jwtProperties.getState()) {
-			OAuth2AccessToken oAuth2AccessToken = jwtAccessTokenConverter.enhance(accessToken, authentication);
-			String accessTokenValue = oAuth2AccessToken.getValue();
-			String tenantId = principal.getTenantId();
-			String userId = Func.toStr(principal.getUserId());
-			JwtUtil.addAccessToken(tenantId, userId, accessTokenValue, accessToken.getExpiresIn());
-
-			if (jwtProperties.getSingle()) {
-				OAuth2RefreshToken oAuth2RefreshToken = oAuth2AccessToken.getRefreshToken();
-				String refreshTokenValue = oAuth2RefreshToken.getValue();
-				JwtUtil.addRefreshToken(tenantId, userId, refreshTokenValue, accessToken.getExpiresIn() * 168);
-			}
-		}
-
-		return accessToken;
-	}
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeNoOpPasswordEncoder.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeNoOpPasswordEncoder.java
deleted file mode 100644
index 9210fb8..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeNoOpPasswordEncoder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.support;
-
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-/**
- * 鏃犲瘑鐮佸姞瀵�
- *
- * @author Chill
- */
-public class BladeNoOpPasswordEncoder implements PasswordEncoder {
-
-	@Override
-	public String encode(CharSequence rawPassword) {
-		return rawPassword.toString();
-	}
-
-	@Override
-	public boolean matches(CharSequence rawPassword, String encodedPassword) {
-		return rawPassword.toString().equals(encodedPassword);
-	}
-
-	/**
-	 * Get the singleton {@link BladeNoOpPasswordEncoder}.
-	 */
-	public static PasswordEncoder getInstance() {
-		return INSTANCE;
-	}
-
-	private static final PasswordEncoder INSTANCE = new BladeNoOpPasswordEncoder();
-
-	private BladeNoOpPasswordEncoder() {
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoder.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoder.java
deleted file mode 100644
index c226b93..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoder.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.support;
-
-import org.springblade.core.tool.utils.DigestUtil;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-/**
- * 鑷畾涔夊瘑鐮佸姞瀵�
- *
- * @author Chill
- */
-public class BladePasswordEncoder implements PasswordEncoder {
-
-	@Override
-	public String encode(CharSequence rawPassword) {
-		return DigestUtil.hex((String) rawPassword);
-	}
-
-	@Override
-	public boolean matches(CharSequence rawPassword, String encodedPassword) {
-		return encodedPassword.equals(encode(rawPassword));
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoderFactories.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoderFactories.java
deleted file mode 100644
index 664b0ba..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoderFactories.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springblade.auth.support;
-
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.DelegatingPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
-import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 鑷畾涔夊瘑鐮佸伐鍘�
- *
- * @author Rob Winch, Chill
- * @since 5.0
- */
-public class BladePasswordEncoderFactories {
-
-	/**
-	 * Creates a {@link DelegatingPasswordEncoder} with default mappings. Additional
-	 * mappings may be added and the encoding will be updated to conform with best
-	 * practices. However, due to the nature of {@link DelegatingPasswordEncoder} the
-	 * updates should not impact users. The mappings current are:
-	 *
-	 * <ul>
-	 * <li>blade - {@link BladePasswordEncoder} (sha1(md5("password")))</li>
-	 * <li>bcrypt - {@link BCryptPasswordEncoder} (Also used for encoding)</li>
-	 * <li>noop - {@link BladeNoOpPasswordEncoder}</li>
-	 * <li>pbkdf2 - {@link Pbkdf2PasswordEncoder}</li>
-	 * <li>scrypt - {@link SCryptPasswordEncoder}</li>
-	 * </ul>
-	 *
-	 * @return the {@link PasswordEncoder} to use
-	 */
-	public static PasswordEncoder createDelegatingPasswordEncoder() {
-		String encodingId = "blade";
-		Map<String, PasswordEncoder> encoders = new HashMap<>(16);
-		encoders.put(encodingId, new BladePasswordEncoder());
-		encoders.put("bcrypt", new BCryptPasswordEncoder());
-		encoders.put("noop", BladeNoOpPasswordEncoder.getInstance());
-		encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
-		encoders.put("scrypt", new SCryptPasswordEncoder());
-
-		return new DelegatingPasswordEncoder(encodingId, encoders);
-	}
-
-	private BladePasswordEncoderFactories() {
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
deleted file mode 100644
index f1f3f3c..0000000
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.auth.utils;
-
-import lombok.SneakyThrows;
-import org.springblade.common.constant.TenantConstant;
-import org.springblade.core.launch.constant.TokenConstant;
-import org.springblade.core.tenant.BladeTenantProperties;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.utils.*;
-import org.springblade.system.entity.Tenant;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
-import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
-
-import java.util.Base64;
-import java.util.Calendar;
-
-/**
- * 璁よ瘉宸ュ叿绫�
- *
- * @author Chill
- */
-public class TokenUtil {
-
-	public final static String AVATAR = TokenConstant.AVATAR;
-	public final static String ACCOUNT = TokenConstant.ACCOUNT;
-	public final static String USER_NAME = TokenConstant.USER_NAME;
-	public final static String NICK_NAME = TokenConstant.NICK_NAME;
-	public final static String REAL_NAME = TokenConstant.REAL_NAME;
-	public final static String USER_ID = TokenConstant.USER_ID;
-	public final static String DEPT_ID = TokenConstant.DEPT_ID;
-	public final static String POST_ID = TokenConstant.POST_ID;
-	public final static String ROLE_ID = TokenConstant.ROLE_ID;
-	public final static String ROLE_NAME = TokenConstant.ROLE_NAME;
-	public final static String TENANT_ID = TokenConstant.TENANT_ID;
-	public final static String OAUTH_ID = TokenConstant.OAUTH_ID;
-	public final static String CLIENT_ID = TokenConstant.CLIENT_ID;
-	public final static String DETAIL = TokenConstant.DETAIL;
-	public final static String LICENSE = TokenConstant.LICENSE;
-	public final static String LICENSE_NAME = TokenConstant.LICENSE_NAME;
-	public final static String STRATEGYUPDATESTATUS = "strategyUpdateStatus";
-
-	public final static String DEPT_HEADER_KEY = "Dept-Id";
-	public final static String ROLE_HEADER_KEY = "Role-Id";
-	public final static String CAPTCHA_HEADER_KEY = "Captcha-Key";
-	public final static String CAPTCHA_HEADER_CODE = "Captcha-Code";
-	public final static String CAPTCHA_NOT_CORRECT = "楠岃瘉鐮佷笉姝g‘";
-	public final static String TENANT_HEADER_KEY = "Tenant-Id";
-	public final static String TENANT_PARAM_KEY = "tenant_id";
-	public final static String DEFAULT_TENANT_ID = "000000";
-	public final static String TENANT_NOT_FOUND = "绉熸埛ID鏈壘鍒�";
-	public final static String USER_TYPE_HEADER_KEY = "User-Type";
-	public final static String DEFAULT_USER_TYPE = "web";
-	public final static String TOKEN_NOT_PERMISSION = "浠ょ墝鎺堟潈宸茶繃鏈�";
-	public final static String USER_NOT_FOUND = "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒";
-	public final static String USER_HAS_NO_ROLE = "鏈幏寰楃敤鎴风殑瑙掕壊淇℃伅";
-	public final static String USER_HAS_NO_TENANT = "鏈幏寰楃敤鎴风殑绉熸埛淇℃伅";
-	public final static String USER_HAS_NO_TENANT_PERMISSION = "绉熸埛鎺堟潈宸茶繃鏈�,璇疯仈绯荤鐞嗗憳";
-	public final static String USER_HAS_TOO_MANY_FAILS = "鐧诲綍閿欒娆℃暟杩囧,璇风◢鍚庡啀璇�";
-	public final static String IP_NOT_FOND = "璇P鍦板潃鏃犺闂潈闄愶紝璇烽厤缃甀P鐧藉悕鍗�";
-	public final static String HEADER_KEY = "Authorization";
-	public final static String HEADER_PREFIX = "Basic ";
-	public final static String DEFAULT_AVATAR = "";
-	public final static String PASSWORD_KEY = "password";
-	public final static String GRANT_TYPE_KEY = "grant_type";
-	public final static String REFRESH_TOKEN_KEY = "refresh_token";
-
-	private static BladeTenantProperties tenantProperties;
-
-	/**
-	 * 鑾峰彇绉熸埛閰嶇疆
-	 *
-	 * @return tenantProperties
-	 */
-	private static BladeTenantProperties getTenantProperties() {
-		if (tenantProperties == null) {
-			tenantProperties = SpringUtil.getBean(BladeTenantProperties.class);
-		}
-		return tenantProperties;
-	}
-
-	/**
-	 * 瑙g爜
-	 */
-	@SneakyThrows
-	public static String[] extractAndDecodeHeader() {
-		String header = WebUtil.getRequest().getHeader(TokenUtil.HEADER_KEY);
-		if (header == null || !header.startsWith(TokenUtil.HEADER_PREFIX)) {
-			throw new UnapprovedClientAuthenticationException("璇锋眰澶翠腑鏃燾lient淇℃伅");
-		}
-
-		byte[] base64Token = header.substring(6).getBytes(Charsets.UTF_8_NAME);
-
-		byte[] decoded;
-		try {
-			decoded = Base64.getDecoder().decode(base64Token);
-		} catch (IllegalArgumentException var7) {
-			throw new BadCredentialsException("Failed to decode basic authentication token");
-		}
-
-		String token = new String(decoded, Charsets.UTF_8_NAME);
-		int index = token.indexOf(StringPool.COLON);
-		if (index == -1) {
-			throw new BadCredentialsException("Invalid basic authentication token");
-		} else {
-			return new String[]{token.substring(0, index), token.substring(index + 1)};
-		}
-	}
-
-	/**
-	 * 鑾峰彇璇锋眰澶翠腑鐨勫鎴风id
-	 */
-	public static String getClientIdFromHeader() {
-		String[] tokens = extractAndDecodeHeader();
-		return tokens[0];
-	}
-
-	/**
-	 * 鑾峰彇token杩囨湡鏃堕棿(娆℃棩鍑屾櫒3鐐�)
-	 *
-	 * @return expire
-	 */
-	public static int getTokenValiditySecond() {
-		Calendar cal = Calendar.getInstance();
-		cal.add(Calendar.DAY_OF_YEAR, 1);
-		cal.set(Calendar.HOUR_OF_DAY, 3);
-		cal.set(Calendar.SECOND, 0);
-		cal.set(Calendar.MINUTE, 0);
-		cal.set(Calendar.MILLISECOND, 0);
-		return (int) (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
-	}
-
-	/**
-	 * 鑾峰彇refreshToken杩囨湡鏃堕棿
-	 *
-	 * @return expire
-	 */
-	public static int getRefreshTokenValiditySeconds() {
-		return 60 * 60 * 24 * 15;
-	}
-
-	/**
-	 * 鍒ゆ柇绉熸埛鏉冮檺
-	 *
-	 * @param tenant 绉熸埛淇℃伅
-	 * @return boolean
-	 */
-	public static boolean judgeTenant(Tenant tenant) {
-		if (tenant == null || tenant.getId() == null) {
-			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
-		}
-		if (StringUtil.equalsIgnoreCase(tenant.getTenantId(), BladeConstant.ADMIN_TENANT_ID)) {
-			return false;
-		}
-		if (getTenantProperties().getLicense()) {
-			String licenseKey = tenant.getLicenseKey();
-			String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY);
-		}
-		return false;
-	}
-
-}
diff --git a/Source/BladeX/blade-auth/src/main/resources/application.yml b/Source/BladeX/blade-auth/src/main/resources/application.yml
deleted file mode 100644
index b5931cf..0000000
--- a/Source/BladeX/blade-auth/src/main/resources/application.yml
+++ /dev/null
@@ -1,65 +0,0 @@
-# 鍦ㄤ娇鐢⊿pring榛樿鏁版嵁婧怘ikari鐨勬儏鍐典笅閰嶇疆浠ヤ笅閰嶇疆椤�
-spring:
-  datasource:
-    hikari:
-      # 鑷姩鎻愪氦浠庢睜涓繑鍥炵殑杩炴帴
-      auto-commit: true
-      # 杩炴帴姹犱腑缁存姢鐨勬渶灏忕┖闂茶繛鎺ユ暟
-      minimum-idle: 10
-      # 杩炴帴姹犱腑鍏佽鐨勬渶澶ц繛鎺ユ暟銆傜己鐪佸�硷細10锛涙帹鑽愮殑鍏紡锛�((core_count * 2) + effective_spindle_count)
-      maximum-pool-size: 60
-      # 绌洪棽杩炴帴瓒呮椂鏃堕棿锛岄粯璁ゅ��600000锛�10鍒嗛挓锛夛紝澶т簬绛変簬max-lifetime涓攎ax-lifetime>0锛屼細琚噸缃负0锛涗笉绛変簬0涓斿皬浜�10绉掞紝浼氳閲嶇疆涓�10绉掋��
-      # 鍙湁绌洪棽杩炴帴鏁板ぇ浜庢渶澶ц繛鎺ユ暟涓旂┖闂叉椂闂磋秴杩囪鍊硷紝鎵嶄細琚噴鏀�
-      idle-timeout: 30000
-      # 杩炴帴鏈�澶у瓨娲绘椂闂�.涓嶇瓑浜�0涓斿皬浜�30绉掞紝浼氳閲嶇疆涓洪粯璁ゅ��30鍒嗛挓.璁剧疆搴旇姣攎ysql璁剧疆鐨勮秴鏃舵椂闂寸煭
-      max-lifetime: 1800000
-      # 绛夊緟杩炴帴姹犲垎閰嶈繛鎺ョ殑鏈�澶ф椂闀匡紙姣锛夛紝瓒呰繃杩欎釜鏃堕暱杩樻病鍙敤鐨勮繛鎺ュ垯鍙戠敓SQLException锛� 缂虹渷:30绉�
-      connection-timeout: 30000
-      # 杩炴帴娴嬭瘯鏌ヨ
-      #connection-test-query: select 1
-      #connection-test-query: SELECT 1 FROM dual
-  freemarker:
-    # 妯℃澘鍚庣紑鍚�
-    suffix: .ftl
-    # 鏂囨。绫诲瀷
-    content-type: text/html
-    # 椤甸潰缂栫爜
-    charset: UTF-8
-    # 椤甸潰缂撳瓨
-    cache: false
-    # 妯℃澘璺緞
-    template-loader-path: classpath:/templates/
-  web:
-    # 璧勬簮璺緞
-    Autowireds:
-      static-locations: classpath:/static/
-
-#swagger鏂囨。
-swagger:
-  base-packages:
-    - org.springblade
-    - org.springframework.security.oauth2.provider.endpoint
-
-#绗笁鏂圭櫥闄�
-social:
-  oauth:
-    GITHUB:
-      client-id: 233************
-      client-secret: 233************************************
-      redirect-uri: ${social.domain}/oauth/redirect/github
-    GITEE:
-      client-id: 233************
-      client-secret: 233************************************
-      redirect-uri: ${social.domain}/oauth/redirect/gitee
-    WECHAT_OPEN:
-      client-id: 233************
-      client-secret: 233************************************
-      redirect-uri: ${social.domain}/oauth/redirect/wechat
-    QQ:
-      client-id: 233************
-      client-secret: 233************************************
-      redirect-uri: ${social.domain}/oauth/redirect/qq
-    DINGTALK:
-      client-id: 233************
-      client-secret: 233************************************
-      redirect-uri: ${social.domain}/oauth/redirect/dingtalk
diff --git a/Source/BladeX/blade-common/pom.xml b/Source/BladeX/blade-common/pom.xml
deleted file mode 100644
index 80e8ce5..0000000
--- a/Source/BladeX/blade-common/pom.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>UBCS</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-common</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-launch</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-loadbalancer</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-auto</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <skip>true</skip>
-                    <finalName>${project.name}</finalName>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/cache/CacheNames.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/cache/CacheNames.java
deleted file mode 100644
index 90355cd..0000000
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/cache/CacheNames.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.common.cache;
-
-/**
- * 缂撳瓨鍚�
- *
- * @author Chill
- */
-public interface CacheNames {
-
-	/**
-	 * 杩斿洖鎷兼帴鍚庣殑key
-	 *
-	 * @param cacheKey      缂撳瓨key
-	 * @param cacheKeyValue 缂撳瓨key鍊�
-	 * @return tenantKey
-	 */
-	static String cacheKey(String cacheKey, String cacheKeyValue) {
-		return cacheKey.concat(cacheKeyValue);
-	}
-
-	/**
-	 * 杩斿洖绉熸埛鏍煎紡鐨刱ey
-	 *
-	 * @param tenantId      绉熸埛缂栧彿
-	 * @param cacheKey      缂撳瓨key
-	 * @param cacheKeyValue 缂撳瓨key鍊�
-	 * @return tenantKey
-	 */
-	static String tenantKey(String tenantId, String cacheKey, String cacheKeyValue) {
-		return tenantId.concat(":").concat(cacheKey).concat(cacheKeyValue);
-	}
-
-	/**
-	 * 楠岃瘉鐮乲ey
-	 */
-	String CAPTCHA_KEY = "blade:auth::blade:captcha:";
-
-	/**
-	 * 鐧诲綍澶辫触key
-	 */
-	String USER_FAIL_KEY = "blade:user::blade:fail:";
-
-}
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/config/BladeCommonConfiguration.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/config/BladeCommonConfiguration.java
deleted file mode 100644
index f6943e8..0000000
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/config/BladeCommonConfiguration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.common.config;
-
-
-import lombok.AllArgsConstructor;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 鍏叡灏佽鍖呴厤缃被
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-public class BladeCommonConfiguration {
-
-}
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
deleted file mode 100644
index c7ee103..0000000
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.common.constant;
-
-/**
- * 閫氱敤甯搁噺
- *
- * @author Chill
- */
-public interface CommonConstant {
-
-	/**
-	 * sword 绯荤粺鍚�
-	 */
-	String SWORD_NAME = "sword";
-
-	/**
-	 * saber 绯荤粺鍚�
-	 */
-	String SABER_NAME = "saber";
-
-	/**
-	 * CODE 鏂版坊鍔犵殑CODE鏈嶅姟鍚�
-	 */
-	String CODE_NAME = "code";
-
-	/**
-	 * 椤剁骇鐖惰妭鐐筰d
-	 */
-	Long TOP_PARENT_ID = 0L;
-
-	/**
-	 * 椤剁骇鐖惰妭鐐瑰悕绉�
-	 */
-	String TOP_PARENT_NAME = "椤剁骇";
-
-	/**
-	 * 鏈皝瀛樼姸鎬佸��
-	 */
-	Integer NOT_SEALED_ID = 0;
-
-	/**
-	 * 榛樿瀵嗙爜
-	 */
-	String DEFAULT_PASSWORD = "123456";
-
-	/**
-	 * 榛樿瀵嗙爜鍙傛暟鍊�
-	 */
-	String DEFAULT_PARAM_PASSWORD = "account.initPassword";
-
-	/**
-	 * 榛樿鎺掑簭瀛楁
-	 */
-	String SORT_FIELD = "sort";
-
-	/**
-	 * 鏁版嵁鏉冮檺绫诲瀷
-	 */
-	Integer DATA_SCOPE_CATEGORY = 1;
-
-	/**
-	 * 鎺ュ彛鏉冮檺绫诲瀷
-	 */
-	Integer API_SCOPE_CATEGORY = 2;
-
-
-}
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
deleted file mode 100644
index fdd1df6..0000000
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.common.constant;
-
-import org.springblade.core.launch.constant.AppConstant;
-
-import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
-
-/**
- * 鍚姩甯搁噺
- *
- * @author Chill
- */
-public interface LauncherConstant {
-
-	/**
-	 * xxljob
-	 */
-	String APPLICATION_XXLJOB_NAME = APPLICATION_NAME_PREFIX + "xxljob";
-
-	/**
-	 * xxljob
-	 */
-	String APPLICATION_XXLJOB_ADMIN_NAME = APPLICATION_NAME_PREFIX + "xxljob-admin";
-
-	/**
-	 * nacos dev 鍦板潃
-	 */
-	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_DEV_ADDR = "192.168.93.133:38848";
-
-	/**
-	 * nacos prod 鍦板潃
-	 */
-	//String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_PROD_ADDR = "192.168.93.129:38848";
-
-	/**
-	 * nacos test 鍦板潃
-	 */
-	//String NACOS_TEST_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_TEST_ADDR = "192.168.93.133:38848";
-
-	/**
-	 * sentinel dev 鍦板潃
-	 */
-	//String SENTINEL_DEV_ADDR = "127.0.0.1:8858";
-
-	/**
-	 * sentinel prod 鍦板潃
-	 */
-	//String SENTINEL_PROD_ADDR = "172.30.0.58:8858";
-
-	/**
-	 * sentinel test 鍦板潃
-	 */
-	//String SENTINEL_TEST_ADDR = "172.30.0.58:8858";
-
-	/**
-	 * seata dev 鍦板潃
-	 */
-	String SEATA_DEV_ADDR = "127.0.0.1:8091";
-
-	/**
-	 * seata prod 鍦板潃
-	 */
-	String SEATA_PROD_ADDR = "172.30.0.68:8091";
-
-	/**
-	 * seata test 鍦板潃
-	 */
-	String SEATA_TEST_ADDR = "172.30.0.68:8091";
-
-	/**
-	 * zipkin dev 鍦板潃
-	 */
-	String ZIPKIN_DEV_ADDR = "http://dev.vci-tech.com:38006";
-
-	/**
-	 * zipkin prod 鍦板潃
-	 */
-	String ZIPKIN_PROD_ADDR = "http://172.30.0.71:9411";
-
-	/**
-	 * zipkin test 鍦板潃
-	 */
-	String ZIPKIN_TEST_ADDR = "http://172.30.0.71:9411";
-
-	/**
-	 * elk dev 鍦板潃
-	 */
-	String ELK_DEV_ADDR = "dev.vci-tech.com:38002";
-
-	/**
-	 * elk prod 鍦板潃
-	 */
-	String ELK_PROD_ADDR = "dev.vci-tech.com:38002";
-
-	/**
-	 * elk test 鍦板潃
-	 */
-	String ELK_TEST_ADDR = "dev.vci-tech.com:38002";
-
-	/**
-	 * seata file妯″紡
-	 */
-	String FILE_MODE = "file";
-
-	/**
-	 * seata nacos妯″紡
-	 */
-	String NACOS_MODE = "nacos";
-
-	/**
-	 * seata default妯″紡
-	 */
-	String DEFAULT_MODE = "default";
-
-	/**
-	 * seata group鍚庣紑
-	 */
-	String GROUP_NAME = "-group";
-
-	/**
-	 * seata 鏈嶅姟缁勬牸寮�
-	 *
-	 * @param appName 鏈嶅姟鍚�
-	 * @return group
-	 */
-	static String seataServiceGroup(String appName) {
-		return appName.concat(GROUP_NAME);
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杗acos鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String nacosAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return NACOS_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return NACOS_TEST_ADDR;
-			default:
-				return NACOS_DEV_ADDR;
-		}
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杝entinel鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-/*	static String sentinelAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return SENTINEL_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return SENTINEL_TEST_ADDR;
-			default:
-				return SENTINEL_DEV_ADDR;
-		}
-	}*/
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杝eata鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String seataAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return SEATA_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return SEATA_TEST_ADDR;
-			default:
-				return SEATA_DEV_ADDR;
-		}
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杬ipkin鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String zipkinAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return ZIPKIN_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return ZIPKIN_TEST_ADDR;
-			default:
-				return ZIPKIN_DEV_ADDR;
-		}
-	}
-
-	/**
-	 * 鍔ㄦ�佽幏鍙杄lk鍦板潃
-	 *
-	 * @param profile 鐜鍙橀噺
-	 * @return addr
-	 */
-	static String elkAddr(String profile) {
-		switch (profile) {
-			case (AppConstant.PROD_CODE):
-				return ELK_PROD_ADDR;
-			case (AppConstant.TEST_CODE):
-				return ELK_TEST_ADDR;
-			default:
-				return ELK_DEV_ADDR;
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java
deleted file mode 100644
index 6f37f8d..0000000
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.common.constant;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 绉熸埛甯搁噺
- *
- * @author Chill
- */
-public interface TenantConstant {
-
-	/**
-	 * 绉熸埛榛樿瀵嗙爜KEY
-	 */
-	String PASSWORD_KEY = "tenant.default.password";
-
-	/**
-	 * 绉熸埛榛樿璐﹀彿棰濆害KEY
-	 */
-	//String ACCOUNT_NUMBER_KEY = "tenant.default.accountNumber";
-
-	/**
-	 * 绉熸埛榛樿鑿滃崟闆嗗悎KEY
-	 */
-	String ACCOUNT_MENU_CODE_KEY = "tenant.default.menuCode";
-
-	/**
-	 * 绉熸埛榛樿瀵嗙爜
-	 */
-	String DEFAULT_PASSWORD = "123456";
-
-	/**
-	 * 绉熸埛鎺堟潈鐮侀粯璁�16浣嶅瘑閽�
-	 */
-	String DES_KEY = "0000000000000000";
-
-	/**
-	 * 绉熸埛榛樿璐﹀彿棰濆害
-	 */
-	//Integer DEFAULT_ACCOUNT_NUMBER = -1;
-
-	/**
-	 * 绉熸埛榛樿鑿滃崟闆嗗悎
-	 */
-	List<String> MENU_CODES = Arrays.asList(
-		"desk", "flow", "work", "monitor", "Autowired", "role", "user", "dept", "dictbiz", "topmenu"
-	);
-
-}
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
deleted file mode 100644
index 83ec604..0000000
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.common.launch;
-
-import org.springblade.common.constant.LauncherConstant;
-import org.springblade.core.auto.service.AutoService;
-import org.springblade.core.launch.service.LauncherService;
-import org.springblade.core.launch.utils.PropsUtil;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-
-import java.util.Properties;
-
-/**
- * 鍚姩鍙傛暟鎷撳睍
- *
- * @author smallchil
- */
-@AutoService(LauncherService.class)
-public class LauncherServiceImpl implements LauncherService {
-
-	@Override
-	public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) {
-		Properties props = System.getProperties();
-		// 閫氱敤娉ㄥ唽
-		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
-		PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
-		System.out.println( LauncherConstant.nacosAddr(profile));
-		//PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
-		PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile));
-		PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");
-
-		// 寮�鍚痚lk鏃ュ織
-		PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile));
-
-		// seata娉ㄥ唽鍦板潃
-		// PropsUtil.setProperty(props, "seata.service.grouplist.default", LauncherConstant.seataAddr(profile));
-		// seata娉ㄥ唽group鏍煎紡
-		// PropsUtil.setProperty(props, "seata.tx-service-group", LauncherConstant.seataServiceGroup(appName));
-		// seata閰嶇疆鏈嶅姟group
-		// PropsUtil.setProperty(props, "seata.service.vgroup-mapping.".concat(LauncherConstant.seataServiceGroup(appName)), LauncherConstant.DEFAULT_MODE);
-		// seata娉ㄥ唽妯″紡閰嶇疆
-		// PropsUtil.setProperty(props, "seata.registry.type", LauncherConstant.NACOS_MODE);
-		// PropsUtil.setProperty(props, "seata.registry.nacos.server-addr", LauncherConstant.nacosAddr(profile));
-		// PropsUtil.setProperty(props, "seata.config.type", LauncherConstant.NACOS_MODE);
-		// PropsUtil.setProperty(props, "seata.config.nacos.server-addr", LauncherConstant.nacosAddr(profile));
-	}
-
-}
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
deleted file mode 100644
index c424bc8..0000000
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.common.utils;
-
-/**
- * 閫氱敤宸ュ叿绫�
- *
- * @author Chill
- */
-public class CommonUtil {
-
-}
diff --git a/Source/BladeX/blade-gateway/pom.xml b/Source/BladeX/blade-gateway/pom.xml
deleted file mode 100644
index 64d944e..0000000
--- a/Source/BladeX/blade-gateway/pom.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>UBCS</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-gateway</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-launch</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-web</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-undertow</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springblade</groupId>
-                    <artifactId>blade-core-launch</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-metrics</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-jwt</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-        </dependency>
-        <!--Spring-->
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-gateway</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-bootstrap</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>de.codecentric</groupId>
-            <artifactId>spring-boot-admin-starter-client</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java
deleted file mode 100644
index de1c948..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway;
-
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.scheduling.annotation.EnableScheduling;
-
-/**
- * 椤圭洰鍚姩
- *
- * @author Chill
- */
-@EnableScheduling
-@EnableDiscoveryClient
-@SpringBootApplication
-public class GateWayApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_GATEWAY_NAME, GateWayApplication.class, args);
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/ErrorHandlerConfiguration.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/ErrorHandlerConfiguration.java
deleted file mode 100644
index 06329ba..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/ErrorHandlerConfiguration.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.config;
-
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springblade.gateway.handler.ErrorExceptionHandler;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.web.ServerProperties;
-import org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 寮傚父澶勭悊閰嶇疆绫�
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AutoConfigureBefore(ErrorWebFluxAutoConfiguration.class)
-@EnableConfigurationProperties({ServerProperties.class})
-public class ErrorHandlerConfiguration {
-
-	@Bean
-	public ErrorExceptionHandler globalExceptionHandler(ObjectMapper objectMapper) {
-		return new ErrorExceptionHandler(objectMapper);
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java
deleted file mode 100644
index db4814b..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.config;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.gateway.props.AuthProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.web.cors.reactive.CorsUtils;
-import org.springframework.web.server.ServerWebExchange;
-import org.springframework.web.server.WebFilter;
-import org.springframework.web.server.WebFilterChain;
-import reactor.core.publisher.Mono;
-
-/**
- * 璺敱閰嶇疆淇℃伅
- *
- * @author Chill
- */
-@Slf4j
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-@EnableConfigurationProperties({AuthProperties.class})
-public class RouterFunctionConfiguration {
-
-	/**
-	 * 杩欓噷涓烘敮鎸佺殑璇锋眰澶达紝濡傛灉鏈夎嚜瀹氫箟鐨刪eader瀛楁璇疯嚜宸辨坊鍔�
-	 */
-	private static final String ALLOWED_HEADERS = "X-Requested-With, Tenant-Id, Blade-Auth, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, client, knfie4j-gateway-request, knife4j-gateway-code, request-origion";
-	private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD";
-	private static final String ALLOWED_ORIGIN = "*";
-	private static final String ALLOWED_EXPOSE = "*";
-	private static final String MAX_AGE = "18000L";
-
-	/**
-	 * 璺ㄥ煙閰嶇疆
-	 */
-	@Bean
-	public WebFilter corsFilter() {
-		return (ServerWebExchange ctx, WebFilterChain chain) -> {
-			ServerHttpRequest request = ctx.getRequest();
-			if (CorsUtils.isCorsRequest(request)) {
-				ServerHttpResponse response = ctx.getResponse();
-				HttpHeaders headers = response.getHeaders();
-				headers.add("Access-Control-Allow-Headers", ALLOWED_HEADERS);
-				headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS);
-				headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN);
-				headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE);
-				headers.add("Access-Control-Max-Age", MAX_AGE);
-				headers.add("Access-Control-Allow-Credentials", "true");
-				if (request.getMethod() == HttpMethod.OPTIONS) {
-					response.setStatusCode(HttpStatus.OK);
-					return Mono.empty();
-				}
-			}
-			return chain.filter(ctx);
-		};
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteService.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteService.java
deleted file mode 100644
index aed779a..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteService.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.dynamic;
-
-import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
-import org.springframework.cloud.gateway.route.RouteDefinition;
-import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.context.ApplicationEventPublisherAware;
-import org.springframework.stereotype.Service;
-import reactor.core.publisher.Mono;
-
-import java.util.List;
-
-/**
- * 鍔ㄦ�佽矾鐢变笟鍔$被
- *
- * @author Chill
- */
-@Service
-public class DynamicRouteService implements ApplicationEventPublisherAware {
-
-	private final RouteDefinitionWriter routeDefinitionWriter;
-
-	private ApplicationEventPublisher publisher;
-
-	public DynamicRouteService(RouteDefinitionWriter routeDefinitionWriter) {
-		this.routeDefinitionWriter = routeDefinitionWriter;
-	}
-
-	@Override
-	public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
-		this.publisher = applicationEventPublisher;
-	}
-
-	/**
-	 * 澧炲姞璺敱
-	 */
-	public String save(RouteDefinition definition) {
-		try {
-			routeDefinitionWriter.save(Mono.just(definition)).subscribe();
-			this.publisher.publishEvent(new RefreshRoutesEvent(this));
-			return "save success";
-		} catch (Exception e) {
-			e.printStackTrace();
-			return "save failure";
-		}
-	}
-
-	/**
-	 * 鏇存柊璺敱
-	 */
-	public String update(RouteDefinition definition) {
-		try {
-			this.routeDefinitionWriter.delete(Mono.just(definition.getId()));
-			this.routeDefinitionWriter.save(Mono.just(definition)).subscribe();
-			this.publisher.publishEvent(new RefreshRoutesEvent(this));
-			return "update success";
-		} catch (Exception e) {
-			e.printStackTrace();
-			return "update failure";
-		}
-	}
-
-	/**
-	 * 鏇存柊璺敱
-	 */
-	public String updateList(List<RouteDefinition> routeDefinitions) {
-		routeDefinitions.forEach(this::update);
-		return "update done";
-	}
-
-	/**
-	 * 鍒犻櫎璺敱
-	 */
-	public String delete(String id) {
-		try {
-			this.routeDefinitionWriter.delete(Mono.just(id));
-			return "delete success";
-		} catch (Exception e) {
-			e.printStackTrace();
-			return "delete failure";
-		}
-	}
-
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteServiceListener.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteServiceListener.java
deleted file mode 100644
index 31a87b9..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteServiceListener.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.dynamic;
-
-import com.alibaba.cloud.nacos.NacosConfigProperties;
-import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.nacos.api.NacosFactory;
-import com.alibaba.nacos.api.PropertyKeyConst;
-import com.alibaba.nacos.api.config.ConfigService;
-import com.alibaba.nacos.api.config.listener.Listener;
-import com.alibaba.nacos.api.exception.NacosException;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.launch.constant.NacosConstant;
-import org.springblade.core.launch.props.BladeProperties;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-import org.springframework.cloud.gateway.route.RouteDefinition;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.Executor;
-
-/**
- * 鍔ㄦ�佽矾鐢辩洃鍚櫒
- *
- * @author Chill
- */
-@Order
-@Slf4j
-@Component
-@RefreshScope
-public class DynamicRouteServiceListener {
-
-	private final DynamicRouteService dynamicRouteService;
-	private final NacosDiscoveryProperties nacosDiscoveryProperties;
-	private final NacosConfigProperties nacosConfigProperties;
-	private final BladeProperties bladeProperties;
-
-	public DynamicRouteServiceListener(DynamicRouteService dynamicRouteService, NacosDiscoveryProperties nacosDiscoveryProperties, NacosConfigProperties nacosConfigProperties, BladeProperties bladeProperties) {
-		this.dynamicRouteService = dynamicRouteService;
-		this.nacosDiscoveryProperties = nacosDiscoveryProperties;
-		this.nacosConfigProperties = nacosConfigProperties;
-		this.bladeProperties = bladeProperties;
-		dynamicRouteServiceListener();
-	}
-
-	/**
-	 * 鐩戝惉Nacos涓嬪彂鐨勫姩鎬佽矾鐢遍厤缃�
-	 */
-	private void dynamicRouteServiceListener() {
-		try {
-			String dataId = NacosConstant.dataId(bladeProperties.getName(), bladeProperties.getEnv(), NacosConstant.NACOS_CONFIG_JSON_FORMAT);
-			String group = nacosConfigProperties.getGroup();
-			Properties properties = new Properties();
-			properties.setProperty(PropertyKeyConst.SERVER_ADDR, nacosDiscoveryProperties.getServerAddr());
-			properties.setProperty(PropertyKeyConst.NAMESPACE, nacosDiscoveryProperties.getNamespace());
-			ConfigService configService = NacosFactory.createConfigService(properties);
-			configService.addListener(dataId, group, new Listener() {
-				@Override
-				public void receiveConfigInfo(String configInfo) {
-					List<RouteDefinition> routeDefinitions = JSON.parseArray(configInfo, RouteDefinition.class);
-					dynamicRouteService.updateList(routeDefinitions);
-				}
-
-				@Override
-				public Executor getExecutor() {
-					return null;
-				}
-			});
-			String configInfo = configService.getConfig(dataId, group, 5000);
-			if (configInfo != null) {
-				List<RouteDefinition> routeDefinitions = JSON.parseArray(configInfo, RouteDefinition.class);
-				dynamicRouteService.updateList(routeDefinitions);
-			}
-		} catch (NacosException ignored) {
-			ignored.printStackTrace();
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayFilter.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayFilter.java
deleted file mode 100644
index a7c64ec..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayFilter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.dynamic;
-
-import lombok.Data;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * 杩囨护鍣ㄥ畾涔夋ā鍨�
- *
- * @author Chill
- */
-@Data
-public class GatewayFilter {
-
-	/**
-	 * 杩囨护鍣ㄥ搴旂殑Name
-	 */
-	private String name;
-
-	/**
-	 * 瀵瑰簲鐨勮矾鐢辫鍒�
-	 */
-	private Map<String, String> args = new LinkedHashMap<>();
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayPredicate.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayPredicate.java
deleted file mode 100644
index 1e8e435..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayPredicate.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.dynamic;
-
-import lombok.Data;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * 璺敱鏂█瀹氫箟妯″瀷
- *
- * @author Chill
- */
-@Data
-public class GatewayPredicate {
-
-	/**
-	 * 鏂█瀵瑰簲鐨凬ame
-	 */
-	private String name;
-
-	/**
-	 * 閰嶇疆鐨勬柇瑷�瑙勫垯
-	 */
-	private Map<String, String> args = new LinkedHashMap<>();
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayRoute.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayRoute.java
deleted file mode 100644
index c126009..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayRoute.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.dynamic;
-
-
-import lombok.Data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Gateway鐨勮矾鐢卞畾涔夋ā鍨�
- *
- * @author Chill
- */
-@Data
-public class GatewayRoute {
-
-	/**
-	 * 璺敱鐨刬d
-	 */
-	private String id;
-
-	/**
-	 * 璺敱鏂█闆嗗悎閰嶇疆
-	 */
-	private List<GatewayPredicate> predicates = new ArrayList<>();
-
-	/**
-	 * 璺敱杩囨护鍣ㄩ泦鍚堥厤缃�
-	 */
-	private List<GatewayFilter> filters = new ArrayList<>();
-
-	/**
-	 * 璺敱瑙勫垯杞彂鐨勭洰鏍噓ri
-	 */
-	private String uri;
-
-	/**
-	 * 璺敱鎵ц鐨勯『搴�
-	 */
-	private int order = 0;
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java
deleted file mode 100644
index 4175149..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.filter;
-
-import com.alibaba.nacos.common.utils.StringUtils;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import io.jsonwebtoken.Claims;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.jwt.JwtUtil;
-import org.springblade.core.jwt.props.JwtProperties;
-import org.springblade.core.launch.constant.TokenConstant;
-import org.springblade.gateway.props.AuthProperties;
-import org.springblade.gateway.provider.AuthProvider;
-import org.springblade.gateway.provider.RequestProvider;
-import org.springblade.gateway.provider.ResponseProvider;
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.core.Ordered;
-import org.springframework.core.io.buffer.DataBuffer;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.stereotype.Component;
-import org.springframework.util.AntPathMatcher;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 閴存潈璁よ瘉
- *
- * @author Chill
- */
-@Slf4j
-@Component
-@AllArgsConstructor
-public class AuthFilter implements GlobalFilter, Ordered {
-	private final AuthProperties authProperties;
-	private final ObjectMapper objectMapper;
-	private final JwtProperties jwtProperties;
-	private final AntPathMatcher antPathMatcher = new AntPathMatcher();
-
-	@Override
-	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-		//鏍¢獙 Token 鏀捐
-		String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
-		String path = exchange.getRequest().getURI().getPath();
-		if (isSkip(path) || isSkip(originalRequestUrl)) {
-			return chain.filter(exchange);
-		}
-		//鏍¢獙 Token 鍚堟硶鎬�
-		ServerHttpResponse resp = exchange.getResponse();
-		String headerToken = exchange.getRequest().getHeaders().getFirst(AuthProvider.AUTH_KEY);
-		String paramToken = exchange.getRequest().getQueryParams().getFirst(AuthProvider.AUTH_KEY);
-		if (StringUtils.isBlank(headerToken) && StringUtils.isBlank(paramToken)) {
-			return unAuth(resp, "缂哄け浠ょ墝,閴存潈澶辫触");
-		}
-		String auth = StringUtils.isBlank(headerToken) ? paramToken : headerToken;
-		String token = JwtUtil.getToken(auth);
-		Claims claims = JwtUtil.parseJWT(token);
-		if (token == null || claims == null) {
-			return unAuth(resp, "璇锋眰鏈巿鏉�");
-		}
-		//鍒ゆ柇 Token 鐘舵��
-		if (jwtProperties.getState()) {
-			String tenantId = String.valueOf(claims.get(TokenConstant.TENANT_ID));
-			String userId = String.valueOf(claims.get(TokenConstant.USER_ID));
-			String accessToken = JwtUtil.getAccessToken(tenantId, userId, token);
-			if (!token.equalsIgnoreCase(accessToken)) {
-				return unAuth(resp, "浠ょ墝宸插け鏁�");
-			}
-		}
-		return chain.filter(exchange);
-	}
-
-	private boolean isSkip(String path) {
-		return AuthProvider.getDefaultSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
-			|| authProperties.getSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
- 			|| authProperties.getAuth().stream().anyMatch(auth -> antPathMatcher.match(auth.getPattern(), path))
- 			|| authProperties.getBasic().stream().anyMatch(basic -> antPathMatcher.match(basic.getPattern(), path))
-			|| authProperties.getSign().stream().anyMatch(sign -> antPathMatcher.match(sign.getPattern(), path));
-	}
-
-	private Mono<Void> unAuth(ServerHttpResponse resp, String msg) {
-		resp.setStatusCode(HttpStatus.UNAUTHORIZED);
-		resp.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
-		String result = "";
-		try {
-			result = objectMapper.writeValueAsString(ResponseProvider.unAuth(msg));
-		} catch (JsonProcessingException e) {
-			log.error(e.getMessage(), e);
-		}
-		DataBuffer buffer = resp.bufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8));
-		return resp.writeWith(Flux.just(buffer));
-	}
-
-
-	@Override
-	public int getOrder() {
-		return -100;
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java
deleted file mode 100644
index a81b2d0..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.gateway.filter;
-
-import com.alibaba.nacos.common.utils.StringUtils;
-import io.jsonwebtoken.Claims;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.jwt.JwtUtil;
-import org.springblade.gateway.provider.AuthProvider;
-import org.springblade.gateway.provider.RequestProvider;
-import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.Ordered;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Mono;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * webflux 鏃ュ織璇锋眰璁板綍锛屾柟渚垮紑鍙戣皟璇曘�傝姹傛棩蹇楄繃婊ゅ櫒鎺掑簭灏介噺浣庛��
- *
- * <p>
- * 娉ㄦ剰锛氭殏鏃朵笉鏀寔缁撴瀯浣撴墦鍗帮紝鎯冲疄鐜帮紝璇风湅涓嬮潰鐨勯摼鎺ャ��
- * https://stackoverflow.com/questions/45240005/how-to-log-request-and-response-bodies-in-spring-webflux
- * https://github.com/Silvmike/webflux-demo/blob/master/tests/src/test/java/ru/hardcoders/demo/webflux/web_handler/filters/logging
- * </p>
- *
- * @author dream.lu
- */
-@Slf4j
-@Configuration(proxyBeanMethods = false)
-@RequiredArgsConstructor
-@ConditionalOnProperty(value = "blade.log.request.enabled", havingValue = "true", matchIfMissing = true)
-public class GlobalRequestLogFilter implements GlobalFilter, Ordered {
-	private final WebEndpointProperties endpointProperties;
-
-	@Override
-	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-		ServerHttpRequest request = exchange.getRequest();
-		// 鎵撳嵃璇锋眰璺緞
-		String path = request.getPath().pathWithinApplication().value();
-
-		// 蹇界暐 endpoint 璇锋眰
-		String endpointBasePath = endpointProperties.getBasePath();
-		if (StringUtils.isNotBlank(endpointBasePath) && path.startsWith(endpointBasePath)) {
-			return chain.filter(exchange);
-		}
-
-		String requestUrl = RequestProvider.getOriginalRequestUrl(exchange);
-
-		// 鏋勫缓鎴愪竴鏉¢暱 鏃ュ織锛岄伩鍏嶅苟鍙戜笅鏃ュ織閿欎贡
-		StringBuilder beforeReqLog = new StringBuilder(300);
-		// 鏃ュ織鍙傛暟
-		List<Object> beforeReqArgs = new ArrayList<>();
-		beforeReqLog.append("\n\n================ Gateway Request Start  ================\n");
-		// 鎵撳嵃璺敱
-		beforeReqLog.append("===> {}: {}\n");
-		// 鍙傛暟
-		String requestMethod = request.getMethodValue();
-		beforeReqArgs.add(requestMethod);
-		beforeReqArgs.add(requestUrl);
-
-		// 鎵撳嵃璇锋眰澶�
-		HttpHeaders headers = request.getHeaders();
-		headers.forEach((headerName, headerValue) -> {
-			beforeReqLog.append("===Headers===  {}: {}\n");
-			beforeReqArgs.add(headerName);
-			if (AuthProvider.AUTH_KEY.toLowerCase().equals(headerName)) {
-				String value = headerValue.get(0);
-				String token = JwtUtil.getToken(value);
-				Claims claims = JwtUtil.parseJWT(token);
-				beforeReqArgs.add((claims == null) ? "" : claims.toString());
-				beforeReqLog.append("===Headers===  {}: {}\n");
-				beforeReqArgs.add(headerName.concat("-original"));
-				beforeReqArgs.add(headerValue.toArray());
-			} else {
-				beforeReqArgs.add(headerValue.toArray());
-			}
-		});
-
-		beforeReqLog.append("================  Gateway Request End  =================\n");
-		// 鎵撳嵃鎵ц鏃堕棿
-		log.info(beforeReqLog.toString(), beforeReqArgs.toArray());
-		return chain.filter(exchange);
-	}
-
-	@Override
-	public int getOrder() {
-		return Ordered.LOWEST_PRECEDENCE;
-	}
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalResponseLogFilter.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalResponseLogFilter.java
deleted file mode 100644
index 355b8a7..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalResponseLogFilter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.gateway.filter;
-
-import com.alibaba.nacos.common.utils.StringUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.Ordered;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.server.ServerWebExchange;
-import org.springframework.web.util.UriComponentsBuilder;
-import reactor.core.publisher.Mono;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * webflux 鐩稿簲鏃ュ織锛屾柟渚垮紑鍙戣皟璇曪紝娉ㄦ剰鎺掑簭瑕佷紭鍏堛��
- *
- * @author dream.lu
- */
-@Slf4j
-@Configuration(proxyBeanMethods = false)
-@RequiredArgsConstructor
-@ConditionalOnProperty(value = "blade.log.request.enabled", havingValue = "true", matchIfMissing = true)
-public class GlobalResponseLogFilter implements GlobalFilter, Ordered {
-	private final WebEndpointProperties endpointProperties;
-
-	@Override
-	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-		ServerHttpRequest request = exchange.getRequest();
-		// 鎵撳嵃璇锋眰璺緞
-		String path = request.getPath().pathWithinApplication().value();
-		// 蹇界暐 endpoint 璇锋眰
-		String endpointBasePath = endpointProperties.getBasePath();
-		if (StringUtils.isNotBlank(endpointBasePath) && path.startsWith(endpointBasePath)) {
-			return chain.filter(exchange);
-		}
-		return chain.filter(exchange).then(
-			Mono.fromRunnable(() -> {
-				MultiValueMap<String, String> queryParams = request.getQueryParams();
-				String requestUrl = UriComponentsBuilder.fromPath(path).queryParams(queryParams).build().toUriString();
-
-				// 鏋勫缓鎴愪竴鏉¢暱 鏃ュ織锛岄伩鍏嶅苟鍙戜笅鏃ュ織閿欎贡
-				StringBuilder responseLog = new StringBuilder(300);
-				// 鏃ュ織鍙傛暟
-				List<Object> responseArgs = new ArrayList<>();
-				responseLog.append("\n\n================ Gateway Response Start  ================\n");
-				ServerHttpResponse response = exchange.getResponse();
-				// 鎵撳嵃璺敱 200 get: /api/xxx/xxx
-				responseLog.append("<=== {} {}: {}\n");
-				// 鍙傛暟
-				String requestMethod = request.getMethodValue();
-				responseArgs.add(response.getStatusCode().value());
-				responseArgs.add(requestMethod);
-				responseArgs.add(requestUrl);
-
-				// 鎵撳嵃璇锋眰澶�
-				HttpHeaders headers = response.getHeaders();
-				headers.forEach((headerName, headerValue) -> {
-					responseLog.append("===Headers===  {}: {}\n");
-					responseArgs.add(headerName);
-					responseArgs.add(headerValue.toArray());
-				});
-
-				responseLog.append("================  Gateway Response End  =================\n");
-				// 鎵撳嵃鎵ц鏃堕棿
-				log.info(responseLog.toString(), responseArgs.toArray());
-			})
-		);
-	}
-
-	@Override
-	public int getOrder() {
-		return Ordered.HIGHEST_PRECEDENCE;
-	}
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/RequestFilter.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/RequestFilter.java
deleted file mode 100644
index b351716..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/RequestFilter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.springblade.gateway.filter;
-
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.core.Ordered;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Mono;
-
-import java.util.Arrays;
-import java.util.stream.Collectors;
-
-import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
-import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.addOriginalRequestUrl;
-
-/**
- * <p>
- * 鍏ㄥ眬鎷︽埅鍣紝浣滅敤鎵�鏈夌殑寰湇鍔�
- * <p>
- * 1. 瀵硅姹傚ご涓弬鏁拌繘琛屽鐞� from 鍙傛暟杩涜娓呮礂
- * 2. 閲嶅啓StripPrefix = 1,鏀寔鍏ㄥ眬
- *
- * @author lengleng
- */
-@Component
-public class RequestFilter implements GlobalFilter, Ordered {
-
-	/**
-	 * Process the Web request and (optionally) delegate to the next
-	 * {@code WebFilter} through the given {@link GatewayFilterChain}.
-	 *
-	 * @param exchange the current server exchange
-	 * @param chain    provides a way to delegate to the next filter
-	 * @return {@code Mono<Void>} to indicate when request processing is complete
-	 */
-	@Override
-	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-		// 1. 娓呮礂璇锋眰澶翠腑from 鍙傛暟
-		ServerHttpRequest request = exchange.getRequest().mutate()
-			.headers(httpHeaders -> httpHeaders.remove("X"))
-			.build();
-
-		// 2. 閲嶅啓StripPrefix
-		addOriginalRequestUrl(exchange, request.getURI());
-		String rawPath = request.getURI().getRawPath();
-		String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/"))
-			.skip(1L).collect(Collectors.joining("/"));
-		ServerHttpRequest newRequest = request.mutate()
-			.path(newPath)
-			.build();
-		exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
-
-		return chain.filter(exchange.mutate().request(newRequest.mutate().build()).build());
-	}
-
-	@Override
-	public int getOrder() {
-		return -1000;
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/handler/ErrorExceptionHandler.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/handler/ErrorExceptionHandler.java
deleted file mode 100644
index b00d981..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/handler/ErrorExceptionHandler.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.handler;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.RequiredArgsConstructor;
-import org.springblade.gateway.provider.ResponseProvider;
-import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
-import org.springframework.core.annotation.Order;
-import org.springframework.core.io.buffer.DataBufferFactory;
-import org.springframework.http.MediaType;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.web.server.ResponseStatusException;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Mono;
-
-import java.util.Map;
-
-/**
- * 寮傚父澶勭悊
- *
- * @author Chill
- */
-@Order(-1)
-@RequiredArgsConstructor
-public class ErrorExceptionHandler implements ErrorWebExceptionHandler {
-
-	private final ObjectMapper objectMapper;
-
-	@Override
-	public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
-		ServerHttpRequest request = exchange.getRequest();
-		ServerHttpResponse response = exchange.getResponse();
-
-		if (response.isCommitted()) {
-			return Mono.error(ex);
-		}
-
-		response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
-		if (ex instanceof ResponseStatusException) {
-			response.setStatusCode(((ResponseStatusException) ex).getStatus());
-		}
-
-		return response.writeWith(Mono.fromSupplier(() -> {
-			DataBufferFactory bufferFactory = response.bufferFactory();
-			try {
-				int status = 500;
-				if (response.getStatusCode() != null) {
-					status = response.getStatusCode().value();
-				}
-				Map<String, Object> result = ResponseProvider.response(status, this.buildMessage(request, ex));
-				return bufferFactory.wrap(objectMapper.writeValueAsBytes(result));
-			} catch (JsonProcessingException e) {
-				return bufferFactory.wrap(new byte[0]);
-			}
-		}));
-	}
-
-
-	/**
-	 * 鏋勫缓寮傚父淇℃伅
-	 */
-	private String buildMessage(ServerHttpRequest request, Throwable ex) {
-		String uri = request.getURI().toString();
-		if (uri.endsWith("doc.html")) {
-			return "[Swagger鑱氬悎缃戝叧] 宸茶縼绉昏嚦 [blade-swagger] 鏈嶅姟锛岃寮�鍚� [blade-swagger] 鏈嶅姟骞惰闂� [http://127.0.0.1:18000/doc.html]";
-		}
-		StringBuilder message = new StringBuilder("Failed to handle request [");
-		message.append(request.getMethodValue());
-		message.append(" ");
-		message.append(request.getURI());
-		message.append("]");
-		if (ex != null) {
-			message.append(": ");
-			message.append(ex.getMessage());
-		}
-		return message.toString();
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/props/AuthProperties.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/props/AuthProperties.java
deleted file mode 100644
index d76eb7d..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/props/AuthProperties.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.props;
-
-import lombok.Data;
-import org.springblade.gateway.provider.AuthSecure;
-import org.springblade.gateway.provider.BasicSecure;
-import org.springblade.gateway.provider.SignSecure;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 鏉冮檺杩囨护
- *
- * @author Chill
- */
-@Data
-@RefreshScope
-@ConfigurationProperties("blade.secure")
-public class AuthProperties {
-
-	/**
-	 * 鏀捐API闆嗗悎
-	 */
-	private final List<String> skipUrl = new ArrayList<>();
-
-	/**
-	 * 鑷畾涔夋巿鏉冮厤缃�
-	 */
-	private final List<AuthSecure> auth = new ArrayList<>();
-
-	/**
-	 * 鍩虹璁よ瘉閰嶇疆
-	 */
-	private final List<BasicSecure> basic = new ArrayList<>();
-
-	/**
-	 * 绛惧悕璁よ瘉閰嶇疆
-	 */
-	private final List<SignSecure> sign = new ArrayList<>();
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
deleted file mode 100644
index 9a66d4a..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.provider;
-
-import org.springblade.core.launch.constant.TokenConstant;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 閴存潈閰嶇疆
- *
- * @author Chill
- */
-public class AuthProvider {
-
-	public static final String AUTH_KEY = TokenConstant.HEADER;
-	private static final List<String> DEFAULT_SKIP_URL = new ArrayList<>();
-
-	static {
-		DEFAULT_SKIP_URL.add("/example");
-		DEFAULT_SKIP_URL.add("/oauth/token/**");
-		DEFAULT_SKIP_URL.add("/oauth/captcha/**");
-		DEFAULT_SKIP_URL.add("/oauth/clear-cache/**");
-		DEFAULT_SKIP_URL.add("/oauth/user-info");
-		DEFAULT_SKIP_URL.add("/oauth/render/**");
-		DEFAULT_SKIP_URL.add("/oauth/callback/**");
-		DEFAULT_SKIP_URL.add("/oauth/revoke/**");
-		DEFAULT_SKIP_URL.add("/oauth/refresh/**");
-		DEFAULT_SKIP_URL.add("/token/**");
-		DEFAULT_SKIP_URL.add("/actuator/**");
-		DEFAULT_SKIP_URL.add("/v2/api-docs/**");
-		DEFAULT_SKIP_URL.add("/auth/**");
-		DEFAULT_SKIP_URL.add("/log/**");
-		DEFAULT_SKIP_URL.add("/menu/routes");
-		DEFAULT_SKIP_URL.add("/menu/auth-routes");
-		DEFAULT_SKIP_URL.add("/menu/top-menu");
-		DEFAULT_SKIP_URL.add("/tenant/info");
-		DEFAULT_SKIP_URL.add("/process/Autowired-view");
-		DEFAULT_SKIP_URL.add("/process/diagram-view");
-		DEFAULT_SKIP_URL.add("/manager/check-upload");
-		DEFAULT_SKIP_URL.add("/error/**");
-		DEFAULT_SKIP_URL.add("/assets/**");
-	}
-
-	/**
-	 * 榛樿鏃犻渶閴存潈鐨凙PI
-	 */
-	public static List<String> getDefaultSkipUrl() {
-		return DEFAULT_SKIP_URL;
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthSecure.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthSecure.java
deleted file mode 100644
index 2e69987..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthSecure.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.provider;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 鑷畾涔夋巿鏉冭鍒�
- *
- * @author Chill
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class AuthSecure {
-	/**
-	 * 璇锋眰璺緞
-	 */
-	private String pattern;
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/BasicSecure.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/BasicSecure.java
deleted file mode 100644
index bbd62c2..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/BasicSecure.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.provider;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 鍩虹鎺堟潈瑙勫垯
- *
- * @author Chill
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class BasicSecure {
-	/**
-	 * 璇锋眰璺緞
-	 */
-	private String pattern;
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java
deleted file mode 100644
index 95c68dc..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.provider;
-
-import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.server.ServerWebExchange;
-import org.springframework.web.util.UriComponentsBuilder;
-
-import java.net.URI;
-import java.util.LinkedHashSet;
-
-/**
- * RequestProvider
- *
- * @author Chill
- */
-public class RequestProvider {
-
-	/**
-	 * 鑾峰彇鍘熷url
-	 *
-	 * @param exchange
-	 * @return
-	 */
-	public static String getOriginalRequestUrl(ServerWebExchange exchange) {
-		ServerHttpRequest request = exchange.getRequest();
-		LinkedHashSet<URI> uris = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
-		URI requestUri = uris.stream().findFirst().orElse(request.getURI());
-		MultiValueMap<String, String> queryParams = request.getQueryParams();
-		return UriComponentsBuilder.fromPath(requestUri.getRawPath()).queryParams(queryParams).build().toUriString();
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/ResponseProvider.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/ResponseProvider.java
deleted file mode 100644
index 579cf61..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/ResponseProvider.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.provider;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 璇锋眰鍝嶅簲杩斿洖
- *
- * @author Chill
- */
-public class ResponseProvider {
-
-	/**
-	 * 鎴愬姛
-	 *
-	 * @param message 淇℃伅
-	 * @return
-	 */
-	public static Map<String, Object> success(String message) {
-		return response(200, message);
-	}
-
-	/**
-	 * 澶辫触
-	 *
-	 * @param message 淇℃伅
-	 * @return
-	 */
-	public static Map<String, Object> fail(String message) {
-		return response(400, message);
-	}
-
-	/**
-	 * 鏈巿鏉�
-	 *
-	 * @param message 淇℃伅
-	 * @return
-	 */
-	public static Map<String, Object> unAuth(String message) {
-		return response(401, message);
-	}
-
-	/**
-	 * 鏈嶅姟鍣ㄥ紓甯�
-	 *
-	 * @param message 淇℃伅
-	 * @return
-	 */
-	public static Map<String, Object> error(String message) {
-		return response(500, message);
-	}
-
-	/**
-	 * 鏋勫缓杩斿洖鐨凧SON鏁版嵁鏍煎紡
-	 *
-	 * @param status  鐘舵�佺爜
-	 * @param message 淇℃伅
-	 * @return
-	 */
-	public static Map<String, Object> response(int status, String message) {
-		Map<String, Object> map = new HashMap<>(16);
-		map.put("code", status);
-		map.put("msg", message);
-		map.put("data", null);
-		return map;
-	}
-
-}
diff --git a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/SignSecure.java b/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/SignSecure.java
deleted file mode 100644
index 14b2ff9..0000000
--- a/Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/SignSecure.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.gateway.provider;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 绛惧悕鎺堟潈瑙勫垯
- *
- * @author Chill
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class SignSecure {
-	/**
-	 * 璇锋眰璺緞
-	 */
-	private String pattern;
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/pom.xml b/Source/BladeX/blade-ops-api/blade-flow-api/pom.xml
deleted file mode 100644
index 25060e7..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/pom.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-flow-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-
-
-</project>
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java
deleted file mode 100644
index 8657f7b..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.constant;
-
-/**
- * 娴佺▼甯搁噺.
- *
- * @author Chill
- */
-public interface ProcessConstant {
-
-	/**
-	 * 璇峰亣娴佺▼鏍囪瘑
-	 */
-	String LEAVE_KEY = "Leave";
-
-	/**
-	 * 鎶ラ攢娴佺▼鏍囪瘑
-	 */
-	String EXPENSE_KEY = "Expense";
-
-	/**
-	 * 鍚屾剰鏍囪瘑
-	 */
-	String PASS_KEY = "pass";
-
-	/**
-	 * 鍚屾剰浠e彿
-	 */
-	String PASS_ALIAS = "ok";
-
-	/**
-	 * 鍚屾剰榛樿鎵瑰
-	 */
-	String PASS_COMMENT = "鍚屾剰";
-
-	/**
-	 * 椹冲洖榛樿鎵瑰
-	 */
-	String NOT_PASS_COMMENT = "椹冲洖";
-
-	/**
-	 * 鍒涘缓浜哄彉閲忓悕
-	 */
-	String TASK_VARIABLE_CREATE_USER = "createUser";
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/BladeFlow.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
deleted file mode 100644
index 0492844..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.entity;
-
-import lombok.Data;
-import org.springblade.flow.core.constant.ProcessConstant;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * 宸ヤ綔娴侀�氱敤瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-public class BladeFlow implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 浠诲姟缂栧彿
-	 */
-	private String taskId;
-	/**
-	 * 浠诲姟鍚嶇О
-	 */
-	private String taskName;
-	/**
-	 * 浠诲姟瀹氫箟Key
-	 */
-	private String taskDefinitionKey;
-	/**
-	 * 浠诲姟鎵ц浜虹紪鍙�
-	 */
-	private String assignee;
-	/**
-	 * 浠诲姟鎵ц浜哄悕绉�
-	 */
-	private String assigneeName;
-	/**
-	 * 娴佺▼鍒嗙被
-	 */
-	private String category;
-	/**
-	 * 娴佺▼鍒嗙被鍚�
-	 */
-	private String categoryName;
-	/**
-	 * 鍒涘缓鏃堕棿
-	 */
-	private Date createTime;
-	/**
-	 * 缁撴潫鏃堕棿
-	 */
-	private Date endTime;
-	/**
-	 * 绛炬敹鏃堕棿
-	 */
-	private Date claimTime;
-	/**
-	 * 鍘嗗彶浠诲姟缁撴潫鏃堕棿
-	 */
-	private Date historyTaskEndTime;
-	/**
-	 * 鎵цID
-	 */
-	private String executionId;
-	/**
-	 * 娴佺▼瀹炰緥ID
-	 */
-	private String processInstanceId;
-	/**
-	 * 娴佺▼ID
-	 */
-	private String processDefinitionId;
-	/**
-	 * 娴佺▼鏍囪瘑
-	 */
-	private String processDefinitionKey;
-	/**
-	 * 娴佺▼鍚�
-	 */
-	private String processDefinitionName;
-	/**
-	 * 娴佺▼鐗堟湰
-	 */
-	private int processDefinitionVersion;
-	/**
-	 * 娴佺▼璇存槑
-	 */
-	private String processDefinitionDesc;
-	/**
-	 * 娴佺▼绠�鍥惧悕
-	 */
-	private String processDefinitionDiagramResName;
-	/**
-	 * 娴佺▼閲嶅懡鍚�
-	 */
-	private String processDefinitionResName;
-	/**
-	 * 鍘嗗彶浠诲姟娴佺▼瀹炰緥ID 鏌ョ湅娴佺▼鍥句細鐢ㄥ埌
-	 */
-	private String historyProcessInstanceId;
-	/**
-	 * 娴佺▼瀹炰緥鏄惁缁撴潫
-	 */
-	private String processIsFinished;
-	/**
-	 * 鍘嗗彶娲诲姩ID
-	 */
-	private String historyActivityId;
-	/**
-	 * 鍘嗗彶娲诲姩娴佺▼
-	 */
-	private String historyActivityName;
-	/**
-	 * 鍘嗗彶娲诲姩鑰楁椂
-	 */
-	private String historyActivityDurationTime;
-	/**
-	 * 涓氬姟缁戝畾Table
-	 */
-	private String businessTable;
-	/**
-	 * 涓氬姟缁戝畾ID
-	 */
-	private String businessId;
-	/**
-	 * 浠诲姟鐘舵��
-	 */
-	private String status;
-	/**
-	 * 浠诲姟鎰忚
-	 */
-	private String comment;
-	/**
-	 * 鏄惁閫氳繃
-	 */
-	private boolean isPass;
-	/**
-	 * 鏄惁閫氳繃浠e彿
-	 */
-	private String flag;
-	/**
-	 * 寮�濮嬫煡璇㈡棩鏈�
-	 */
-	private Date beginDate;
-	/**
-	 * 缁撴潫鏌ヨ鏃ユ湡
-	 */
-	private Date endDate;
-	/**
-	 * 娴佺▼鍙傛暟
-	 */
-	private Map<String, Object> variables;
-
-	/**
-	 * 鑾峰彇鏄惁閫氳繃
-	 */
-	public boolean isPass() {
-		return ProcessConstant.PASS_ALIAS.equals(flag) || ProcessConstant.PASS_COMMENT.equals(comment);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/FlowEntity.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/FlowEntity.java
deleted file mode 100644
index bedc62e..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/FlowEntity.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.entity;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * FlowEntity
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FlowEntity extends BaseEntity {
-
-	@TableField(exist = false)
-	private BladeFlow flow;
-
-	public BladeFlow getFlow() {
-		if (flow == null) {
-			flow = new BladeFlow();
-		}
-		return flow;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java
deleted file mode 100644
index c5ab5c7..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 娴佺▼绫诲瀷鏋氫妇
- *
- * @author Chill
- */
-@Getter
-@AllArgsConstructor
-public enum FlowModeEnum {
-
-	/**
-	 * 閫氱敤娴佺▼
-	 */
-	COMMON("common", 1),
-
-	/**
-	 * 瀹氬埗娴佺▼
-	 */
-	CUSTOM("custom", 2),
-	;
-
-	final String name;
-	final int mode;
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClient.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClient.java
deleted file mode 100644
index 03d86bf..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClient.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.feign;
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.Map;
-
-/**
- * 宸ヤ綔娴佽繙绋嬭皟鐢ㄦ帴鍙�.
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_FLOW_NAME,
-	fallback = IFlowClientFallback.class
-)
-public interface IFlowClient {
-
-	String API_PREFIX = "/client";
-	String START_PROCESS_INSTANCE_BY_ID = API_PREFIX + "/start-process-instance-by-id";
-	String START_PROCESS_INSTANCE_BY_KEY = API_PREFIX + "/start-process-instance-by-key";
-	String COMPLETE_TASK = API_PREFIX + "/complete-task";
-	String TASK_VARIABLE = API_PREFIX + "/task-variable";
-	String TASK_VARIABLES = API_PREFIX + "/task-variables";
-
-	/**
-	 * 寮�鍚祦绋�
-	 *
-	 * @param processDefinitionId 娴佺▼id
-	 * @param businessKey         涓氬姟key
-	 * @param variables           鍙傛暟
-	 * @return BladeFlow
-	 */
-	@PostMapping(START_PROCESS_INSTANCE_BY_ID)
-	R<BladeFlow> startProcessInstanceById(@RequestParam("processDefinitionId") String processDefinitionId, @RequestParam("businessKey") String businessKey, @RequestBody Map<String, Object> variables);
-
-	/**
-	 * 寮�鍚祦绋�
-	 *
-	 * @param processDefinitionKey 娴佺▼鏍囪瘑
-	 * @param businessKey          涓氬姟key
-	 * @param variables            鍙傛暟
-	 * @return BladeFlow
-	 */
-	@PostMapping(START_PROCESS_INSTANCE_BY_KEY)
-	R<BladeFlow> startProcessInstanceByKey(@RequestParam("processDefinitionKey") String processDefinitionKey, @RequestParam("businessKey") String businessKey, @RequestBody Map<String, Object> variables);
-
-	/**
-	 * 瀹屾垚浠诲姟
-	 *
-	 * @param taskId            浠诲姟id
-	 * @param processInstanceId 娴佺▼瀹炰緥id
-	 * @param comment           璇勮
-	 * @param variables         鍙傛暟
-	 * @return R
-	 */
-	@PostMapping(COMPLETE_TASK)
-	R completeTask(@RequestParam("taskId") String taskId, @RequestParam("processInstanceId") String processInstanceId, @RequestParam("comment") String comment, @RequestBody Map<String, Object> variables);
-
-	/**
-	 * 鑾峰彇娴佺▼鍙橀噺
-	 *
-	 * @param taskId       浠诲姟id
-	 * @param variableName 鍙橀噺鍚�
-	 * @return R
-	 */
-	@GetMapping(TASK_VARIABLE)
-	R<Object> taskVariable(@RequestParam("taskId") String taskId, @RequestParam("variableName") String variableName);
-
-	/**
-	 * 鑾峰彇娴佺▼鍙橀噺闆嗗悎
-	 *
-	 * @param taskId 浠诲姟id
-	 * @return R
-	 */
-	@GetMapping(TASK_VARIABLES)
-	R<Map<String, Object>> taskVariables(@RequestParam("taskId") String taskId);
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClientFallback.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClientFallback.java
deleted file mode 100644
index 2404ef9..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClientFallback.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.feign;
-
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * 娴佺▼杩滅▼璋冪敤澶辫触澶勭悊绫�
- *
- * @author Chill
- */
-@Component
-public class IFlowClientFallback implements IFlowClient {
-
-	@Override
-	public R<BladeFlow> startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-	@Override
-	public R<BladeFlow> startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-	@Override
-	public R completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-	@Override
-	public R<Object> taskVariable(String taskId, String variableName) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-	@Override
-	public R<Map<String, Object>> taskVariables(String taskId) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
deleted file mode 100644
index 5323a60..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.utils;
-
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.constant.ProcessConstant;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 宸ヤ綔娴佸伐鍏风被
- *
- * @author Chill
- */
-public class FlowUtil {
-
-	/**
-	 * 瀹氫箟娴佺▼key瀵瑰簲鐨勮〃鍚�
-	 */
-	private final static Map<String, String> BUSINESS_TABLE = new HashMap<>();
-
-	static {
-		BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "pl_wf_process_leave");
-	}
-
-	/**
-	 * 閫氳繃娴佺▼key鑾峰彇涓氬姟琛ㄥ悕
-	 *
-	 * @param key 娴佺▼key
-	 */
-	public static String getBusinessTable(String key) {
-		String businessTable = BUSINESS_TABLE.get(key);
-		if (Func.isEmpty(businessTable)) {
-			throw new RuntimeException("娴佺▼鍚姩澶辫触,鏈壘鍒扮浉鍏充笟鍔¤〃");
-		}
-		return businessTable;
-	}
-
-	/**
-	 * 鑾峰彇涓氬姟鏍囪瘑
-	 *
-	 * @param businessTable 涓氬姟琛�
-	 * @param businessId    涓氬姟琛ㄤ富閿�
-	 * @return businessKey
-	 */
-	public static String getBusinessKey(String businessTable, String businessId) {
-		return StringUtil.format("{}:{}", businessTable, businessId);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/TaskUtil.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/TaskUtil.java
deleted file mode 100644
index 3366224..0000000
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/TaskUtil.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.core.utils;
-
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-
-import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
-
-/**
- * 宸ヤ綔娴佷换鍔″伐鍏风被
- *
- * @author Chill
- */
-public class TaskUtil {
-
-	/**
-	 * 鑾峰彇浠诲姟鐢ㄦ埛鏍煎紡
-	 *
-	 * @return taskUser
-	 */
-	public static String getTaskUser() {
-		return StringUtil.format("{}{}", TASK_USR_PREFIX, AuthUtil.getUserId());
-	}
-
-	/**
-	 * 鑾峰彇浠诲姟鐢ㄦ埛鏍煎紡
-	 *
-	 * @param userId 鐢ㄦ埛id
-	 * @return taskUser
-	 */
-	public static String getTaskUser(String userId) {
-		return StringUtil.format("{}{}", TASK_USR_PREFIX, userId);
-	}
-
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛涓婚敭
-	 *
-	 * @param taskUser 浠诲姟鐢ㄦ埛
-	 * @return userId
-	 */
-	public static Long getUserId(String taskUser) {
-		return Func.toLong(StringUtil.removePrefix(taskUser, TASK_USR_PREFIX));
-	}
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛缁勬牸寮�
-	 *
-	 * @return candidateGroup
-	 */
-	public static String getCandidateGroup() {
-		return AuthUtil.getUserRole();
-	}
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/pom.xml b/Source/BladeX/blade-ops-api/blade-resource-api/pom.xml
deleted file mode 100644
index 31db0ab..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-Autowired-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-sms</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-tenant</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java
deleted file mode 100644
index 6cb3657..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 闄勪欢琛ㄥ疄浣撶被
- *
- * @author Chill
- */
-@Data
-@TableName("pl_attach")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Attach瀵硅薄", description = "闄勪欢琛�")
-public class Attach extends TenantEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 闄勪欢鍦板潃
-	 */
-	@ApiModelProperty(value = "闄勪欢鍦板潃")
-	private String link;
-	/**
-	 * 闄勪欢鍩熷悕
-	 */
-	@ApiModelProperty(value = "闄勪欢鍩熷悕")
-	private String domainUrl;
-	/**
-	 * 闄勪欢鍚嶇О
-	 */
-	@ApiModelProperty(value = "闄勪欢鍚嶇О")
-	private String name;
-	/**
-	 * 闄勪欢鍘熷悕
-	 */
-	@ApiModelProperty(value = "闄勪欢鍘熷悕")
-	private String originalName;
-	/**
-	 * 闄勪欢鎷撳睍鍚�
-	 */
-	@ApiModelProperty(value = "闄勪欢鎷撳睍鍚�")
-	private String extension;
-	/**
-	 * 闄勪欢澶у皬
-	 */
-	@ApiModelProperty(value = "闄勪欢澶у皬")
-	private Long attachSize;
-
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java
deleted file mode 100644
index f390e56..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 瀹炰綋绫�
- *
- * @author BladeX
- */
-@Data
-@TableName("pl_sys_oss")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Oss瀵硅薄", description = "Oss瀵硅薄")
-public class Oss extends TenantEntity {
-
-	private static final long serialVersionUID = 1L;
-	/**
-	 * 鎵�灞炲垎绫�
-	 */
-	@ApiModelProperty(value = "鎵�灞炲垎绫�")
-	private Integer category;
-
-	/**
-	 * 璧勬簮缂栧彿
-	 */
-	@ApiModelProperty(value = "璧勬簮缂栧彿")
-	private String ossCode;
-
-	/**
-	 * oss鍦板潃
-	 */
-	@ApiModelProperty(value = "璧勬簮鍦板潃")
-	private String endpoint;
-	/**
-	 * accessKey
-	 */
-	@ApiModelProperty(value = "accessKey")
-	private String accessKey;
-	/**
-	 * secretKey
-	 */
-	@ApiModelProperty(value = "secretKey")
-	private String secretKey;
-	/**
-	 * 绌洪棿鍚�
-	 */
-	@ApiModelProperty(value = "绌洪棿鍚�")
-	private String bucketName;
-	/**
-	 * 搴旂敤ID TencentCOS闇�瑕�
-	 */
-	@ApiModelProperty(value = "搴旂敤ID")
-	private String appId;
-	/**
-	 * 鍦板煙绠�绉� TencentCOS闇�瑕�
-	 */
-	@ApiModelProperty(value = "鍦板煙绠�绉�")
-	private String region;
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java
deleted file mode 100644
index 3d8008c..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 鐭俊閰嶇疆琛ㄥ疄浣撶被
- *
- * @author BladeX
- */
-@Data
-@TableName("pl_sys_sms")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Sms瀵硅薄", description = "鐭俊閰嶇疆琛�")
-public class Sms extends TenantEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 璧勬簮缂栧彿
-	 */
-	@ApiModelProperty(value = "璧勬簮缂栧彿")
-	private String smsCode;
-
-	/**
-	 * 妯℃澘ID
-	 */
-	@ApiModelProperty(value = "妯℃澘ID")
-	private String templateId;
-	/**
-	 * 鍒嗙被
-	 */
-	@ApiModelProperty(value = "鍒嗙被")
-	private Integer category;
-	/**
-	 * accessKey
-	 */
-	@ApiModelProperty(value = "accessKey")
-	private String accessKey;
-	/**
-	 * secretKey
-	 */
-	@ApiModelProperty(value = "secretKey")
-	private String secretKey;
-	/**
-	 * regionId
-	 */
-	@ApiModelProperty(value = "regionId")
-	private String regionId;
-	/**
-	 * 鐭俊绛惧悕
-	 */
-	@ApiModelProperty(value = "鐭俊绛惧悕")
-	private String signName;
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/enums/SmsCodeEnum.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/enums/SmsCodeEnum.java
deleted file mode 100644
index d04f7ab..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/enums/SmsCodeEnum.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import org.springblade.core.tool.utils.StringPool;
-
-/**
- * Sms璧勬簮缂栫爜鏋氫妇绫�
- *
- * @author Chill
- * @apiNote 璇ユ灇涓剧被瀵瑰簲鐭俊閰嶇疆妯″潡鐨勮祫婧愮紪鐮侊紝鍙牴鎹笟鍔¢渶姹傝嚜琛屾嫇灞�
- */
-@Getter
-@AllArgsConstructor
-public enum SmsCodeEnum {
-
-	/**
-	 * 榛樿缂栧彿
-	 */
-	DEFAULT(StringPool.EMPTY, 1),
-
-	/**
-	 * 楠岃瘉鐮佺紪鍙�
-	 */
-	VALIDATE("validate", 2),
-
-	/**
-	 * 閫氱煡鍏憡缂栧彿
-	 */
-	NOTICE("notice", 3),
-
-	/**
-	 * 涓嬪崟閫氱煡缂栧彿
-	 */
-	ORDER("order", 4),
-
-	/**
-	 * 浼氳閫氱煡缂栧彿
-	 */
-	MEETING("meeting", 5),
-	;
-
-	final String name;
-	final int category;
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClient.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClient.java
deleted file mode 100644
index d251263..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClient.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.resource.feign;
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.sms.model.SmsResponse;
-import org.springblade.core.tool.api.R;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-/**
- * ISmsClient
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_RESOURCE_NAME,
-	fallback = ISmsClientFallback.class
-)
-public interface ISmsClient {
-	String API_PREFIX = "/client";
-	String SEND_MESSAGE = API_PREFIX + "/send-message";
-	String SEND_VALIDATE = API_PREFIX + "/send-validate";
-	String VALIDATE_MESSAGE = API_PREFIX + "/validate-message";
-
-	/**
-	 * 閫氱敤鐭俊鍙戦��
-	 *
-	 * @param code   璧勬簮缂栧彿
-	 * @param params 妯℃澘鍙傛暟
-	 * @param phones 鎵嬫満鍙烽泦鍚�
-	 * @return R
-	 */
-	@PostMapping(SEND_MESSAGE)
-	R<SmsResponse> sendMessage(@RequestParam("code") String code, @RequestParam("params") String params, @RequestParam("phones") String phones);
-
-	/**
-	 * 鐭俊楠岃瘉鐮佸彂閫�
-	 *
-	 * @param code  璧勬簮缂栧彿
-	 * @param phone 鎵嬫満鍙�
-	 * @return R
-	 */
-	@PostMapping(SEND_VALIDATE)
-	R sendValidate(@RequestParam("code") String code, @RequestParam("phone") String phone);
-
-	/**
-	 * 鏍¢獙鐭俊
-	 *
-	 * @param code  璧勬簮缂栧彿
-	 * @param id    鏍¢獙id
-	 * @param value 鏍¢獙鍊�
-	 * @param phone 鎵嬫満鍙�
-	 * @return R
-	 */
-	@PostMapping(VALIDATE_MESSAGE)
-	R validateMessage(@RequestParam("code") String code, @RequestParam("id") String id, @RequestParam("value") String value, @RequestParam("phone") String phone);
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClientFallback.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClientFallback.java
deleted file mode 100644
index f139fea..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClientFallback.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.resource.feign;
-
-import org.springblade.core.tool.api.R;
-import org.springframework.stereotype.Component;
-
-/**
- * 娴佺▼杩滅▼璋冪敤澶辫触澶勭悊绫�
- *
- * @author Chill
- */
-@Component
-public class ISmsClientFallback implements ISmsClient {
-	@Override
-	public R sendMessage(String code, String params, String phones) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-	@Override
-	public R sendValidate(String code, String phone) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-	@Override
-	public R validateMessage(String code, String id, String value, String phone) {
-		return R.fail("杩滅▼璋冪敤澶辫触");
-	}
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/utils/SmsUtil.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/utils/SmsUtil.java
deleted file mode 100644
index 71753dd..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/utils/SmsUtil.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.utils;
-
-import org.springblade.core.sms.model.SmsCode;
-import org.springblade.core.sms.model.SmsResponse;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.jackson.JsonUtil;
-import org.springblade.core.tool.utils.RandomType;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.resource.feign.ISmsClient;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 鐭俊鏈嶅姟宸ュ叿绫�
- *
- * @author Chill
- */
-public class SmsUtil {
-
-	public static final String PARAM_KEY = "code";
-	public static final String SEND_SUCCESS = "鐭俊鍙戦�佹垚鍔�";
-	public static final String SEND_FAIL = "鐭俊鍙戦�佸け璐�";
-	public static final String VALIDATE_SUCCESS = "鐭俊鏍¢獙鎴愬姛";
-	public static final String VALIDATE_FAIL = "鐭俊鏍¢獙澶辫触";
-
-	private static ISmsClient smsClient;
-
-	/**
-	 * 鑾峰彇鐭俊鏈嶅姟鏋勫缓绫�
-	 *
-	 * @return SmsBuilder
-	 */
-	public static ISmsClient getSmsClient() {
-		if (smsClient == null) {
-			smsClient = SpringUtil.getBean(ISmsClient.class);
-		}
-		return smsClient;
-	}
-
-	/**
-	 * 鑾峰彇鐭俊楠岃瘉鐮佸弬鏁�
-	 *
-	 * @return 楠岃瘉鐮佸弬鏁�
-	 */
-	public static Map<String, String> getValidateParams() {
-		Map<String, String> params = new HashMap<>(1);
-		params.put(PARAM_KEY, StringUtil.random(6, RandomType.INT));
-		return params;
-	}
-
-	/**
-	 * 鍙戦�佺煭淇�
-	 *
-	 * @param code   璧勬簮缂栧彿
-	 * @param params 妯℃澘鍙傛暟
-	 * @param phones 鎵嬫満鍙烽泦鍚�
-	 * @return 鍙戦�佺粨鏋�
-	 */
-	public static SmsResponse sendMessage(String code, Map<String, String> params, String phones) {
-		R<SmsResponse> result = getSmsClient().sendMessage(code, JsonUtil.toJson(params), phones);
-		return result.getData();
-	}
-
-	/**
-	 * 鍙戦�侀獙璇佺爜
-	 *
-	 * @param code  璧勬簮缂栧彿
-	 * @param phone 鎵嬫満鍙�
-	 * @return 鍙戦�佺粨鏋�
-	 */
-	public static SmsCode sendValidate(String code, String phone) {
-		SmsCode smsCode = new SmsCode();
-		R result = getSmsClient().sendValidate(code, phone);
-		if (result.isSuccess()) {
-			smsCode = JsonUtil.parse(JsonUtil.toJson(result.getData()), SmsCode.class);
-		} else {
-			smsCode.setSuccess(Boolean.FALSE);
-		}
-		return smsCode;
-	}
-
-	/**
-	 * 鏍¢獙鐭俊
-	 *
-	 * @param code  璧勬簮缂栧彿
-	 * @param id    鏍¢獙id
-	 * @param value 鏍¢獙鍊�
-	 * @return 鍙戦�佺粨鏋�
-	 */
-	public static boolean validateMessage(String code, String id, String value, String phone) {
-		R result = getSmsClient().validateMessage(code, id, value, phone);
-		return result.isSuccess();
-	}
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/AttachVO.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/AttachVO.java
deleted file mode 100644
index 2c9dd80..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/AttachVO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.Autowired.entity.Attach;
-
-/**
- * 闄勪欢琛ㄨ鍥惧疄浣撶被
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "AttachVO瀵硅薄", description = "闄勪欢琛�")
-public class AttachVO extends Attach {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/OssVO.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/OssVO.java
deleted file mode 100644
index a05d56e..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/OssVO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.springblade.Autowired.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.Autowired.entity.Oss;
-
-/**
- * OssVO
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "OssVO瀵硅薄", description = "瀵硅薄瀛樺偍琛�")
-public class OssVO extends Oss {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鍒嗙被鍚�
-	 */
-	private String categoryName;
-
-	/**
-	 * 鏄惁鍚敤
-	 */
-	private String statusName;
-
-}
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/SmsVO.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/SmsVO.java
deleted file mode 100644
index 89dbc1f..0000000
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/SmsVO.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.Autowired.entity.Sms;
-
-/**
- * 鐭俊閰嶇疆琛ㄨ鍥惧疄浣撶被
- *
- * @author BladeX
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "SmsVO瀵硅薄", description = "鐭俊閰嶇疆琛�")
-public class SmsVO extends Sms {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鍒嗙被鍚�
-	 */
-	private String categoryName;
-
-	/**
-	 * 鏄惁鍚敤
-	 */
-	private String statusName;
-
-}
diff --git a/Source/BladeX/blade-ops-api/pom.xml b/Source/BladeX/blade-ops-api/pom.xml
deleted file mode 100644
index 5a98474..0000000
--- a/Source/BladeX/blade-ops-api/pom.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>UBCS</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-ops-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>3.0.1.RELEASE</version>
-    <packaging>pom</packaging>
-    <description>BladeX 寰湇鍔PI闆嗗悎</description>
-
-    <modules>
-        <module>blade-flow-api</module>
-        <module>blade-resource-api</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-mybatis</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-openfeign</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-auto</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <skip>true</skip>
-                    <finalName>${project.name}</finalName>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-admin/pom.xml b/Source/BladeX/blade-ops/blade-admin/pom.xml
deleted file mode 100644
index cf68645..0000000
--- a/Source/BladeX/blade-ops/blade-admin/pom.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-admin</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springblade</groupId>
-                    <artifactId>blade-core-launch</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-launch</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-web</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-undertow</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-prometheus</artifactId>
-        </dependency>
-        <!-- Nacos -->
-        <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.alibaba.nacos</groupId>
-                    <artifactId>nacos-client</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.alibaba.nacos</groupId>
-                    <artifactId>nacos-client</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.nacos</groupId>
-            <artifactId>nacos-client</artifactId>
-        </dependency>
-        <!--Admin-Server-->
-        <dependency>
-            <groupId>de.codecentric</groupId>
-            <artifactId>spring-boot-admin-starter-server</artifactId>
-        </dependency>
-        <!--Security-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-security</artifactId>
-        </dependency>
-        <!--<dependency>
-            <groupId>org.springframework.security.oauth.boot</groupId>
-            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
-        </dependency>-->
-        <!--Taobao-Sdk-->
-        <dependency>
-            <groupId>com.taobao</groupId>
-            <artifactId>taobao-sdk</artifactId>
-            <version>20201116</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/AdminApplication.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/AdminApplication.java
deleted file mode 100644
index c219dc8..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/AdminApplication.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.admin;
-
-import de.codecentric.boot.admin.server.config.EnableAdminServer;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
-/**
- * admin鍚姩鍣�
- *
- * @author Chill
- */
-@EnableAdminServer
-@EnableDiscoveryClient
-@SpringBootApplication
-public class AdminApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_ADMIN_NAME, AdminApplication.class, args);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/AdminConfiguration.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/AdminConfiguration.java
deleted file mode 100644
index 2f632b4..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/AdminConfiguration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.admin.config;
-
-import org.springblade.admin.dingtalk.MonitorProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 鍚姩鍣�
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@EnableConfigurationProperties(MonitorProperties.class)
-public class AdminConfiguration {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/DingTalkConfiguration.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/DingTalkConfiguration.java
deleted file mode 100644
index d726cf9..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/DingTalkConfiguration.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.admin.config;
-
-import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
-import org.springblade.admin.dingtalk.DingTalkNotifier;
-import org.springblade.admin.dingtalk.DingTalkService;
-import org.springblade.admin.dingtalk.MonitorProperties;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.Environment;
-import org.springframework.web.reactive.function.client.WebClient;
-
-/**
- * 閽夐拤鑷姩閰嶇疆
- *
- * @author L.cm
- */
-@Configuration(proxyBeanMethods = false)
-@ConditionalOnProperty(value = "monitor.ding-talk.enabled", havingValue = "true")
-public class DingTalkConfiguration {
-
-	@Bean
-	public DingTalkService dingTalkService(MonitorProperties properties,
-										   WebClient.Builder builder) {
-		return new DingTalkService(properties, builder.build());
-	}
-
-	@Bean
-	public DingTalkNotifier dingTalkNotifier(MonitorProperties properties,
-											 DingTalkService dingTalkService,
-											 InstanceRepository repository,
-											 Environment environment) {
-		return new DingTalkNotifier(dingTalkService, properties, environment, repository);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/SecurityConfiguration.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/SecurityConfiguration.java
deleted file mode 100644
index be9708c..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/SecurityConfiguration.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.admin.config;
-
-import de.codecentric.boot.admin.server.config.AdminServerProperties;
-import org.springblade.admin.security.InternalAuthorizationManager;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
-import org.springframework.security.config.web.server.ServerHttpSecurity;
-import org.springframework.security.web.server.SecurityWebFilterChain;
-import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
-
-import java.net.URI;
-
-/**
- * 鐩戞帶瀹夊叏閰嶇疆
- *
- * @author L.cm
- */
-@EnableWebFluxSecurity
-@Configuration(proxyBeanMethods = false)
-@EnableConfigurationProperties(AdminServerProperties.class)
-public class SecurityConfiguration {
-	private final String contextPath;
-
-	public SecurityConfiguration(AdminServerProperties adminServerProperties) {
-		this.contextPath = adminServerProperties.getContextPath();
-	}
-
-	@Bean
-	public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
-		// @formatter:off
-		RedirectServerAuthenticationSuccessHandler successHandler = new RedirectServerAuthenticationSuccessHandler();
-		successHandler.setLocation(URI.create(contextPath + "/"));
-		return http.headers().frameOptions().disable().and()
-			.authorizeExchange()
-			// 鏀惧紑闈欐�佹枃浠跺拰鐧婚檰
-			.pathMatchers(
-				contextPath + "/assets/**"
-				, contextPath + "/login"
-				, contextPath + "/v1/agent/**"
-				, contextPath + "/v1/catalog/**"
-				, contextPath + "/v1/health/**"
-			).permitAll()
-			// 鍐呯綉鍙闂� actuator
-			.pathMatchers(contextPath + "/actuator", contextPath + "/actuator/**").access(new InternalAuthorizationManager())
-			.anyExchange().authenticated().and()
-			.formLogin().loginPage(contextPath + "/login")
-			.authenticationSuccessHandler(successHandler).and()
-			.logout().logoutUrl(contextPath + "/logout").and()
-			.httpBasic().disable()
-			.csrf().disable()
-			.build();
-		// @formatter:on
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkNotifier.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkNotifier.java
deleted file mode 100644
index 8b66a1c..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkNotifier.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.admin.dingtalk;
-
-import de.codecentric.boot.admin.server.domain.entities.Instance;
-import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
-import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
-import de.codecentric.boot.admin.server.domain.events.InstanceStatusChangedEvent;
-import de.codecentric.boot.admin.server.domain.values.Registration;
-import de.codecentric.boot.admin.server.domain.values.StatusInfo;
-import de.codecentric.boot.admin.server.notify.AbstractEventNotifier;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.env.Environment;
-import org.springframework.lang.NonNull;
-import reactor.core.publisher.Mono;
-
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-
-/**
- * 鏈嶅姟涓婁笅绾垮憡璀�
- *
- * <p>
- * 娉ㄦ剰锛欰bstractStatusChangeNotifier 杩欎釜浜嬩欢鏈夋瘺鐥�
- * </p>
- *
- * @author L.cm
- */
-@Slf4j
-public class DingTalkNotifier extends AbstractEventNotifier {
-	private final DingTalkService dingTalkService;
-	private final MonitorProperties properties;
-	private final Environment environment;
-	public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-
-	public DingTalkNotifier(DingTalkService dingTalkService, MonitorProperties properties,
-							Environment environment, InstanceRepository repository) {
-		super(repository);
-		this.dingTalkService = dingTalkService;
-		this.properties = properties;
-		this.environment = environment;
-	}
-
-	@NonNull
-	@Override
-	protected Mono<Void> doNotify(@NonNull InstanceEvent event, @NonNull Instance instance) {
-		if (event instanceof InstanceStatusChangedEvent) {
-			// 鏋勯�犺姹傜粨鏋�
-			return createAndPushMsg(event, instance);
-		}
-		return Mono.empty();
-	}
-
-	private Mono<Void> createAndPushMsg(InstanceEvent event, Instance instance) {
-		Registration registration = instance.getRegistration();
-		// 鏈嶅姟鍚�
-		String appName = registration.getName();
-		// 鏈嶅姟鍦板潃
-		String serviceUrl = registration.getServiceUrl();
-		StatusInfo status = instance.getStatusInfo();
-		// 鏃堕棿
-		LocalDateTime localDateTime = LocalDateTime.ofInstant(event.getTimestamp(), ZoneId.systemDefault());
-		MonitorProperties.DingTalk dingTalk = properties.getDingTalk();
-		String title = dingTalk.getService().getTitle();
-
-		String message = "## **" + title + "**\n" +
-			"#### **銆愭湇鍔°��** " + appName + "\n" +
-			"#### **銆愮幆澧冦��** " + environment.getActiveProfiles()[0] + "\n" +
-			"#### **銆愬湴鍧�銆�** " + serviceUrl + "\n" +
-			"#### **銆愮姸鎬併��** " + statusCn(status) + "\n" +
-			"#### **銆愭椂闂淬��** " + DATETIME_FORMATTER.format(localDateTime) + "\n" +
-			"#### **銆愯鎯呫��** " + dingTalk.getLink() + "\n";
-
-		return dingTalkService.pushMsg(title, message);
-	}
-
-	private String statusCn(StatusInfo status) {
-		if (status.isUp()) {
-			return "搴旂敤涓婄嚎锛圛S UP锛�";
-		} else if (status.isDown()) {
-			return "搴旂敤瀹曟満锛圛S DOWN锛�";
-		} else if (status.isOffline()) {
-			return "搴旂敤鎺夌嚎锛圛S OFFLINE锛�";
-		} else if (status.isUnknown()) {
-			return "鏈煡鐘舵�侊紙UNKNOWN锛�";
-		} else {
-			return "寮傚父鐘舵��";
-		}
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkService.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkService.java
deleted file mode 100644
index 29bed73..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkService.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.admin.dingtalk;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.util.Base64Utils;
-import org.springframework.util.StringUtils;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.client.WebClient;
-import org.springframework.web.util.UriUtils;
-import reactor.core.publisher.Mono;
-
-import javax.crypto.Mac;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.SecretKeySpec;
-import java.net.URI;
-import java.nio.charset.StandardCharsets;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 閽夐拤 鏈嶅姟
- *
- * @author L.cm
- */
-@Slf4j
-@RequiredArgsConstructor
-public class DingTalkService {
-	private static final String DING_TALK_ROBOT_URL = "https://oapi.dingtalk.com/robot/send?access_token=";
-	private final MonitorProperties properties;
-	private final WebClient webClient;
-
-	/**
-	 * 鍙戦�佹秷鎭�
-	 *
-	 * @param title title
-	 * @param text  娑堟伅
-	 */
-	public Mono<Void> pushMsg(String title, String text) {
-		log.info("閽夐拤娑堟伅锛歔鍒涘缓娑堟伅浣揮title:{}, text:{}", title, text);
-
-		HashMap<String, String> params = new HashMap<>(2);
-		params.put("title", title);
-		params.put("text", text);
-
-		Map<String, Object> body = new HashMap<>(2);
-		body.put("msgtype", "markdown");
-		body.put("markdown", params);
-		log.info("鍒涘缓娑堟伅浣� json锛歿}", body);
-
-		MonitorProperties.DingTalk dingTalk = properties.getDingTalk();
-		String accessToken = dingTalk.getAccessToken();
-		if (!StringUtils.hasText(accessToken)) {
-			log.error("DingTalk alert config accessToken ${monitor.ding-talk.access-token} is blank.");
-			return Mono.empty();
-		}
-
-		String urlString = DING_TALK_ROBOT_URL + dingTalk.getAccessToken();
-		// 鏈夌閽ヨ绛惧悕
-		String secret = dingTalk.getSecret();
-		if (StringUtils.hasText(secret)) {
-			long timestamp = System.currentTimeMillis();
-			urlString += String.format("&timestamp=%s&sign=%s", timestamp, getSign(secret, timestamp));
-		}
-		return webClient.post()
-			.uri(URI.create(urlString))
-			.contentType(MediaType.APPLICATION_JSON)
-			.body(BodyInserters.fromValue(body))
-			.retrieve()
-			.bodyToMono(String.class)
-			.doOnSuccess((result) -> log.info("閽夐拤娑堟伅锛歔娑堟伅杩斿洖]result:{}", result))
-			.then();
-	}
-
-	private static String getSign(String secret, long timestamp) {
-		String stringToSign = timestamp + "\n" + secret;
-		byte[] hmacSha256Bytes = digestHmac(stringToSign, secret);
-		return UriUtils.encode(Base64Utils.encodeToString(hmacSha256Bytes), StandardCharsets.UTF_8);
-	}
-
-	public static byte[] digestHmac(String data, String key) {
-		SecretKey secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
-		try {
-			Mac mac = Mac.getInstance(secretKey.getAlgorithm());
-			mac.init(secretKey);
-			return mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
-		} catch (NoSuchAlgorithmException | InvalidKeyException e) {
-			throw new RuntimeException(e.getMessage());
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/MonitorProperties.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/MonitorProperties.java
deleted file mode 100644
index 71b9970..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/MonitorProperties.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.admin.dingtalk;
-
-
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-
-/**
- * 鐩戞帶閰嶇疆
- *
- * @author L.cm
- */
-@Getter
-@Setter
-@RefreshScope
-@ConfigurationProperties("monitor")
-public class MonitorProperties {
-	private DingTalk dingTalk = new DingTalk();
-
-	@Getter
-	@Setter
-	public static class DingTalk {
-		/**
-		 * 鍚敤閽夐拤鍛婅锛岄粯璁や负 true
-		 */
-		private boolean enabled = false;
-		/**
-		 * 閽夐拤鏈哄櫒浜� token
-		 */
-		private String accessToken;
-		/**
-		 * 绛惧悕锛氬鏋滄湁 secret 鍒欒繘琛岀鍚嶏紝鍏煎鑰佹帴鍙�
-		 */
-		private String secret;
-		/**
-		 * 鍦板潃閰嶇疆
-		 */
-		private String link;
-		private Service service = new Service();
-	}
-
-	@Getter
-	@Setter
-	public static class Service {
-		/**
-		 * 鏈嶅姟 鐘舵�� title
-		 */
-		private String title = "鏈嶅姟鐘舵�侀�氱煡";
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/security/InternalAuthorizationManager.java b/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/security/InternalAuthorizationManager.java
deleted file mode 100644
index 1fbadc1..0000000
--- a/Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/security/InternalAuthorizationManager.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, DreamLu All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
- */
-package org.springblade.admin.security;
-
-import org.springblade.core.launch.utils.INetUtil;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.security.authorization.AuthorizationDecision;
-import org.springframework.security.authorization.ReactiveAuthorizationManager;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.server.authorization.AuthorizationContext;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Mono;
-
-import java.net.InetSocketAddress;
-import java.util.Optional;
-
-/**
- * 鍐呯綉璁よ瘉绠$悊锛屽唴缃戞斁琛岋紝澶栫綉璁よ瘉
- *
- * @author L.cm
- */
-public class InternalAuthorizationManager implements ReactiveAuthorizationManager<AuthorizationContext> {
-	private static final String HEADER_X_FORWARDED_FOR = "X-Forwarded-For";
-
-	@Override
-	public Mono<AuthorizationDecision> check(Mono<Authentication> authentication, AuthorizationContext context) {
-		return Mono.just(getAuthorizationDecision(context));
-	}
-
-	private static AuthorizationDecision getAuthorizationDecision(AuthorizationContext context) {
-		return new AuthorizationDecision(isInternalNet(context));
-	}
-
-	/**
-	 * 鍒ゆ柇鏄惁鍐呯綉 ip 璇锋眰
-	 *
-	 * @param context AuthorizationContext
-	 * @return 鏄惁鍐呯綉 ip
-	 */
-	private static boolean isInternalNet(AuthorizationContext context) {
-		ServerHttpRequest request = Optional.ofNullable(context)
-			.map(AuthorizationContext::getExchange)
-			.map(ServerWebExchange::getRequest)
-			.orElse(null);
-		if (request == null) {
-			return false;
-		}
-		HttpHeaders headers = request.getHeaders();
-		// 濡傛灉娌℃湁 X-Forwarded-For 浠h〃涓� admin 鎷夊彇
-		if (!headers.containsKey(HEADER_X_FORWARDED_FOR)) {
-			return true;
-		}
-		return Optional.of(request)
-			.map(ServerHttpRequest::getRemoteAddress)
-			.map(InetSocketAddress::getAddress)
-			.map(INetUtil::isInternalIp)
-			.orElse(false);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/pom.xml b/Source/BladeX/blade-ops/blade-develop/pom.xml
deleted file mode 100644
index a1f1954..0000000
--- a/Source/BladeX/blade-ops/blade-develop/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <parent>
-        <groupId>org.springblade</groupId>
-        <artifactId>blade-ops</artifactId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-develop</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-develop</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-dict-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/DevelopApplication.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/DevelopApplication.java
deleted file mode 100644
index a69d0e4..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/DevelopApplication.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * Develop鍚姩鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class DevelopApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_DEVELOP_NAME, DevelopApplication.class, args);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/CodeController.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/CodeController.java
deleted file mode 100644
index 95ee5b5..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/CodeController.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.jackson.JsonUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.develop.entity.Code;
-import org.springblade.develop.entity.Datasource;
-import org.springblade.develop.entity.Model;
-import org.springblade.develop.entity.ModelPrototype;
-import org.springblade.develop.service.ICodeService;
-import org.springblade.develop.service.IDatasourceService;
-import org.springblade.develop.service.IModelPrototypeService;
-import org.springblade.develop.service.IModelService;
-import org.springblade.develop.support.BladeCodeGenerator;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/code")
-@Api(value = "浠g爜鐢熸垚", tags = "浠g爜鐢熸垚")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-public class CodeController extends BladeController {
-
-	private final ICodeService codeService;
-	private final IDatasourceService datasourceService;
-	private final IModelService modelService;
-	private final IModelPrototypeService modelPrototypeService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆code")
-	public R<Code> detail(Code code) {
-		Code detail = codeService.getOne(Condition.getQueryWrapper(code));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "codeName", value = "妯″潡鍚�", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "tableName", value = "琛ㄥ悕", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "modelName", value = "瀹炰綋鍚�", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆code")
-	public R<IPage<Code>> list(@ApiIgnore @RequestParam Map<String, Object> code, Query query) {
-		IPage<Code> pages = codeService.page(Condition.getPage(query), Condition.getQueryWrapper(code, Code.class));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆code")
-	public R submit(@Valid @RequestBody Code code) {
-		return R.status(codeService.submit(code));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(codeService.removeByIds(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 澶嶅埗
-	 */
-	@PostMapping("/copy")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "澶嶅埗", notes = "浼犲叆id")
-	public R copy(@ApiParam(value = "涓婚敭", required = true) @RequestParam Long id) {
-		Code code = codeService.getById(id);
-		code.setId(null);
-		code.setCodeName(code.getCodeName() + "-copy");
-		return R.status(codeService.save(code));
-	}
-
-	/**
-	 * 浠g爜鐢熸垚
-	 */
-	@PostMapping("/gen-code")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "浠g爜鐢熸垚", notes = "浼犲叆ids")
-	public R genCode(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		Collection<Code> codes = codeService.listByIds(Func.toLongList(ids));
-		codes.forEach(code -> {
-			BladeCodeGenerator generator = new BladeCodeGenerator();
-			// 璁剧疆鍩虹妯″瀷
-			Model model = modelService.getById(code.getModelId());
-			generator.setModelCode(model.getModelCode());
-			generator.setModelClass(model.getModelClass());
-			// 璁剧疆妯″瀷闆嗗悎
-			List<ModelPrototype> prototypes = modelPrototypeService.prototypeList(model.getId());
-			generator.setModel(JsonUtil.readMap(JsonUtil.toJson(model)));
-			generator.setPrototypes(JsonUtil.readListMap(JsonUtil.toJson(prototypes)));
-			if (StringUtil.isNotBlank(code.getSubModelId())) {
-				Model subModel = modelService.getById(Func.toLong(code.getSubModelId()));
-				List<ModelPrototype> subPrototypes = modelPrototypeService.prototypeList(subModel.getId());
-				generator.setSubModel(JsonUtil.readMap(JsonUtil.toJson(subModel)));
-				generator.setSubPrototypes(JsonUtil.readListMap(JsonUtil.toJson(subPrototypes)));
-			}
-			// 璁剧疆鏁版嵁婧�
-			Datasource datasource = datasourceService.getById(model.getDatasourceId());
-			generator.setDriverName(datasource.getDriverClass());
-			generator.setUrl(datasource.getUrl());
-			generator.setUsername(datasource.getUsername());
-			generator.setPassword(datasource.getPassword());
-			// 璁剧疆鍩虹閰嶇疆
-			generator.setCodeStyle(code.getCodeStyle());
-			generator.setCodeName(code.getCodeName());
-			generator.setServiceName(code.getServiceName());
-			generator.setPackageName(code.getPackageName());
-			generator.setPackageDir(code.getApiPath());
-			generator.setPackageWebDir(code.getWebPath());
-			generator.setTablePrefix(Func.toStrArray(code.getTablePrefix()));
-			generator.setIncludeTables(Func.toStrArray(code.getTableName()));
-			// 璁剧疆妯$増淇℃伅
-			generator.setTemplateType(code.getTemplateType());
-			generator.setAuthor(code.getAuthor());
-			generator.setSubModelId(code.getSubModelId());
-			generator.setSubFkId(code.getSubFkId());
-			generator.setTreeId(code.getTreeId());
-			generator.setTreePid(code.getTreePid());
-			generator.setTreeName(code.getTreeName());
-			// 璁剧疆鏄惁缁ф壙鍩虹涓氬姟瀛楁
-			generator.setHasSuperEntity(code.getBaseMode() == 2);
-			// 璁剧疆鏄惁寮�鍚寘瑁呭櫒妯″紡
-			generator.setHasWrapper(code.getWrapMode() == 2);
-			// 璁剧疆鏄惁寮�鍚繙绋嬭皟鐢ㄦā寮�
-			generator.setHasFeign(code.getFeignMode() == 2);
-			// 璁剧疆鎺у埗鍣ㄦ湇鍔″悕鍓嶇紑
-			generator.setHasServiceName(Boolean.TRUE);
-			// 鍚姩浠g爜鐢熸垚
-			generator.run();
-		});
-		return R.success("浠g爜鐢熸垚鎴愬姛");
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/DatasourceController.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/DatasourceController.java
deleted file mode 100644
index 7956a86..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/DatasourceController.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.develop.entity.Datasource;
-import org.springblade.develop.service.IDatasourceService;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.List;
-
-/**
- * 鏁版嵁婧愰厤缃〃 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/datasource")
-@Api(value = "鏁版嵁婧愰厤缃〃", tags = "鏁版嵁婧愰厤缃〃鎺ュ彛")
-public class DatasourceController extends BladeController {
-
-	private final IDatasourceService datasourceService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆datasource")
-	public R<Datasource> detail(Datasource datasource) {
-		Datasource detail = datasourceService.getOne(Condition.getQueryWrapper(datasource));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉 鏁版嵁婧愰厤缃〃
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆datasource")
-	public R<IPage<Datasource>> list(Datasource datasource, Query query) {
-		IPage<Datasource> pages = datasourceService.page(Condition.getPage(query), Condition.getQueryWrapper(datasource));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 鏁版嵁婧愰厤缃〃
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆datasource")
-	public R save(@Valid @RequestBody Datasource datasource) {
-		return R.status(datasourceService.save(datasource));
-	}
-
-	/**
-	 * 淇敼 鏁版嵁婧愰厤缃〃
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆datasource")
-	public R update(@Valid @RequestBody Datasource datasource) {
-		return R.status(datasourceService.updateById(datasource));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 鏁版嵁婧愰厤缃〃
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆datasource")
-	public R submit(@Valid @RequestBody Datasource datasource) {
-		datasource.setUrl(datasource.getUrl().replace("&amp;", "&"));
-		return R.status(datasourceService.saveOrUpdate(datasource));
-	}
-
-
-	/**
-	 * 鍒犻櫎 鏁版嵁婧愰厤缃〃
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(datasourceService.deleteLogic(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 鏁版嵁婧愬垪琛�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "鏌ヨ鍒楄〃")
-	public R<List<Datasource>> select() {
-		List<Datasource> list = datasourceService.list();
-		return R.data(list);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelController.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelController.java
deleted file mode 100644
index fb52263..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelController.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
-import com.baomidou.mybatisplus.generator.config.StrategyConfig;
-import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
-import com.baomidou.mybatisplus.generator.config.po.TableInfo;
-import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.develop.entity.Datasource;
-import org.springblade.develop.entity.Model;
-import org.springblade.develop.entity.ModelPrototype;
-import org.springblade.develop.service.IDatasourceService;
-import org.springblade.develop.service.IModelPrototypeService;
-import org.springblade.develop.service.IModelService;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.Iterator;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 鏁版嵁妯″瀷琛� 鎺у埗鍣�
- *
- * @author Chill
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/model")
-@Api(value = "鏁版嵁妯″瀷琛�", tags = "鏁版嵁妯″瀷琛ㄦ帴鍙�")
-public class ModelController extends BladeController {
-
-	private final IModelService modelService;
-	private final IModelPrototypeService modelPrototypeService;
-	private final IDatasourceService datasourceService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆model")
-	public R<Model> detail(Model model) {
-		Model detail = modelService.getOne(Condition.getQueryWrapper(model));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉 鏁版嵁妯″瀷琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆model")
-	public R<IPage<Model>> list(Model model, Query query) {
-		IPage<Model> pages = modelService.page(Condition.getPage(query), Condition.getQueryWrapper(model));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 鏁版嵁妯″瀷琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆model")
-	public R save(@Valid @RequestBody Model model) {
-		return R.status(modelService.save(model));
-	}
-
-	/**
-	 * 淇敼 鏁版嵁妯″瀷琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆model")
-	public R update(@Valid @RequestBody Model model) {
-		return R.status(modelService.updateById(model));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 鏁版嵁妯″瀷琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆model")
-	public R submit(@Valid @RequestBody Model model) {
-		return R.status(modelService.saveOrUpdate(model));
-	}
-
-	/**
-	 * 鍒犻櫎 鏁版嵁妯″瀷琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(modelService.deleteLogic(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 妯″瀷鍒楄〃
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "妯″瀷鍒楄〃", notes = "妯″瀷鍒楄〃")
-	public R<List<Model>> select() {
-		List<Model> list = modelService.list();
-		list.forEach(model -> model.setModelName(model.getModelTable() + StringPool.COLON + StringPool.SPACE + model.getModelName()));
-		return R.data(list);
-	}
-
-	/**
-	 * 鑾峰彇鐗╃悊琛ㄥ垪琛�
-	 */
-	@GetMapping("/table-list")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鐗╃悊琛ㄥ垪琛�", notes = "浼犲叆datasourceId")
-	public R<List<TableInfo>> tableList(Long datasourceId) {
-		Datasource datasource = datasourceService.getById(datasourceId);
-		ConfigBuilder config = getConfigBuilder(datasource);
-		List<TableInfo> tableInfoList = config.getTableInfoList().stream()
-			.filter(tableInfo -> !StringUtil.startsWithIgnoreCase(tableInfo.getName(), "ACT_"))
-			.map(tableInfo -> tableInfo.setComment(tableInfo.getName() + StringPool.COLON + tableInfo.getComment()))
-			.collect(Collectors.toList());
-		return R.data(tableInfoList);
-	}
-
-	/**
-	 * 鑾峰彇鐗╃悊琛ㄤ俊鎭�
-	 */
-	@GetMapping("/table-info")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "鐗╃悊琛ㄤ俊鎭�", notes = "浼犲叆model淇℃伅")
-	public R<TableInfo> tableInfo(Long modelId, String tableName, Long datasourceId) {
-		if (StringUtil.isBlank(tableName)) {
-			Model model = modelService.getById(modelId);
-			tableName = model.getModelTable();
-		}
-		TableInfo tableInfo = getTableInfo(tableName, datasourceId);
-		return R.data(tableInfo);
-	}
-
-	/**
-	 * 鑾峰彇瀛楁淇℃伅
-	 */
-	@GetMapping("/model-prototype")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "鐗╃悊琛ㄥ瓧娈典俊鎭�", notes = "浼犲叆modelId涓巇atasourceId")
-	public R modelPrototype(Long modelId, Long datasourceId) {
-		List<ModelPrototype> modelPrototypeList = modelPrototypeService.list(Wrappers.<ModelPrototype>query().lambda().eq(ModelPrototype::getModelId, modelId));
-		if (modelPrototypeList.size() > 0) {
-			return R.data(modelPrototypeList);
-		}
-		Model model = modelService.getById(modelId);
-		String tableName = model.getModelTable();
-		TableInfo tableInfo = getTableInfo(tableName, datasourceId);
-		if (tableInfo != null) {
-			return R.data(tableInfo.getFields());
-		} else {
-			return R.fail("鏈幏寰楃浉鍏宠〃淇℃伅");
-		}
-	}
-
-	/**
-	 * 鑾峰彇琛ㄤ俊鎭�
-	 *
-	 * @param tableName    琛ㄥ悕
-	 * @param datasourceId 鏁版嵁婧愪富閿�
-	 */
-	private TableInfo getTableInfo(String tableName, Long datasourceId) {
-		Datasource datasource = datasourceService.getById(datasourceId);
-		ConfigBuilder config = getConfigBuilder(datasource);
-		List<TableInfo> tableInfoList = config.getTableInfoList();
-		TableInfo tableInfo = null;
-		Iterator<TableInfo> iterator = tableInfoList.stream().filter(table -> table.getName().equals(tableName)).collect(Collectors.toList()).iterator();
-		if (iterator.hasNext()) {
-			tableInfo = iterator.next();
-			tableInfo.setEntityName(tableInfo.getEntityName().replace(StringUtil.firstCharToUpper(tableName.split(StringPool.UNDERSCORE)[0]), StringPool.EMPTY));
-		}
-		return tableInfo;
-	}
-
-	/**
-	 * 鑾峰彇琛ㄩ厤缃俊鎭�
-	 *
-	 * @param datasource 鏁版嵁婧愪俊鎭�
-	 */
-	private ConfigBuilder getConfigBuilder(Datasource datasource) {
-		StrategyConfig strategyConfig = new StrategyConfig.Builder()
-			.entityBuilder()
-			.naming(NamingStrategy.underline_to_camel)
-			.columnNaming(NamingStrategy.underline_to_camel).build();
-		DataSourceConfig datasourceConfig = new DataSourceConfig.Builder(
-			datasource.getUrl(), datasource.getUsername(), datasource.getPassword()
-		).build();
-		return new ConfigBuilder(null, datasourceConfig, strategyConfig, null, null, null);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelPrototypeController.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelPrototypeController.java
deleted file mode 100644
index 4dbc539..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelPrototypeController.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.develop.entity.ModelPrototype;
-import org.springblade.develop.service.IModelPrototypeService;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.List;
-
-/**
- * 鏁版嵁鍘熷瀷琛� 鎺у埗鍣�
- *
- * @author Chill
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/model-prototype")
-@Api(value = "鏁版嵁鍘熷瀷琛�", tags = "鏁版嵁鍘熷瀷琛ㄦ帴鍙�")
-public class ModelPrototypeController extends BladeController {
-
-	private final IModelPrototypeService modelPrototypeService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆modelPrototype")
-	public R<ModelPrototype> detail(ModelPrototype modelPrototype) {
-		ModelPrototype detail = modelPrototypeService.getOne(Condition.getQueryWrapper(modelPrototype));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉 鏁版嵁鍘熷瀷琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆modelPrototype")
-	public R<IPage<ModelPrototype>> list(ModelPrototype modelPrototype, Query query) {
-		IPage<ModelPrototype> pages = modelPrototypeService.page(Condition.getPage(query), Condition.getQueryWrapper(modelPrototype));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 鏁版嵁鍘熷瀷琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆modelPrototype")
-	public R save(@Valid @RequestBody ModelPrototype modelPrototype) {
-		return R.status(modelPrototypeService.save(modelPrototype));
-	}
-
-	/**
-	 * 淇敼 鏁版嵁鍘熷瀷琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆modelPrototype")
-	public R update(@Valid @RequestBody ModelPrototype modelPrototype) {
-		return R.status(modelPrototypeService.updateById(modelPrototype));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 鏁版嵁鍘熷瀷琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆modelPrototype")
-	public R submit(@Valid @RequestBody ModelPrototype modelPrototype) {
-		return R.status(modelPrototypeService.saveOrUpdate(modelPrototype));
-	}
-
-	/**
-	 * 鎵归噺鏂板鎴栦慨鏀� 鏁版嵁鍘熷瀷琛�
-	 */
-	@PostMapping("/submit-list")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鎵归噺鏂板鎴栦慨鏀�", notes = "浼犲叆modelPrototype闆嗗悎")
-	public R submitList(@Valid @RequestBody List<ModelPrototype> modelPrototypes) {
-		return R.status(modelPrototypeService.submitList(modelPrototypes));
-	}
-
-	/**
-	 * 鍒犻櫎 鏁版嵁鍘熷瀷琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(modelPrototypeService.deleteLogic(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 鏁版嵁鍘熷瀷鍒楄〃
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "鏁版嵁鍘熷瀷鍒楄〃", notes = "鏁版嵁鍘熷瀷鍒楄〃")
-	public R<List<ModelPrototype>> select(@ApiParam(value = "鏁版嵁妯″瀷Id", required = true) @RequestParam Long modelId) {
-		List<ModelPrototype> list = modelPrototypeService.list(Wrappers.<ModelPrototype>query().lambda().eq(ModelPrototype::getModelId, modelId));
-		list.forEach(prototype -> prototype.setComment(prototype.getJdbcName() + StringPool.COLON + StringPool.SPACE + prototype.getComment()));
-		return R.data(list);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/dto/ModelDTO.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/dto/ModelDTO.java
deleted file mode 100644
index db2d920..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/dto/ModelDTO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.develop.entity.Model;
-import org.springblade.develop.entity.ModelPrototype;
-
-import java.util.List;
-
-/**
- * 浠g爜妯″瀷DTO
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ModelDTO extends Model {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 浠g爜寤烘ā鍘熷瀷
-	 */
-	private List<ModelPrototype> prototypes;
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java
deleted file mode 100644
index e19fccb..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_code")
-@ApiModel(value = "Code瀵硅薄", description = "Code瀵硅薄")
-public class Code implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鏁版嵁妯″瀷涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鏁版嵁妯″瀷涓婚敭")
-	private Long modelId;
-
-	/**
-	 * 妯″潡鍚嶇О
-	 */
-	@ApiModelProperty(value = "鏈嶅姟鍚嶇О")
-	private String serviceName;
-
-	/**
-	 * 妯″潡鍚嶇О
-	 */
-	@ApiModelProperty(value = "妯″潡鍚嶇О")
-	private String codeName;
-
-	/**
-	 * 琛ㄥ悕
-	 */
-	@ApiModelProperty(value = "琛ㄥ悕")
-	private String tableName;
-
-	/**
-	 * 瀹炰綋鍚�
-	 */
-	@ApiModelProperty(value = "琛ㄥ墠缂�")
-	private String tablePrefix;
-
-	/**
-	 * 涓婚敭鍚�
-	 */
-	@ApiModelProperty(value = "涓婚敭鍚�")
-	private String pkName;
-
-	/**
-	 * 鍚庣鍖呭悕
-	 */
-	@ApiModelProperty(value = "鍚庣鍖呭悕")
-	private String packageName;
-
-	/**
-	 * 妯$増绫诲瀷
-	 */
-	@ApiModelProperty(value = "妯$増绫诲瀷")
-	private String templateType;
-
-	/**
-	 * 浣滆�呬俊鎭�
-	 */
-	@ApiModelProperty(value = "浣滆�呬俊鎭�")
-	private String author;
-
-	/**
-	 * 瀛愯〃妯″瀷涓婚敭
-	 */
-	@ApiModelProperty(value = "瀛愯〃妯″瀷涓婚敭")
-	private String subModelId;
-
-	/**
-	 * 瀛愯〃缁戝畾澶栭敭
-	 */
-	@ApiModelProperty(value = "瀛愯〃缁戝畾澶栭敭")
-	private String subFkId;
-
-	/**
-	 * 鏍戜富閿瓧娈�
-	 */
-	@ApiModelProperty(value = "鏍戜富閿瓧娈�")
-	private String treeId;
-
-	/**
-	 * 鏍戠埗涓婚敭瀛楁
-	 */
-	@ApiModelProperty(value = "鏍戠埗涓婚敭瀛楁")
-	private String treePid;
-
-	/**
-	 * 鏍戝悕绉板瓧娈�
-	 */
-	@ApiModelProperty(value = "鏍戝悕绉板瓧娈�")
-	private String treeName;
-
-	/**
-	 * 鍩虹涓氬姟妯″紡
-	 */
-	@ApiModelProperty(value = "鍩虹涓氬姟妯″紡")
-	private Integer baseMode;
-
-	/**
-	 * 鍖呰鍣ㄦā寮�
-	 */
-	@ApiModelProperty(value = "鍖呰鍣ㄦā寮�")
-	private Integer wrapMode;
-
-	/**
-	 * 杩滅▼璋冪敤妯″紡
-	 */
-	@ApiModelProperty(value = "杩滅▼璋冪敤妯″紡")
-	private Integer feignMode;
-
-	/**
-	 * 浠g爜椋庢牸
-	 */
-	@ApiModelProperty(value = "浠g爜椋庢牸")
-	private String codeStyle;
-
-	/**
-	 * 鍚庣璺緞
-	 */
-	@ApiModelProperty(value = "鍚庣璺緞")
-	private String apiPath;
-
-	/**
-	 * 鍓嶇璺緞
-	 */
-	@ApiModelProperty(value = "鍓嶇璺緞")
-	private String webPath;
-
-	/**
-	 * 鏄惁宸插垹闄�
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "鏄惁宸插垹闄�")
-	private Integer isDeleted;
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java
deleted file mode 100644
index cccc3cb..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import org.springblade.core.mp.base.BaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-/**
- * 鏁版嵁婧愰厤缃〃瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_sys_datasource")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Datasource瀵硅薄", description = "鏁版嵁婧愰厤缃〃")
-public class Datasource extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鍚嶇О
-	 */
-	@ApiModelProperty(value = "鍚嶇О")
-	private String name;
-	/**
-	 * 椹卞姩绫�
-	 */
-	@ApiModelProperty(value = "椹卞姩绫�")
-	private String driverClass;
-	/**
-	 * 杩炴帴鍦板潃
-	 */
-	@ApiModelProperty(value = "杩炴帴鍦板潃")
-	private String url;
-	/**
-	 * 鐢ㄦ埛鍚�
-	 */
-	@ApiModelProperty(value = "鐢ㄦ埛鍚�")
-	private String username;
-	/**
-	 * 瀵嗙爜
-	 */
-	@ApiModelProperty(value = "瀵嗙爜")
-	private String password;
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java
deleted file mode 100644
index db24894..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 鏁版嵁妯″瀷琛ㄥ疄浣撶被
- *
- * @author Chill
- */
-@Data
-@TableName("pl_model")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Model瀵硅薄", description = "鏁版嵁妯″瀷琛�")
-public class Model extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鏁版嵁婧愪富閿�
-	 */
-	@ApiModelProperty(value = "鏁版嵁婧愪富閿�")
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long datasourceId;
-	/**
-	 * 妯″瀷鍚嶇О
-	 */
-	@ApiModelProperty(value = "妯″瀷鍚嶇О")
-	private String modelName;
-	/**
-	 * 妯″瀷缂栧彿
-	 */
-	@ApiModelProperty(value = "妯″瀷缂栧彿")
-	private String modelCode;
-	/**
-	 * 鐗╃悊琛ㄥ悕
-	 */
-	@ApiModelProperty(value = "鐗╃悊琛ㄥ悕")
-	private String modelTable;
-	/**
-	 * 妯″瀷绫诲悕
-	 */
-	@ApiModelProperty(value = "妯″瀷绫诲悕")
-	private String modelClass;
-	/**
-	 * 妯″瀷澶囨敞
-	 */
-	@ApiModelProperty(value = "妯″瀷澶囨敞")
-	private String modelRemark;
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java
deleted file mode 100644
index 285398d..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 鏁版嵁鍘熷瀷琛ㄥ疄浣撶被
- *
- * @author Chill
- */
-@Data
-@TableName("pl_model_prototype")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "ModelPrototype瀵硅薄", description = "鏁版嵁鍘熷瀷琛�")
-public class ModelPrototype extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 妯″瀷涓婚敭
-	 */
-	@ApiModelProperty(value = "妯″瀷涓婚敭")
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long modelId;
-	/**
-	 * 鐗╃悊鍒楀悕
-	 */
-	@ApiModelProperty(value = "鐗╃悊鍒楀悕")
-	private String jdbcName;
-	/**
-	 * 鐗╃悊绫诲瀷
-	 */
-	@ApiModelProperty(value = "鐗╃悊绫诲瀷")
-	private String jdbcType;
-	/**
-	 * 瀹炰綋鍒楀悕
-	 */
-	@ApiModelProperty(value = "瀹炰綋鍒楀悕")
-	private String propertyName;
-	/**
-	 * 瀹炰綋绫诲瀷
-	 */
-	@ApiModelProperty(value = "瀹炰綋绫诲瀷")
-	private String propertyType;
-	/**
-	 * 瀹炰綋绫诲瀷寮曠敤
-	 */
-	@ApiModelProperty(value = "瀹炰綋绫诲瀷寮曠敤")
-	private String propertyEntity;
-	/**
-	 * 娉ㄩ噴璇存槑
-	 */
-	@ApiModelProperty(value = "娉ㄩ噴璇存槑")
-	private String comment;
-	/**
-	 * 鍒楄〃鏄剧ず
-	 */
-	@ApiModelProperty(value = "鍒楄〃鏄剧ず")
-	private Integer isList;
-	/**
-	 * 琛ㄥ崟鏄剧ず
-	 */
-	@ApiModelProperty(value = "琛ㄥ崟鏄剧ず")
-	private Integer isForm;
-	/**
-	 * 鐙崰涓�琛�
-	 */
-	@ApiModelProperty(value = "鐙崰涓�琛�")
-	private Integer isRow;
-	/**
-	 * 缁勪欢绫诲瀷
-	 */
-	@ApiModelProperty(value = "缁勪欢绫诲瀷")
-	private String componentType;
-	/**
-	 * 瀛楀吀缂栫爜
-	 */
-	@ApiModelProperty(value = "瀛楀吀缂栫爜")
-	private String dictCode;
-	/**
-	 * 鏄惁蹇呭~
-	 */
-	@ApiModelProperty(value = "鏄惁蹇呭~")
-	private Integer isRequired;
-	/**
-	 * 鏌ヨ閰嶇疆
-	 */
-	@ApiModelProperty(value = "鏌ヨ閰嶇疆")
-	private Integer isQuery;
-	/**
-	 * 鏌ヨ绫诲瀷
-	 */
-	@ApiModelProperty(value = "鏌ヨ绫诲瀷")
-	private String queryType;
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.java
deleted file mode 100644
index 2ed8614..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.develop.entity.Code;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface CodeMapper extends BaseMapper<Code> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.xml b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.xml
deleted file mode 100644
index 46db551..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.develop.mapper.CodeMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="codeResultMap" type="org.springblade.develop.entity.Code">
-        <id column="id" property="id"/>
-        <result column="datasource_id" property="datasourceId"/>
-        <result column="service_name" property="serviceName"/>
-        <result column="code_name" property="codeName"/>
-        <result column="table_name" property="tableName"/>
-        <result column="pk_name" property="pkName"/>
-        <result column="base_mode" property="baseMode"/>
-        <result column="wrap_mode" property="wrapMode"/>
-        <result column="table_prefix" property="tablePrefix"/>
-        <result column="package_name" property="packageName"/>
-        <result column="api_path" property="apiPath"/>
-        <result column="web_path" property="webPath"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.java
deleted file mode 100644
index 695c692..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.develop.entity.Datasource;
-
-/**
- * 鏁版嵁婧愰厤缃〃 Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface DatasourceMapper extends BaseMapper<Datasource> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.xml b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.xml
deleted file mode 100644
index c863cd4..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.develop.mapper.DatasourceMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="datasourceResultMap" type="org.springblade.develop.entity.Datasource">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="driver_class" property="driverClass"/>
-        <result column="url" property="url"/>
-        <result column="username" property="username"/>
-        <result column="password" property="password"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.java
deleted file mode 100644
index 678cb89..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.develop.entity.Model;
-
-/**
- * 鏁版嵁妯″瀷琛� Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface ModelMapper extends BaseMapper<Model> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.xml b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.xml
deleted file mode 100644
index 7a4f018..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.develop.mapper.ModelMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="modelResultMap" type="org.springblade.develop.entity.Model">
-        <id column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="datasource_id" property="datasourceId"/>
-        <result column="model_name" property="modelName"/>
-        <result column="model_code" property="modelCode"/>
-        <result column="model_table" property="modelTable"/>
-        <result column="model_class" property="modelClass"/>
-        <result column="model_remark" property="modelRemark"/>
-    </resultMap>
-
-
-    <select id="selectModelPage" resultMap="modelResultMap">
-        select * from blade_model where is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.java
deleted file mode 100644
index 6d8d067..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.develop.entity.ModelPrototype;
-
-/**
- * 鏁版嵁鍘熷瀷琛� Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface ModelPrototypeMapper extends BaseMapper<ModelPrototype> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.xml b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.xml
deleted file mode 100644
index f963a58..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.develop.mapper.ModelPrototypeMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="modelPrototypeResultMap" type="org.springblade.develop.entity.ModelPrototype">
-        <id column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="jdbc_name" property="jdbcName"/>
-        <result column="jdbc_type" property="jdbcType"/>
-        <result column="comment" property="comment"/>
-        <result column="property_type" property="propertyType"/>
-        <result column="property_entity" property="propertyEntity"/>
-        <result column="property_name" property="propertyName"/>
-        <result column="is_form" property="isForm"/>
-        <result column="is_row" property="isRow"/>
-        <result column="component_type" property="componentType"/>
-        <result column="dict_code" property="dictCode"/>
-        <result column="is_required" property="isRequired"/>
-        <result column="is_list" property="isList"/>
-        <result column="is_query" property="isQuery"/>
-        <result column="query_type" property="queryType"/>
-    </resultMap>
-
-
-    <select id="selectModelPrototypePage" resultMap="modelPrototypeResultMap">
-        select * from blade_model_prototype where is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/ICodeService.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/ICodeService.java
deleted file mode 100644
index 32bb6d3..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/ICodeService.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.develop.entity.Code;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface ICodeService extends IService<Code> {
-
-	/**
-	 * 鎻愪氦
-	 *
-	 * @param code
-	 * @return
-	 */
-	boolean submit(Code code);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IDatasourceService.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IDatasourceService.java
deleted file mode 100644
index 15080ba..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IDatasourceService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.develop.entity.Datasource;
-
-/**
- * 鏁版嵁婧愰厤缃〃 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IDatasourceService extends BaseService<Datasource> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelPrototypeService.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelPrototypeService.java
deleted file mode 100644
index 98978c5..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelPrototypeService.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.develop.entity.ModelPrototype;
-
-import java.util.List;
-
-/**
- * 鏁版嵁鍘熷瀷琛� 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IModelPrototypeService extends BaseService<ModelPrototype> {
-
-	/**
-	 * 鎵归噺鎻愪氦
-	 *
-	 * @param modelPrototypes 鍘熷瀷闆嗗悎
-	 * @return boolean
-	 */
-	boolean submitList(List<ModelPrototype> modelPrototypes);
-
-	/**
-	 * 鍘熷瀷鍒楄〃
-	 *
-	 * @param modelId 妯″瀷ID
-	 * @return List<ModelPrototype>
-	 */
-	List<ModelPrototype> prototypeList(Long modelId);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelService.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelService.java
deleted file mode 100644
index 20ca46c..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.develop.entity.Model;
-
-/**
- * 鏁版嵁妯″瀷琛� 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IModelService extends BaseService<Model> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/CodeServiceImpl.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/CodeServiceImpl.java
deleted file mode 100644
index 3d58caa..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/CodeServiceImpl.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.develop.entity.Code;
-import org.springblade.develop.mapper.CodeMapper;
-import org.springblade.develop.service.ICodeService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class CodeServiceImpl extends ServiceImpl<CodeMapper, Code> implements ICodeService {
-
-	@Override
-	public boolean submit(Code code) {
-		code.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return saveOrUpdate(code);
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/DatasourceServiceImpl.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/DatasourceServiceImpl.java
deleted file mode 100644
index 31e867e..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/DatasourceServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service.impl;
-
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.develop.entity.Datasource;
-import org.springblade.develop.mapper.DatasourceMapper;
-import org.springblade.develop.service.IDatasourceService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏁版嵁婧愰厤缃〃 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class DatasourceServiceImpl extends BaseServiceImpl<DatasourceMapper, Datasource> implements IDatasourceService {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelPrototypeServiceImpl.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelPrototypeServiceImpl.java
deleted file mode 100644
index c10c1e5..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelPrototypeServiceImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.develop.entity.ModelPrototype;
-import org.springblade.develop.mapper.ModelPrototypeMapper;
-import org.springblade.develop.service.IModelPrototypeService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-/**
- * 鏁版嵁鍘熷瀷琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class ModelPrototypeServiceImpl extends BaseServiceImpl<ModelPrototypeMapper, ModelPrototype> implements IModelPrototypeService {
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean submitList(List<ModelPrototype> modelPrototypes) {
-		modelPrototypes.forEach(modelPrototype -> {
-			if (modelPrototype.getId() == null) {
-				this.save(modelPrototype);
-			} else {
-				this.updateById(modelPrototype);
-			}
-		});
-		return true;
-	}
-
-	@Override
-	public List<ModelPrototype> prototypeList(Long modelId) {
-		return this.list(Wrappers.<ModelPrototype>lambdaQuery().eq(ModelPrototype::getModelId, modelId));
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelServiceImpl.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelServiceImpl.java
deleted file mode 100644
index 6a5613c..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.develop.service.impl;
-
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.develop.entity.Model;
-import org.springblade.develop.mapper.ModelMapper;
-import org.springblade.develop.service.IModelService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏁版嵁妯″瀷琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class ModelServiceImpl extends BaseServiceImpl<ModelMapper, Model> implements IModelService {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java b/Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java
deleted file mode 100644
index 15d8e04..0000000
--- a/Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.test;
-
-
-import org.springblade.develop.constant.DevelopConstant;
-import org.springblade.develop.support.BladeCodeGenerator;
-
-/**
- * 浠g爜鐢熸垚鍣�
- *
- * @author Chill
- */
-public class CodeGenerator {
-
-	/**
-	 * 浠g爜鐢熸垚鐨勬ā鍧楀悕
-	 */
-	public static String CODE_NAME = "璧勬簮绠$悊";
-	/**
-	 * 浠g爜鎵�鍦ㄦ湇鍔″悕
-	 */
-	public static String SERVICE_NAME = "blade-develop";
-	/**
-	 * 浠g爜鐢熸垚鐨勫寘鍚�
-	 */
-	public static String PACKAGE_NAME = "org.springblade.develop";
-	/**
-	 * 鍓嶇浠g爜鐢熸垚椋庢牸
-	 */
-	public static String CODE_STYLE = DevelopConstant.SABER_NAME;
-	/**
-	 * 鍓嶇浠g爜鐢熸垚鍦板潃
-	 */
-	public static String PACKAGE_WEB_DIR = "/Users/chill/Workspaces/product/Saber";
-	/**
-	 * 闇�瑕佸幓鎺夌殑琛ㄥ墠缂�
-	 */
-	public static String[] TABLE_PREFIX = {"blade_"};
-	/**
-	 * 闇�瑕佺敓鎴愮殑琛ㄥ悕(涓よ�呭彧鑳藉彇鍏朵竴)
-	 */
-	public static String[] INCLUDE_TABLES = {"pl_sys_datasource"};
-	/**
-	 * 闇�瑕佹帓闄ょ殑琛ㄥ悕(涓よ�呭彧鑳藉彇鍏朵竴)
-	 */
-	public static String[] EXCLUDE_TABLES = {};
-	/**
-	 * 鏄惁鍖呭惈鍩虹涓氬姟瀛楁
-	 */
-	public static Boolean HAS_SUPER_ENTITY = Boolean.TRUE;
-	/**
-	 * 鏄惁鍖呭惈杩滅▼璋冪敤
-	 */
-	private static Boolean HAS_FEIGN = Boolean.TRUE;
-	/**
-	 * 鍩虹涓氬姟瀛楁
-	 */
-	public static String[] SUPER_ENTITY_COLUMNS = {"id", "create_time", "create_user", "create_dept", "update_time", "update_user", "status", "is_deleted"};
-
-
-	/**
-	 * RUN THIS
-	 */
-	public static void main(String[] args) {
-		BladeCodeGenerator generator = new BladeCodeGenerator();
-		generator.setCodeName(CODE_NAME);
-		generator.setServiceName(SERVICE_NAME);
-		generator.setCodeStyle(CODE_STYLE);
-		generator.setPackageName(PACKAGE_NAME);
-		generator.setPackageWebDir(PACKAGE_WEB_DIR);
-		generator.setTablePrefix(TABLE_PREFIX);
-		generator.setIncludeTables(INCLUDE_TABLES);
-		generator.setExcludeTables(EXCLUDE_TABLES);
-		generator.setHasSuperEntity(HAS_SUPER_ENTITY);
-		generator.setHasFeign(HAS_FEIGN);
-		generator.setSuperEntityColumns(SUPER_ENTITY_COLUMNS);
-		generator.run();
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/pom.xml b/Source/BladeX/blade-ops/blade-flow/pom.xml
deleted file mode 100644
index e863066..0000000
--- a/Source/BladeX/blade-ops/blade-flow/pom.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-flow</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!-- Blade -->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <!--<dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-transaction</artifactId>
-        </dependency>-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-dict-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-scope-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-auto</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-user-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-flow-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <!-- 宸ヤ綔娴� -->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-flowable</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <!--瑙e喅涓嶆敮鎸佺殑瀛楃闆嗛棶棰�-->
-        <dependency>
-            <groupId>com.oracle.database.nls</groupId>
-            <artifactId>orai18n</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/FlowApplication.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/FlowApplication.java
deleted file mode 100644
index 8a00d68..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/FlowApplication.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.cloud.feign.EnableBladeFeign;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * Flowable鍚姩鍣�
- *
- * @author Chill
- */
-//@SeataCloudApplication
-@BladeCloudApplication
-public class FlowApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_FLOW_NAME, FlowApplication.class, args);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java
deleted file mode 100644
index a2c36d2..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.business.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.flowable.engine.TaskService;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.business.service.FlowBusinessService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * 娴佺▼浜嬪姟閫氱敤鎺ュ彛
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("work")
-@Api(value = "娴佺▼浜嬪姟閫氱敤鎺ュ彛", tags = "娴佺▼浜嬪姟閫氱敤鎺ュ彛")
-public class WorkController {
-
-	private final TaskService taskService;
-	private final FlowEngineService flowEngineService;
-	private final FlowBusinessService flowBusinessService;
-
-	/**
-	 * 鍙戣捣浜嬪姟鍒楄〃椤�
-	 */
-	@GetMapping("start-list")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鍙戣捣浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼绫诲瀷")
-	public R<IPage<FlowProcess>> startList(@ApiParam("娴佺▼绫诲瀷") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
-		IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
-		return R.data(pages);
-	}
-
-	/**
-	 * 寰呯浜嬪姟鍒楄〃椤�
-	 */
-	@GetMapping("claim-list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "寰呯浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
-	public R<IPage<BladeFlow>> claimList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectClaimPage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 寰呭姙浜嬪姟鍒楄〃椤�
-	 */
-	@GetMapping("todo-list")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "寰呭姙浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
-	public R<IPage<BladeFlow>> todoList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectTodoPage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 宸插彂浜嬪姟鍒楄〃椤�
-	 */
-	@GetMapping("send-list")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "宸插彂浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
-	public R<IPage<BladeFlow>> sendList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectSendPage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鍔炵粨浜嬪姟鍒楄〃椤�
-	 */
-	@GetMapping("done-list")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鍔炵粨浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
-	public R<IPage<BladeFlow>> doneList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
-		IPage<BladeFlow> pages = flowBusinessService.selectDonePage(Condition.getPage(query), bladeFlow);
-		return R.data(pages);
-	}
-
-	/**
-	 * 绛炬敹浜嬪姟
-	 *
-	 * @param taskId 浠诲姟id
-	 */
-	@PostMapping("claim-task")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "绛炬敹浜嬪姟", notes = "浼犲叆娴佺▼淇℃伅")
-	public R claimTask(@ApiParam("浠诲姟id") String taskId) {
-		taskService.claim(taskId, TaskUtil.getTaskUser());
-		return R.success("绛炬敹浜嬪姟鎴愬姛");
-	}
-
-	/**
-	 * 瀹屾垚浠诲姟
-	 *
-	 * @param flow 璇峰亣淇℃伅
-	 */
-	@PostMapping("complete-task")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "瀹屾垚浠诲姟", notes = "浼犲叆娴佺▼淇℃伅")
-	public R completeTask(@ApiParam("浠诲姟淇℃伅") @RequestBody BladeFlow flow) {
-		return R.status(flowBusinessService.completeTask(flow));
-	}
-
-	/**
-	 * 鍒犻櫎浠诲姟
-	 *
-	 * @param taskId 浠诲姟id
-	 * @param reason 鍒犻櫎鍘熷洜
-	 */
-	@PostMapping("delete-task")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鍒犻櫎浠诲姟", notes = "浼犲叆娴佺▼淇℃伅")
-	public R deleteTask(@ApiParam("浠诲姟id") String taskId, @ApiParam("鍒犻櫎鍘熷洜") String reason) {
-		taskService.deleteTask(taskId, reason);
-		return R.success("鍒犻櫎浠诲姟鎴愬姛");
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/FlowClient.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/FlowClient.java
deleted file mode 100644
index f204b29..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/FlowClient.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.business.feign;
-
-import lombok.AllArgsConstructor;
-import org.flowable.engine.IdentityService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.feign.IFlowClient;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Map;
-
-/**
- * 娴佺▼杩滅▼璋冪敤瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-public class FlowClient implements IFlowClient {
-
-	private final RuntimeService runtimeService;
-	private final IdentityService identityService;
-	private final TaskService taskService;
-
-	@Override
-	@PostMapping(START_PROCESS_INSTANCE_BY_ID)
-	public R<BladeFlow> startProcessInstanceById(String processDefinitionId, String businessKey, @RequestBody Map<String, Object> variables) {
-		// 璁剧疆娴佺▼鍚姩鐢ㄦ埛
-		identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
-		// 寮�鍚祦绋�
-		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);
-		// 缁勮娴佺▼閫氱敤绫�
-		BladeFlow flow = new BladeFlow();
-		flow.setProcessInstanceId(processInstance.getId());
-		return R.data(flow);
-	}
-
-	@Override
-	@PostMapping(START_PROCESS_INSTANCE_BY_KEY)
-	public R<BladeFlow> startProcessInstanceByKey(String processDefinitionKey, String businessKey, @RequestBody Map<String, Object> variables) {
-		// 璁剧疆娴佺▼鍚姩鐢ㄦ埛
-		identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
-		// 寮�鍚祦绋�
-		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
-		// 缁勮娴佺▼閫氱敤绫�
-		BladeFlow flow = new BladeFlow();
-		flow.setProcessInstanceId(processInstance.getId());
-		return R.data(flow);
-	}
-
-	@Override
-	@PostMapping(COMPLETE_TASK)
-	public R completeTask(String taskId, String processInstanceId, String comment, @RequestBody Map<String, Object> variables) {
-		// 澧炲姞璇勮
-		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
-			taskService.addComment(taskId, processInstanceId, comment);
-		}
-		// 闈炵┖鍒ゆ柇
-		if (Func.isEmpty(variables)) {
-			variables = Kv.create();
-		}
-		// 瀹屾垚浠诲姟
-		taskService.complete(taskId, variables);
-		return R.success("娴佺▼鎻愪氦鎴愬姛");
-	}
-
-	@Override
-	@GetMapping(TASK_VARIABLE)
-	public R<Object> taskVariable(String taskId, String variableName) {
-		return R.data(taskService.getVariable(taskId, variableName));
-	}
-
-	@Override
-	@GetMapping(TASK_VARIABLES)
-	public R<Map<String, Object>> taskVariables(String taskId) {
-		return R.data(taskService.getVariables(taskId));
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java
deleted file mode 100644
index 8fb4227..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.business.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.flow.core.entity.BladeFlow;
-
-/**
- * 娴佺▼涓氬姟绫�
- *
- * @author Chill
- */
-public interface FlowBusinessService {
-
-	/**
-	 * 娴佺▼寰呯鍒楄〃
-	 *
-	 * @param page      鍒嗛〉宸ュ叿
-	 * @param bladeFlow 娴佺▼绫�
-	 * @return
-	 */
-	IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 娴佺▼寰呭姙鍒楄〃
-	 *
-	 * @param page      鍒嗛〉宸ュ叿
-	 * @param bladeFlow 娴佺▼绫�
-	 * @return
-	 */
-	IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 娴佺▼宸插彂鍒楄〃
-	 *
-	 * @param page      鍒嗛〉宸ュ叿
-	 * @param bladeFlow 娴佺▼绫�
-	 * @return
-	 */
-	IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 娴佺▼鍔炵粨鍒楄〃
-	 *
-	 * @param page      鍒嗛〉宸ュ叿
-	 * @param bladeFlow 娴佺▼绫�
-	 * @return
-	 */
-	IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow);
-
-	/**
-	 * 瀹屾垚浠诲姟
-	 *
-	 * @param leave 璇峰亣淇℃伅
-	 * @return boolean
-	 */
-	boolean completeTask(BladeFlow leave);
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
deleted file mode 100644
index 0db6bba..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.business.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.history.HistoricProcessInstanceQuery;
-import org.flowable.task.api.TaskQuery;
-import org.flowable.task.api.history.HistoricTaskInstance;
-import org.flowable.task.api.history.HistoricTaskInstanceQuery;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.business.service.FlowBusinessService;
-import org.springblade.flow.core.constant.ProcessConstant;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.utils.FlowCache;
-import org.springframework.stereotype.Service;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 娴佺▼涓氬姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-@AllArgsConstructor
-public class FlowBusinessServiceImpl implements FlowBusinessService {
-
-	private final TaskService taskService;
-	private final HistoryService historyService;
-
-	@Override
-	public IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		String taskGroup = TaskUtil.getCandidateGroup();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		// 涓汉绛夊緟绛炬敹鐨勪换鍔�
-		TaskQuery claimUserQuery = taskService.createTaskQuery().taskCandidateUser(taskUser)
-			.includeProcessVariables().active().orderByTaskCreateTime().desc();
-		// 瀹氬埗娴佺▼绛夊緟绛炬敹鐨勪换鍔�
-		TaskQuery claimRoleWithTenantIdQuery = taskService.createTaskQuery().taskTenantId(AuthUtil.getTenantId()).taskCandidateGroupIn(Func.toStrList(taskGroup))
-			.includeProcessVariables().active().orderByTaskCreateTime().desc();
-		// 閫氱敤娴佺▼绛夊緟绛炬敹鐨勪换鍔�
-		TaskQuery claimRoleWithoutTenantIdQuery = taskService.createTaskQuery().taskWithoutTenantId().taskCandidateGroupIn(Func.toStrList(taskGroup))
-			.includeProcessVariables().active().orderByTaskCreateTime().desc();
-
-		// 鏋勫缓鍒楄〃鏁版嵁
-		buildFlowTaskList(bladeFlow, flowList, claimUserQuery, FlowEngineConstant.STATUS_CLAIM);
-		buildFlowTaskList(bladeFlow, flowList, claimRoleWithTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
-		buildFlowTaskList(bladeFlow, flowList, claimRoleWithoutTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
-
-		// 璁$畻鎬绘暟
-		long count = claimUserQuery.count() + claimRoleWithTenantIdQuery.count() + claimRoleWithoutTenantIdQuery.count();
-		// 璁剧疆椤垫暟
-		page.setSize(count);
-		// 璁剧疆鎬绘暟
-		page.setTotal(count);
-		// 璁剧疆鏁版嵁
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		// 宸茬鏀剁殑浠诲姟
-		TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
-			.includeProcessVariables().orderByTaskCreateTime().desc();
-
-		// 鏋勫缓鍒楄〃鏁版嵁
-		buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
-
-		// 璁$畻鎬绘暟
-		long count = todoQuery.count();
-		// 璁剧疆椤垫暟
-		page.setSize(count);
-		// 璁剧疆鎬绘暟
-		page.setTotal(count);
-		// 璁剧疆鏁版嵁
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		HistoricProcessInstanceQuery historyQuery = historyService.createHistoricProcessInstanceQuery().startedBy(taskUser).orderByProcessInstanceStartTime().desc();
-
-		if (bladeFlow.getCategory() != null) {
-			historyQuery.processDefinitionCategory(bladeFlow.getCategory());
-		}
-		if (bladeFlow.getProcessDefinitionName() != null) {
-			historyQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
-		}
-		if (bladeFlow.getBeginDate() != null) {
-			historyQuery.startedAfter(bladeFlow.getBeginDate());
-		}
-		if (bladeFlow.getEndDate() != null) {
-			historyQuery.startedBefore(bladeFlow.getEndDate());
-		}
-
-		// 鏌ヨ鍒楄〃
-		List<HistoricProcessInstance> historyList = historyQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-
-		historyList.forEach(historicProcessInstance -> {
-			BladeFlow flow = new BladeFlow();
-			// historicProcessInstance
-			flow.setCreateTime(historicProcessInstance.getStartTime());
-			flow.setEndTime(historicProcessInstance.getEndTime());
-			flow.setVariables(historicProcessInstance.getProcessVariables());
-			String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
-			if (businessKey.length > 1) {
-				flow.setBusinessTable(businessKey[0]);
-				flow.setBusinessId(businessKey[1]);
-			}
-			flow.setHistoryActivityName(historicProcessInstance.getName());
-			flow.setProcessInstanceId(historicProcessInstance.getId());
-			flow.setHistoryProcessInstanceId(historicProcessInstance.getId());
-			// ProcessDefinition
-			FlowProcess processDefinition = FlowCache.getProcessDefinition(historicProcessInstance.getProcessDefinitionId());
-			flow.setProcessDefinitionId(processDefinition.getId());
-			flow.setProcessDefinitionName(processDefinition.getName());
-			flow.setProcessDefinitionVersion(processDefinition.getVersion());
-			flow.setProcessDefinitionKey(processDefinition.getKey());
-			flow.setCategory(processDefinition.getCategory());
-			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-			flow.setProcessInstanceId(historicProcessInstance.getId());
-			// HistoricTaskInstance
-			List<HistoricTaskInstance> historyTasks = historyService.createHistoricTaskInstanceQuery().processInstanceId(historicProcessInstance.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
-			if (Func.isNotEmpty(historyTasks)) {
-				HistoricTaskInstance historyTask = historyTasks.iterator().next();
-				flow.setTaskId(historyTask.getId());
-				flow.setTaskName(historyTask.getName());
-				flow.setTaskDefinitionKey(historyTask.getTaskDefinitionKey());
-			}
-			// Status
-			if (historicProcessInstance.getEndActivityId() != null) {
-				flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
-			} else {
-				flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
-			}
-			flow.setStatus(FlowEngineConstant.STATUS_FINISH);
-			flowList.add(flow);
-		});
-
-		// 璁$畻鎬绘暟
-		long count = historyQuery.count();
-		// 璁剧疆鎬绘暟
-		page.setTotal(count);
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
-		String taskUser = TaskUtil.getTaskUser();
-		List<BladeFlow> flowList = new LinkedList<>();
-
-		HistoricTaskInstanceQuery doneQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(taskUser).finished()
-			.includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc();
-
-		if (bladeFlow.getCategory() != null) {
-			doneQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
-		}
-		if (bladeFlow.getProcessDefinitionName() != null) {
-			doneQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
-		}
-		if (bladeFlow.getBeginDate() != null) {
-			doneQuery.taskCompletedAfter(bladeFlow.getBeginDate());
-		}
-		if (bladeFlow.getEndDate() != null) {
-			doneQuery.taskCompletedBefore(bladeFlow.getEndDate());
-		}
-
-		// 鏌ヨ鍒楄〃
-		List<HistoricTaskInstance> doneList = doneQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-		doneList.forEach(historicTaskInstance -> {
-			BladeFlow flow = new BladeFlow();
-			flow.setTaskId(historicTaskInstance.getId());
-			flow.setTaskDefinitionKey(historicTaskInstance.getTaskDefinitionKey());
-			flow.setTaskName(historicTaskInstance.getName());
-			flow.setAssignee(historicTaskInstance.getAssignee());
-			flow.setCreateTime(historicTaskInstance.getCreateTime());
-			flow.setExecutionId(historicTaskInstance.getExecutionId());
-			flow.setHistoryTaskEndTime(historicTaskInstance.getEndTime());
-			flow.setVariables(historicTaskInstance.getProcessVariables());
-
-			FlowProcess processDefinition = FlowCache.getProcessDefinition(historicTaskInstance.getProcessDefinitionId());
-			flow.setProcessDefinitionId(processDefinition.getId());
-			flow.setProcessDefinitionName(processDefinition.getName());
-			flow.setProcessDefinitionKey(processDefinition.getKey());
-			flow.setProcessDefinitionVersion(processDefinition.getVersion());
-			flow.setCategory(processDefinition.getCategory());
-			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-
-			flow.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
-			flow.setHistoryProcessInstanceId(historicTaskInstance.getProcessInstanceId());
-			HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance((historicTaskInstance.getProcessInstanceId()));
-			if (Func.isNotEmpty(historicProcessInstance)) {
-				String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
-				flow.setBusinessTable(businessKey[0]);
-				flow.setBusinessId(businessKey[1]);
-				if (historicProcessInstance.getEndActivityId() != null) {
-					flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
-				} else {
-					flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
-				}
-			}
-			flow.setStatus(FlowEngineConstant.STATUS_FINISH);
-			flowList.add(flow);
-		});
-		// 璁$畻鎬绘暟
-		long count = doneQuery.count();
-		// 璁剧疆鎬绘暟
-		page.setTotal(count);
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public boolean completeTask(BladeFlow flow) {
-		String taskId = flow.getTaskId();
-		String processInstanceId = flow.getProcessInstanceId();
-		String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
-		// 澧炲姞璇勮
-		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
-			taskService.addComment(taskId, processInstanceId, comment);
-		}
-		// 鍒涘缓鍙橀噺
-		Map<String, Object> variables = flow.getVariables();
-		if (variables == null) {
-			variables = Kv.create();
-		}
-		variables.put(ProcessConstant.PASS_KEY, flow.isPass());
-		// 瀹屾垚浠诲姟
-		taskService.complete(taskId, variables);
-		return true;
-	}
-
-	/**
-	 * 鏋勫缓娴佺▼
-	 *
-	 * @param bladeFlow 娴佺▼閫氱敤绫�
-	 * @param flowList  娴佺▼鍒楄〃
-	 * @param taskQuery 浠诲姟鏌ヨ绫�
-	 * @param status    鐘舵��
-	 */
-	private void buildFlowTaskList(BladeFlow bladeFlow, List<BladeFlow> flowList, TaskQuery taskQuery, String status) {
-		if (bladeFlow.getCategory() != null) {
-			taskQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
-		}
-		if (bladeFlow.getProcessDefinitionName() != null) {
-			taskQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
-		}
-		if (bladeFlow.getBeginDate() != null) {
-			taskQuery.taskCreatedAfter(bladeFlow.getBeginDate());
-		}
-		if (bladeFlow.getEndDate() != null) {
-			taskQuery.taskCreatedBefore(bladeFlow.getEndDate());
-		}
-		taskQuery.list().forEach(task -> {
-			BladeFlow flow = new BladeFlow();
-			flow.setTaskId(task.getId());
-			flow.setTaskDefinitionKey(task.getTaskDefinitionKey());
-			flow.setTaskName(task.getName());
-			flow.setAssignee(task.getAssignee());
-			flow.setCreateTime(task.getCreateTime());
-			flow.setClaimTime(task.getClaimTime());
-			flow.setExecutionId(task.getExecutionId());
-			flow.setVariables(task.getProcessVariables());
-
-			HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId());
-			if (Func.isNotEmpty(historicProcessInstance)) {
-				String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
-				flow.setBusinessTable(businessKey[0]);
-				flow.setBusinessId(businessKey[1]);
-			}
-
-			FlowProcess processDefinition = FlowCache.getProcessDefinition(task.getProcessDefinitionId());
-			flow.setCategory(processDefinition.getCategory());
-			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-			flow.setProcessDefinitionId(processDefinition.getId());
-			flow.setProcessDefinitionName(processDefinition.getName());
-			flow.setProcessDefinitionKey(processDefinition.getKey());
-			flow.setProcessDefinitionVersion(processDefinition.getVersion());
-			flow.setProcessInstanceId(task.getProcessInstanceId());
-			flow.setStatus(status);
-			flowList.add(flow);
-		});
-	}
-
-	/**
-	 * 鑾峰彇鍘嗗彶娴佺▼
-	 *
-	 * @param processInstanceId 娴佺▼瀹炰緥id
-	 * @return HistoricProcessInstance
-	 */
-	private HistoricProcessInstance getHistoricProcessInstance(String processInstanceId) {
-		return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java
deleted file mode 100644
index f0aff2b..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.config;
-
-import lombok.AllArgsConstructor;
-import org.flowable.spring.SpringProcessEngineConfiguration;
-import org.flowable.spring.boot.EngineConfigurationConfigurer;
-import org.flowable.spring.boot.FlowableProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Flowable閰嶇疆绫�
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-@EnableConfigurationProperties(FlowableProperties.class)
-public class FlowableConfiguration implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {
-	private final FlowableProperties flowableProperties;
-
-	@Override
-	public void configure(SpringProcessEngineConfiguration engineConfiguration) {
-		engineConfiguration.setActivityFontName(flowableProperties.getActivityFontName());
-		engineConfiguration.setLabelFontName(flowableProperties.getLabelFontName());
-		engineConfiguration.setAnnotationFontName(flowableProperties.getAnnotationFontName());
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java
deleted file mode 100644
index bb660ab..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.constant;
-
-/**
- * 娴佺▼甯搁噺.
- *
- * @author zhuangqian
- */
-public interface FlowEngineConstant {
-
-	String FLOWABLE_BASE_PACKAGES = "org.flowable.ui";
-
-	String SUFFIX = ".bpmn20.xml";
-
-	String ACTIVE = "active";
-
-	String SUSPEND = "suspend";
-
-	String STATUS_TODO = "todo";
-
-	String STATUS_CLAIM = "claim";
-
-	String STATUS_SEND = "send";
-
-	String STATUS_DONE = "done";
-
-	String STATUS_FINISHED = "finished";
-
-	String STATUS_UNFINISHED = "unfinished";
-
-	String STATUS_FINISH = "finish";
-
-	String START_EVENT = "startEvent";
-
-	String END_EVENT = "endEvent";
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java
deleted file mode 100644
index 253b6e1..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * 娴佺▼鐘舵�佹帶鍒跺櫒
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping("follow")
-@AllArgsConstructor
-//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-public class FlowFollowController {
-
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 娴佺▼鐘舵�佸垪琛�
-	 */
-	@GetMapping("list")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
-	public R<IPage<FlowExecution>> list(Query query, @ApiParam(value = "娴佺▼瀹炰緥id") String processInstanceId, @ApiParam(value = "娴佺▼key") String processDefinitionKey) {
-		IPage<FlowExecution> pages = flowEngineService.selectFollowPage(Condition.getPage(query), processInstanceId, processDefinitionKey);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鍒犻櫎娴佺▼瀹炰緥
-	 */
-	@PostMapping("delete-process-instance")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆涓婚敭闆嗗悎")
-	public R deleteProcessInstance(@ApiParam(value = "娴佺▼瀹炰緥id") @RequestParam String processInstanceId, @ApiParam(value = "鍒犻櫎鍘熷洜") @RequestParam String deleteReason) {
-		boolean temp = flowEngineService.deleteProcessInstance(processInstanceId, deleteReason);
-		return R.status(temp);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java
deleted file mode 100644
index 1ae54d1..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 娴佺▼绠$悊鎺ュ彛
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping("manager")
-@AllArgsConstructor
-@Api(value = "娴佺▼绠$悊鎺ュ彛", tags = "娴佺▼绠$悊鎺ュ彛")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-public class FlowManagerController {
-
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("list")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆娴佺▼绫诲瀷")
-	public R<IPage<FlowProcess>> list(@ApiParam("娴佺▼绫诲瀷") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
-		IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
-		return R.data(pages);
-	}
-
-
-	/**
-	 * 鍙樻洿娴佺▼鐘舵��
-	 *
-	 * @param state     鐘舵��
-	 * @param processId 娴佺▼id
-	 */
-	@PostMapping("change-state")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍙樻洿娴佺▼鐘舵��", notes = "浼犲叆state,processId")
-	public R changeState(@RequestParam String state, @RequestParam String processId) {
-		String msg = flowEngineService.changeState(state, processId);
-		return R.success(msg);
-	}
-
-	/**
-	 * 鍒犻櫎閮ㄧ讲娴佺▼
-	 *
-	 * @param deploymentIds 閮ㄧ讲娴佺▼id闆嗗悎
-	 */
-	@PostMapping("delete-deployment")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒犻櫎閮ㄧ讲娴佺▼", notes = "閮ㄧ讲娴佺▼id闆嗗悎")
-	public R deleteDeployment(String deploymentIds) {
-		return R.status(flowEngineService.deleteDeployment(deploymentIds));
-	}
-
-	/**
-	 * 妫�鏌ユ祦绋嬫枃浠舵牸寮�
-	 *
-	 * @param file 娴佺▼鏂囦欢
-	 */
-	@PostMapping("check-upload")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "涓婁紶閮ㄧ讲娴佺▼鏂囦欢", notes = "浼犲叆鏂囦欢")
-	public R checkUpload(@RequestParam MultipartFile file) {
-		boolean temp = Objects.requireNonNull(file.getOriginalFilename()).endsWith(FlowEngineConstant.SUFFIX);
-		return R.data(Kv.create().set("name", file.getOriginalFilename()).set("success", temp));
-	}
-
-	/**
-	 * 涓婁紶閮ㄧ讲娴佺▼鏂囦欢
-	 *
-	 * @param files    娴佺▼鏂囦欢
-	 * @param category 绫诲瀷
-	 */
-	@PostMapping("deploy-upload")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "涓婁紶閮ㄧ讲娴佺▼鏂囦欢", notes = "浼犲叆鏂囦欢")
-	public R deployUpload(@RequestParam List<MultipartFile> files,
-						  @RequestParam String category,
-						  @RequestParam(required = false, defaultValue = "") String tenantIds) {
-		return R.status(flowEngineService.deployUpload(files, category, Func.toStrList(tenantIds)));
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java
deleted file mode 100644
index ce2c5ed..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.Map;
-
-/**
- * 娴佺▼妯″瀷鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping("model")
-@AllArgsConstructor
-//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-public class FlowModelController {
-
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "modelKey", value = "妯″瀷鏍囪瘑", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "妯″瀷鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
-	public R<IPage<FlowModel>> list(@ApiIgnore @RequestParam Map<String, Object> flow, Query query) {
-		IPage<FlowModel> pages = flowEngineService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, FlowModel.class)
-			.select("id,model_key modelKey,name,description,version,created,last_updated lastUpdated")
-			.orderByDesc("last_updated"));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆涓婚敭闆嗗悎")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎") @RequestParam String ids) {
-		boolean temp = flowEngineService.removeByIds(Func.toStrList(ids));
-		return R.status(temp);
-	}
-
-	/**
-	 * 閮ㄧ讲
-	 */
-	@PostMapping("/deploy")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "閮ㄧ讲", notes = "浼犲叆妯″瀷id鍜屽垎绫�")
-	public R deploy(@ApiParam(value = "妯″瀷id") @RequestParam String modelId,
-					@ApiParam(value = "宸ヤ綔娴佸垎绫�") @RequestParam String category,
-					@ApiParam(value = "绉熸埛ID") @RequestParam(required = false, defaultValue = "") String tenantIds) {
-		boolean temp = flowEngineService.deployModel(modelId, category, Func.toStrList(tenantIds));
-		return R.status(temp);
-	}
-
-	@PostMapping("submit")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "淇濆瓨/缂栬緫")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "id", value = "妯″瀷id"),
-		@ApiImplicitParam(name = "name", value = "妯″瀷鍚嶇О", required = true),
-		@ApiImplicitParam(name = "modelKey", value = "妯″瀷key", required = true),
-		@ApiImplicitParam(name = "description", value = "妯″瀷鎻忚堪"),
-		@ApiImplicitParam(name = "xml", value = "妯″瀷xml", required = true),
-	})
-	public R<FlowModel> submit(@RequestBody @ApiIgnore FlowModel model) {
-		return R.data(flowEngineService.submitModel(model));
-	}
-
-	@GetMapping("detail")
-	@ApiOperation(value = "璇︽儏")
-	@ApiOperationSupport(order = 5)
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "id", value = "妯″瀷id", required = true),
-	})
-	public R<FlowModel> detail(String id) {
-		return R.data(flowEngineService.getById(id));
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java
deleted file mode 100644
index 35e1bd3..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.controller;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * 娴佺▼閫氱敤鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@Slf4j
-@RestController
-@AllArgsConstructor
-@RequestMapping("process")
-public class FlowProcessController {
-
-	private static final String IMAGE_NAME = "image";
-	private final FlowEngineService flowEngineService;
-
-	/**
-	 * 鑾峰彇娴佽浆鍘嗗彶鍒楄〃
-	 *
-	 * @param processInstanceId 娴佺▼瀹炰緥id
-	 * @param startActivityId   寮�濮嬭妭鐐筰d
-	 * @param endActivityId     缁撴潫鑺傜偣id
-	 */
-	@GetMapping(value = "history-flow-list")
-	public R<List<BladeFlow>> historyFlowList(@RequestParam String processInstanceId, String startActivityId, String endActivityId) {
-		return R.data(flowEngineService.historyFlowList(processInstanceId, startActivityId, endActivityId));
-	}
-
-	/**
-	 * 娴佺▼鑺傜偣杩涚▼鍥�
-	 *
-	 * @param processDefinitionId 娴佺▼id
-	 * @param processInstanceId   娴佺▼瀹炰緥id
-	 */
-	@GetMapping(value = "model-view")
-	public R modelView(String processDefinitionId, String processInstanceId) {
-		return R.data(flowEngineService.modelView(processDefinitionId, processInstanceId));
-	}
-
-	/**
-	 * 娴佺▼鑺傜偣杩涚▼鍥�
-	 *
-	 * @param processInstanceId   娴佺▼瀹炰緥id
-	 * @param httpServletResponse http鍝嶅簲
-	 */
-	@GetMapping(value = "diagram-view")
-	public void diagramView(String processInstanceId, HttpServletResponse httpServletResponse) {
-		flowEngineService.diagramView(processInstanceId, httpServletResponse);
-	}
-
-	/**
-	 * 娴佺▼鍥惧睍绀�
-	 *
-	 * @param processDefinitionId 娴佺▼id
-	 * @param processInstanceId   瀹炰緥id
-	 * @param AutowiredType        璧勬簮绫诲瀷
-	 * @param response            鍝嶅簲
-	 */
-	@GetMapping("Autowired-view")
-	public void AutowiredView(@RequestParam String processDefinitionId, String processInstanceId, @RequestParam(defaultValue = IMAGE_NAME) String AutowiredType, HttpServletResponse response) {
-		flowEngineService.AutowiredView(processDefinitionId, processInstanceId, AutowiredType, response);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java
deleted file mode 100644
index f8ed862..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 杩愯瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-public class FlowExecution implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	private String id;
-	private String name;
-	private String startUserId;
-	private String startUser;
-	private Date startTime;
-	private String taskDefinitionId;
-	private String taskDefinitionKey;
-	private String category;
-	private String categoryName;
-	private String processInstanceId;
-	private String processDefinitionId;
-	private String processDefinitionKey;
-	private String activityId;
-	private int suspensionState;
-	private String executionId;
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowModel.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowModel.java
deleted file mode 100644
index b37109a..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowModel.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 娴佺▼妯″瀷
- *
- * @author Chill
- */
-@Data
-@TableName("ACT_DE_MODEL")
-public class FlowModel implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	public static final int MODEL_TYPE_BPMN = 0;
-	public static final int MODEL_TYPE_FORM = 2;
-	public static final int MODEL_TYPE_APP = 3;
-	public static final int MODEL_TYPE_DECISION_TABLE = 4;
-	public static final int MODEL_TYPE_CMMN = 5;
-
-	private String id;
-	private String name;
-	private String modelKey;
-	private String description;
-	private Date created;
-	private Date lastUpdated;
-	private String createdBy;
-	private String lastUpdatedBy;
-	private Integer version;
-	private String modelEditorJson;
-	private String modelComment;
-	private Integer modelType;
-	private String tenantId;
-	private byte[] thumbnail;
-	private String modelEditorXml;
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java
deleted file mode 100644
index 9030053..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.entity;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.springblade.flow.engine.utils.FlowCache;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * FlowProcess
- *
- * @author Chill
- */
-@Data
-@NoArgsConstructor
-public class FlowProcess implements Serializable {
-
-	private String id;
-	private String tenantId;
-	private String name;
-	private String key;
-	private String category;
-	private String categoryName;
-	private Integer version;
-	private String deploymentId;
-	private String ResourceName;
-	private String diagramResourceName;
-	private Integer suspensionState;
-	private Date deploymentTime;
-
-	public FlowProcess(ProcessDefinitionEntityImpl entity) {
-		if (entity != null) {
-			this.id = entity.getId();
-			this.tenantId = entity.getTenantId();
-			this.name = entity.getName();
-			this.key = entity.getKey();
-			this.category = entity.getCategory();
-			this.categoryName = FlowCache.getCategoryName(entity.getCategory());
-			this.version = entity.getVersion();
-			this.deploymentId = entity.getDeploymentId();
-			this.ResourceName = entity.getResourceName();
-			this.diagramResourceName = entity.getDiagramResourceName();
-			this.suspensionState = entity.getSuspensionState();
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java
deleted file mode 100644
index 681b385..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.flow.engine.entity.FlowModel;
-
-import java.util.List;
-
-/**
- * FlowMapper.
- *
- * @author Chill
- */
-public interface FlowMapper extends BaseMapper<FlowModel> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 * @param page
-	 * @param flowModel
-	 * @return
-	 */
-	List<FlowModel> selectFlowPage(IPage page, FlowModel flowModel);
-
-	/**
-	 * 鑾峰彇妯″瀷
-	 * @param parentModelId
-	 * @return
-	 */
-	List<FlowModel> findByParentModelId(String parentModelId);
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml
deleted file mode 100644
index a7af970..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.flow.engine.mapper.FlowMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="flowModelResultMap" type="org.springblade.flow.engine.entity.FlowModel">
-        <result column="id" property="id"/>
-        <result column="name" property="name"/>
-        <result column="model_key" property="modelKey"/>
-        <result column="description" property="description"/>
-        <result column="model_comment" property="modelComment"/>
-        <result column="created" property="created"/>
-        <result column="created_by" property="createdBy"/>
-        <result column="last_updated" property="lastUpdated"/>
-        <result column="last_updated_by" property="lastUpdatedBy"/>
-        <result column="version" property="version"/>
-        <result column="model_editor_json" property="modelEditorJson"/>
-        <result column="thumbnail" property="thumbnail"/>
-        <result column="model_type" property="modelType"/>
-        <result column="tenant_id" property="tenantId"/>
-    </resultMap>
-
-    <select id="selectFlowPage" resultMap="flowModelResultMap">
-        SELECT
-            a.id,
-            a.name,
-            a.model_key,
-            a.description,
-            a.model_comment,
-            a.created,
-            a.created_by,
-            a.last_updated,
-            a.last_updated_by,
-            a.version,
-            a.model_editor_json,
-            a.thumbnail,
-            a.model_type,
-            a.tenant_id
-        FROM
-            ACT_DE_MODEL a
-        WHERE
-            1 = 1
-        ORDER BY
-            a.created DESC
-    </select>
-
-    <select id="findByParentModelId" parameterType="string" resultMap="flowModelResultMap">
-        select model.* from ACT_DE_MODEL_RELATION modelrelation
-                                inner join ACT_DE_MODEL model on modelrelation.model_id = model.id
-        where modelrelation.parent_model_id = #{_parameter}
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java
deleted file mode 100644
index 2ef752b..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-import java.util.Map;
-
-/**
- * FlowService
- *
- * @author Chill
- */
-public interface FlowEngineService extends IService<FlowModel> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page      鍒嗛〉宸ュ叿
-	 * @param flowModel 娴佺▼妯″瀷
-	 * @return
-	 */
-	IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel);
-
-	/**
-	 * 娴佺▼绠$悊鍒楄〃
-	 *
-	 * @param page     鍒嗛〉宸ュ叿
-	 * @param category 鍒嗙被
-	 * @param mode     褰㈡��
-	 * @return
-	 */
-	IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode);
-
-	/**
-	 * 娴佺▼绠$悊鍒楄〃
-	 *
-	 * @param page                 鍒嗛〉宸ュ叿
-	 * @param processInstanceId    娴佺▼瀹炰緥id
-	 * @param processDefinitionKey 娴佺▼key
-	 * @return
-	 */
-	IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey);
-
-	/**
-	 * 鑾峰彇娴佽浆鍘嗗彶鍒楄〃
-	 *
-	 * @param processInstanceId 娴佺▼瀹炰緥id
-	 * @param startActivityId   寮�濮嬭妭鐐筰d
-	 * @param endActivityId     缁撴潫鑺傜偣id
-	 * @return
-	 */
-	List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId);
-
-	/**
-	 * 鍙樻洿娴佺▼鐘舵��
-	 *
-	 * @param state     鐘舵��
-	 * @param processId 娴佺▼ID
-	 * @return
-	 */
-	String changeState(String state, String processId);
-
-	/**
-	 * 鍒犻櫎閮ㄧ讲娴佺▼
-	 *
-	 * @param deploymentIds 閮ㄧ讲娴佺▼id闆嗗悎
-	 * @return
-	 */
-	boolean deleteDeployment(String deploymentIds);
-
-	/**
-	 * 涓婁紶閮ㄧ讲娴佺▼
-	 *
-	 * @param files        娴佺▼閰嶇疆鏂囦欢
-	 * @param category     娴佺▼鍒嗙被
-	 * @param tenantIdList 绉熸埛id闆嗗悎
-	 * @return
-	 */
-	boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList);
-
-	/**
-	 * 閮ㄧ讲娴佺▼
-	 *
-	 * @param modelId      妯″瀷id
-	 * @param category     鍒嗙被
-	 * @param tenantIdList 绉熸埛id闆嗗悎
-	 * @return
-	 */
-	boolean deployModel(String modelId, String category, List<String> tenantIdList);
-
-	/**
-	 * 鍒犻櫎娴佺▼瀹炰緥
-	 *
-	 * @param processInstanceId 娴佺▼瀹炰緥id
-	 * @param deleteReason      鍒犻櫎鍘熷洜
-	 * @return
-	 */
-	boolean deleteProcessInstance(String processInstanceId, String deleteReason);
-
-
-	/**
-	 * 淇濆瓨/鏇存柊妯″瀷
-	 *
-	 * @param model 妯″瀷
-	 * @return 妯″瀷
-	 */
-	FlowModel submitModel(FlowModel model);
-
-	/**
-	 * 娴佺▼鑺傜偣杩涚▼鍥�
-	 *
-	 * @param processDefinitionId
-	 * @param processInstanceId
-	 * @return
-	 */
-	Map<String, Object> modelView(String processDefinitionId, String processInstanceId);
-
-	/**
-	 * 娴佺▼鑺傜偣杩涚▼鍥�
-	 *
-	 * @param processInstanceId
-	 * @param httpServletResponse
-	 */
-	void diagramView(String processInstanceId, HttpServletResponse httpServletResponse);
-
-	/**
-	 * 娴佺▼鍥惧睍绀�
-	 *
-	 * @param processDefinitionId
-	 * @param processInstanceId
-	 * @param AutowiredType
-	 * @param response
-	 */
-	void AutowiredView(String processDefinitionId, String processInstanceId, String AutowiredType, HttpServletResponse response);
-
-	/**
-	 * 鑾峰彇XML
-	 *
-	 * @param model
-	 * @return
-	 */
-	byte[] getModelEditorXML(FlowModel model);
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java
deleted file mode 100644
index f308b59..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.flowable.bpmn.converter.BpmnXMLConverter;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.Process;
-import org.flowable.common.engine.impl.util.IoUtil;
-import org.flowable.common.engine.impl.util.io.StringStreamSource;
-import org.flowable.editor.language.json.converter.BpmnJsonConverter;
-import org.flowable.engine.*;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.flowable.engine.repository.Deployment;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.engine.repository.ProcessDefinitionQuery;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.engine.runtime.ProcessInstanceQuery;
-import org.flowable.engine.task.Comment;
-import org.flowable.image.ProcessDiagramGenerator;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.FileUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.enums.FlowModeEnum;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.engine.constant.FlowEngineConstant;
-import org.springblade.flow.engine.entity.FlowExecution;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.mapper.FlowMapper;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springblade.flow.engine.utils.FlowCache;
-import org.springblade.system.user.cache.UserCache;
-import org.springblade.system.user.entity.User;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.*;
-
-/**
- * 宸ヤ綔娴佹湇鍔″疄鐜扮被
- *
- * @author Chill
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class FlowEngineServiceImpl extends ServiceImpl<FlowMapper, FlowModel> implements FlowEngineService {
-	private static final String ALREADY_IN_STATE = "already in state";
-	private static final String USR_TASK = "userTask";
-	private static final String IMAGE_NAME = "image";
-	private static final String XML_NAME = "xml";
-	private static final Integer INT_1024 = 1024;
-	private static final BpmnJsonConverter BPMN_JSON_CONVERTER = new BpmnJsonConverter();
-	private static final BpmnXMLConverter BPMN_XML_CONVERTER = new BpmnXMLConverter();
-	private final ObjectMapper objectMapper;
-	private final RepositoryService repositoryService;
-	private final RuntimeService runtimeService;
-	private final HistoryService historyService;
-	private final TaskService taskService;
-	private final ProcessEngine processEngine;
-
-	@Override
-	public IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel) {
-		return page.setRecords(baseMapper.selectFlowPage(page, flowModel));
-	}
-
-	@Override
-	public IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode) {
-		ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().latestVersion().orderByProcessDefinitionKey().asc();
-		// 閫氱敤娴佺▼
-		if (mode == FlowModeEnum.COMMON.getMode()) {
-			processDefinitionQuery.processDefinitionWithoutTenantId();
-		}
-		// 瀹氬埗娴佺▼
-		else if (!AuthUtil.isAdministrator()) {
-			processDefinitionQuery.processDefinitionTenantId(AuthUtil.getTenantId());
-		}
-		if (StringUtils.isNotEmpty(category)) {
-			processDefinitionQuery.processDefinitionCategory(category);
-		}
-		List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-		List<FlowProcess> flowProcessList = new ArrayList<>();
-		processDefinitionList.forEach(processDefinition -> {
-			String deploymentId = processDefinition.getDeploymentId();
-			Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
-			FlowProcess flowProcess = new FlowProcess((ProcessDefinitionEntityImpl) processDefinition);
-			flowProcess.setDeploymentTime(deployment.getDeploymentTime());
-			flowProcessList.add(flowProcess);
-		});
-		page.setTotal(processDefinitionQuery.count());
-		page.setRecords(flowProcessList);
-		return page;
-	}
-
-	@Override
-	public IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey) {
-		ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
-		if (StringUtil.isNotBlank(processInstanceId)) {
-			processInstanceQuery.processInstanceId(processInstanceId);
-		}
-		if (StringUtil.isNotBlank(processDefinitionKey)) {
-			processInstanceQuery.processDefinitionKey(processDefinitionKey);
-		}
-		List<FlowExecution> flowList = new ArrayList<>();
-		List<ProcessInstance> procInsList = processInstanceQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
-		procInsList.forEach(processInstance -> {
-			ExecutionEntityImpl execution = (ExecutionEntityImpl) processInstance;
-			FlowExecution flowExecution = new FlowExecution();
-			flowExecution.setId(execution.getId());
-			flowExecution.setName(execution.getName());
-			flowExecution.setStartUserId(execution.getStartUserId());
-			User taskUser = UserCache.getUserByTaskUser(execution.getStartUserId());
-			if (taskUser != null) {
-				flowExecution.setStartUser(taskUser.getName());
-			}
-			flowExecution.setStartTime(execution.getStartTime());
-			flowExecution.setExecutionId(execution.getId());
-			flowExecution.setProcessInstanceId(execution.getProcessInstanceId());
-			flowExecution.setProcessDefinitionId(execution.getProcessDefinitionId());
-			flowExecution.setProcessDefinitionKey(execution.getProcessDefinitionKey());
-			flowExecution.setSuspensionState(execution.getSuspensionState());
-			FlowProcess processDefinition = FlowCache.getProcessDefinition(execution.getProcessDefinitionId());
-			flowExecution.setCategory(processDefinition.getCategory());
-			flowExecution.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
-			flowList.add(flowExecution);
-		});
-		page.setTotal(processInstanceQuery.count());
-		page.setRecords(flowList);
-		return page;
-	}
-
-	@Override
-	public List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) {
-		List<BladeFlow> flowList = new LinkedList<>();
-		List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().orderByHistoricActivityInstanceEndTime().asc().list();
-		boolean start = false;
-		Map<String, Integer> activityMap = new HashMap<>(16);
-		for (int i = 0; i < historicActivityInstanceList.size(); i++) {
-			HistoricActivityInstance historicActivityInstance = historicActivityInstanceList.get(i);
-			// 杩囨护寮�濮嬭妭鐐瑰墠鐨勮妭鐐�
-			if (StringUtil.isNotBlank(startActivityId) && startActivityId.equals(historicActivityInstance.getActivityId())) {
-				start = true;
-			}
-			if (StringUtil.isNotBlank(startActivityId) && !start) {
-				continue;
-			}
-			// 鏄剧ず寮�濮嬭妭鐐瑰拰缁撴潫鑺傜偣锛屽苟涓旀墽琛屼汉涓嶄负绌虹殑浠诲姟
-			if (StringUtils.equals(USR_TASK, historicActivityInstance.getActivityType())
-				|| FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())
-				|| FlowEngineConstant.END_EVENT.equals(historicActivityInstance.getActivityType())) {
-				// 缁欒妭鐐瑰鍔犲簭鍙�
-				Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
-				if (activityNum == null) {
-					activityMap.put(historicActivityInstance.getActivityId(), activityMap.size());
-				}
-				BladeFlow flow = new BladeFlow();
-				flow.setHistoryActivityId(historicActivityInstance.getActivityId());
-				flow.setHistoryActivityName(historicActivityInstance.getActivityName());
-				flow.setCreateTime(historicActivityInstance.getStartTime());
-				flow.setEndTime(historicActivityInstance.getEndTime());
-				String durationTime = DateUtil.secondToTime(Func.toLong(historicActivityInstance.getDurationInMillis(), 0L) / 1000);
-				flow.setHistoryActivityDurationTime(durationTime);
-				// 鑾峰彇娴佺▼鍙戣捣浜哄悕绉�
-				if (FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())) {
-					List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).orderByProcessInstanceStartTime().asc().list();
-					if (processInstanceList.size() > 0) {
-						if (StringUtil.isNotBlank(processInstanceList.get(0).getStartUserId())) {
-							String taskUser = processInstanceList.get(0).getStartUserId();
-							User user = UserCache.getUser(TaskUtil.getUserId(taskUser));
-							if (user != null) {
-								flow.setAssignee(historicActivityInstance.getAssignee());
-								flow.setAssigneeName(user.getName());
-							}
-						}
-					}
-				}
-				// 鑾峰彇浠诲姟鎵ц浜哄悕绉�
-				if (StringUtil.isNotBlank(historicActivityInstance.getAssignee())) {
-					User user = UserCache.getUser(TaskUtil.getUserId(historicActivityInstance.getAssignee()));
-					if (user != null) {
-						flow.setAssignee(historicActivityInstance.getAssignee());
-						flow.setAssigneeName(user.getName());
-					}
-				}
-				// 鑾峰彇鎰忚璇勮鍐呭
-				if (StringUtil.isNotBlank(historicActivityInstance.getTaskId())) {
-					List<Comment> commentList = taskService.getTaskComments(historicActivityInstance.getTaskId());
-					if (commentList.size() > 0) {
-						flow.setComment(commentList.get(0).getFullMessage());
-					}
-				}
-				flowList.add(flow);
-			}
-			// 杩囨护缁撴潫鑺傜偣鍚庣殑鑺傜偣
-			if (StringUtils.isNotBlank(endActivityId) && endActivityId.equals(historicActivityInstance.getActivityId())) {
-				boolean temp = false;
-				Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
-				// 璇ユ椿鍔ㄨ妭鐐癸紝鍚庣画鑺傜偣鏄惁鍦ㄧ粨鏉熻妭鐐逛箣鍓嶏紝鍦ㄥ悗缁妭鐐逛腑鏄惁瀛樺湪
-				for (int j = i + 1; j < historicActivityInstanceList.size(); j++) {
-					HistoricActivityInstance hi = historicActivityInstanceList.get(j);
-					Integer activityNumA = activityMap.get(hi.getActivityId());
-					boolean numberTemp = activityNumA != null && activityNumA < activityNum;
-					boolean equalsTemp = StringUtils.equals(hi.getActivityId(), historicActivityInstance.getActivityId());
-					if (numberTemp || equalsTemp) {
-						temp = true;
-					}
-				}
-				if (!temp) {
-					break;
-				}
-			}
-		}
-		return flowList;
-	}
-
-	@Override
-	public String changeState(String state, String processId) {
-		try {
-			if (state.equals(FlowEngineConstant.ACTIVE)) {
-				repositoryService.activateProcessDefinitionById(processId, true, null);
-				return StringUtil.format("婵�娲籌D涓� [{}] 鐨勬祦绋嬫垚鍔�", processId);
-			} else if (state.equals(FlowEngineConstant.SUSPEND)) {
-				repositoryService.suspendProcessDefinitionById(processId, true, null);
-				return StringUtil.format("鎸傝捣ID涓� [{}] 鐨勬祦绋嬫垚鍔�", processId);
-			} else {
-				return "鏆傛棤娴佺▼鍙樻洿";
-			}
-		} catch (Exception e) {
-			if (e.getMessage().contains(ALREADY_IN_STATE)) {
-				return StringUtil.format("ID涓� [{}] 鐨勬祦绋嬪凡鏄鐘舵�侊紝鏃犻渶鎿嶄綔", processId);
-			}
-			return e.getMessage();
-		}
-	}
-
-	@Override
-	public boolean deleteDeployment(String deploymentIds) {
-		Func.toStrList(deploymentIds).forEach(deploymentId -> repositoryService.deleteDeployment(deploymentId, true));
-		return true;
-	}
-
-	@Override
-	public boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList) {
-		files.forEach(file -> {
-			try {
-				String fileName = file.getOriginalFilename();
-				InputStream fileInputStream = file.getInputStream();
-				byte[] bytes = FileUtil.copyToByteArray(fileInputStream);
-				if (Func.isNotEmpty(tenantIdList)) {
-					tenantIdList.forEach(tenantId -> {
-						Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).tenantId(tenantId).deploy();
-						deploy(deployment, category);
-					});
-				} else {
-					Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).deploy();
-					deploy(deployment, category);
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		});
-		return true;
-	}
-
-	@Override
-	public boolean deployModel(String modelId, String category, List<String> tenantIdList) {
-		FlowModel model = this.getById(modelId);
-		if (model == null) {
-			throw new ServiceException("鏈壘鍒版ā鍨� id: " + modelId);
-		}
-		byte[] bytes = getBpmnXML(model);
-		String processName = model.getName();
-		if (!StringUtil.endsWithIgnoreCase(processName, FlowEngineConstant.SUFFIX)) {
-			processName += FlowEngineConstant.SUFFIX;
-		}
-		String finalProcessName = processName;
-		if (Func.isNotEmpty(tenantIdList)) {
-			tenantIdList.forEach(tenantId -> {
-				Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).tenantId(tenantId).deploy();
-				deploy(deployment, category);
-			});
-		} else {
-			Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).deploy();
-			deploy(deployment, category);
-		}
-		return true;
-	}
-
-	@Override
-	public boolean deleteProcessInstance(String processInstanceId, String deleteReason) {
-		runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
-		return true;
-	}
-
-	private void deploy(Deployment deployment, String category) {
-		log.debug("娴佺▼閮ㄧ讲--------deploy:  " + deployment + "  鍒嗙被---------->" + category);
-		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
-		StringBuilder logBuilder = new StringBuilder(500);
-		List<Object> logArgs = new ArrayList<>();
-		// 璁剧疆娴佺▼鍒嗙被
-		for (ProcessDefinition processDefinition : list) {
-			if (StringUtil.isNotBlank(category)) {
-				repositoryService.setProcessDefinitionCategory(processDefinition.getId(), category);
-			}
-			logBuilder.append("閮ㄧ讲鎴愬姛,娴佺▼ID={} \n");
-			logArgs.add(processDefinition.getId());
-		}
-		if (list.size() == 0) {
-			throw new ServiceException("閮ㄧ讲澶辫触,鏈壘鍒版祦绋�");
-		} else {
-			log.info(logBuilder.toString(), logArgs.toArray());
-		}
-	}
-
-	@Override
-	public FlowModel submitModel(FlowModel model) {
-		FlowModel flowModel = new FlowModel();
-		flowModel.setId(model.getId());
-		flowModel.setVersion(Func.toInt(model.getVersion(), 0) + 1);
-		flowModel.setName(model.getName());
-		flowModel.setModelKey(model.getModelKey());
-		flowModel.setModelType(FlowModel.MODEL_TYPE_BPMN);
-		flowModel.setCreatedBy(TaskUtil.getTaskUser());
-		flowModel.setDescription(model.getDescription());
-		flowModel.setLastUpdated(Calendar.getInstance().getTime());
-		flowModel.setLastUpdatedBy(TaskUtil.getTaskUser());
-		flowModel.setTenantId(AuthUtil.getTenantId());
-		flowModel.setModelEditorXml(model.getModelEditorXml());
-		if (StringUtil.isBlank(model.getId())) {
-			flowModel.setCreated(Calendar.getInstance().getTime());
-		}
-		if (StringUtil.isNotBlank(model.getModelEditorXml())) {
-			flowModel.setModelEditorJson(getBpmnJson(model.getModelEditorXml()));
-		}
-		this.saveOrUpdate(flowModel);
-		return flowModel;
-	}
-
-	@Override
-	public Map<String, Object> modelView(String processDefinitionId, String processInstanceId) {
-		Map<String, Object> result = new HashMap<>();
-		// 鑺傜偣鏍囪
-		if (StringUtil.isNotBlank(processInstanceId)) {
-			result.put("flow", this.historyFlowList(processInstanceId, null, null));
-			HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery()
-				.processInstanceId(processInstanceId)
-				.singleResult();
-			processDefinitionId = processInstance.getProcessDefinitionId();
-		}
-		BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
-		// 娴佺▼鍥惧睍绀�
-		result.put("xml", new String(new BpmnXMLConverter().convertToXML(bpmnModel)));
-		return result;
-	}
-
-	@Override
-	public void diagramView(String processInstanceId, HttpServletResponse httpServletResponse) {
-		// 鑾峰緱褰撳墠娲诲姩鐨勮妭鐐�
-		String processDefinitionId;
-		// 濡傛灉娴佺▼宸茬粡缁撴潫锛屽垯寰楀埌缁撴潫鑺傜偣
-		if (this.isFinished(processInstanceId)) {
-			HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-			processDefinitionId = pi.getProcessDefinitionId();
-		} else {
-			// 濡傛灉娴佺▼娌℃湁缁撴潫锛屽垯鍙栧綋鍓嶆椿鍔ㄨ妭鐐�
-			// 鏍规嵁娴佺▼瀹炰緥ID鑾峰緱褰撳墠澶勪簬娲诲姩鐘舵�佺殑ActivityId鍚堥泦
-			ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-			processDefinitionId = pi.getProcessDefinitionId();
-		}
-		List<String> highLightedActivities = new ArrayList<>();
-
-		// 鑾峰緱娲诲姩鐨勮妭鐐�
-		List<HistoricActivityInstance> highLightedActivityList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
-
-		for (HistoricActivityInstance tempActivity : highLightedActivityList) {
-			String activityId = tempActivity.getActivityId();
-			highLightedActivities.add(activityId);
-		}
-
-		List<String> flows = new ArrayList<>();
-		// 鑾峰彇娴佺▼鍥�
-		BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
-		ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration();
-
-		ProcessDiagramGenerator diagramGenerator = engConf.getProcessDiagramGenerator();
-		InputStream in = diagramGenerator.generateDiagram(bpmnModel, "bmp", highLightedActivities, flows, engConf.getActivityFontName(),
-			engConf.getLabelFontName(), engConf.getAnnotationFontName(), engConf.getClassLoader(), 1.0, true);
-		OutputStream out = null;
-		byte[] buf = new byte[1024];
-		int length;
-		try {
-			out = httpServletResponse.getOutputStream();
-			while ((length = in.read(buf)) != -1) {
-				out.write(buf, 0, length);
-			}
-		} catch (IOException e) {
-			log.error("鎿嶄綔寮傚父", e);
-		} finally {
-			IoUtil.closeSilently(out);
-			IoUtil.closeSilently(in);
-		}
-	}
-
-	@Override
-	public void AutowiredView(String processDefinitionId, String processInstanceId, String AutowiredType, HttpServletResponse response) {
-		if (StringUtil.isAllBlank(processDefinitionId, processInstanceId)) {
-			return;
-		}
-		if (StringUtil.isBlank(processDefinitionId)) {
-			ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
-			processDefinitionId = processInstance.getProcessDefinitionId();
-		}
-		ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
-		String AutowiredName = "";
-		if (AutowiredType.equals(IMAGE_NAME)) {
-			AutowiredName = processDefinition.getDiagramResourceName();
-		} else if (AutowiredType.equals(XML_NAME)) {
-			AutowiredName = processDefinition.getResourceName();
-		}
-		try {
-			InputStream AutowiredAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), AutowiredName);
-			byte[] b = new byte[1024];
-			int len;
-			while ((len = AutowiredAsStream.read(b, 0, INT_1024)) != -1) {
-				response.getOutputStream().write(b, 0, len);
-			}
-		} catch (Exception exception) {
-			exception.printStackTrace();
-		}
-	}
-
-	@Override
-	public byte[] getModelEditorXML(FlowModel model) {
-		return getBpmnXML(model);
-	}
-
-	/**
-	 * 鏄惁宸插畬缁�
-	 *
-	 * @param processInstanceId 娴佺▼瀹炰緥id
-	 * @return bool
-	 */
-	private boolean isFinished(String processInstanceId) {
-		return historyService.createHistoricProcessInstanceQuery().finished()
-			.processInstanceId(processInstanceId).count() > 0;
-	}
-
-
-	/**
-	 * xml杞琤pmn json
-	 *
-	 * @param xml xml
-	 * @return json
-	 */
-	private String getBpmnJson(String xml) {
-		return BPMN_JSON_CONVERTER.convertToJson(getBpmnModel(xml)).toString();
-	}
-
-	/**
-	 * xml杞琤pmnModel
-	 *
-	 * @param xml xml
-	 * @return bpmnModel
-	 */
-	private BpmnModel getBpmnModel(String xml) {
-		return BPMN_XML_CONVERTER.convertToBpmnModel(new StringStreamSource(xml), false, false);
-	}
-
-	private byte[] getBpmnXML(FlowModel model) {
-		BpmnModel bpmnModel = getBpmnModel(model);
-		return getBpmnXML(bpmnModel);
-	}
-
-	private byte[] getBpmnXML(BpmnModel bpmnModel) {
-		for (Process process : bpmnModel.getProcesses()) {
-			if (StringUtils.isNotEmpty(process.getId())) {
-				char firstCharacter = process.getId().charAt(0);
-				if (Character.isDigit(firstCharacter)) {
-					process.setId("a" + process.getId());
-				}
-			}
-		}
-		return BPMN_XML_CONVERTER.convertToXML(bpmnModel);
-	}
-
-	private BpmnModel getBpmnModel(FlowModel model) {
-		BpmnModel bpmnModel;
-		try {
-			Map<String, FlowModel> formMap = new HashMap<>(16);
-			Map<String, FlowModel> decisionTableMap = new HashMap<>(16);
-
-			List<FlowModel> referencedModels = baseMapper.findByParentModelId(model.getId());
-			for (FlowModel childModel : referencedModels) {
-				if (FlowModel.MODEL_TYPE_FORM == childModel.getModelType()) {
-					formMap.put(childModel.getId(), childModel);
-
-				} else if (FlowModel.MODEL_TYPE_DECISION_TABLE == childModel.getModelType()) {
-					decisionTableMap.put(childModel.getId(), childModel);
-				}
-			}
-			bpmnModel = getBpmnModel(model, formMap, decisionTableMap);
-		} catch (Exception e) {
-			log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
-			throw new ServiceException("Could not generate BPMN 2.0 model");
-		}
-		return bpmnModel;
-	}
-
-	private BpmnModel getBpmnModel(FlowModel model, Map<String, FlowModel> formMap, Map<String, FlowModel> decisionTableMap) {
-		try {
-			ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(model.getModelEditorJson());
-			Map<String, String> formKeyMap = new HashMap<>(16);
-			for (FlowModel formModel : formMap.values()) {
-				formKeyMap.put(formModel.getId(), formModel.getModelKey());
-			}
-			Map<String, String> decisionTableKeyMap = new HashMap<>(16);
-			for (FlowModel decisionTableModel : decisionTableMap.values()) {
-				decisionTableKeyMap.put(decisionTableModel.getId(), decisionTableModel.getModelKey());
-			}
-			return BPMN_JSON_CONVERTER.convertToBpmnModel(editorJsonNode, formKeyMap, decisionTableKeyMap);
-		} catch (Exception e) {
-			log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
-			throw new ServiceException("Could not generate BPMN 2.0 model");
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/utils/FlowCache.java b/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/utils/FlowCache.java
deleted file mode 100644
index a8d0745..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/utils/FlowCache.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.engine.utils;
-
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.system.cache.DictCache;
-
-import static org.springblade.core.cache.constant.CacheConstant.FLOW_CACHE;
-
-/**
- * 娴佺▼缂撳瓨
- *
- * @author Chill
- */
-public class FlowCache {
-
-	private static final String FLOW_DEFINITION_ID = "definition:id:";
-	private static RepositoryService repositoryService;
-
-	private static RepositoryService getRepositoryService() {
-		if (repositoryService == null) {
-			repositoryService = SpringUtil.getBean(RepositoryService.class);
-		}
-		return repositoryService;
-	}
-
-	/**
-	 * 鑾峰緱娴佺▼瀹氫箟瀵硅薄
-	 *
-	 * @param processDefinitionId 娴佺▼瀵硅薄id
-	 * @return
-	 */
-	public static FlowProcess getProcessDefinition(String processDefinitionId) {
-		return CacheUtil.get(FLOW_CACHE, FLOW_DEFINITION_ID, processDefinitionId, () -> {
-			ProcessDefinition processDefinition = getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
-			ProcessDefinitionEntityImpl processDefinitionEntity = BeanUtil.copy(processDefinition, ProcessDefinitionEntityImpl.class);
-			return new FlowProcess(processDefinitionEntity);
-		});
-	}
-
-	/**
-	 * 鑾峰彇娴佺▼绫诲瀷鍚�
-	 *
-	 * @param category 娴佺▼绫诲瀷
-	 * @return
-	 */
-	public static String getCategoryName(String category) {
-		String[] categoryArr = category.split(StringPool.UNDERSCORE);
-		if (categoryArr.length <= 1) {
-			return StringPool.EMPTY;
-		} else {
-			return DictCache.getValue(category.split(StringPool.UNDERSCORE)[0], Func.toInt(category.split(StringPool.UNDERSCORE)[1]));
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml b/Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml
deleted file mode 100644
index a7af970..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.flow.engine.mapper.FlowMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="flowModelResultMap" type="org.springblade.flow.engine.entity.FlowModel">
-        <result column="id" property="id"/>
-        <result column="name" property="name"/>
-        <result column="model_key" property="modelKey"/>
-        <result column="description" property="description"/>
-        <result column="model_comment" property="modelComment"/>
-        <result column="created" property="created"/>
-        <result column="created_by" property="createdBy"/>
-        <result column="last_updated" property="lastUpdated"/>
-        <result column="last_updated_by" property="lastUpdatedBy"/>
-        <result column="version" property="version"/>
-        <result column="model_editor_json" property="modelEditorJson"/>
-        <result column="thumbnail" property="thumbnail"/>
-        <result column="model_type" property="modelType"/>
-        <result column="tenant_id" property="tenantId"/>
-    </resultMap>
-
-    <select id="selectFlowPage" resultMap="flowModelResultMap">
-        SELECT
-            a.id,
-            a.name,
-            a.model_key,
-            a.description,
-            a.model_comment,
-            a.created,
-            a.created_by,
-            a.last_updated,
-            a.last_updated_by,
-            a.version,
-            a.model_editor_json,
-            a.thumbnail,
-            a.model_type,
-            a.tenant_id
-        FROM
-            ACT_DE_MODEL a
-        WHERE
-            1 = 1
-        ORDER BY
-            a.created DESC
-    </select>
-
-    <select id="findByParentModelId" parameterType="string" resultMap="flowModelResultMap">
-        select model.* from ACT_DE_MODEL_RELATION modelrelation
-                                inner join ACT_DE_MODEL model on modelrelation.model_id = model.id
-        where modelrelation.parent_model_id = #{_parameter}
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/BladeTest.java b/Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/BladeTest.java
deleted file mode 100644
index 29fa101..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/BladeTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.springblade.flow.test;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.springblade.core.test.BladeBootTest;
-import org.springblade.core.test.BladeSpringExtension;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.engine.entity.FlowModel;
-import org.springblade.flow.engine.service.FlowEngineService;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.List;
-
-/**
- * Blade鍗曞厓娴嬭瘯
- *
- * @author Chill
- */
-@ExtendWith(BladeSpringExtension.class)
-@BladeBootTest(appName = "blade-flow", enableLoader = true)
-public class BladeTest {
-
-	@Autowired
-	private FlowEngineService service;
-
-	@Test
-	public void contextLoads() {
-		System.out.println("=====鏁版嵁杩佺Щ鍚姩=====");
-
-		// 鑾峰彇 ACT_DE_MODEL 琛ㄩ渶瑕佽浆鎹㈢殑鏁版嵁
-		List<FlowModel> list = service.list();
-		// 寰幆杞崲
-		list.forEach(flowModel -> {
-			if (StringUtil.isBlank(flowModel.getModelEditorXml())) {
-				service.update(Wrappers.<FlowModel>lambdaUpdate()
-					.set(FlowModel::getModelEditorXml, new String(service.getModelEditorXML(flowModel)))
-					.ge(FlowModel::getId, flowModel.getId())
-				);
-			}
-		});
-
-		System.out.println("=====鏁版嵁杩佺Щ瀹屾瘯=====");
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/launch/LauncherTestServiceImpl.java b/Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/launch/LauncherTestServiceImpl.java
deleted file mode 100644
index ad03eef..0000000
--- a/Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/launch/LauncherTestServiceImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.flow.test.launch;
-
-import org.springblade.common.constant.LauncherConstant;
-import org.springblade.core.auto.service.AutoService;
-import org.springblade.core.launch.service.LauncherService;
-import org.springblade.core.launch.utils.PropsUtil;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-
-import java.util.Properties;
-
-/**
- * 鍚姩鍙傛暟鎷撳睍
- *
- * @author smallchil
- */
-@AutoService(LauncherService.class)
-public class LauncherTestServiceImpl implements LauncherService {
-
-	@Override
-	public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) {
-		Properties props = System.getProperties();
-		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
-		PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
-		PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/pom.xml b/Source/BladeX/blade-ops/blade-log/pom.xml
deleted file mode 100644
index 0f2952c..0000000
--- a/Source/BladeX/blade-ops/blade-log/pom.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-log</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-tenant</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/LogApplication.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/LogApplication.java
deleted file mode 100644
index 34080ac..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/LogApplication.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * 鏃ュ織鏈嶅姟
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class LogApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_LOG_NAME, LogApplication.class, args);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java
deleted file mode 100644
index 6f7ca94..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.controller;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.springblade.core.log.model.LogApi;
-import org.springblade.core.log.service.ILogApiService;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.Map;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/api")
-public class LogApiController {
-
-	private final ILogApiService logService;
-
-	/**
-	 * 鏌ヨ鍗曟潯
-	 */
-	@GetMapping("/detail")
-	public R<LogApi> detail(LogApi log) {
-		return R.data(logService.getOne(Condition.getQueryWrapper(log)));
-	}
-
-	/**
-	 * 鏌ヨ澶氭潯(鍒嗛〉)
-	 */
-	@GetMapping("/list")
-	public R<IPage<LogApi>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
-		IPage<LogApi> pages = logService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(log, LogApi.class));
-		return R.data(pages);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogErrorController.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogErrorController.java
deleted file mode 100644
index 5dd1a29..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogErrorController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.controller;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.springblade.core.log.model.LogError;
-import org.springblade.core.log.service.ILogErrorService;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.Map;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/error")
-public class LogErrorController {
-
-	private final ILogErrorService errorLogService;
-
-	/**
-	 * 鏌ヨ鍗曟潯
-	 */
-	@GetMapping("/detail")
-	public R<LogError> detail(LogError logError) {
-		return R.data(errorLogService.getOne(Condition.getQueryWrapper(logError)));
-	}
-
-	/**
-	 * 鏌ヨ澶氭潯(鍒嗛〉)
-	 */
-	@GetMapping("/list")
-	public R<IPage<LogError>> list(@ApiIgnore @RequestParam Map<String, Object> logError, Query query) {
-		IPage<LogError> pages = errorLogService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(logError, LogError.class));
-		return R.data(pages);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogUsualController.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogUsualController.java
deleted file mode 100644
index aeaee60..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogUsualController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.controller;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.springblade.core.log.model.LogUsual;
-import org.springblade.core.log.service.ILogUsualService;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.Map;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/usual")
-public class LogUsualController {
-
-	private final ILogUsualService logService;
-
-	/**
-	 * 鏌ヨ鍗曟潯
-	 */
-	@GetMapping("/detail")
-	public R<LogUsual> detail(LogUsual log) {
-		return R.data(logService.getOne(Condition.getQueryWrapper(log)));
-	}
-
-	/**
-	 * 鏌ヨ澶氭潯(鍒嗛〉)
-	 */
-	@GetMapping("/list")
-	public R<IPage<LogUsual>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
-		IPage<LogUsual> pages = logService.page(Condition.getPage(query), Condition.getQueryWrapper(log, LogUsual.class));
-		return R.data(pages);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/feign/LogClient.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/feign/LogClient.java
deleted file mode 100644
index c232c99..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/feign/LogClient.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.feign;
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.log.model.LogApi;
-import org.springblade.core.log.model.LogError;
-import org.springblade.core.log.model.LogUsual;
-import org.springblade.core.log.service.ILogApiService;
-import org.springblade.core.log.service.ILogErrorService;
-import org.springblade.core.log.service.ILogUsualService;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 鏃ュ織鏈嶅姟Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-public class LogClient implements ILogClient {
-
-	private final ILogUsualService usualLogService;
-
-	private final ILogApiService apiLogService;
-
-	private final ILogErrorService errorLogService;
-
-	@Override
-	@PostMapping(API_PREFIX + "/saveUsualLog")
-	public R<Boolean> saveUsualLog(@RequestBody LogUsual log) {
-		log.setParams(log.getParams().replace("&amp;", "&"));
-		return R.data(usualLogService.save(log));
-	}
-
-	@Override
-	@PostMapping(API_PREFIX + "/saveApiLog")
-	public R<Boolean> saveApiLog(@RequestBody LogApi log) {
-		log.setParams(log.getParams().replace("&amp;", "&"));
-		return R.data(apiLogService.save(log));
-	}
-
-	@Override
-	@PostMapping(API_PREFIX + "/saveErrorLog")
-	public R<Boolean> saveErrorLog(@RequestBody LogError log) {
-		log.setParams(log.getParams().replace("&amp;", "&"));
-		return R.data(errorLogService.save(log));
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.java
deleted file mode 100644
index 15049aa..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.core.log.model.LogApi;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface LogApiMapper extends BaseMapper<LogApi> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.xml b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.xml
deleted file mode 100644
index 6c2aca5..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.core.log.mapper.LogApiMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="logResultMap" type="org.springblade.core.log.model.LogApi">
-        <result column="id" property="id"/>
-        <result column="create_time" property="createTime"/>
-        <result column="service_id" property="serviceId"/>
-        <result column="server_host" property="serverHost"/>
-        <result column="server_ip" property="serverIp"/>
-        <result column="env" property="env"/>
-        <result column="type" property="type"/>
-        <result column="title" property="title"/>
-        <result column="method" property="method"/>
-        <result column="request_uri" property="requestUri"/>
-        <result column="user_agent" property="userAgent"/>
-        <result column="remote_ip" property="remoteIp"/>
-        <result column="method_class" property="methodClass"/>
-        <result column="method_name" property="methodName"/>
-        <result column="params" property="params"/>
-        <result column="time" property="time"/>
-        <result column="create_by" property="createBy"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.java
deleted file mode 100644
index a38d9b5..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.core.log.model.LogError;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface LogErrorMapper extends BaseMapper<LogError> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.xml b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.xml
deleted file mode 100644
index c3fa1d6..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.core.log.mapper.LogErrorMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="errorLogResultMap" type="org.springblade.core.log.model.LogError">
-        <result column="id" property="id"/>
-        <result column="create_time" property="createTime"/>
-        <result column="service_id" property="serviceId"/>
-        <result column="server_host" property="serverHost"/>
-        <result column="server_ip" property="serverIp"/>
-        <result column="env" property="env"/>
-        <result column="method" property="method"/>
-        <result column="request_uri" property="requestUri"/>
-        <result column="user_agent" property="userAgent"/>
-        <result column="stack_trace" property="stackTrace"/>
-        <result column="exception_name" property="exceptionName"/>
-        <result column="message" property="message"/>
-        <result column="line_number" property="lineNumber"/>
-        <result column="method_class" property="methodClass"/>
-        <result column="file_name" property="fileName"/>
-        <result column="method_name" property="methodName"/>
-        <result column="params" property="params"/>
-        <result column="create_by" property="createBy"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.java
deleted file mode 100644
index 59c136d..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.core.log.model.LogUsual;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface LogUsualMapper extends BaseMapper<LogUsual> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.xml b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.xml
deleted file mode 100644
index a08570d..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.core.log.mapper.LogUsualMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="logResultMap" type="org.springblade.core.log.model.LogUsual">
-        <result column="id" property="id"/>
-        <result column="create_time" property="createTime"/>
-        <result column="service_id" property="serviceId"/>
-        <result column="server_host" property="serverHost"/>
-        <result column="server_ip" property="serverIp"/>
-        <result column="env" property="env"/>
-        <result column="log_level" property="logLevel"/>
-        <result column="log_data" property="logData"/>
-        <result column="method" property="method"/>
-        <result column="request_uri" property="requestUri"/>
-        <result column="user_agent" property="userAgent"/>
-        <result column="params" property="params"/>
-        <result column="create_by" property="createBy"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java
deleted file mode 100644
index 3699225..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.log.model.LogApi;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface ILogApiService extends IService<LogApi> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogErrorService.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogErrorService.java
deleted file mode 100644
index 5576fe3..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogErrorService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.log.model.LogError;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface ILogErrorService extends IService<LogError> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogUsualService.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogUsualService.java
deleted file mode 100644
index f6f795d..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogUsualService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.log.model.LogUsual;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface ILogUsualService extends IService<LogUsual> {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java
deleted file mode 100644
index d4e463b..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.log.mapper.LogApiMapper;
-import org.springblade.core.log.model.LogApi;
-import org.springblade.core.log.service.ILogApiService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApi> implements ILogApiService {
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogErrorServiceImpl.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogErrorServiceImpl.java
deleted file mode 100644
index 837f4c9..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogErrorServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.log.mapper.LogErrorMapper;
-import org.springblade.core.log.model.LogError;
-import org.springblade.core.log.service.ILogErrorService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class LogErrorServiceImpl extends ServiceImpl<LogErrorMapper, LogError> implements ILogErrorService {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogUsualServiceImpl.java b/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogUsualServiceImpl.java
deleted file mode 100644
index 3d348e7..0000000
--- a/Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogUsualServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.core.log.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.log.mapper.LogUsualMapper;
-import org.springblade.core.log.model.LogUsual;
-import org.springblade.core.log.service.ILogUsualService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class LogUsualServiceImpl extends ServiceImpl<LogUsualMapper, LogUsual> implements ILogUsualService {
-
-}
diff --git a/Source/BladeX/blade-ops/blade-report/pom.xml b/Source/BladeX/blade-ops/blade-report/pom.xml
deleted file mode 100644
index ed54ad6..0000000
--- a/Source/BladeX/blade-ops/blade-report/pom.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-report</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-tenant</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-report</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/ReportApplication.java b/Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/ReportApplication.java
deleted file mode 100644
index 3c3e128..0000000
--- a/Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/ReportApplication.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.report;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * UReport鍚姩鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class ReportApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_REPORT_NAME, ReportApplication.class, args);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/config/BladeReportConfiguration.java b/Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/config/BladeReportConfiguration.java
deleted file mode 100644
index 276e4d5..0000000
--- a/Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/config/BladeReportConfiguration.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.report.config;
-
-import org.springblade.core.report.datasource.ReportDataSource;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.sql.DataSource;
-
-/**
- * 鎶ヨ〃閰嶇疆绫�
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@ConditionalOnProperty(value = "report.enabled", havingValue = "true", matchIfMissing = true)
-public class BladeReportConfiguration {
-
-	/**
-	 * 鑷畾涔夋姤琛ㄥ彲閫夋暟鎹簮
-	 */
-	@Bean
-	public ReportDataSource reportDataSource(DataSource dataSource) {
-		return new ReportDataSource(dataSource);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/Dockerfile b/Source/BladeX/blade-ops/blade-resource/Dockerfile
deleted file mode 100644
index 7ef1948..0000000
--- a/Source/BladeX/blade-ops/blade-resource/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM bladex/alpine-java:openjdk8-openj9_cn_slim
-
-MAINTAINER bladejava@qq.com
-
-RUN mkdir -p /blade/Autowired
-
-WORKDIR /blade/Autowired
-
-EXPOSE 36007
-
-ADD ./target/blade-Autowired.jar ./app.jar
-
-ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
-
-CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-resource/pom.xml b/Source/BladeX/blade-ops/blade-resource/pom.xml
deleted file mode 100644
index b4e9e74..0000000
--- a/Source/BladeX/blade-ops/blade-resource/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-Autowired</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <!--Oss-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-oss</artifactId>
-        </dependency>
-        <!--Sms-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-sms</artifactId>
-        </dependency>
-        <!--MinIO-->
-        <dependency>
-            <groupId>io.minio</groupId>
-            <artifactId>minio</artifactId>
-        </dependency>
-        <!--Alioss-->
-        <dependency>
-            <groupId>com.aliyun.oss</groupId>
-            <artifactId>aliyun-sdk-oss</artifactId>
-        </dependency>
-        <!--AliSms-->
-        <dependency>
-            <groupId>com.aliyun</groupId>
-            <artifactId>aliyun-java-sdk-core</artifactId>
-        </dependency>
-        <!--鑵捐COS-->
-        <dependency>
-            <groupId>com.qcloud</groupId>
-            <artifactId>cos_api</artifactId>
-        </dependency>
-        <!--鑵捐SMS-->
-        <dependency>
-            <groupId>com.github.qcloudsms</groupId>
-            <artifactId>qcloudsms</artifactId>
-        </dependency>
-        <!--QiNiu-->
-        <dependency>
-            <groupId>com.qiniu</groupId>
-            <artifactId>qiniu-java-sdk</artifactId>
-        </dependency>
-        <!--YunPian-->
-        <dependency>
-            <groupId>com.yunpian.sdk</groupId>
-            <artifactId>yunpian-java-sdk</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-Autowired-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-dict-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/ResourceApplication.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/ResourceApplication.java
deleted file mode 100644
index 89db1dd..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/ResourceApplication.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * 璧勬簮鍚姩鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class ResourceApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_REPORT_NAME, ResourceApplication.class, args);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java
deleted file mode 100644
index 0f4f2be..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.oss;
-
-import com.aliyun.oss.ClientConfiguration;
-import com.aliyun.oss.OSSClient;
-import com.aliyun.oss.common.auth.CredentialsProvider;
-import com.aliyun.oss.common.auth.DefaultCredentialProvider;
-import lombok.SneakyThrows;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.AliossTemplate;
-import org.springblade.core.oss.props.OssProperties;
-import org.springblade.core.oss.rule.OssRule;
-import org.springblade.Autowired.entity.Oss;
-
-/**
- * 闃块噷浜戝瓨鍌ㄦ瀯寤虹被
- *
- * @author Chill
- */
-public class AliOssBuilder {
-
-	@SneakyThrows
-	public static OssTemplate template(Oss oss, OssRule ossRule) {
-		// 鍒涘缓ClientConfiguration銆侰lientConfiguration鏄疧SSClient鐨勯厤缃被锛屽彲閰嶇疆浠g悊銆佽繛鎺ヨ秴鏃躲�佹渶澶ц繛鎺ユ暟绛夊弬鏁般��
-		ClientConfiguration conf = new ClientConfiguration();
-		// 璁剧疆OSSClient鍏佽鎵撳紑鐨勬渶澶TTP杩炴帴鏁帮紝榛樿涓�1024涓��
-		conf.setMaxConnections(1024);
-		// 璁剧疆Socket灞備紶杈撴暟鎹殑瓒呮椂鏃堕棿锛岄粯璁や负50000姣銆�
-		conf.setSocketTimeout(50000);
-		// 璁剧疆寤虹珛杩炴帴鐨勮秴鏃舵椂闂达紝榛樿涓�50000姣銆�
-		conf.setConnectionTimeout(50000);
-		// 璁剧疆浠庤繛鎺ユ睜涓幏鍙栬繛鎺ョ殑瓒呮椂鏃堕棿锛堝崟浣嶏細姣锛夛紝榛樿涓嶈秴鏃躲��
-		conf.setConnectionRequestTimeout(1000);
-		// 璁剧疆杩炴帴绌洪棽瓒呮椂鏃堕棿銆傝秴鏃跺垯鍏抽棴杩炴帴锛岄粯璁や负60000姣銆�
-		conf.setIdleConnectionTime(60000);
-		// 璁剧疆澶辫触璇锋眰閲嶈瘯娆℃暟锛岄粯璁や负3娆°��
-		conf.setMaxErrorRetry(5);
-		OssProperties ossProperties = new OssProperties();
-		ossProperties.setEndpoint(oss.getEndpoint());
-		ossProperties.setAccessKey(oss.getAccessKey());
-		ossProperties.setSecretKey(oss.getSecretKey());
-		ossProperties.setBucketName(oss.getBucketName());
-		CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ossProperties.getAccessKey(), ossProperties.getSecretKey());
-		OSSClient ossClient = new OSSClient(ossProperties.getEndpoint(), credentialsProvider, conf);
-		return new AliossTemplate(ossClient, ossProperties, ossRule);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/MinioOssBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/MinioOssBuilder.java
deleted file mode 100644
index 130ceaa..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/MinioOssBuilder.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.oss;
-
-import io.minio.MinioClient;
-import lombok.SneakyThrows;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.MinioTemplate;
-import org.springblade.core.oss.props.OssProperties;
-import org.springblade.core.oss.rule.OssRule;
-import org.springblade.Autowired.entity.Oss;
-
-/**
- * Minio浜戝瓨鍌ㄦ瀯寤虹被
- *
- * @author Chill
- */
-public class MinioOssBuilder {
-
-	@SneakyThrows
-	public static OssTemplate template(Oss oss, OssRule ossRule) {
-		MinioClient minioClient = MinioClient.builder()
-			.endpoint(oss.getEndpoint())
-			.credentials(oss.getAccessKey(), oss.getSecretKey())
-			.build();
-		OssProperties ossProperties = new OssProperties();
-		ossProperties.setEndpoint(oss.getEndpoint());
-		ossProperties.setAccessKey(oss.getAccessKey());
-		ossProperties.setSecretKey(oss.getSecretKey());
-		ossProperties.setBucketName(oss.getBucketName());
-		return new MinioTemplate(minioClient, ossRule, ossProperties);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
deleted file mode 100644
index f4a730a..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.oss;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springblade.Autowired.entity.Oss;
-import org.springblade.Autowired.service.IOssService;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.enums.OssEnum;
-import org.springblade.core.oss.enums.OssStatusEnum;
-import org.springblade.core.oss.props.OssProperties;
-import org.springblade.core.oss.rule.BladeOssRule;
-import org.springblade.core.oss.rule.OssRule;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.core.tool.utils.WebUtil;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
-
-/**
- * Oss浜戝瓨鍌ㄧ粺涓�鏋勫缓绫�
- *
- * @author Chill
- */
-public class OssBuilder {
-
-	public static final String OSS_CODE = "oss:code:";
-	public static final String OSS_PARAM_KEY = "code";
-
-	private final OssProperties ossProperties;
-	private final IOssService ossService;
-
-	public OssBuilder(OssProperties ossProperties, IOssService ossService) {
-		this.ossProperties = ossProperties;
-		this.ossService = ossService;
-	}
-
-	/**
-	 * OssTemplate閰嶇疆缂撳瓨姹�
-	 */
-	private final Map<String, OssTemplate> templatePool = new ConcurrentHashMap<>();
-
-	/**
-	 * oss閰嶇疆缂撳瓨姹�
-	 */
-	private final Map<String, Oss> ossPool = new ConcurrentHashMap<>();
-
-	/**
-	 * 鑾峰彇template
-	 *
-	 * @return OssTemplate
-	 */
-	public OssTemplate template() {
-		return template(StringPool.EMPTY);
-	}
-
-	/**
-	 * 鑾峰彇template
-	 *
-	 * @param code 璧勬簮缂栧彿
-	 * @return OssTemplate
-	 */
-	public OssTemplate template(String code) {
-		String tenantId = AuthUtil.getTenantId();
-		Oss oss = getOss(tenantId, code);
-		Oss ossCached = ossPool.get(tenantId);
-		OssTemplate template = templatePool.get(tenantId);
-		// 鑻ヤ负绌烘垨鑰呬笉涓�鑷达紝鍒欓噸鏂板姞杞�
-		if (Func.hasEmpty(template, ossCached) || !oss.getEndpoint().equals(ossCached.getEndpoint()) || !oss.getAccessKey().equals(ossCached.getAccessKey())) {
-			synchronized (OssBuilder.class) {
-				template = templatePool.get(tenantId);
-				if (Func.hasEmpty(template, ossCached) || !oss.getEndpoint().equals(ossCached.getEndpoint()) || !oss.getAccessKey().equals(ossCached.getAccessKey())) {
-					OssRule ossRule;
-					// 鑻ラ噰鐢ㄩ粯璁よ缃垯寮�鍚绉熸埛妯″紡, 鑻ユ槸鐢ㄦ埛鑷畾涔塷ss鍒欎笉寮�鍚�
-					if (oss.getEndpoint().equals(ossProperties.getEndpoint()) && oss.getAccessKey().equals(ossProperties.getAccessKey()) && ossProperties.getTenantMode()) {
-						ossRule = new BladeOssRule(Boolean.TRUE);
-					} else {
-						ossRule = new BladeOssRule(Boolean.FALSE);
-					}
-					if (oss.getCategory() == OssEnum.MINIO.getCategory()) {
-						template = org.springblade.Autowired.builder.oss.MinioOssBuilder.template(oss, ossRule);
-					} else if (oss.getCategory() == OssEnum.QINIU.getCategory()) {
-						template = org.springblade.Autowired.builder.oss.QiniuOssBuilder.template(oss, ossRule);
-					} else if (oss.getCategory() == OssEnum.ALI.getCategory()) {
-						template = org.springblade.Autowired.builder.oss.AliOssBuilder.template(oss, ossRule);
-					} else if (oss.getCategory() == OssEnum.TENCENT.getCategory()) {
-						template = org.springblade.Autowired.builder.oss.TencentOssBuilder.template(oss, ossRule);
-					}
-					templatePool.put(tenantId, template);
-					ossPool.put(tenantId, oss);
-				}
-			}
-		}
-		return template;
-	}
-
-	/**
-	 * 鑾峰彇瀵硅薄瀛樺偍瀹炰綋
-	 *
-	 * @param tenantId 绉熸埛ID
-	 * @return Oss
-	 */
-	public Oss getOss(String tenantId, String code) {
-		String key = tenantId;
-		LambdaQueryWrapper<Oss> lqw = Wrappers.<Oss>query().lambda().eq(Oss::getTenantId, tenantId);
-		// 鑾峰彇浼犲弬鐨勮祫婧愮紪鍙峰苟鏌ヨ锛岃嫢鏈夊垯杩斿洖锛岃嫢娌℃湁鍒欒皟鍚敤鐨勯厤缃�
-		String ossCode = StringUtil.isBlank(code) ? WebUtil.getParameter(OSS_PARAM_KEY) : code;
-		if (StringUtil.isNotBlank(ossCode)) {
-			key = key.concat(StringPool.DASH).concat(ossCode);
-			lqw.eq(Oss::getOssCode, ossCode);
-		} else {
-			lqw.eq(Oss::getStatus, OssStatusEnum.ENABLE.getNum());
-		}
-		Oss oss = CacheUtil.get(RESOURCE_CACHE, OSS_CODE, key, () -> {
-			Oss o = ossService.getOne(lqw);
-			// 鑻ヤ负绌哄垯璋冪敤榛樿閰嶇疆
-			if ((Func.isEmpty(o))) {
-				Oss defaultOss = new Oss();
-				defaultOss.setId(0L);
-				defaultOss.setCategory(OssEnum.of(ossProperties.getName()).getCategory());
-				defaultOss.setEndpoint(ossProperties.getEndpoint());
-				defaultOss.setBucketName(ossProperties.getBucketName());
-				defaultOss.setAccessKey(ossProperties.getAccessKey());
-				defaultOss.setSecretKey(ossProperties.getSecretKey());
-				return defaultOss;
-			} else {
-				return o;
-			}
-		});
-		if (oss == null || oss.getId() == null) {
-			throw new ServiceException("鏈幏鍙栧埌瀵瑰簲鐨勫璞″瓨鍌ㄩ厤缃�");
-		} else {
-			return oss;
-		}
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java
deleted file mode 100644
index 1acaad6..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.oss;
-
-import com.qiniu.storage.BucketManager;
-import com.qiniu.storage.Configuration;
-import com.qiniu.storage.Region;
-import com.qiniu.storage.UploadManager;
-import com.qiniu.util.Auth;
-import lombok.SneakyThrows;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.QiniuTemplate;
-import org.springblade.core.oss.props.OssProperties;
-import org.springblade.core.oss.rule.OssRule;
-import org.springblade.Autowired.entity.Oss;
-
-/**
- * 涓冪墰浜戝瓨鍌ㄦ瀯寤虹被
- *
- * @author Chill
- */
-public class QiniuOssBuilder {
-
-	@SneakyThrows
-	public static OssTemplate template(Oss oss, OssRule ossRule) {
-		Configuration cfg = new Configuration(Region.autoRegion());
-		Auth auth = Auth.create(oss.getAccessKey(), oss.getSecretKey());
-		UploadManager uploadManager = new UploadManager(cfg);
-		BucketManager bucketManager = new BucketManager(auth, cfg);
-		OssProperties ossProperties = new OssProperties();
-		ossProperties.setEndpoint(oss.getEndpoint());
-		ossProperties.setAccessKey(oss.getAccessKey());
-		ossProperties.setSecretKey(oss.getSecretKey());
-		ossProperties.setBucketName(oss.getBucketName());
-		return new QiniuTemplate(auth, uploadManager, bucketManager, ossProperties, ossRule);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java
deleted file mode 100644
index 3ec83b6..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.oss;
-
-import com.qcloud.cos.COSClient;
-import com.qcloud.cos.ClientConfig;
-import com.qcloud.cos.auth.BasicCOSCredentials;
-import com.qcloud.cos.auth.COSCredentials;
-import com.qcloud.cos.region.Region;
-import lombok.SneakyThrows;
-import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.props.OssProperties;
-import org.springblade.core.oss.rule.OssRule;
-import org.springblade.core.oss.TencentCosTemplate;
-import org.springblade.Autowired.entity.Oss;
-
-/**
- * 鑵捐浜戝瓨鍌ㄦ瀯寤虹被
- *
- * @author Chill
- */
-public class TencentOssBuilder {
-
-	@SneakyThrows
-	public static OssTemplate template(Oss oss, OssRule ossRule) {
-		// 鍒涘缓閰嶇疆绫�
-		OssProperties ossProperties = new OssProperties();
-		ossProperties.setEndpoint(oss.getEndpoint());
-		ossProperties.setAccessKey(oss.getAccessKey());
-		ossProperties.setSecretKey(oss.getSecretKey());
-		ossProperties.setBucketName(oss.getBucketName());
-		ossProperties.setAppId(oss.getAppId());
-		ossProperties.setRegion(oss.getRegion());
-		// 鍒濆鍖栫敤鎴疯韩浠戒俊鎭紙secretId, secretKey锛�
-		COSCredentials credentials = new BasicCOSCredentials(ossProperties.getAccessKey(), ossProperties.getSecretKey());
-		// 璁剧疆 bucket 鐨勫尯鍩�, COS 鍦板煙鐨勭畝绉拌鍙傜収 https://cloud.tencent.com/document/product/436/6224
-		Region region = new Region(ossProperties.getRegion());
-		// clientConfig 涓寘鍚簡璁剧疆 region, https(榛樿 http), 瓒呮椂, 浠g悊绛� set 鏂规硶, 浣跨敤鍙弬瑙佹簮鐮佹垨鑰呭父瑙侀棶棰� Java SDK 閮ㄥ垎銆�
-		ClientConfig clientConfig = new ClientConfig(region);
-		// 璁剧疆OSSClient鍏佽鎵撳紑鐨勬渶澶TTP杩炴帴鏁帮紝榛樿涓�1024涓��
-		clientConfig.setMaxConnectionsCount(1024);
-		// 璁剧疆Socket灞備紶杈撴暟鎹殑瓒呮椂鏃堕棿锛岄粯璁や负50000姣銆�
-		clientConfig.setSocketTimeout(50000);
-		// 璁剧疆寤虹珛杩炴帴鐨勮秴鏃舵椂闂达紝榛樿涓�50000姣銆�
-		clientConfig.setConnectionTimeout(50000);
-		// 璁剧疆浠庤繛鎺ユ睜涓幏鍙栬繛鎺ョ殑瓒呮椂鏃堕棿锛堝崟浣嶏細姣锛夛紝榛樿涓嶈秴鏃躲��
-		clientConfig.setConnectionRequestTimeout(1000);
-		COSClient cosClient = new COSClient(credentials, clientConfig);
-		return new TencentCosTemplate(cosClient, ossProperties, ossRule);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/AliSmsBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/AliSmsBuilder.java
deleted file mode 100644
index c6d169a..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/AliSmsBuilder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.sms;
-
-import com.aliyuncs.DefaultAcsClient;
-import com.aliyuncs.IAcsClient;
-import com.aliyuncs.profile.DefaultProfile;
-import com.aliyuncs.profile.IClientProfile;
-import lombok.SneakyThrows;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.sms.SmsTemplate;
-import org.springblade.core.sms.AliSmsTemplate;
-import org.springblade.core.sms.props.SmsProperties;
-import org.springblade.Autowired.entity.Sms;
-
-/**
- * 闃块噷浜戠煭淇℃瀯寤虹被
- *
- * @author Chill
- */
-public class AliSmsBuilder {
-
-	@SneakyThrows
-	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
-		SmsProperties smsProperties = new SmsProperties();
-		smsProperties.setTemplateId(sms.getTemplateId());
-		smsProperties.setAccessKey(sms.getAccessKey());
-		smsProperties.setSecretKey(sms.getSecretKey());
-		smsProperties.setRegionId(sms.getRegionId());
-		smsProperties.setSignName(sms.getSignName());
-		IClientProfile profile = DefaultProfile.getProfile(smsProperties.getRegionId(), smsProperties.getAccessKey(), smsProperties.getSecretKey());
-		IAcsClient acsClient = new DefaultAcsClient(profile);
-		return new AliSmsTemplate(smsProperties, acsClient, bladeRedis);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/QiniuSmsBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/QiniuSmsBuilder.java
deleted file mode 100644
index 6a9cea4..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/QiniuSmsBuilder.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.sms;
-
-import com.qiniu.sms.SmsManager;
-import com.qiniu.util.Auth;
-import lombok.SneakyThrows;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.sms.SmsTemplate;
-import org.springblade.core.sms.props.SmsProperties;
-import org.springblade.core.sms.QiniuSmsTemplate;
-import org.springblade.Autowired.entity.Sms;
-
-/**
- * 涓冪墰浜戠煭淇℃瀯寤虹被
- *
- * @author Chill
- */
-public class QiniuSmsBuilder {
-
-	@SneakyThrows
-	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
-		SmsProperties smsProperties = new SmsProperties();
-		smsProperties.setTemplateId(sms.getTemplateId());
-		smsProperties.setAccessKey(sms.getAccessKey());
-		smsProperties.setSecretKey(sms.getSecretKey());
-		smsProperties.setSignName(sms.getSignName());
-		Auth auth = Auth.create(smsProperties.getAccessKey(), smsProperties.getSecretKey());
-		SmsManager smsManager = new SmsManager(auth);
-		return new QiniuSmsTemplate(smsProperties, smsManager, bladeRedis);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/SmsBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/SmsBuilder.java
deleted file mode 100644
index 7dcbd0d..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/SmsBuilder.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.sms;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springblade.Autowired.entity.Sms;
-import org.springblade.Autowired.service.ISmsService;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.sms.SmsTemplate;
-import org.springblade.core.sms.enums.SmsEnum;
-import org.springblade.core.sms.enums.SmsStatusEnum;
-import org.springblade.core.sms.props.SmsProperties;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.core.tool.utils.WebUtil;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
-
-/**
- * Sms鐭俊鏈嶅姟缁熶竴鏋勫缓绫�
- *
- * @author Chill
- */
-public class SmsBuilder {
-
-	public static final String SMS_CODE = "sms:code:";
-	public static final String SMS_PARAM_KEY = "code";
-
-	private final SmsProperties smsProperties;
-	private final ISmsService smsService;
-	private final BladeRedis bladeRedis;
-
-
-	public SmsBuilder(SmsProperties smsProperties, ISmsService smsService, BladeRedis bladeRedis) {
-		this.smsProperties = smsProperties;
-		this.smsService = smsService;
-		this.bladeRedis = bladeRedis;
-	}
-
-	/**
-	 * SmsTemplate閰嶇疆缂撳瓨姹�
-	 */
-	private final Map<String, SmsTemplate> templatePool = new ConcurrentHashMap<>();
-
-	/**
-	 * Sms閰嶇疆缂撳瓨姹�
-	 */
-	private final Map<String, Sms> smsPool = new ConcurrentHashMap<>();
-
-
-	/**
-	 * 鑾峰彇template
-	 *
-	 * @return SmsTemplate
-	 */
-	public SmsTemplate template() {
-		return template(StringPool.EMPTY);
-	}
-
-	/**
-	 * 鑾峰彇template
-	 *
-	 * @param code 璧勬簮缂栧彿
-	 * @return SmsTemplate
-	 */
-	public SmsTemplate template(String code) {
-		String tenantId = AuthUtil.getTenantId();
-		Sms sms = getSms(tenantId, code);
-		Sms smsCached = smsPool.get(tenantId);
-		SmsTemplate template = templatePool.get(tenantId);
-		// 鑻ヤ负绌烘垨鑰呬笉涓�鑷达紝鍒欓噸鏂板姞杞�
-		if (Func.hasEmpty(template, smsCached) || !sms.getTemplateId().equals(smsCached.getTemplateId()) || !sms.getAccessKey().equals(smsCached.getAccessKey())) {
-			synchronized (SmsBuilder.class) {
-				template = templatePool.get(tenantId);
-				if (Func.hasEmpty(template, smsCached) || !sms.getTemplateId().equals(smsCached.getTemplateId()) || !sms.getAccessKey().equals(smsCached.getAccessKey())) {
-					if (sms.getCategory() == SmsEnum.YUNPIAN.getCategory()) {
-						template = org.springblade.Autowired.builder.sms.YunpianSmsBuilder.template(sms, bladeRedis);
-					} else if (sms.getCategory() == SmsEnum.QINIU.getCategory()) {
-						template = org.springblade.Autowired.builder.sms.QiniuSmsBuilder.template(sms, bladeRedis);
-					} else if (sms.getCategory() == SmsEnum.ALI.getCategory()) {
-						template = org.springblade.Autowired.builder.sms.AliSmsBuilder.template(sms, bladeRedis);
-					} else if (sms.getCategory() == SmsEnum.TENCENT.getCategory()) {
-						template = org.springblade.Autowired.builder.sms.TencentSmsBuilder.template(sms, bladeRedis);
-					}
-					templatePool.put(tenantId, template);
-					smsPool.put(tenantId, sms);
-				}
-			}
-		}
-		return template;
-	}
-
-
-	/**
-	 * 鑾峰彇鐭俊瀹炰綋
-	 *
-	 * @param tenantId 绉熸埛ID
-	 * @return Sms
-	 */
-	public Sms getSms(String tenantId, String code) {
-		String key = tenantId;
-		LambdaQueryWrapper<Sms> lqw = Wrappers.<Sms>query().lambda().eq(Sms::getTenantId, tenantId);
-		// 鑾峰彇浼犲弬鐨勮祫婧愮紪鍙峰苟鏌ヨ锛岃嫢鏈夊垯杩斿洖锛岃嫢娌℃湁鍒欒皟鍚敤鐨勯厤缃�
-		String smsCode = StringUtil.isBlank(code) ? WebUtil.getParameter(SMS_PARAM_KEY) : code;
-		if (StringUtil.isNotBlank(smsCode)) {
-			key = key.concat(StringPool.DASH).concat(smsCode);
-			lqw.eq(Sms::getSmsCode, smsCode);
-		} else {
-			lqw.eq(Sms::getStatus, SmsStatusEnum.ENABLE.getNum());
-		}
-		Sms sms = CacheUtil.get(RESOURCE_CACHE, SMS_CODE, key, () -> {
-			Sms s = smsService.getOne(lqw);
-			// 鑻ヤ负绌哄垯璋冪敤榛樿閰嶇疆
-			if ((Func.isEmpty(s))) {
-				Sms defaultSms = new Sms();
-				defaultSms.setId(0L);
-				defaultSms.setTemplateId(smsProperties.getTemplateId());
-				defaultSms.setRegionId(smsProperties.getRegionId());
-				defaultSms.setCategory(SmsEnum.of(smsProperties.getName()).getCategory());
-				defaultSms.setAccessKey(smsProperties.getAccessKey());
-				defaultSms.setSecretKey(smsProperties.getSecretKey());
-				defaultSms.setSignName(smsProperties.getSignName());
-				return defaultSms;
-			} else {
-				return s;
-			}
-		});
-		if (sms == null || sms.getId() == null) {
-			throw new ServiceException("鏈幏鍙栧埌瀵瑰簲鐨勭煭淇¢厤缃�");
-		} else {
-			return sms;
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/TencentSmsBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/TencentSmsBuilder.java
deleted file mode 100644
index c439979..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/TencentSmsBuilder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.sms;
-
-import com.github.qcloudsms.SmsMultiSender;
-import lombok.SneakyThrows;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.sms.SmsTemplate;
-import org.springblade.core.sms.props.SmsProperties;
-import org.springblade.core.sms.TencentSmsTemplate;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.Autowired.entity.Sms;
-
-/**
- * 鑵捐浜戠煭淇℃瀯寤虹被
- *
- * @author Chill
- */
-public class TencentSmsBuilder {
-
-	@SneakyThrows
-	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
-		SmsProperties smsProperties = new SmsProperties();
-		smsProperties.setTemplateId(sms.getTemplateId());
-		smsProperties.setAccessKey(sms.getAccessKey());
-		smsProperties.setSecretKey(sms.getSecretKey());
-		smsProperties.setSignName(sms.getSignName());
-		SmsMultiSender smsSender = new SmsMultiSender(Func.toInt(smsProperties.getAccessKey()), sms.getSecretKey());
-		return new TencentSmsTemplate(smsProperties, smsSender, bladeRedis);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/YunpianSmsBuilder.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/YunpianSmsBuilder.java
deleted file mode 100644
index e58726b..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/YunpianSmsBuilder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.builder.sms;
-
-import com.yunpian.sdk.YunpianClient;
-import lombok.SneakyThrows;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.sms.SmsTemplate;
-import org.springblade.core.sms.props.SmsProperties;
-import org.springblade.core.sms.YunpianSmsTemplate;
-import org.springblade.Autowired.entity.Sms;
-
-/**
- * 浜戠墖鐭俊鏋勫缓绫�
- *
- * @author Chill
- */
-public class YunpianSmsBuilder {
-
-	@SneakyThrows
-	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
-		SmsProperties smsProperties = new SmsProperties();
-		smsProperties.setTemplateId(sms.getTemplateId());
-		smsProperties.setAccessKey(sms.getAccessKey());
-		smsProperties.setSignName(sms.getSignName());
-		YunpianClient client = new YunpianClient(smsProperties.getAccessKey()).init();
-		return new YunpianSmsTemplate(smsProperties, client, bladeRedis);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeOssConfiguration.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeOssConfiguration.java
deleted file mode 100644
index f8bfb66..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeOssConfiguration.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.config;
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.oss.props.OssProperties;
-import org.springblade.Autowired.builder.oss.OssBuilder;
-import org.springblade.Autowired.service.IOssService;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Oss閰嶇疆绫�
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-public class BladeOssConfiguration {
-
-	private final OssProperties ossProperties;
-
-	private final IOssService ossService;
-
-	@Bean
-	public OssBuilder ossBuilder() {
-		return new OssBuilder(ossProperties, ossService);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeSmsConfiguration.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeSmsConfiguration.java
deleted file mode 100644
index e7e3174..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeSmsConfiguration.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.config;
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.sms.props.SmsProperties;
-import org.springblade.Autowired.builder.sms.SmsBuilder;
-import org.springblade.Autowired.service.ISmsService;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Sms閰嶇疆绫�
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-public class BladeSmsConfiguration {
-
-	private final SmsProperties smsProperties;
-
-	private final ISmsService smsService;
-
-	private final BladeRedis bladeRedis;
-
-	@Bean
-	public SmsBuilder smsBuilder() {
-		return new SmsBuilder(smsProperties, smsService, bladeRedis);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/AttachController.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/AttachController.java
deleted file mode 100644
index ba2d73c..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/AttachController.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.Autowired.entity.Attach;
-import org.springblade.Autowired.service.IAttachService;
-import org.springblade.Autowired.vo.AttachVO;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-/**
- * 闄勪欢琛� 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/attach")
-@Api(value = "闄勪欢", tags = "闄勪欢")
-public class AttachController extends BladeController {
-
-	private final IAttachService attachService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆attach")
-	public R<Attach> detail(Attach attach) {
-		Attach detail = attachService.getOne(Condition.getQueryWrapper(attach));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉 闄勪欢琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆attach")
-	public R<IPage<Attach>> list(Attach attach, Query query) {
-		IPage<Attach> pages = attachService.page(Condition.getPage(query), Condition.getQueryWrapper(attach));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鑷畾涔夊垎椤� 闄勪欢琛�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆attach")
-	public R<IPage<AttachVO>> page(AttachVO attach, Query query) {
-		IPage<AttachVO> pages = attachService.selectAttachPage(Condition.getPage(query), attach);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 闄勪欢琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆attach")
-	public R save(@Valid @RequestBody Attach attach) {
-		return R.status(attachService.save(attach));
-	}
-
-	/**
-	 * 淇敼 闄勪欢琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆attach")
-	public R update(@Valid @RequestBody Attach attach) {
-		return R.status(attachService.updateById(attach));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 闄勪欢琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆attach")
-	public R submit(@Valid @RequestBody Attach attach) {
-		return R.status(attachService.saveOrUpdate(attach));
-	}
-
-
-	/**
-	 * 鍒犻櫎 闄勪欢琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(attachService.deleteLogic(Func.toLongList(ids)));
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/OssController.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/OssController.java
deleted file mode 100644
index c44bbce..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/OssController.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.Autowired.entity.Oss;
-import org.springblade.Autowired.service.IOssService;
-import org.springblade.Autowired.vo.OssVO;
-import org.springblade.Autowired.wrapper.OssWrapper;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author BladeX
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-@RequestMapping("/oss")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-@Api(value = "瀵硅薄瀛樺偍鎺ュ彛", tags = "瀵硅薄瀛樺偍鎺ュ彛")
-public class OssController extends BladeController {
-
-	private final IOssService ossService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆oss")
-	public R<OssVO> detail(Oss oss) {
-		Oss detail = ossService.getOne(Condition.getQueryWrapper(oss));
-		return R.data(OssWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆oss")
-	public R<IPage<OssVO>> list(Oss oss, Query query) {
-		IPage<Oss> pages = ossService.page(Condition.getPage(query), Condition.getQueryWrapper(oss));
-		return R.data(OssWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆oss")
-	public R<IPage<OssVO>> page(OssVO oss, Query query) {
-		IPage<OssVO> pages = ossService.selectOssPage(Condition.getPage(query), oss);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆oss")
-	public R save(@Valid @RequestBody Oss oss) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(ossService.save(oss));
-	}
-
-	/**
-	 * 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆oss")
-	public R update(@Valid @RequestBody Oss oss) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(ossService.updateById(oss));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆oss")
-	public R submit(@Valid @RequestBody Oss oss) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(ossService.submit(oss));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(ossService.deleteLogic(Func.toLongList(ids)));
-	}
-
-
-	/**
-	 * 鍚敤
-	 */
-	@PostMapping("/enable")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "閰嶇疆鍚敤", notes = "浼犲叆id")
-	public R enable(@ApiParam(value = "涓婚敭", required = true) @RequestParam Long id) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(ossService.enable(id));
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/SmsController.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/SmsController.java
deleted file mode 100644
index 279b638..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/SmsController.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.Autowired.entity.Sms;
-import org.springblade.Autowired.service.ISmsService;
-import org.springblade.Autowired.vo.SmsVO;
-import org.springblade.Autowired.wrapper.SmsWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
-
-/**
- * 鐭俊閰嶇疆琛� 鎺у埗鍣�
- *
- * @author BladeX
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-@RequestMapping("/sms")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-@Api(value = "鐭俊閰嶇疆琛�", tags = "鐭俊閰嶇疆琛ㄦ帴鍙�")
-public class SmsController extends BladeController {
-
-	private final ISmsService smsService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆sms")
-	public R<SmsVO> detail(Sms sms) {
-		Sms detail = smsService.getOne(Condition.getQueryWrapper(sms));
-		return R.data(SmsWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒嗛〉 鐭俊閰嶇疆琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆sms")
-	public R<IPage<SmsVO>> list(Sms sms, Query query) {
-		IPage<Sms> pages = smsService.page(Condition.getPage(query), Condition.getQueryWrapper(sms));
-		return R.data(SmsWrapper.build().pageVO(pages));
-	}
-
-
-	/**
-	 * 鑷畾涔夊垎椤� 鐭俊閰嶇疆琛�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆sms")
-	public R<IPage<SmsVO>> page(SmsVO sms, Query query) {
-		IPage<SmsVO> pages = smsService.selectSmsPage(Condition.getPage(query), sms);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 鐭俊閰嶇疆琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆sms")
-	public R save(@Valid @RequestBody Sms sms) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(smsService.save(sms));
-	}
-
-	/**
-	 * 淇敼 鐭俊閰嶇疆琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆sms")
-	public R update(@Valid @RequestBody Sms sms) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(smsService.updateById(sms));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 鐭俊閰嶇疆琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆sms")
-	public R submit(@Valid @RequestBody Sms sms) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(smsService.submit(sms));
-	}
-
-
-	/**
-	 * 鍒犻櫎 鐭俊閰嶇疆琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(smsService.deleteLogic(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 鍚敤
-	 */
-	@PostMapping("/enable")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "閰嶇疆鍚敤", notes = "浼犲叆id")
-	public R enable(@ApiParam(value = "涓婚敭", required = true) @RequestParam Long id) {
-		CacheUtil.clear(RESOURCE_CACHE);
-		return R.status(smsService.enable(id));
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java
deleted file mode 100644
index 6f1368f..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.endpoint;
-
-import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
-import lombok.SneakyThrows;
-import org.springblade.core.oss.model.BladeFile;
-import org.springblade.core.oss.model.OssFile;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.utils.FileUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.Autowired.builder.oss.OssBuilder;
-import org.springblade.Autowired.entity.Attach;
-import org.springblade.Autowired.service.IAttachService;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * 瀵硅薄瀛樺偍绔偣
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/oss/endpoint")
-@Api(value = "瀵硅薄瀛樺偍绔偣", tags = "瀵硅薄瀛樺偍绔偣")
-public class OssEndpoint {
-
-	/**
-	 * 瀵硅薄瀛樺偍鏋勫缓绫�
-	 */
-	private final OssBuilder ossBuilder;
-
-	/**
-	 * 闄勪欢琛ㄦ湇鍔�
-	 */
-	private final IAttachService attachService;
-
-	/**
-	 * 鍒涘缓瀛樺偍妗�
-	 *
-	 * @param bucketName 瀛樺偍妗跺悕绉�
-	 * @return Bucket
-	 */
-	@SneakyThrows
-	@PostMapping("/make-bucket")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R makeBucket(@RequestParam String bucketName) {
-		ossBuilder.template().makeBucket(bucketName);
-		return R.success("鍒涘缓鎴愬姛");
-	}
-
-	/**
-	 * 鍒涘缓瀛樺偍妗�
-	 *
-	 * @param bucketName 瀛樺偍妗跺悕绉�
-	 * @return R
-	 */
-	@SneakyThrows
-	@PostMapping("/remove-bucket")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R removeBucket(@RequestParam String bucketName) {
-		ossBuilder.template().removeBucket(bucketName);
-		return R.success("鍒犻櫎鎴愬姛");
-	}
-
-	/**
-	 * 鎷疯礉鏂囦欢
-	 *
-	 * @param fileName       瀛樺偍妗跺璞″悕绉�
-	 * @param destBucketName 鐩爣瀛樺偍妗跺悕绉�
-	 * @param destFileName   鐩爣瀛樺偍妗跺璞″悕绉�
-	 * @return R
-	 */
-	@SneakyThrows
-	@PostMapping("/copy-file")
-	public R copyFile(@RequestParam String fileName, @RequestParam String destBucketName, String destFileName) {
-		ossBuilder.template().copyFile(fileName, destBucketName, destFileName);
-		return R.success("鎿嶄綔鎴愬姛");
-	}
-
-	/**
-	 * 鑾峰彇鏂囦欢淇℃伅
-	 *
-	 * @param fileName 瀛樺偍妗跺璞″悕绉�
-	 * @return InputStream
-	 */
-	@SneakyThrows
-	@GetMapping("/stat-file")
-	public R<OssFile> statFile(@RequestParam String fileName) {
-		return R.data(ossBuilder.template().statFile(fileName));
-	}
-
-	/**
-	 * 鑾峰彇鏂囦欢鐩稿璺緞
-	 *
-	 * @param fileName 瀛樺偍妗跺璞″悕绉�
-	 * @return String
-	 */
-	@SneakyThrows
-	@GetMapping("/file-path")
-	public R<String> filePath(@RequestParam String fileName) {
-		return R.data(ossBuilder.template().filePath(fileName));
-	}
-
-
-	/**
-	 * 鑾峰彇鏂囦欢澶栭摼
-	 *
-	 * @param fileName 瀛樺偍妗跺璞″悕绉�
-	 * @return String
-	 */
-	@SneakyThrows
-	@GetMapping("/file-link")
-	public R<String> fileLink(@RequestParam String fileName) {
-		return R.data(ossBuilder.template().fileLink(fileName));
-	}
-
-	/**
-	 * 涓婁紶鏂囦欢
-	 *
-	 * @param file 鏂囦欢
-	 * @return ObjectStat
-	 */
-	@SneakyThrows
-	@PostMapping("/put-file")
-	public R<BladeFile> putFile(@RequestParam MultipartFile file) {
-		BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(), file.getInputStream());
-		return R.data(bladeFile);
-	}
-
-	/**
-	 * 涓婁紶鏂囦欢
-	 *
-	 * @param fileName 瀛樺偍妗跺璞″悕绉�
-	 * @param file     鏂囦欢
-	 * @return ObjectStat
-	 */
-	@SneakyThrows
-	@PostMapping("/put-file-by-name")
-	public R<BladeFile> putFile(@RequestParam String fileName, @RequestParam MultipartFile file) {
-		BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
-		return R.data(bladeFile);
-	}
-
-	/**
-	 * 涓婁紶鏂囦欢骞朵繚瀛樿嚦闄勪欢琛�
-	 *
-	 * @param file 鏂囦欢
-	 * @return ObjectStat
-	 */
-	@SneakyThrows
-	@PostMapping("/put-file-attach")
-	public R<BladeFile> putFileAttach(@RequestParam MultipartFile file) {
-		String fileName = file.getOriginalFilename();
-		BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
-		Long attachId = buildAttach(fileName, file.getSize(), bladeFile);
-		bladeFile.setAttachId(attachId);
-		return R.data(bladeFile);
-	}
-
-	/**
-	 * 涓婁紶鏂囦欢骞朵繚瀛樿嚦闄勪欢琛�
-	 *
-	 * @param fileName 瀛樺偍妗跺璞″悕绉�
-	 * @param file     鏂囦欢
-	 * @return ObjectStat
-	 */
-	@SneakyThrows
-	@PostMapping("/put-file-attach-by-name")
-	public R<BladeFile> putFileAttach(@RequestParam String fileName, @RequestParam MultipartFile file) {
-		BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
-		Long attachId = buildAttach(fileName, file.getSize(), bladeFile);
-		bladeFile.setAttachId(attachId);
-		return R.data(bladeFile);
-	}
-
-	/**
-	 * 鏋勫缓闄勪欢琛�
-	 *
-	 * @param fileName  鏂囦欢鍚�
-	 * @param fileSize  鏂囦欢澶у皬
-	 * @param bladeFile 瀵硅薄瀛樺偍鏂囦欢
-	 * @return attachId
-	 */
-	private Long buildAttach(String fileName, Long fileSize, BladeFile bladeFile) {
-		String fileExtension = FileUtil.getFileExtension(fileName);
-		Attach attach = new Attach();
-		attach.setDomainUrl(bladeFile.getDomain());
-		attach.setLink(bladeFile.getLink());
-		attach.setName(bladeFile.getName());
-		attach.setOriginalName(bladeFile.getOriginalName());
-		attach.setAttachSize(fileSize);
-		attach.setExtension(fileExtension);
-		attachService.save(attach);
-		return attach.getId();
-	}
-
-	/**
-	 * 鍒犻櫎鏂囦欢
-	 *
-	 * @param fileName 瀛樺偍妗跺璞″悕绉�
-	 * @return R
-	 */
-	@SneakyThrows
-	@PostMapping("/remove-file")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R removeFile(@RequestParam String fileName) {
-		ossBuilder.template().removeFile(fileName);
-		return R.success("鎿嶄綔鎴愬姛");
-	}
-
-	/**
-	 * 鎵归噺鍒犻櫎鏂囦欢
-	 *
-	 * @param fileNames 瀛樺偍妗跺璞″悕绉伴泦鍚�
-	 * @return R
-	 */
-	@SneakyThrows
-	@PostMapping("/remove-files")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R removeFiles(@RequestParam String fileNames) {
-		ossBuilder.template().removeFiles(Func.toStrList(fileNames));
-		return R.success("鎿嶄綔鎴愬姛");
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java
deleted file mode 100644
index 71ccf95..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.endpoint;
-
-import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
-import lombok.SneakyThrows;
-import org.springblade.core.sms.model.SmsCode;
-import org.springblade.core.sms.model.SmsData;
-import org.springblade.core.sms.model.SmsResponse;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.jackson.JsonUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.Autowired.builder.sms.SmsBuilder;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.springblade.Autowired.utils.SmsUtil.*;
-
-/**
- * 鐭俊鏈嶅姟绔偣
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/sms/endpoint")
-@Api(value = "鐭俊鏈嶅姟绔偣", tags = "鐭俊鏈嶅姟绔偣")
-public class SmsEndpoint {
-
-	/**
-	 * 鐭俊鏈嶅姟鏋勫缓绫�
-	 */
-	private final SmsBuilder smsBuilder;
-
-	//================================= 鐭俊鏈嶅姟鏍¢獙 =================================
-
-	/**
-	 * 鐭俊楠岃瘉鐮佸彂閫�
-	 *
-	 * @param phone 鎵嬫満鍙�
-	 */
-	@SneakyThrows
-	@PostMapping("/send-validate")
-	public R sendValidate(@RequestParam String phone) {
-		Map<String, String> params = getValidateParams();
-		SmsCode smsCode = smsBuilder.template().sendValidate(new SmsData(params).setKey(PARAM_KEY), phone);
-		return smsCode.isSuccess() ? R.data(smsCode, SEND_SUCCESS) : R.fail(SEND_FAIL);
-	}
-
-	/**
-	 * 鏍¢獙鐭俊
-	 *
-	 * @param smsCode 鐭俊鏍¢獙淇℃伅
-	 */
-	@SneakyThrows
-	@PostMapping("/validate-message")
-	public R validateMessage(SmsCode smsCode) {
-		boolean validate = smsBuilder.template().validateMessage(smsCode);
-		return validate ? R.success(VALIDATE_SUCCESS) : R.fail(VALIDATE_FAIL);
-	}
-
-	//========== 閫氱敤鐭俊鑷畾涔夊彂閫�(鏀寔鑷畾涔塸arams鍙傛暟浼犻��, 鎺ㄨ崘鐢ㄤ簬娴嬭瘯, 涓嶆帹鑽愮敤浜庣敓浜х幆澧�) ==========
-
-	/**
-	 * 鍙戦�佷俊鎭�
-	 *
-	 * @param params 鑷畾涔夌煭淇″弬鏁�
-	 * @param phones 鎵嬫満鍙烽泦鍚�
-	 */
-	@SneakyThrows
-	@PostMapping("/send-message")
-	public R sendMessage(@RequestParam String code, @RequestParam String params, @RequestParam String phones) {
-		SmsData smsData = new SmsData(JsonUtil.readMap(params, String.class, String.class));
-		return send(code, smsData, phones);
-	}
-
-	//========== 鎸囧畾鐭俊鏈嶅姟鍙戦��(鍙牴鎹悇绉嶅満鏅嚜瀹氭嫇灞曞畾鍒�, 鎹熷け鐏垫椿鎬у鍔犲畨鍏ㄦ��, 鎺ㄨ崘鐢ㄤ簬鐢熶骇鐜) ==========
-
-	/**
-	 * 鐭俊閫氱煡
-	 *
-	 * @param phones 鎵嬫満鍙烽泦鍚�
-	 */
-	@SneakyThrows
-	@PostMapping("/send-notice")
-	public R sendNotice(@RequestParam String phones) {
-		Map<String, String> params = new HashMap<>(3);
-		params.put("title", "閫氱煡鏍囬");
-		params.put("content", "閫氱煡鍐呭");
-		params.put("date", "閫氱煡鏃堕棿");
-		SmsData smsData = new SmsData(params);
-		return send(smsData, phones);
-	}
-
-	/**
-	 * 璁㈠崟閫氱煡
-	 *
-	 * @param phones 鎵嬫満鍙烽泦鍚�
-	 */
-	@SneakyThrows
-	@PostMapping("/send-order")
-	public R sendOrder(@RequestParam String phones) {
-		Map<String, String> params = new HashMap<>(3);
-		params.put("orderNo", "璁㈠崟缂栧彿");
-		params.put("packageNo", "蹇�掑崟鍙�");
-		params.put("user", "鏀朵欢浜�");
-		SmsData smsData = new SmsData(params);
-		return send(smsData, phones);
-	}
-
-	/**
-	 * 浼氳閫氱煡
-	 *
-	 * @param phones 鎵嬫満鍙烽泦鍚�
-	 */
-	@SneakyThrows
-	@PostMapping("/send-meeting")
-	public R sendMeeting(@RequestParam String phones) {
-		Map<String, String> params = new HashMap<>(2);
-		params.put("roomId", "浼氳瀹�");
-		params.put("topic", "浼氳涓婚");
-		params.put("date", "浼氳鏃堕棿");
-		SmsData smsData = new SmsData(params);
-		return send(smsData, phones);
-	}
-
-	//================================= 閫氱敤鐭俊鍙戦�佹帴鍙� =================================
-
-	/**
-	 * 閫氱敤鐭俊鍙戦�佹帴鍙�
-	 *
-	 * @param smsData 鐭俊鍐呭
-	 * @param phones  鎵嬫満鍙峰垪琛�
-	 * @return 鏄惁鍙戦�佹垚鍔�
-	 */
-	private R send(SmsData smsData, String phones) {
-		SmsResponse response = smsBuilder.template().sendMessage(smsData, Func.toStrList(phones));
-		return response.isSuccess() ? R.success(SEND_SUCCESS) : R.fail(SEND_FAIL);
-	}
-
-	/**
-	 * 閫氱敤鐭俊鍙戦�佹帴鍙�
-	 *
-	 * @param code    璧勬簮缂栧彿
-	 * @param smsData 鐭俊鍐呭
-	 * @param phones  鎵嬫満鍙峰垪琛�
-	 * @return 鏄惁鍙戦�佹垚鍔�
-	 */
-	private R send(String code, SmsData smsData, String phones) {
-		SmsResponse response = smsBuilder.template(code).sendMessage(smsData, Func.toStrList(phones));
-		return response.isSuccess() ? R.success(SEND_SUCCESS) : R.fail(SEND_FAIL);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/SmsClient.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/SmsClient.java
deleted file mode 100644
index 28669e4..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/SmsClient.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.feign;
-
-import lombok.AllArgsConstructor;
-import org.springblade.Autowired.builder.sms.SmsBuilder;
-import org.springblade.core.sms.model.SmsCode;
-import org.springblade.core.sms.model.SmsData;
-import org.springblade.core.sms.model.SmsResponse;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.jackson.JsonUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.resource.feign.ISmsClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Map;
-
-import static org.springblade.Autowired.utils.SmsUtil.*;
-
-/**
- * 鐭俊杩滅▼璋冪敤鏈嶅姟
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-public class SmsClient implements ISmsClient {
-
-	private final SmsBuilder smsBuilder;
-
-	@Override
-	@PostMapping(SEND_MESSAGE)
-	public R<SmsResponse> sendMessage(String code, String params, String phones) {
-		SmsData smsData = new SmsData(JsonUtil.readMap(params, String.class, String.class));
-		SmsResponse response = smsBuilder.template(code).sendMessage(smsData, Func.toStrList(phones));
-		return R.data(response);
-	}
-
-	@Override
-	@PostMapping(SEND_VALIDATE)
-	public R sendValidate(String code, String phone) {
-		Map<String, String> params = getValidateParams();
-		SmsCode smsCode = smsBuilder.template(code).sendValidate(new SmsData(params).setKey(PARAM_KEY), phone);
-		return smsCode.isSuccess() ? R.data(smsCode, SEND_SUCCESS) : R.fail(SEND_FAIL);
-	}
-
-	@Override
-	@PostMapping(VALIDATE_MESSAGE)
-	public R validateMessage(String code, String id, String value, String phone) {
-		SmsCode smsCode = new SmsCode().setId(id).setValue(value).setPhone(phone);
-		boolean validate = smsBuilder.template(code).validateMessage(smsCode);
-		return validate ? R.success(VALIDATE_SUCCESS) : R.fail(VALIDATE_FAIL);
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.java
deleted file mode 100644
index 4f7d162..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.Autowired.entity.Attach;
-import org.springblade.Autowired.vo.AttachVO;
-
-import java.util.List;
-
-/**
- * 闄勪欢琛� Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface AttachMapper extends BaseMapper<Attach> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param attach
-	 * @return
-	 */
-	List<AttachVO> selectAttachPage(IPage page, AttachVO attach);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.xml b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.xml
deleted file mode 100644
index 0069551..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.Autowired.mapper.AttachMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="attachResultMap" type="org.springblade.Autowired.entity.Attach">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="link" property="link"/>
-        <result column="domain_url" property="domainUrl"/>
-        <result column="name" property="name"/>
-        <result column="original_name" property="originalName"/>
-        <result column="extension" property="extension"/>
-        <result column="attach_size" property="attachSize"/>
-    </resultMap>
-
-
-    <select id="selectAttachPage" resultMap="attachResultMap">
-        select * from blade_attach where is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.java
deleted file mode 100644
index bb4e062..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.Autowired.entity.Oss;
-import org.springblade.Autowired.vo.OssVO;
-
-import java.util.List;
-
-/**
- *  Mapper 鎺ュ彛
- *
- * @author BladeX
- */
-public interface OssMapper extends BaseMapper<Oss> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param oss
-	 * @return
-	 */
-	List<OssVO> selectOssPage(IPage page, OssVO oss);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml
deleted file mode 100644
index 2e59eac..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.Autowired.mapper.OssMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="ossResultMap" type="org.springblade.Autowired.entity.Oss">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="oss_code" property="ossCode"/>
-        <result column="category" property="category"/>
-        <result column="endpoint" property="endpoint"/>
-        <result column="access_key" property="accessKey"/>
-        <result column="secret_key" property="secretKey"/>
-        <result column="bucket_name" property="bucketName"/>
-        <result column="app_id" property="appId"/>
-        <result column="region" property="region"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-
-
-    <select id="selectOssPage" resultMap="ossResultMap">
-        select * from pl_sys_oss where is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.java
deleted file mode 100644
index ca012cf..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.mapper;
-
-import org.springblade.Autowired.entity.Sms;
-import org.springblade.Autowired.vo.SmsVO;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import java.util.List;
-
-/**
- * 鐭俊閰嶇疆琛� Mapper 鎺ュ彛
- *
- * @author BladeX
- */
-public interface SmsMapper extends BaseMapper<Sms> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param sms
-	 * @return
-	 */
-	List<SmsVO> selectSmsPage(IPage page, SmsVO sms);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml
deleted file mode 100644
index 1fc3be4..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.Autowired.mapper.SmsMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="smsResultMap" type="org.springblade.Autowired.entity.Sms">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="sms_code" property="smsCode"/>
-        <result column="template_id" property="templateId"/>
-        <result column="category" property="category"/>
-        <result column="access_key" property="accessKey"/>
-        <result column="secret_key" property="secretKey"/>
-        <result column="region_id" property="regionId"/>
-        <result column="sign_name" property="signName"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-
-
-    <select id="selectSmsPage" resultMap="smsResultMap">
-        select * from pl_sys_sms where is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IAttachService.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IAttachService.java
deleted file mode 100644
index 99b2ef6..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IAttachService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.Autowired.entity.Attach;
-import org.springblade.Autowired.vo.AttachVO;
-
-/**
- * 闄勪欢琛� 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IAttachService extends BaseService<Attach> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param attach
-	 * @return
-	 */
-	IPage<AttachVO> selectAttachPage(IPage<AttachVO> page, AttachVO attach);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IOssService.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IOssService.java
deleted file mode 100644
index b777ea7..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IOssService.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.Autowired.entity.Oss;
-import org.springblade.Autowired.vo.OssVO;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author BladeX
- */
-public interface IOssService extends BaseService<Oss> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param oss
-	 * @return
-	 */
-	IPage<OssVO> selectOssPage(IPage<OssVO> page, OssVO oss);
-
-	/**
-	 * 鎻愪氦oss淇℃伅
-	 *
-	 * @param oss
-	 * @return
-	 */
-	boolean submit(Oss oss);
-
-	/**
-	 * 鍚姩閰嶇疆
-	 *
-	 * @param id
-	 * @return
-	 */
-	boolean enable(Long id);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/ISmsService.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/ISmsService.java
deleted file mode 100644
index 6073f26..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/ISmsService.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.Autowired.entity.Sms;
-import org.springblade.Autowired.vo.SmsVO;
-
-/**
- * 鐭俊閰嶇疆琛� 鏈嶅姟绫�
- *
- * @author BladeX
- */
-public interface ISmsService extends BaseService<Sms> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param sms
-	 * @return
-	 */
-	IPage<SmsVO> selectSmsPage(IPage<SmsVO> page, SmsVO sms);
-
-	/**
-	 * 鎻愪氦oss淇℃伅
-	 *
-	 * @param oss
-	 * @return
-	 */
-	boolean submit(Sms oss);
-
-	/**
-	 * 鍚姩閰嶇疆
-	 *
-	 * @param id
-	 * @return
-	 */
-	boolean enable(Long id);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/AttachServiceImpl.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/AttachServiceImpl.java
deleted file mode 100644
index 4d98e77..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/AttachServiceImpl.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.Autowired.entity.Attach;
-import org.springblade.Autowired.mapper.AttachMapper;
-import org.springblade.Autowired.service.IAttachService;
-import org.springblade.Autowired.vo.AttachVO;
-import org.springframework.stereotype.Service;
-
-/**
- * 闄勪欢琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class AttachServiceImpl extends BaseServiceImpl<AttachMapper, Attach> implements IAttachService {
-
-	@Override
-	public IPage<AttachVO> selectAttachPage(IPage<AttachVO> page, AttachVO attach) {
-		return page.setRecords(baseMapper.selectAttachPage(page, attach));
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/OssServiceImpl.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/OssServiceImpl.java
deleted file mode 100644
index 26ae899..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/OssServiceImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.Autowired.entity.Oss;
-import org.springblade.Autowired.vo.OssVO;
-import org.springblade.Autowired.mapper.OssMapper;
-import org.springblade.Autowired.service.IOssService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author BladeX
- */
-@Service
-public class OssServiceImpl extends BaseServiceImpl<OssMapper, Oss> implements IOssService {
-
-	@Override
-	public IPage<OssVO> selectOssPage(IPage<OssVO> page, OssVO oss) {
-		return page.setRecords(baseMapper.selectOssPage(page, oss));
-	}
-
-	@Override
-	public boolean submit(Oss oss) {
-		LambdaQueryWrapper<Oss> lqw = Wrappers.<Oss>query().lambda()
-			.eq(Oss::getOssCode, oss.getOssCode()).eq(Oss::getTenantId, AuthUtil.getTenantId());
-		Long cnt = baseMapper.selectCount(Func.isEmpty(oss.getId()) ? lqw : lqw.notIn(Oss::getId, oss.getId()));
-		if (cnt > 0L) {
-			throw new ServiceException("褰撳墠璧勬簮缂栧彿宸插瓨鍦�!");
-		}
-		return this.saveOrUpdate(oss);
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean enable(Long id) {
-		// 鍏堢鐢�
-		boolean temp1 = this.update(Wrappers.<Oss>update().lambda().set(Oss::getStatus, 1));
-		// 鍦ㄥ惎鐢�
-		boolean temp2 = this.update(Wrappers.<Oss>update().lambda().set(Oss::getStatus, 2).eq(Oss::getId, id));
-		return temp1 && temp2;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/SmsServiceImpl.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/SmsServiceImpl.java
deleted file mode 100644
index 8b58ae7..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/SmsServiceImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.Autowired.entity.Sms;
-import org.springblade.Autowired.mapper.SmsMapper;
-import org.springblade.Autowired.service.ISmsService;
-import org.springblade.Autowired.vo.SmsVO;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 鐭俊閰嶇疆琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author BladeX
- */
-@Service
-public class SmsServiceImpl extends BaseServiceImpl<SmsMapper, Sms> implements ISmsService {
-
-	@Override
-	public IPage<SmsVO> selectSmsPage(IPage<SmsVO> page, SmsVO sms) {
-		return page.setRecords(baseMapper.selectSmsPage(page, sms));
-	}
-
-	@Override
-	public boolean submit(Sms sms) {
-		LambdaQueryWrapper<Sms> lqw = Wrappers.<Sms>query().lambda()
-			.eq(Sms::getSmsCode, sms.getSmsCode()).eq(Sms::getTenantId, AuthUtil.getTenantId());
-		Long cnt = baseMapper.selectCount(Func.isEmpty(sms.getId()) ? lqw : lqw.notIn(Sms::getId, sms.getId()));
-		if (cnt > 0L) {
-			throw new ServiceException("褰撳墠璧勬簮缂栧彿宸插瓨鍦�!");
-		}
-		return this.saveOrUpdate(sms);
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean enable(Long id) {
-		// 鍏堢鐢�
-		boolean temp1 = this.update(Wrappers.<Sms>update().lambda().set(Sms::getStatus, 1));
-		// 鍦ㄥ惎鐢�
-		boolean temp2 = this.update(Wrappers.<Sms>update().lambda().set(Sms::getStatus, 2).eq(Sms::getId, id));
-		return temp1 && temp2;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/OssWrapper.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/OssWrapper.java
deleted file mode 100644
index 5288662..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/OssWrapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.Autowired.entity.Oss;
-import org.springblade.Autowired.vo.OssVO;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.enums.DictEnum;
-
-import java.util.Objects;
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author BladeX
- */
-public class OssWrapper extends BaseEntityWrapper<Oss, OssVO> {
-
-	public static OssWrapper build() {
-		return new OssWrapper();
-	}
-
-	@Override
-	public OssVO entityVO(Oss oss) {
-		OssVO ossVO = Objects.requireNonNull(BeanUtil.copy(oss, OssVO.class));
-		String categoryName = DictCache.getValue(DictEnum.OSS, oss.getCategory());
-		String statusName = DictCache.getValue(DictEnum.YES_NO, oss.getStatus());
-		ossVO.setCategoryName(categoryName);
-		ossVO.setStatusName(statusName);
-		return ossVO;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/SmsWrapper.java b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/SmsWrapper.java
deleted file mode 100644
index 29bdb76..0000000
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/SmsWrapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.Autowired.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.Autowired.entity.Sms;
-import org.springblade.Autowired.vo.SmsVO;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.enums.DictEnum;
-
-import java.util.Objects;
-
-/**
- * 鐭俊閰嶇疆琛ㄥ寘瑁呯被,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author BladeX
- */
-public class SmsWrapper extends BaseEntityWrapper<Sms, SmsVO> {
-
-	public static SmsWrapper build() {
-		return new SmsWrapper();
-	}
-
-	@Override
-	public SmsVO entityVO(Sms sms) {
-		SmsVO smsVO = Objects.requireNonNull(BeanUtil.copy(sms, SmsVO.class));
-		String categoryName = DictCache.getValue(DictEnum.SMS, sms.getCategory());
-		String statusName = DictCache.getValue(DictEnum.YES_NO, sms.getStatus());
-		smsVO.setCategoryName(categoryName);
-		smsVO.setStatusName(statusName);
-		return smsVO;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-swagger/pom.xml b/Source/BladeX/blade-ops/blade-swagger/pom.xml
deleted file mode 100644
index c8250c7..0000000
--- a/Source/BladeX/blade-ops/blade-swagger/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-swagger</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-cloud</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>knife4j-aggregation-spring-boot-starter</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java b/Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java
deleted file mode 100644
index ac2b78b..0000000
--- a/Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.swagger;
-
-
-import io.swagger.annotations.SwaggerDefinition;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
-
-/**
- * swagger鑱氬悎鍚姩鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class SwaggerApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_SWAGGER_NAME, SwaggerApplication.class, args);
-	}
-
-}
diff --git "a/Source/BladeX/blade-ops/blade-xxljob-admin/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/Source/BladeX/blade-ops/blade-xxljob-admin/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md"
deleted file mode 100644
index 9e9ca87..0000000
--- "a/Source/BladeX/blade-ops/blade-xxljob-admin/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md"
+++ /dev/null
@@ -1,1740 +0,0 @@
-## 銆婂垎甯冨紡浠诲姟璋冨害骞冲彴XXL-JOB銆�
-
-[![Actions Status](https://github.com/xuxueli/xxl-job/workflows/Java%20CI/badge.svg)](https://github.com/xuxueli/xxl-job/actions)
-[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/)
-[![GitHub release](https://img.shields.io/github/release/xuxueli/xxl-job.svg)](https://github.com/xuxueli/xxl-job/releases)
-[![GitHub stars](https://img.shields.io/github/stars/xuxueli/xxl-job)](https://github.com/xuxueli/xxl-job/)
-[![Docker Status](https://img.shields.io/docker/pulls/xuxueli/xxl-job-admin)](https://hub.docker.com/r/xuxueli/xxl-job-admin/)
-[![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](http://www.gnu.org/licenses/gpl-3.0.html)
-[![donate](https://img.shields.io/badge/%24-donate-ff69b4.svg?style=flat)](https://www.xuxueli.com/page/donate.html)
-
-[TOCM]
-
-[TOC]
-
-## 涓�銆佺畝浠�
-
-### 1.1 姒傝堪
-XXL-JOB鏄竴涓垎甯冨紡浠诲姟璋冨害骞冲彴锛屽叾鏍稿績璁捐鐩爣鏄紑鍙戣繀閫熴�佸涔犵畝鍗曘�佽交閲忕骇銆佹槗鎵╁睍銆傜幇宸插紑鏀炬簮浠g爜骞舵帴鍏ュ瀹跺叕鍙哥嚎涓婁骇鍝佺嚎锛屽紑绠卞嵆鐢ㄣ��
-
-### 1.2 绀惧尯浜ゆ祦    
-- [绀惧尯浜ゆ祦](https://www.xuxueli.com/page/community.html)
-
-### 1.3 鐗规��
-- 1銆佺畝鍗曪細鏀寔閫氳繃Web椤甸潰瀵逛换鍔¤繘琛孋RUD鎿嶄綔锛屾搷浣滅畝鍗曪紝涓�鍒嗛挓涓婃墜锛�
-- 2銆佸姩鎬侊細鏀寔鍔ㄦ�佷慨鏀逛换鍔$姸鎬併�佸惎鍔�/鍋滄浠诲姟锛屼互鍙婄粓姝㈣繍琛屼腑浠诲姟锛屽嵆鏃剁敓鏁堬紱
-- 3銆佽皟搴︿腑蹇僅A锛堜腑蹇冨紡锛夛細璋冨害閲囩敤涓績寮忚璁★紝鈥滆皟搴︿腑蹇冣�濊嚜鐮旇皟搴︾粍浠跺苟鏀寔闆嗙兢閮ㄧ讲锛屽彲淇濊瘉璋冨害涓績HA锛�
-- 4銆佹墽琛屽櫒HA锛堝垎甯冨紡锛夛細浠诲姟鍒嗗竷寮忔墽琛岋紝浠诲姟"鎵ц鍣�"鏀寔闆嗙兢閮ㄧ讲锛屽彲淇濊瘉浠诲姟鎵цHA锛�
-- 5銆佹敞鍐屼腑蹇�: 鎵ц鍣ㄤ細鍛ㄦ湡鎬ц嚜鍔ㄦ敞鍐屼换鍔�, 璋冨害涓績灏嗕細鑷姩鍙戠幇娉ㄥ唽鐨勪换鍔″苟瑙﹀彂鎵ц銆傚悓鏃讹紝涔熸敮鎸佹墜鍔ㄥ綍鍏ユ墽琛屽櫒鍦板潃锛�
-- 6銆佸脊鎬ф墿瀹圭缉瀹癸細涓�鏃︽湁鏂版墽琛屽櫒鏈哄櫒涓婄嚎鎴栬�呬笅绾匡紝涓嬫璋冨害鏃跺皢浼氶噸鏂板垎閰嶄换鍔★紱
-- 7銆佽矾鐢辩瓥鐣ワ細鎵ц鍣ㄩ泦缇ら儴缃叉椂鎻愪緵涓板瘜鐨勮矾鐢辩瓥鐣ワ紝鍖呮嫭锛氱涓�涓�佹渶鍚庝竴涓�佽疆璇€�侀殢鏈恒�佷竴鑷存�ASH銆佹渶涓嶇粡甯镐娇鐢ㄣ�佹渶杩戞渶涔呮湭浣跨敤銆佹晠闅滆浆绉汇�佸繖纰岃浆绉荤瓑锛�
-- 8銆佹晠闅滆浆绉伙細浠诲姟璺敱绛栫暐閫夋嫨"鏁呴殰杞Щ"鎯呭喌涓嬶紝濡傛灉鎵ц鍣ㄩ泦缇や腑鏌愪竴鍙版満鍣ㄦ晠闅滐紝灏嗕細鑷姩Failover鍒囨崲鍒颁竴鍙版甯哥殑鎵ц鍣ㄥ彂閫佽皟搴﹁姹傘��
-- 9銆侀樆濉炲鐞嗙瓥鐣ワ細璋冨害杩囦簬瀵嗛泦鎵ц鍣ㄦ潵涓嶅強澶勭悊鏃剁殑澶勭悊绛栫暐锛岀瓥鐣ュ寘鎷細鍗曟満涓茶锛堥粯璁わ級銆佷涪寮冨悗缁皟搴︺�佽鐩栦箣鍓嶈皟搴︼紱
-- 10銆佷换鍔¤秴鏃舵帶鍒讹細鏀寔鑷畾涔変换鍔¤秴鏃舵椂闂达紝浠诲姟杩愯瓒呮椂灏嗕細涓诲姩涓柇浠诲姟锛�
-- 11銆佷换鍔″け璐ラ噸璇曪細鏀寔鑷畾涔変换鍔″け璐ラ噸璇曟鏁帮紝褰撲换鍔″け璐ユ椂灏嗕細鎸夌収棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇曪紱鍏朵腑鍒嗙墖浠诲姟鏀寔鍒嗙墖绮掑害鐨勫け璐ラ噸璇曪紱
-- 12銆佷换鍔″け璐ュ憡璀︼紱榛樿鎻愪緵閭欢鏂瑰紡澶辫触鍛婅锛屽悓鏃堕鐣欐墿灞曟帴鍙o紝鍙柟渚跨殑鎵╁睍鐭俊銆侀拤閽夌瓑鍛婅鏂瑰紡锛�
-- 13銆佸垎鐗囧箍鎾换鍔★細鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屼换鍔¤矾鐢辩瓥鐣ラ�夋嫨"鍒嗙墖骞挎挱"鎯呭喌涓嬶紝涓�娆′换鍔¤皟搴﹀皢浼氬箍鎾Е鍙戦泦缇や腑鎵�鏈夋墽琛屽櫒鎵ц涓�娆′换鍔★紝鍙牴鎹垎鐗囧弬鏁板紑鍙戝垎鐗囦换鍔★紱
-- 14銆佸姩鎬佸垎鐗囷細鍒嗙墖骞挎挱浠诲姟浠ユ墽琛屽櫒涓虹淮搴﹁繘琛屽垎鐗囷紝鏀寔鍔ㄦ�佹墿瀹规墽琛屽櫒闆嗙兢浠庤�屽姩鎬佸鍔犲垎鐗囨暟閲忥紝鍗忓悓杩涜涓氬姟澶勭悊锛涘湪杩涜澶ф暟鎹噺涓氬姟鎿嶄綔鏃跺彲鏄捐憲鎻愬崌浠诲姟澶勭悊鑳藉姏鍜岄�熷害銆�
-- 15銆佷簨浠惰Е鍙戯細闄や簡"Cron鏂瑰紡"鍜�"浠诲姟渚濊禆鏂瑰紡"瑙﹀彂浠诲姟鎵ц涔嬪锛屾敮鎸佸熀浜庝簨浠剁殑瑙﹀彂浠诲姟鏂瑰紡銆傝皟搴︿腑蹇冩彁渚涜Е鍙戜换鍔″崟娆℃墽琛岀殑API鏈嶅姟锛屽彲鏍规嵁涓氬姟浜嬩欢鐏垫椿瑙﹀彂銆�
-- 16銆佷换鍔¤繘搴︾洃鎺э細鏀寔瀹炴椂鐩戞帶浠诲姟杩涘害锛�
-- 17銆丷olling瀹炴椂鏃ュ織锛氭敮鎸佸湪绾挎煡鐪嬭皟搴︾粨鏋滐紝骞朵笖鏀寔浠olling鏂瑰紡瀹炴椂鏌ョ湅鎵ц鍣ㄨ緭鍑虹殑瀹屾暣鐨勬墽琛屾棩蹇楋紱
-- 18銆丟LUE锛氭彁渚沇eb IDE锛屾敮鎸佸湪绾垮紑鍙戜换鍔¢�昏緫浠g爜锛屽姩鎬佸彂甯冿紝瀹炴椂缂栬瘧鐢熸晥锛岀渷鐣ラ儴缃蹭笂绾跨殑杩囩▼銆傛敮鎸�30涓増鏈殑鍘嗗彶鐗堟湰鍥炴函銆�
-- 19銆佽剼鏈换鍔★細鏀寔浠LUE妯″紡寮�鍙戝拰杩愯鑴氭湰浠诲姟锛屽寘鎷琒hell銆丳ython銆丯odeJS銆丳HP銆丳owerShell绛夌被鍨嬭剼鏈�;
-- 20銆佸懡浠よ浠诲姟锛氬師鐢熸彁渚涢�氱敤鍛戒护琛屼换鍔andler锛圔ean浠诲姟锛�"CommandJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚涘懡浠よ鍗冲彲锛�
-- 21銆佷换鍔′緷璧栵細鏀寔閰嶇疆瀛愪换鍔′緷璧栵紝褰撶埗浠诲姟鎵ц缁撴潫涓旀墽琛屾垚鍔熷悗灏嗕細涓诲姩瑙﹀彂涓�娆″瓙浠诲姟鐨勬墽琛�, 澶氫釜瀛愪换鍔$敤閫楀彿鍒嗛殧锛�
-- 22銆佷竴鑷存�э細鈥滆皟搴︿腑蹇冣�濋�氳繃DB閿佷繚璇侀泦缇ゅ垎甯冨紡璋冨害鐨勪竴鑷存��, 涓�娆′换鍔¤皟搴﹀彧浼氳Е鍙戜竴娆℃墽琛岋紱
-- 23銆佽嚜瀹氫箟浠诲姟鍙傛暟锛氭敮鎸佸湪绾块厤缃皟搴︿换鍔″叆鍙傦紝鍗虫椂鐢熸晥锛�
-- 24銆佽皟搴︾嚎绋嬫睜锛氳皟搴︾郴缁熷绾跨▼瑙﹀彂璋冨害杩愯锛岀‘淇濊皟搴︾簿纭墽琛岋紝涓嶈鍫靛锛�
-- 25銆佹暟鎹姞瀵嗭細璋冨害涓績鍜屾墽琛屽櫒涔嬮棿鐨勯�氳杩涜鏁版嵁鍔犲瘑锛屾彁鍗囪皟搴︿俊鎭畨鍏ㄦ�э紱
-- 26銆侀偖浠舵姤璀︼細浠诲姟澶辫触鏃舵敮鎸侀偖浠舵姤璀︼紝鏀寔閰嶇疆澶氶偖浠跺湴鍧�缇ゅ彂鎶ヨ閭欢锛�
-- 27銆佹帹閫乵aven涓ぎ浠撳簱: 灏嗕細鎶婃渶鏂扮ǔ瀹氱増鎺ㄩ�佸埌maven涓ぎ浠撳簱, 鏂逛究鐢ㄦ埛鎺ュ叆鍜屼娇鐢�;
-- 28銆佽繍琛屾姤琛細鏀寔瀹炴椂鏌ョ湅杩愯鏁版嵁锛屽浠诲姟鏁伴噺銆佽皟搴︽鏁般�佹墽琛屽櫒鏁伴噺绛夛紱浠ュ強璋冨害鎶ヨ〃锛屽璋冨害鏃ユ湡鍒嗗竷鍥撅紝璋冨害鎴愬姛鍒嗗竷鍥剧瓑锛�
-- 29銆佸叏寮傛锛氫换鍔¤皟搴︽祦绋嬪叏寮傛鍖栬璁″疄鐜帮紝濡傚紓姝ヨ皟搴︺�佸紓姝ヨ繍琛屻�佸紓姝ュ洖璋冪瓑锛屾湁鏁堝瀵嗛泦璋冨害杩涜娴侀噺鍓婂嘲锛岀悊璁轰笂鏀寔浠绘剰鏃堕暱浠诲姟鐨勮繍琛岋紱
-- 30銆佽法骞冲彴锛氬師鐢熸彁渚涢�氱敤HTTP浠诲姟Handler锛圔ean浠诲姟锛�"HttpJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚汬TTP閾炬帴鍗冲彲锛屼笉闄愬埗璇█銆佸钩鍙帮紱
-- 31銆佸浗闄呭寲锛氳皟搴︿腑蹇冩敮鎸佸浗闄呭寲璁剧疆锛屾彁渚涗腑鏂囥�佽嫳鏂囦袱绉嶅彲閫夎瑷�锛岄粯璁や负涓枃锛�
-- 32銆佸鍣ㄥ寲锛氭彁渚涘畼鏂筪ocker闀滃儚锛屽苟瀹炴椂鏇存柊鎺ㄩ�乨ockerhub锛岃繘涓�姝ュ疄鐜颁骇鍝佸紑绠卞嵆鐢紱
-- 33銆佺嚎绋嬫睜闅旂锛氳皟搴︾嚎绋嬫睜杩涜闅旂鎷嗗垎锛屾參浠诲姟鑷姩闄嶇骇杩涘叆"Slow"绾跨▼姹狅紝閬垮厤鑰楀敖璋冨害绾跨▼锛屾彁楂樼郴缁熺ǔ瀹氭�э紱
-- 34銆佺敤鎴风鐞嗭細鏀寔鍦ㄧ嚎绠$悊绯荤粺鐢ㄦ埛锛屽瓨鍦ㄧ鐞嗗憳銆佹櫘閫氱敤鎴蜂袱绉嶈鑹诧紱
-- 35銆佹潈闄愭帶鍒讹細鎵ц鍣ㄧ淮搴﹁繘琛屾潈闄愭帶鍒讹紝绠$悊鍛樻嫢鏈夊叏閲忔潈闄愶紝鏅�氱敤鎴烽渶瑕佸垎閰嶆墽琛屽櫒鏉冮檺鍚庢墠鍏佽鐩稿叧鎿嶄綔锛�
-
-
-### 1.4 鍙戝睍
-浜�2015骞翠腑锛屾垜鍦╣ithub涓婂垱寤篨XL-JOB椤圭洰浠撳簱骞舵彁浜ょ涓�涓猚ommit锛岄殢涔嬭繘琛岀郴缁熺粨鏋勮璁★紝UI閫夊瀷锛屼氦浜掕璁♀�︹��
-
-浜�2015-11鏈堬紝XXL-JOB缁堜簬RELEASE浜嗙涓�涓ぇ鐗堟湰V1.0锛� 闅忓悗鎴戝皢涔嬪彂甯冨埌OSCHINA锛孹XL-JOB鍦∣SCHINA涓婅幏寰椾簡@绾㈣柉鐨勭儹闂ㄦ帹鑽愶紝鍚屾湡鍒嗗埆杈惧埌浜哋SCHINA鐨勨�滅儹闂ㄥ姩寮光�濇帓琛岀涓�鍜実it.oschina鐨勫紑婧愯蒋浠舵湀鐑害鎺掕绗竴锛屽湪姝ょ壒鍒劅璋㈢孩钖紝鎰熻阿澶у鐨勫叧娉ㄥ拰鏀寔銆�
-
-浜�2015-12鏈堬紝鎴戝皢XXL-JOB鍙戣〃鍒版垜鍙稿唴閮ㄧ煡璇嗗簱锛屽苟涓斿緱鍒板唴閮ㄥ悓浜嬭鍙��
-
-浜�2016-01鏈堬紝鎴戝徃灞曞紑XXL-JOB鐨勫唴閮ㄦ帴鍏ュ拰瀹氬埗宸ヤ綔锛屽湪姝ゆ劅璋㈣鏌愬拰灏规煇涓や綅鍚屼簨鐨勮础鐚紝鍚屾椂涔熸劅璋㈠唴閮ㄥ叾浠栫粰涓庡叧娉ㄤ笌鏀寔鐨勫悓浜嬨��
-
-浜�2017-05-13锛屽湪涓婃捣涓惧姙鐨� "[绗�62鏈熷紑婧愪腑鍥芥簮鍒涗細](https://www.oschina.net/event/2236961)" 鐨� "鏀剧爜杩囨潵" 鐜妭锛屾垜鐧诲彴瀵筙XL-JOB鍋氫簡婕旇锛屽彴涓嬩簲鐧句綅鍦ㄥ満瑙備紬鍙嶅搷鐑儓锛圼鍥炬枃鍥為【](https://www.oschina.net/question/2686220_2242120) 锛夈��
-
-浜�2017-10-22锛屽張鎷嶄簯 Open Talk 鑱斿悎 Spring Cloud 涓浗绀惧尯涓惧姙鐨� "[杩涘嚮鐨勫井鏈嶅姟瀹炴垬娲句笂娴风珯](https://opentalk.upyun.com/303.html)"锛屾垜鐧诲彴瀵筙XL-JOB鍋氫簡婕旇锛岀幇鍦鸿浼楀弽鍝嶇儹鐑堝苟鍦ㄤ細鍚庝笌XXL-JOB鐢ㄦ埛鐑儓璁ㄨ浜ゆ祦銆�
-
-浜�2017-12-11锛孹XL-JOB鏈夊垢鍙備細銆奫InfoQ ArchSummit鍏ㄧ悆鏋舵瀯甯堝嘲浼歖(http://bj2017.archsummit.com/)銆嬶紝骞惰鎷嶆媿璐锋灦鏋勬�荤洃"鏉ㄦ尝鑰佸笀"鍦ㄤ笓棰� "[寰湇鍔″師鐞嗐�佸熀纭�鏋舵瀯鍜屽紑婧愬疄璺礭(http://bj2017.archsummit.com/training/2)" 涓幇鍦轰粙缁嶃��
-
-浜�2017-12-18锛孹XL-JOB鍙備笌"[2017骞村害鏈�鍙楁杩庝腑鍥藉紑婧愯蒋浠禲(http://www.oschina.net/project/top_cn_2017?sort=1)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑绾︿節鍗冧釜鍥戒骇寮�婧愰」鐩腑瑙掗�愶紝鏈�缁堣繘鍏ヤ簡鍓�30寮恒��
-
-浜�2018-01-15锛孹XL-JOB鍙備笌"[2017鐮佷簯鏈�鐏紑婧愰」鐩甝(https://www.oschina.net/news/92438/2017-mayun-top-50)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑绾﹀叚鍗冧簲鐧句釜鐮佷簯椤圭洰涓閫愶紝鏈�缁堣繘鍘讳簡鍓�20寮恒��
-
-浜�2018-04-14锛宨TechPlus鍦ㄤ笂娴蜂妇鍔炵殑 "[2018浜掕仈缃戝紑鍙戣�呭ぇ浼歖(http://www.itdks.com/eventlist/detail/2065)"锛屾垜鐧诲彴瀵筙XL-JOB鍋氫簡婕旇锛岀幇鍦鸿浼楀弽鍝嶇儹鐑堝苟鍦ㄤ細鍚庝笌XXL-JOB鐢ㄦ埛鐑儓璁ㄨ浜ゆ祦銆�
-
-浜�2018-05-27锛屽湪涓婃捣涓惧姙鐨� "[绗�75鏈熷紑婧愪腑鍥芥簮鍒涗細](https://www.oschina.net/event/2278742)" 鐨� "鏋舵瀯" 涓婚涓撳満锛屾垜鐧诲彴杩涜鈥滃熀纭�鏋舵瀯涓庝腑闂翠欢鍥捐氨鈥濅富棰樻紨璁诧紝鍙颁笅涓婂崈浣嶅湪鍦鸿浼楀弽鍝嶇儹鐑堬紙[鍥炬枃鍥為【](https://www.oschina.net/question/3802184_2280606) 锛夈��
-
-浜�2018-12-05锛孹XL-JOB鍙備笌"[2018骞村害鏈�鍙楁杩庝腑鍥藉紑婧愯蒋浠禲(https://www.oschina.net/project/top_cn_2018?sort=1)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑涓�涓囧涓紑婧愰」鐩腑瑙掗�愶紝鏈�缁堟帓鍚嶇19鍚嶃��
-
-浜�2019-12-10锛孹XL-JOB鍙備笌"[2019骞村害鏈�鍙楁杩庝腑鍥藉紑婧愯蒋浠禲(https://www.oschina.net/project/top_cn_2019)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑涓�涓囧涓紑婧愰」鐩腑瑙掗�愶紝鏈�缁堟帓鍚�"寮�鍙戞鏋跺拰鍩虹缁勪欢绫�"绗�9鍚嶃��
-
-> 鎴戝徃澶т紬鐐硅瘎鐩墠宸叉帴鍏XL-JOB锛屽唴閮ㄥ埆鍚嶃�奆errari銆嬶紙Ferrari鍩轰簬XXL-JOB鐨刅1.1鐗堟湰瀹氬埗鑰屾垚锛屾柊鎺ュ叆搴旂敤鎺ㄨ崘鍗囩骇鏈�鏂扮増鏈級銆�
-鎹渶鏂扮粺璁�, 鑷�2016-01-21鎺ュ叆鑷�2017-12-01鏈熼棿锛岃绯荤粺宸茶皟搴︾害100涓囨锛岃〃鐜颁紭寮傘�傛柊鎺ュ叆搴旂敤鎺ㄨ崘浣跨敤鏈�鏂扮増鏈紝鍥犱负缁忚繃鏁板崄涓増鏈殑鏇存柊锛岀郴缁熺殑浠诲姟妯″瀷銆乁I浜や簰妯″瀷浠ュ強搴曞眰璋冨害閫氳妯″瀷閮芥湁浜嗚緝澶х殑浼樺寲鍜屾彁鍗囷紝鏍稿績鍔熻兘鏇村姞绋冲畾楂樻晥銆�
-
-鑷充粖锛孹XL-JOB宸叉帴鍏ュ瀹跺叕鍙哥殑绾夸笂浜у搧绾匡紝鎺ュ叆鍦烘櫙濡傜數鍟嗕笟鍔★紝O2O涓氬姟鍜屽ぇ鏁版嵁浣滀笟绛夛紝鎴鏈�鏂扮粺璁℃椂闂翠负姝紝XXL-JOB宸叉帴鍏ョ殑鍏徃鍖呮嫭涓嶉檺浜庯細
-    
-	- 1銆佸ぇ浼楃偣璇勩�愮編鍥㈢偣璇勩��
-	- 2銆佸北涓滃鑰岀綉缁滅鎶�鏈夐檺鍏徃锛�
-	- 3銆佸畨寰芥収閫氫簰鑱旂鎶�鏈夐檺鍏徃锛�
-	- 4銆佷汉浜鸿仛璐㈤噾鏈嶏紱
-	- 5銆佷笂娴锋妫d俊鎭鎶�鑲′唤鏈夐檺鍏徃
-	- 6銆佽繍婊℃弧銆愯繍婊℃弧銆�
-	- 7銆佺背鍏舵灄 (涓浗鍖�)銆愮背鍏舵灄銆�
-	- 8銆佸濡堣仈鐩�
-	- 9銆佷節妯卞ぉ涓嬶紙鍖椾含锛変俊鎭妧鏈湁闄愬叕鍙�
-	- 10銆佷竾鏅媺鏂鎶�鏈夐檺鍏徃銆愪竴鍔犳墜鏈恒��
-	- 11銆佷笂娴蜂嚎淇濆仴搴风鐞嗘湁闄愬叕鍙�
-	- 12銆佹捣灏旈Θ鍘ㄣ�愭捣灏斻��
-	- 13銆佹渤鍗楀ぇ绾㈠寘鐢靛瓙鍟嗗姟鏈夐檺鍏徃
-	- 14銆佹垚閮介『鐐圭鎶�鏈夐檺鍏徃
-	- 15銆佹繁鍦冲競鎬′簹閫�
-	- 16銆佹繁鍦抽害浜氫俊绉戞妧鑲′唤鏈夐檺鍏徃
-	- 17銆佷笂娴峰崥鑾圭鎶�淇℃伅鎶�鏈湁闄愬叕鍙�
-	- 18銆佷腑鍥藉钩瀹夌鎶�鏈夐檺鍏徃銆愪腑鍥藉钩瀹夈��
-	- 19銆佹澀宸炵煡鏃朵俊鎭鎶�鏈夐檺鍏徃
-	- 20銆佸崥鑾圭鎶�锛堜笂娴凤級鏈夐檺鍏徃
-	- 21銆佹垚閮戒緷鑳借偂浠芥湁闄愯矗浠诲叕鍙�
-	- 22銆佹箹鍗楅珮闃抽�氳仈淇℃伅鎶�鏈湁闄愬叕鍙�
-	- 23銆佹繁鍦冲競閭﹀痉鏂囧寲鍙戝睍鏈夐檺鍏徃
-	- 24銆佺寤洪樋鎬濆彲缃戠粶鏁欒偛鏈夐檺鍏徃
-	- 25銆佷紭淇′簩鎵嬭溅銆愪紭淇°��
-	- 26銆佷笂娴锋偁娓稿爞鎶曡祫鍙戝睍鑲′唤鏈夐檺鍏徃銆愭偁娓稿爞銆�
-	- 27銆佸寳浜矇绗旇摑澶╃鎶�鏈夐檺鍏徃
-	- 28銆佷腑绉�绉戞妧(鏃犻敗)鏈夐檺鍏徃
-	- 29銆佹姹夌┖蹇冪鎶�鏈夐檺鍏徃
-	- 30銆佸寳浜殏铓侀鏆寸鎶�鏈夐檺鍏徃
-	- 31銆佸洓宸濅簰瀹滆揪绉戞妧鏈夐檺鍏徃
-	- 32銆侀挶鍖呰浜戯紙鍖椾含锛夌鎶�鏈夐檺鍏徃
-	- 33銆侀噸搴嗘鎵嶉泦鍥�
-    - 34銆佸挭鍜曚簰鍔ㄥū涔愭湁闄愬叕鍙搞�愪腑鍥界Щ鍔ㄣ��
-    - 35銆佸寳浜浜﹁吘绉戞妧鏈夐檺鍏徃
-    - 36銆佸闀垮紩鎿�(鍖椾含)淇℃伅鎶�鏈湁闄愬叕鍙�
-    - 37銆佸寳浜嫳璐濇�濈鎶�鏈夐檺鍏徃
-    - 38銆佸垰娉伴泦鍥�
-    - 39銆佹繁鍦虫嘲涔呬俊鎭郴缁熻偂浠芥湁闄愬叕鍙�
-    - 40銆侀殢琛屼粯鏀粯鏈夐檺鍏徃
-    - 41銆佸箍宸炵�氬啘缃戠粶绉戞妧鏈夐檺鍏徃
-    - 42銆佷韩鐐圭鎶�鏈夐檺鍏徃
-    - 43銆佹澀宸炴瘮鏅虹鎶�鏈夐檺鍏徃
-    - 44銆佸湷涓寸晫绾跨綉缁滅鎶�鏈夐檺鍏徃
-    - 45銆佸箍宸炵煡璇嗗湀缃戠粶绉戞妧鏈夐檺鍏徃
-    - 46銆佸浗瑾夊晢涓氫笂娴锋湁闄愬叕鍙�
-    - 47銆佹捣灏旀秷璐归噾铻嶆湁闄愬叕鍙革紝鍡ㄤ粯銆佸鑺便�愭捣灏斻��
-    - 48銆佸箍宸炲反鍥鹃瞾淇℃伅绉戞妧鏈夐檺鍏徃
-    - 49銆佹繁鍦冲競楣忔捣杩愮數瀛愭暟鎹氦鎹㈡湁闄愬叕鍙�
-    - 50銆佹繁鍦冲競浜氶鐢靛瓙鍟嗗姟鏈夐檺鍏徃
-    - 51銆佷笂娴疯叮鍖荤綉缁滄湁闄愬叕鍙�
-    - 52銆佽仛閲戣祫鏈�
-    - 53銆佸寳浜埗姣嶉偊缃戠粶绉戞妧鏈夐檺鍏徃
-    - 54銆佷腑灞卞厓璧蒋浠剁鎶�鏈夐檺鍏徃
-    - 55銆佷腑鍟嗘儬姘�(鍖椾含)鐢靛瓙鍟嗗姟鏈夐檺鍏徃
-    - 56銆佸嚡浜泦鍥�
-    - 57銆佸崕澶忕エ鑱旓紙鍖椾含锛夌鎶�鏈夐檺鍏徃
-    - 58銆佹媿鎷嶈捶銆愭媿鎷嶈捶銆�
-    - 59銆佸寳浜皻寰锋満鏋勫湪绾挎暀鑲叉湁闄愬叕鍙�
-    - 60銆佷换瀛愯鑲′唤鏈夐檺鍏徃
-    - 61銆佸寳浜椂鎬佺數瀛愬晢鍔℃湁闄愬叕鍙�
-    - 62銆佹繁鍦冲嵎鐨綉缁滅鎶�鏈夐檺鍏徃
-    - 63銆佸寳浜畨鍗氶�氱鎶�鑲′唤鏈夐檺鍏徃
-    - 64銆佹湭鏉ユ棤绾跨綉
-    - 65銆佸帵闂ㄧ摲绂х綉缁滄湁闄愬叕鍙�
-    - 66銆佸寳浜�掕摑绉戣蒋浠惰偂浠芥湁闄愬叕鍙�
-    - 67銆侀儜宸炲垱娴疯蒋浠剁鎶�鍏徃
-    - 68銆佸寳浜浗妲愪俊鎭鎶�鏈夐檺鍏徃
-    - 69銆佹氮娼蒋浠堕泦鍥�
-    - 70銆佸绔嬫亽(鍖椾含)淇℃伅鎶�鏈湁闄愬叕鍙�
-    - 71銆佸箍宸炴瀬杩呭淇℃伅绉戞妧鏈夐檺鍏徃
-    - 72銆佽但鍩猴紙涓浗锛夐泦鍥㈣偂浠芥湁闄愬叕鍙�
-    - 73銆佹捣鎶曟眹
-    - 74銆佷笂娴锋鼎鐩婂垱涓氬鍖栧櫒绠$悊鑲′唤鏈夐檺鍏徃
-    - 75銆佹眽绾虫.锛堝帵闂級鏁版嵁鑲′唤鏈夐檺鍏徃
-    - 76銆佸畨淇′俊鎵�
-    - 77銆佸矚鍎掕储瀵�
-    - 78銆佹嵎閬撹蒋浠�
-    - 79銆佹箹鍖椾韩涓冪綉缁滅鎶�鏈夐檺鍏徃
-    - 80銆佹箹鍗楀垱鍙戠鎶�璐d换鏈夐檺鍏徃
-    - 81銆佹繁鍦冲皬瀹夋椂浠d簰鑱旂綉閲戣瀺鏈嶅姟鏈夐檺鍏徃
-    - 82銆佹箹鍖椾韩涓冪綉缁滅鎶�鏈夐檺鍏徃
-    - 83銆侀挶鍖呰浜�(鍖椾含)绉戞妧鏈夐檺鍏徃
-    - 84銆�360閲戣瀺銆�360銆�
-    - 85銆佹槗浼佺
-    - 86銆佹懇璐濓紙涓婃捣锛夌敓鐗╃鎶�鏈夐檺鍏徃
-    - 87銆佸箍涓滆姱鏅烘収绉戞妧鏈夐檺鍏徃
-    - 88銆佽仈鎯抽泦鍥€�愯仈鎯炽��
-    - 89銆佹�吔鍏呯數
-    - 90銆佽鍦嗘苯杞�
-    - 91銆佹繁鍦冲簵搴楅�氱鎶�閭鍏徃
-    - 92銆佷含涓溿�愪含涓溿��
-    - 93銆佺背搴勭悊璐�
-    - 94銆佸挅鍟℃槗铻�
-    - 95銆佹ⅶ妗愯瘹閫�
-    - 96銆佹亽澶у湴浜с�愭亽澶с��
-    - 97銆佹槅鏄庨緳鎱�
-    - 98銆佷笂娴锋订鐟惰蒋浠�
-    - 99銆佹槗淇°�愮綉鏄撱��
-    - 100銆侀摐鏉胯
-    - 101銆佹澀宸炰簯鑻ョ綉缁滅鎶�鏈夐檺鍏徃
-    - 102銆佺壒鐧炬儬锛堜腑鍥斤級鏈夐檺鍏徃
-    - 103銆佸父灞变紬鍗¤繍鍔涗緵搴旈摼绠$悊鏈夐檺鍏徃
-    - 104銆佹繁鍦崇珛鍒涚數瀛愬晢鍔℃湁闄愬叕鍙�
-    - 105銆佹澀宸炴櫤璇虹鎶�鑲′唤鏈夐檺鍏徃
-    - 106銆佸寳浜簯婕句俊鎭鎶�鏈夐檺鍏徃
-    - 107銆佹繁鍦冲競澶氶摱绉戞妧鏈夐檺鍏徃
-    - 108銆佷翰瀹濆疂
-    - 109銆佷笂娴峰崥鍗¤蒋浠剁鎶�鏈夐檺鍏徃
-    - 110銆佹櫤鎱ф爲鍦ㄧ嚎鏁欒偛骞冲彴
-    - 111銆佺背鏃忛噾铻�
-    - 112銆佸寳浜景妫笘绾�
-    - 113銆佷簯鍗楁粐鍖婚��
-    - 114銆佸箍宸炲競鍒嗛缃戠粶绉戞妧鏈夐檺璐d换鍏徃
-    - 115銆佹禉姹熷井鑳界鎶�鏈夐檺鍏徃
-    - 116銆佷笂娴烽Θ椋炵數瀛愬晢鍔℃湁闄愬叕鍙�
-    - 117銆佷笂娴峰疂灏婄數瀛愬晢鍔℃湁闄愬叕鍙�
-    - 118銆佺洿瀹㈤�氱鎶�鎶�鏈湁闄愬叕鍙�
-    - 119銆佺搴︾鎶�鏈夐檺鍏徃
-    - 120銆佷笂娴锋暟鎱х郴缁熸妧鏈湁闄愬叕鍙�
-    - 121銆佹垜鐨勫尰鑽綉
-    - 122銆佸绮夊钩鍙�
-    - 123銆侀搧鐢蹭簩鎵嬫満
-    - 124銆佷笂娴锋捣鏂板緱鏁版嵁鎶�鏈湁闄愬叕鍙�
-    - 125銆佹繁鍦冲競鐝嶇埍缃戜俊鎭妧鏈湁闄愬叕鍙搞�愮弽鐖辩綉銆�
-    - 126銆佸皬铚滆渹
-    - 127銆佸悏鑽f暟绉戞妧
-    - 128銆佷笂娴锋伜鍩熶俊鎭鎶�鏈夐檺鍏徃
-    - 129銆佸箍宸炶崝鏀綉缁滄湁闄愬叕鍙搞�愯崝鏋滷M銆�
-    - 130銆佹澀宸為棯瀹濈鎶�鏈夐檺鍏徃
-    - 131銆佸寳浜簰鑱旀柊缃戠鎶�鍙戝睍鏈夐檺鍏徃
-    - 132銆佽獕閬撶鎶�
-    - 133銆佸北瑗垮厗鐩涙埧鍦颁骇寮�鍙戞湁闄愬叕鍙�
-    - 134銆佸寳浜摑鐫块�氳揪绉戞妧鏈夐檺鍏徃
-    - 135銆佹湀浜皬灞嬶紙涓浗锛夋湁闄愬叕鍙搞�愯摑鏈堜寒銆�
-    - 136銆侀潚宀涘浗鐟炰俊鎭妧鏈湁闄愬叕鍙�
-    - 137銆佸崥闆呬簯璁$畻锛堝寳浜級鏈夐檺鍏徃
-    - 138銆佸崕娉拌瘉鍒搁娓瓙鍏徃
-    - 139銆佹澀宸炰笢鏂归�氫俊杞欢鎶�鏈湁闄愬叕鍙�
-    - 140銆佹姹夊崥鏅熷畨鍏ㄦ妧鏈偂浠芥湁闄愬叕鍙�
-    - 141銆佹繁鍦冲競鍏害浜哄拰绉戞妧鏈夐檺鍏徃
-    - 142銆佹澀宸炶叮缁寸鎶�鏈夐檺鍏徃锛堝皬褰憋級
-    - 143銆佸畞娉㈠崟杞︿緺涔嬪绉戞妧鏈夐檺鍏徃銆愬崟杞︿緺銆�
-    - 144銆佷竵涓佷簯搴蜂俊鎭鎶�锛堝寳浜級鏈夐檺鍏徃
-    - 145銆佷簯閽辫
-    - 146銆佸崡浜腑鍏村姏缁�
-    - 147銆佷笂娴风熃鏄岄�氫俊鎶�鏈湁闄愬叕鍙�
-    - 148銆佹繁鍦宠惃绉戠鎶�
-    - 149銆佷腑閫氭湇鍒涚珛绉戞妧鏈夐檺璐d换鍏徃
-    - 150銆佹繁鍦冲競瀵瑰簞绉戞妧鏈夐檺鍏徃
-    - 151銆佷笂璇佹墍淇℃伅缃戠粶鏈夐檺鍏徃
-    - 152銆佹澀宸炵伀鐑т簯绉戞妧鏈夐檺鍏徃銆愬绀肩邯銆�
-    - 153銆佸ぉ娲ラ潚鑺掓灉绉戞妧鏈夐檺鍏徃銆愯姃鏋滃ご鏉°��
-    - 154銆侀暱椋炲厜绾ゅ厜缂嗚偂浠芥湁闄愬叕鍙�
-    - 155銆佷笘绾嚡姝岋紙鍖椾含锛夊尰鐤楃鎶�鏈夐檺鍏徃
-    - 156銆佹禉姹熼湒姊撴帶鑲℃湁闄愬叕鍙�
-    - 157銆佹睙瑗胯吘椋炵綉缁滄妧鏈湁闄愬叕鍙�
-    - 158銆佸畨杩呯墿娴佹湁闄愬叕鍙�
-    - 159銆佽倝鑱旂綉
-    - 160銆佸寳浜寳骞挎褰卞箍鍛婁紶濯掓湁闄愬叕鍙�
-    - 161銆佷笂娴锋暟鎱х郴缁熸妧鏈湁闄愬叕鍙�
-    - 162銆佸ぇ蹇楀ぉ鎴�
-    - 163銆佷笂娴蜂簯楣婂尰
-    - 164銆佷笂娴蜂簯楣婂尰
-    - 165銆佸ⅷ杩瑰ぉ姘斻�愬ⅷ杩瑰ぉ姘斻��
-    - 166銆佷笂娴烽�告淇℃伅绉戞妧鏈夐檺鍏徃
-    - 167銆佹矃鏈嬬墿鑱�
-    - 168銆佹澀宸炴亽鐢熶簯铻嶇綉缁滅鎶�鏈夐檺鍏徃
-    - 169銆佺豢绫宠仈鍒�
-    - 170銆侀噸搴嗘槗瀹犵鎶�鏈夐檺鍏徃
-    - 171銆佸畨寰藉紩鑸鎶�鏈夐檺鍏徃锛堜箰鑱岀綉锛�
-    - 172銆佷笂娴锋暟鑱斿尰淇′紒涓氬彂灞曟湁闄愬叕鍙�
-    - 173銆佽壇褰缓鏉�
-    - 174銆佹澀宸炴眰鏄悓鍒涚綉缁滅鎶�鏈夐檺鍏徃
-    - 175銆佽嵎椹浗闄�
-    - 176銆佺偣闆囩綉
-    - 177銆佹繁鍦冲競鍗庢槦鍏夌數鎶�鏈湁闄愬叕鍙�
-    - 178銆佸帵闂ㄧ宸為拱杞欢绉戞妧鏈夐檺鍏徃
-    - 179銆佹繁鍦冲競鎷涘晢淇¤浜哄淇濋櫓鏈夐檺鍏徃
-    - 180銆佷笂娴峰ソ灞嬬綉淇℃伅鎶�鏈湁闄愬叕鍙�
-    - 181銆佹捣淇¢泦鍥€�愭捣淇°��
-    - 182銆佷俊鍑屽彲淇℃伅绉戞妧锛堜笂娴凤級鏈夐檺鍏徃
-    - 183銆侀暱鏄ュぉ鎴愮鎶�鍙戝睍鏈夐檺鍏徃
-    - 184銆佺敤鍙嬮噾铻嶄俊鎭妧鏈偂浠芥湁闄愬叕鍙搞�愮敤鍙嬨��
-    - 185銆佸寳浜挅鍟℃槗铻嶆湁闄愬叕鍙�
-    - 186銆佸浗鎶曠憺閾跺熀閲戠鐞嗘湁闄愬叕鍙�
-    - 187銆佹檵鏉�(涓婃捣)缃戠粶淇℃伅鎶�鏈湁闄愬叕鍙�
-    - 188銆佹繁鍦冲競闅忔墜绉戞妧鏈夐檺鍏徃銆愰殢鎵嬭銆�
-    - 189銆佹繁鍦虫按鍔$鎶�鏈夐檺鍏徃
-    - 190銆佹槗浼佺銆愭槗浼佺銆�
-    - 191銆佸寳浜浜戠鎶�
-    - 192銆佸崡浜渹娉颁簰鑱旂綉绉戞妧鏈夐檺鍏徃
-    - 193銆佺珷楸肩洿鎾�
-    - 194銆佸澶氬绉戞妧
-    - 195銆佸ぉ娲ュ競绁炲窞鍟嗛緳绉戞妧鑲′唤鏈夐檺鍏徃
-    - 196銆佸博蹇冪鎶�
-    - 197銆佽溅鐮佺鎶�锛堝寳浜級鏈夐檺鍏徃
-    - 198銆佽吹闃冲競鎶曡祫鎺ц偂闆嗗洟
-    - 199銆佸悍鏃楄偂浠�
-    - 200銆侀緳鑵惧嚭琛�
-    - 201銆佹澀宸炲崕閲忚蒋浠�
-    - 202銆佸悎鑲ラ《宀尰鐤楃鎶�鏈夐檺鍏徃
-    - 203銆侀噸搴嗚〃杈惧紡绉戞妧鏈夐檺鍏徃
-    - 204銆佷笂娴风背閬撲俊鎭鎶�鏈夐檺鍏徃
-    - 205銆佸寳浜泭鍙嬩細绉戞妧鏈夐檺鍏徃
-    - 206銆佸寳浜瀺璐數瀛愬晢鍔℃湁闄愬叕鍙�
-    - 207銆佷腑鍥藉姹囦氦鏄撲腑蹇�
-    - 208銆佷腑鍥藉杩愯偂浠芥湁闄愬叕鍙�
-    - 209銆佷腑鍥戒笂娴锋檽鍦堟暀鑲茬鎶�鏈夐檺鍏徃
-    - 210銆佹櫘鑱旇蒋浠惰偂浠芥湁闄愬叕鍙�
-    - 211銆佸寳浜钃濊蒋浠惰偂浠芥湁闄愬叕鍙�
-    - 212銆佹睙鑻忔柉璇虹墿鑱旂鎶�鏈夐檺鍏徃
-    - 213銆佸寳浜悳鐙�-鐙愬弸銆愭悳鐙愩��
-    - 214銆佹柊澶ч檰缃戝晢閲戣瀺
-    - 215銆佸北涓滅鐮佷腑绋庝俊鎭鎶�鏈夐檺鍏徃
-    - 216銆佹渤鍗楁眹椤虹綉缁滅鎶�鏈夐檺鍏徃
-    - 217銆佸寳浜崕澶忔�濇簮绉戞妧鍙戝睍鏈夐檺鍏徃
-    - 218銆佷笂娴蜂笢鏅俊鎭鎶�鏈夐檺鍏徃
-    - 219銆佷笂娴烽福鍕冪綉缁滅鎶�鏈夐檺鍏徃
-    - 220銆佸箍涓滃鑻戞暀鑲插彂灞曟湁闄愬叕鍙�
-    - 221銆佹繁鍦冲己鏃剁鎶�鏈夐檺鍏徃
-    - 222銆佷笂娴蜂簯鐮轰俊鎭鎶�鏈夐檺鍏徃
-    - 223銆侀噸搴嗘剦瀹㈣缃戠粶鏈夐檺鍏徃
-    - 224銆佹暟浜�
-    - 225銆佸浗瀹剁數缃戣繍妫�閮�
-    - 226銆佹澀宸炴壘瓒�
-    - 227銆佹旦椴镐簯璁$畻绉戞妧鑲′唤鏈夐檺鍏徃
-    - 228銆佺澶ц椋炪�愮澶ц椋炪��
-    - 229銆佹澀宸炶瑁呯綉缁滅鎶�鏈夐檺鍏徃
-    - 230銆佸嵆鏈夊垎鏈熼噾铻�
-    - 231銆佹繁鍦虫硶鍙稿痉淇℃伅绉戞妧鏈夐檺鍏徃
-    - 232銆佷笂娴峰崥澶嶄俊鎭鎶�鏈夐檺鍏徃
-    - 233銆佹澀宸炰簯鍢変簯璁$畻鏈夐檺鍏徃
-    - 234銆佹湁瀹舵皯瀹�(鏈夊缇庡)
-    - 235銆佸寳浜耽閿�閫氳蒋浠舵妧鏈湁闄愬叕鍙�
-    - 236銆佹禉姹熻仛鏈夎储閲戣瀺鏈嶅姟澶栧寘鏈夐檺鍏徃
-    - 237銆佹槗鏃忔櫤姹�(鍖椾含)绉戞妧鏈夐檺鍏徃
-    - 238銆佸悎鑲ラ《宀尰鐤楃鎶�寮�鍙戞湁闄愬叕鍙�
-    - 239銆佽溅鑸瑰疂(娣卞湷)鏃彥绉戞妧鏈夐檺鍏徃)
-    - 240銆佸箍宸炲瘜鍔涘湴浜ф湁闄愬叕鍙�
-    - 241銆佹阿璇撅紙涓婃捣锛夋暀鑲茬鎶�鏈夐檺鍏徃
-    - 242銆佹姹夋蔼缁嗚優缃戠粶鎶�鏈湁闄愬叕鍙�
-    - 243銆佹澀宸炴湁浜戠鎶�鏈夐檺鍏徃
-    - 244銆佷笂娴蜂粰璞嗘櫤鑳芥満鍣ㄤ汉鏈夐檺鍏徃
-    - 245銆佹媺鍗℃媺鏀粯鑲′唤鏈夐檺鍏徃銆愭媺鍗℃媺銆�
-    - 246銆佽檸褰╁嵃鑹鸿偂浠芥湁闄愬叕鍙�
-    - 247銆佸寳浜暟寰鎶�鏈夐檺鍏徃
-    - 248銆佸箍涓滄櫤鐟炵鎶�鏈夐檺鍏徃
-    - 249銆佹壘閽㈢綉
-    - 250銆佷節鏈虹綉
-    - 251銆佹澀宸炶窇璺戠綉缁滅鎶�鏈夐檺鍏徃
-    - 252銆佹繁鍦虫湭鏉ヤ簯闆�
-    - 253銆佹澀宸炴瘡鏃ョ粰鍔涚鎶�鏈夐檺鍏徃
-    - 254銆佷笂娴烽綈鐘囦俊鎭鎶�鏈夐檺鍏徃
-    - 255銆佹淮婊村嚭琛屻�愭淮婊淬��
-    - 256銆佸悎鑲ヤ簯璇婁俊鎭鎶�鏈夐檺鍏徃
-    - 257銆佷簯鐭ュ0鏅鸿兘绉戞妧鑲′唤鏈夐檺鍏徃
-    - 258銆佸崡浜潶閬撶鎶�鏈夐檺鍏徃
-    - 259銆佺埍涔愪紭锛堜簩鎵嬪钩鍙帮級
-    - 260銆佺尗鐪肩數褰憋紙绉佹湁鍖栭儴缃诧級銆愮尗鐪肩數褰便��
-    - 261銆佺編鍥㈠ぇ璞★紙绉佹湁鍖栭儴缃诧級銆愮編鍥㈠ぇ璞°��
-    - 262銆佷綔涓氬府鏁欒偛绉戞妧锛堝寳浜級鏈夐檺鍏徃銆愪綔涓氬府銆�
-    - 263銆佸寳浜皬骞寸硶浜掕仈缃戞妧鏈湁闄愬叕鍙�
-    - 264銆佸北涓滅煩闃佃蒋浠跺伐绋嬭偂浠芥湁闄愬叕鍙�
-    - 265銆侀檿瑗垮浗椹胯蒋浠剁鎶�鏈夐檺鍏徃
-    - 266銆佸悰寮�淇℃伅绉戞妧
-    - 267銆佹潙楦熺綉缁滅鎶�鏈夐檺璐d换鍏徃
-    - 268銆佷簯鍗楀浗闄呬俊鎵樻湁闄愬叕鍙�
-    - 269銆侀噾鏅烘暀鑲�
-    - 270銆佺彔娴峰競绛戝发绉戞妧鏈夐檺鍏徃
-    - 271銆佷笂娴风櫨鑳滆蒋浠惰偂浠芥湁闄愬叕鍙�
-    - 272銆佹繁鍦冲競绉戠浘绉戞妧鏈夐檺鍏徃
-    - 273銆佸搱鍟板嚭琛屻�愬搱鍟般��
-    - 274銆侀�旇檸鍏昏溅銆愰�旇檸銆�
-    - 275銆佸崱鎬濅紭娲句汉鍔涜祫婧愰泦鍥�
-    - 276銆佸崡浜涓烘櫤鎱ц蒋浠剁鎶�鏈夐檺鍏徃
-    - 277銆佹澀宸炲煄甯傚ぇ鑴戠鎶�鏈夐檺鍏徃
-    - 278銆佺尶杈呭銆愮尶杈呭銆�
-    - 279銆佹礇闃冲仴鍒涚綉缁滅鎶�鏈夐檺鍏徃
-    - 280銆侀瓟鍔涜�虫湹
-    - 281銆佷嚎闃充俊閫�
-    - 282銆佷笂娴锋嫑椴ょ鎶�鏈夐檺鍏徃
-    - 283銆佸洓宸濆晢鏃呮棤蹇х鎶�鏈嶅姟鏈夐檺鍏徃
-    - 284銆乁U璺戣吙
-    - 285銆佸寳浜�佽檸璇佸埜銆愯�佽檸璇佸埜銆�
-    - 286銆佹偁娲荤渷鍚э紙鍖椾含锛夌綉缁滅鎶�鏈夐檺鍏徃
-    - 287銆丗5鏈潵鍟嗗簵
-    - 288銆佹繁鍦崇幆闃抽�氫俊鎭妧鏈湁闄愬叕鍙�
-    - 289銆侀仩鍌抽浕淇�
-	- 鈥︹��
-
-> 鏇村鎺ュ叆鐨勫叕鍙革紝娆㈣繋鍦� [鐧昏鍦板潃](https://github.com/xuxueli/xxl-job/issues/1 ) 鐧昏锛岀櫥璁颁粎浠呬负浜嗕骇鍝佹帹骞裤��
-
-娆㈣繋澶у鐨勫叧娉ㄥ拰浣跨敤锛孹XL-JOB涔熷皢鎷ユ姳鍙樺寲锛屾寔缁彂灞曘��
-
-
-### 1.5 涓嬭浇
-
-#### 鏂囨。鍦板潃
-
-- [涓枃鏂囨。](https://www.xuxueli.com/xxl-job/)
-- [English Documentation](https://www.xuxueli.com/xxl-job/en/)
-
-#### 婧愮爜浠撳簱鍦板潃
-
-婧愮爜浠撳簱鍦板潃 | Release Download
---- | ---
-[https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job) | [Download](https://github.com/xuxueli/xxl-job/releases)  
-[http://gitee.com/xuxueli0323/xxl-job](http://gitee.com/xuxueli0323/xxl-job) | [Download](http://gitee.com/xuxueli0323/xxl-job/releases)
-
-
-#### 涓ぎ浠撳簱鍦板潃
-
-```
-<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
-<dependency>
-    <groupId>com.xuxueli</groupId>
-    <artifactId>xxl-job-core</artifactId>
-    <version>${鏈�鏂扮ǔ瀹氱増鏈瑌</version>
-</dependency>
-```
-
-
-### 1.6 鐜
-- Maven3+
-- Jdk1.7+
-- Mysql5.7+
-
-
-## 浜屻�佸揩閫熷叆闂�
-
-### 2.1 鍒濆鍖栤�滆皟搴︽暟鎹簱鈥�
-璇蜂笅杞介」鐩簮鐮佸苟瑙e帇锛岃幏鍙� "璋冨害鏁版嵁搴撳垵濮嬪寲SQL鑴氭湰" 骞舵墽琛屽嵆鍙��
-
-"璋冨害鏁版嵁搴撳垵濮嬪寲SQL鑴氭湰" 浣嶇疆涓�:
-
-    /xxl-job/doc/db/tables_xxl_job.sql
-
-璋冨害涓績鏀寔闆嗙兢閮ㄧ讲锛岄泦缇ゆ儏鍐典笅鍚勮妭鐐瑰姟蹇呰繛鎺ュ悓涓�涓猰ysql瀹炰緥;
-
-濡傛灉mysql鍋氫富浠�,璋冨害涓績闆嗙兢鑺傜偣鍔″繀寮哄埗璧颁富搴�;
-
-### 2.2 缂栬瘧婧愮爜
-瑙e帇婧愮爜,鎸夌収maven鏍煎紡灏嗘簮鐮佸鍏DE, 浣跨敤maven杩涜缂栬瘧鍗冲彲锛屾簮鐮佺粨鏋勫涓嬶細
-
-    xxl-job-admin锛氳皟搴︿腑蹇�
-    xxl-job-core锛氬叕鍏变緷璧�
-    xxl-job-executor-samples锛氭墽琛屽櫒Sample绀轰緥锛堥�夋嫨鍚堥�傜殑鐗堟湰鎵ц鍣紝鍙洿鎺ヤ娇鐢紝涔熷彲浠ュ弬鑰冨叾骞跺皢鐜版湁椤圭洰鏀归�犳垚鎵ц鍣級
-        锛歺xl-job-executor-sample-springboot锛歋pringboot鐗堟湰锛岄�氳繃Springboot绠$悊鎵ц鍣紝鎺ㄨ崘杩欑鏂瑰紡锛�
-        锛歺xl-job-executor-sample-spring锛歋pring鐗堟湰锛岄�氳繃Spring瀹瑰櫒绠$悊鎵ц鍣紝姣旇緝閫氱敤锛�
-        锛歺xl-job-executor-sample-frameless锛氭棤妗嗘灦鐗堟湰锛�
-        锛歺xl-job-executor-sample-jfinal锛欽Final鐗堟湰锛岄�氳繃JFinal绠$悊鎵ц鍣紱
-        锛歺xl-job-executor-sample-nutz锛歂utz鐗堟湰锛岄�氳繃Nutz绠$悊鎵ц鍣紱
-        锛歺xl-job-executor-sample-jboot锛歫boot鐗堟湰锛岄�氳繃jboot绠$悊鎵ц鍣紱
-        
-
-### 2.3 閰嶇疆閮ㄧ讲鈥滆皟搴︿腑蹇冣��
-
-    璋冨害涓績椤圭洰锛歺xl-job-admin
-    浣滅敤锛氱粺涓�绠$悊浠诲姟璋冨害骞冲彴涓婅皟搴︿换鍔★紝璐熻矗瑙﹀彂璋冨害鎵ц锛屽苟涓旀彁渚涗换鍔$鐞嗗钩鍙般��
-
-#### 姝ラ涓�锛氳皟搴︿腑蹇冮厤缃細
-璋冨害涓績閰嶇疆鏂囦欢鍦板潃锛�
-
-    /xxl-job/xxl-job-admin/src/main/Autowireds/application.properties
-
-
-璋冨害涓績閰嶇疆鍐呭璇存槑锛�
-
-    ### 璋冨害涓績JDBC閾炬帴锛氶摼鎺ュ湴鍧�璇蜂繚鎸佸拰 2.1绔犺妭 鎵�鍒涘缓鐨勮皟搴︽暟鎹簱鐨勫湴鍧�涓�鑷�
-    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
-    spring.datasource.username=root
-    spring.datasource.password=root_pwd
-    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-    
-    ### 鎶ヨ閭
-    spring.mail.host=smtp.qq.com
-    spring.mail.port=25
-    spring.mail.username=xxx@qq.com
-    spring.mail.password=xxx
-    spring.mail.properties.mail.smtp.auth=true
-    spring.mail.properties.mail.smtp.starttls.enable=true
-    spring.mail.properties.mail.smtp.starttls.required=true
-    spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
-    
-    ### 璋冨害涓績閫氳TOKEN [閫夊~]锛氶潪绌烘椂鍚敤锛�
-    xxl.job.accessToken=
-    
-    ### 璋冨害涓績鍥介檯鍖栭厤缃� [閫夊~]锛� 榛樿涓虹┖锛岃〃绀轰腑鏂�; "en" 琛ㄧず鑻辨枃锛�
-    xxl.job.i18n=
-    
-    ## 璋冨害绾跨▼姹犳渶澶х嚎绋嬮厤缃�愬繀濉��
-    xxl.job.triggerpool.fast.max=200
-    xxl.job.triggerpool.slow.max=100
-    
-    ### 璋冨害涓績鏃ュ織琛ㄦ暟鎹繚瀛樺ぉ鏁� [蹇呭~]锛氳繃鏈熸棩蹇楄嚜鍔ㄦ竻鐞嗭紱闄愬埗澶т簬绛変簬7鏃剁敓鏁堬紝鍚﹀垯, 濡�-1锛屽叧闂嚜鍔ㄦ竻鐞嗗姛鑳斤紱
-    xxl.job.logretentiondays=30
-    
-    
-
-#### 姝ラ浜岋細閮ㄧ讲椤圭洰锛�
-濡傛灉宸茬粡姝g‘杩涜涓婅堪閰嶇疆锛屽彲灏嗛」鐩紪璇戞墦鍖呴儴缃层��
-
-璋冨害涓績璁块棶鍦板潃锛歨ttp://localhost:8080/xxl-job-admin (璇ュ湴鍧�鎵ц鍣ㄥ皢浼氫娇鐢ㄥ埌锛屼綔涓哄洖璋冨湴鍧�)
-
-榛樿鐧诲綍璐﹀彿 "admin/123456", 鐧诲綍鍚庤繍琛岀晫闈㈠涓嬪浘鎵�绀恒��
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_6yC0.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-鑷虫鈥滆皟搴︿腑蹇冣�濋」鐩凡缁忛儴缃叉垚鍔熴��
-
-#### 姝ラ涓夛細璋冨害涓績闆嗙兢锛堝彲閫夛級锛�
-璋冨害涓績鏀寔闆嗙兢閮ㄧ讲锛屾彁鍗囪皟搴︾郴缁熷鐏惧拰鍙敤鎬с��
-
-璋冨害涓績闆嗙兢閮ㄧ讲鏃讹紝鍑犵偣瑕佹眰鍜屽缓璁細
-- DB閰嶇疆淇濇寔涓�鑷达紱
-- 闆嗙兢鏈哄櫒鏃堕挓淇濇寔涓�鑷达紙鍗曟満闆嗙兢蹇借锛夛紱
-- 寤鸿锛氭帹鑽愰�氳繃nginx涓鸿皟搴︿腑蹇冮泦缇ゅ仛璐熻浇鍧囪 锛屽垎閰嶅煙鍚嶃�傝皟搴︿腑蹇冭闂�佹墽琛屽櫒鍥炶皟閰嶇疆銆佽皟鐢ˋPI鏈嶅姟绛夋搷浣滃潎閫氳繃璇ュ煙鍚嶈繘琛屻��
-
-
-#### 鍏朵粬锛欴ocker 闀滃儚鏂瑰紡鎼缓璋冨害涓績锛�
-
-- 涓嬭浇闀滃儚
-
-```
-// Docker鍦板潃锛歨ttps://hub.docker.com/r/xuxueli/xxl-job-admin/     (寤鸿鎸囧畾鐗堟湰鍙�)
-docker pull xuxueli/xxl-job-admin
-```
-
-- 鍒涘缓瀹瑰櫒骞惰繍琛�
-
-```
-docker run -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin
-
-/**
-* 濡傞渶鑷畾涔� mysql 绛夐厤缃紝鍙�氳繃 "PARAMS" 鎸囧畾锛屽弬鏁版牸寮� RAMS="--key=value  --key2=value2" 锛�
-* 閰嶇疆椤瑰弬鑰冩枃浠讹細/xxl-job/xxl-job-admin/src/main/Autowireds/application.properties
-*/
-docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin
-```
-
-
-### 2.4 閰嶇疆閮ㄧ讲鈥滄墽琛屽櫒椤圭洰鈥�
-
-    鈥滄墽琛屽櫒鈥濋」鐩細xxl-job-executor-sample-springboot (鎻愪緵澶氱鐗堟湰鎵ц鍣ㄤ緵閫夋嫨锛岀幇浠� springboot 鐗堟湰涓轰緥锛屽彲鐩存帴浣跨敤锛屼篃鍙互鍙傝�冨叾骞跺皢鐜版湁椤圭洰鏀归�犳垚鎵ц鍣�)
-    浣滅敤锛氳礋璐f帴鏀垛�滆皟搴︿腑蹇冣�濈殑璋冨害骞舵墽琛岋紱鍙洿鎺ラ儴缃叉墽琛屽櫒锛屼篃鍙互灏嗘墽琛屽櫒闆嗘垚鍒扮幇鏈変笟鍔¢」鐩腑銆�
-    
-#### 姝ラ涓�锛歮aven渚濊禆
-纭pom鏂囦欢涓紩鍏ヤ簡 "xxl-job-core" 鐨刴aven渚濊禆锛�
-    
-#### 姝ラ浜岋細鎵ц鍣ㄩ厤缃�
-鎵ц鍣ㄩ厤缃紝閰嶇疆鏂囦欢鍦板潃锛�
-
-    /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/Autowireds/application.properties
-
-鎵ц鍣ㄩ厤缃紝閰嶇疆鍐呭璇存槑锛�
-
-    ### 璋冨害涓績閮ㄧ讲璺熷湴鍧� [閫夊~]锛氬璋冨害涓績闆嗙兢閮ㄧ讲瀛樺湪澶氫釜鍦板潃鍒欑敤閫楀彿鍒嗛殧銆傛墽琛屽櫒灏嗕細浣跨敤璇ュ湴鍧�杩涜"鎵ц鍣ㄥ績璺虫敞鍐�"鍜�"浠诲姟缁撴灉鍥炶皟"锛涗负绌哄垯鍏抽棴鑷姩娉ㄥ唽锛�
-    xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
-    
-    ### 鎵ц鍣ˋppName [閫夊~]锛氭墽琛屽櫒蹇冭烦娉ㄥ唽鍒嗙粍渚濇嵁锛涗负绌哄垯鍏抽棴鑷姩娉ㄥ唽
-    xxl.job.executor.appname=xxl-job-executor-sample
-    
-    ### 鎵ц鍣↖P [閫夊~]锛氶粯璁や负绌鸿〃绀鸿嚜鍔ㄨ幏鍙朓P锛屽缃戝崱鏃跺彲鎵嬪姩璁剧疆鎸囧畾IP锛岃IP涓嶄細缁戝畾Host浠呬綔涓洪�氳瀹炵敤锛涘湴鍧�淇℃伅鐢ㄤ簬 "鎵ц鍣ㄦ敞鍐�" 鍜� "璋冨害涓績璇锋眰骞惰Е鍙戜换鍔�"锛�
-    xxl.job.executor.ip=
-    
-    ### 鎵ц鍣ㄧ鍙e彿 [閫夊~]锛氬皬浜庣瓑浜�0鍒欒嚜鍔ㄨ幏鍙栵紱榛樿绔彛涓�9999锛屽崟鏈洪儴缃插涓墽琛屽櫒鏃讹紝娉ㄦ剰瑕侀厤缃笉鍚屾墽琛屽櫒绔彛锛�
-    xxl.job.executor.port=9999
-    
-    ### 鎵ц鍣ㄩ�氳TOKEN [閫夊~]锛氶潪绌烘椂鍚敤锛�
-    xxl.job.accessToken=
-        
-    ### 鎵ц鍣ㄨ繍琛屾棩蹇楁枃浠跺瓨鍌ㄧ鐩樿矾寰� [閫夊~] 锛氶渶瑕佸璇ヨ矾寰勬嫢鏈夎鍐欐潈闄愶紱涓虹┖鍒欎娇鐢ㄩ粯璁よ矾寰勶紱
-    xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
-    
-    ### 鎵ц鍣ㄦ棩蹇楁枃浠朵繚瀛樺ぉ鏁� [閫夊~] 锛� 杩囨湡鏃ュ織鑷姩娓呯悊, 闄愬埗鍊煎ぇ浜庣瓑浜�3鏃剁敓鏁�; 鍚﹀垯, 濡�-1, 鍏抽棴鑷姩娓呯悊鍔熻兘锛�
-    xxl.job.executor.logretentiondays=30
-    
-
-#### 姝ラ涓夛細鎵ц鍣ㄧ粍浠堕厤缃�
-
-鎵ц鍣ㄧ粍浠讹紝閰嶇疆鏂囦欢鍦板潃锛�
-
-    /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
-
-鎵ц鍣ㄧ粍浠讹紝閰嶇疆鍐呭璇存槑锛�
-
-```
-@Bean
-public XxlJobSpringExecutor xxlJobExecutor() {
-    logger.info(">>>>>>>>>>> xxl-job config init.");
-    XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
-    xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
-    xxlJobSpringExecutor.setAppName(appName);
-    xxlJobSpringExecutor.setIp(ip);
-    xxlJobSpringExecutor.setPort(port);
-    xxlJobSpringExecutor.setAccessToken(accessToken);
-    xxlJobSpringExecutor.setLogPath(logPath);
-    xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
-
-    return xxlJobSpringExecutor;
-}
-```
-
-#### 姝ラ鍥涳細閮ㄧ讲鎵ц鍣ㄩ」鐩細
-濡傛灉宸茬粡姝g‘杩涜涓婅堪閰嶇疆锛屽彲灏嗘墽琛屽櫒椤圭洰缂栬瘧鎵撻儴缃诧紝绯荤粺鎻愪緵澶氱鎵ц鍣⊿ample绀轰緥椤圭洰锛岄�夋嫨鍏朵腑涓�涓嵆鍙紝鍚勮嚜鐨勯儴缃叉柟寮忓涓嬨��
-
-    xxl-job-executor-sample-springboot锛氶」鐩紪璇戞墦鍖呮垚springboot绫诲瀷鐨勫彲鎵цJAR鍖咃紝鍛戒护鍚姩鍗冲彲锛�
-    xxl-job-executor-sample-spring锛氶」鐩紪璇戞墦鍖呮垚WAR鍖咃紝骞堕儴缃插埌tomcat涓��
-    xxl-job-executor-sample-jfinal锛氬悓涓�
-    xxl-job-executor-sample-nutz锛氬悓涓�
-    xxl-job-executor-sample-jboot锛氬悓涓�
-    
-
-鑷虫鈥滄墽琛屽櫒鈥濋」鐩凡缁忛儴缃茬粨鏉熴��
-
-#### 姝ラ浜旓細鎵ц鍣ㄩ泦缇わ紙鍙�夛級锛�
-鎵ц鍣ㄦ敮鎸侀泦缇ら儴缃诧紝鎻愬崌璋冨害绯荤粺鍙敤鎬э紝鍚屾椂鎻愬崌浠诲姟澶勭悊鑳藉姏銆�
-
-鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屽嚑鐐硅姹傚拰寤鸿锛�
-- 鎵ц鍣ㄥ洖璋冨湴鍧�锛坸xl.job.admin.addresses锛夐渶瑕佷繚鎸佷竴鑷达紱鎵ц鍣ㄦ牴鎹閰嶇疆杩涜鎵ц鍣ㄨ嚜鍔ㄦ敞鍐岀瓑鎿嶄綔銆� 
-- 鍚屼竴涓墽琛屽櫒闆嗙兢鍐匒ppName锛坸xl.job.executor.appname锛夐渶瑕佷繚鎸佷竴鑷达紱璋冨害涓績鏍规嵁璇ラ厤缃姩鎬佸彂鐜颁笉鍚岄泦缇ょ殑鍦ㄧ嚎鎵ц鍣ㄥ垪琛ㄣ��
-
-
-### 2.5 寮�鍙戠涓�涓换鍔♀�淗ello World鈥�       
-鏈ず渚嬩互鏂板缓涓�涓� 鈥淕LUE妯″紡(Java)鈥� 杩愯妯″紡鐨勪换鍔′负渚嬨�傛洿澶氭湁鍏充换鍔$殑璇︾粏閰嶇疆锛岃鏌ョ湅鈥滅珷鑺備笁锛氫换鍔¤瑙b�濄��
-锛� 鈥淕LUE妯″紡(Java)鈥濈殑鎵ц浠g爜鎵樼鍒拌皟搴︿腑蹇冨湪绾跨淮鎶わ紝鐩告瘮鈥淏ean妯″紡浠诲姟鈥濋渶瑕佸湪鎵ц鍣ㄩ」鐩紑鍙戦儴缃蹭笂绾匡紝鏇村姞绠�渚胯交閲忥級
-
-> 鍓嶆彁锛氳纭鈥滆皟搴︿腑蹇冣�濆拰鈥滄墽琛屽櫒鈥濋」鐩凡缁忔垚鍔熼儴缃插苟鍚姩锛�
-
-#### 姝ラ涓�锛氭柊寤轰换鍔★細
-鐧诲綍璋冨害涓績锛岀偣鍑讳笅鍥炬墍绀衡�滄柊寤轰换鍔♀�濇寜閽紝鏂板缓绀轰緥浠诲姟銆傜劧鍚庯紝鍙傝�冧笅闈㈡埅鍥句腑浠诲姟鐨勫弬鏁伴厤缃紝鐐瑰嚮淇濆瓨銆�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_o8HQ.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAsz.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-
-#### 姝ラ浜岋細鈥淕LUE妯″紡(Java)鈥� 浠诲姟寮�鍙戯細
-璇风偣鍑讳换鍔″彸渚� 鈥淕LUE鈥� 鎸夐挳锛岃繘鍏� 鈥淕LUE缂栬緫鍣ㄥ紑鍙戠晫闈⑩�� 锛岃涓嬪浘銆傗�淕LUE妯″紡(Java)鈥� 杩愯妯″紡鐨勪换鍔¢粯璁ゅ凡缁忓垵濮嬪寲浜嗙ず渚嬩换鍔′唬鐮侊紝鍗虫墦鍗癏ello World銆�
-锛� 鈥淕LUE妯″紡(Java)鈥� 杩愯妯″紡鐨勪换鍔″疄闄呬笂鏄竴娈电户鎵胯嚜IJobHandler鐨凧ava绫讳唬鐮侊紝瀹冨湪鎵ц鍣ㄩ」鐩腑杩愯锛屽彲浣跨敤@Autowired/@Autowire娉ㄥ叆鎵ц鍣ㄩ噷涓殑鍏朵粬鏈嶅姟锛岃缁嗕粙缁嶈鏌ョ湅绗笁绔犺妭锛�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Fgql.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_dNUJ.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-#### 姝ラ涓夛細瑙﹀彂鎵ц锛�
-璇风偣鍑讳换鍔″彸渚� 鈥滄墽琛屸�� 鎸夐挳锛屽彲鎵嬪姩瑙﹀彂涓�娆′换鍔℃墽琛岋紙閫氬父鎯呭喌涓嬶紝閫氳繃閰嶇疆Cron琛ㄨ揪寮忚繘琛屼换鍔¤皟搴﹀嚭鍙戯級銆�
-
-#### 姝ラ鍥涳細鏌ョ湅鏃ュ織锛� 
-璇风偣鍑讳换鍔″彸渚� 鈥滄棩蹇椻�� 鎸夐挳锛屽彲鍓嶅線浠诲姟鏃ュ織鐣岄潰鏌ョ湅浠诲姟鏃ュ織銆�
-鍦ㄤ换鍔℃棩蹇楃晫闈腑锛屽彲鏌ョ湅璇ヤ换鍔$殑鍘嗗彶璋冨害璁板綍浠ュ強姣忎竴娆¤皟搴︾殑浠诲姟璋冨害淇℃伅銆佹墽琛屽弬鏁板拰鎵ц淇℃伅銆傝繍琛屼腑鐨勪换鍔$偣鍑诲彸渚х殑鈥滄墽琛屾棩蹇椻�濇寜閽紝鍙繘鍏ユ棩蹇楁帶鍒跺彴鏌ョ湅瀹炴椂鎵ц鏃ュ織銆�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_inc8.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-鍦ㄦ棩蹇楁帶鍒跺彴锛屽彲浠olling鏂瑰紡瀹炴椂鏌ョ湅浠诲姟鍦ㄦ墽琛屽櫒涓�渚ц繍琛岃緭鍑虹殑鏃ュ織淇℃伅锛屽疄鏃剁洃鎺т换鍔¤繘搴︼紱
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_eYrv.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-## 涓夈�佷换鍔¤瑙�
-
-### 閰嶇疆灞炴�ц缁嗚鏄庯細
-
-    - 鎵ц鍣細浠诲姟鐨勭粦瀹氱殑鎵ц鍣紝浠诲姟瑙﹀彂璋冨害鏃跺皢浼氳嚜鍔ㄥ彂鐜版敞鍐屾垚鍔熺殑鎵ц鍣�, 瀹炵幇浠诲姟鑷姩鍙戠幇鍔熻兘; 鍙︿竴鏂归潰涔熷彲浠ユ柟渚跨殑杩涜浠诲姟鍒嗙粍銆傛瘡涓换鍔″繀椤荤粦瀹氫竴涓墽琛屽櫒, 鍙湪 "鎵ц鍣ㄧ鐞�" 杩涜璁剧疆;
-    - 浠诲姟鎻忚堪锛氫换鍔$殑鎻忚堪淇℃伅锛屼究浜庝换鍔$鐞嗭紱
-    - 璺敱绛栫暐锛氬綋鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屾彁渚涗赴瀵岀殑璺敱绛栫暐锛屽寘鎷紱
-        FIRST锛堢涓�涓級锛氬浐瀹氶�夋嫨绗竴涓満鍣紱
-        LAST锛堟渶鍚庝竴涓級锛氬浐瀹氶�夋嫨鏈�鍚庝竴涓満鍣紱
-        ROUND锛堣疆璇級锛氾紱
-        RANDOM锛堥殢鏈猴級锛氶殢鏈洪�夋嫨鍦ㄧ嚎鐨勬満鍣紱
-        CONSISTENT_HASH锛堜竴鑷存�ASH锛夛細姣忎釜浠诲姟鎸夌収Hash绠楁硶鍥哄畾閫夋嫨鏌愪竴鍙版満鍣紝涓旀墍鏈変换鍔″潎鍖�鏁e垪鍦ㄤ笉鍚屾満鍣ㄤ笂銆�
-        LEAST_FREQUENTLY_USED锛堟渶涓嶇粡甯镐娇鐢級锛氫娇鐢ㄩ鐜囨渶浣庣殑鏈哄櫒浼樺厛琚�変妇锛�
-        LEAST_RECENTLY_USED锛堟渶杩戞渶涔呮湭浣跨敤锛夛細鏈�涔呬负浣跨敤鐨勬満鍣ㄤ紭鍏堣閫変妇锛�
-        FAILOVER锛堟晠闅滆浆绉伙級锛氭寜鐓ч『搴忎緷娆¤繘琛屽績璺虫娴嬶紝绗竴涓績璺虫娴嬫垚鍔熺殑鏈哄櫒閫夊畾涓虹洰鏍囨墽琛屽櫒骞跺彂璧疯皟搴︼紱
-        BUSYOVER锛堝繖纰岃浆绉伙級锛氭寜鐓ч『搴忎緷娆¤繘琛岀┖闂叉娴嬶紝绗竴涓┖闂叉娴嬫垚鍔熺殑鏈哄櫒閫夊畾涓虹洰鏍囨墽琛屽櫒骞跺彂璧疯皟搴︼紱
-        SHARDING_BROADCAST(鍒嗙墖骞挎挱)锛氬箍鎾Е鍙戝搴旈泦缇や腑鎵�鏈夋満鍣ㄦ墽琛屼竴娆′换鍔★紝鍚屾椂绯荤粺鑷姩浼犻�掑垎鐗囧弬鏁帮紱鍙牴鎹垎鐗囧弬鏁板紑鍙戝垎鐗囦换鍔★紱
-        
-    - Cron锛氳Е鍙戜换鍔℃墽琛岀殑Cron琛ㄨ揪寮忥紱
-    - 杩愯妯″紡锛�
-        BEAN妯″紡锛氫换鍔′互JobHandler鏂瑰紡缁存姢鍦ㄦ墽琛屽櫒绔紱闇�瑕佺粨鍚� "JobHandler" 灞炴�у尮閰嶆墽琛屽櫒涓换鍔★紱
-        GLUE妯″紡(Java)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈电户鎵胯嚜IJobHandler鐨凧ava绫讳唬鐮佸苟 "groovy" 婧愮爜鏂瑰紡缁存姢锛屽畠鍦ㄦ墽琛屽櫒椤圭洰涓繍琛岋紝鍙娇鐢ˊAutowired/@Autowire娉ㄥ叆鎵ц鍣ㄩ噷涓殑鍏朵粬鏈嶅姟锛�
-        GLUE妯″紡(Shell)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "shell" 鑴氭湰锛�
-        GLUE妯″紡(Python)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "python" 鑴氭湰锛�
-        GLUE妯″紡(PHP)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "php" 鑴氭湰锛�
-        GLUE妯″紡(NodeJS)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "nodejs" 鑴氭湰锛�
-        GLUE妯″紡(PowerShell)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "PowerShell" 鑴氭湰锛�
-    - JobHandler锛氳繍琛屾ā寮忎负 "BEAN妯″紡" 鏃剁敓鏁堬紝瀵瑰簲鎵ц鍣ㄤ腑鏂板紑鍙戠殑JobHandler绫烩�淍JobHandler鈥濇敞瑙h嚜瀹氫箟鐨剉alue鍊硷紱
-    - 闃诲澶勭悊绛栫暐锛氳皟搴﹁繃浜庡瘑闆嗘墽琛屽櫒鏉ヤ笉鍙婂鐞嗘椂鐨勫鐞嗙瓥鐣ワ紱
-        鍗曟満涓茶锛堥粯璁わ級锛氳皟搴﹁姹傝繘鍏ュ崟鏈烘墽琛屽櫒鍚庯紝璋冨害璇锋眰杩涘叆FIFO闃熷垪骞朵互涓茶鏂瑰紡杩愯锛�
-        涓㈠純鍚庣画璋冨害锛氳皟搴﹁姹傝繘鍏ュ崟鏈烘墽琛屽櫒鍚庯紝鍙戠幇鎵ц鍣ㄥ瓨鍦ㄨ繍琛岀殑璋冨害浠诲姟锛屾湰娆¤姹傚皢浼氳涓㈠純骞舵爣璁颁负澶辫触锛�
-        瑕嗙洊涔嬪墠璋冨害锛氳皟搴﹁姹傝繘鍏ュ崟鏈烘墽琛屽櫒鍚庯紝鍙戠幇鎵ц鍣ㄥ瓨鍦ㄨ繍琛岀殑璋冨害浠诲姟锛屽皢浼氱粓姝㈣繍琛屼腑鐨勮皟搴︿换鍔″苟娓呯┖闃熷垪锛岀劧鍚庤繍琛屾湰鍦拌皟搴︿换鍔★紱
-    - 瀛愪换鍔★細姣忎釜浠诲姟閮芥嫢鏈変竴涓敮涓�鐨勪换鍔D(浠诲姟ID鍙互浠庝换鍔″垪琛ㄨ幏鍙�)锛屽綋鏈换鍔℃墽琛岀粨鏉熷苟涓旀墽琛屾垚鍔熸椂锛屽皢浼氳Е鍙戝瓙浠诲姟ID鎵�瀵瑰簲鐨勪换鍔$殑涓�娆′富鍔ㄨ皟搴︺��
-    - 浠诲姟瓒呮椂鏃堕棿锛氭敮鎸佽嚜瀹氫箟浠诲姟瓒呮椂鏃堕棿锛屼换鍔¤繍琛岃秴鏃跺皢浼氫富鍔ㄤ腑鏂换鍔★紱
-    - 澶辫触閲嶈瘯娆℃暟锛涙敮鎸佽嚜瀹氫箟浠诲姟澶辫触閲嶈瘯娆℃暟锛屽綋浠诲姟澶辫触鏃跺皢浼氭寜鐓ч璁剧殑澶辫触閲嶈瘯娆℃暟涓诲姩杩涜閲嶈瘯锛�
-    - 鎶ヨ閭欢锛氫换鍔¤皟搴﹀け璐ユ椂閭欢閫氱煡鐨勯偖绠卞湴鍧�锛屾敮鎸侀厤缃閭鍦板潃锛岄厤缃涓偖绠卞湴鍧�鏃剁敤閫楀彿鍒嗛殧锛�
-    - 璐熻矗浜猴細浠诲姟鐨勮礋璐d汉锛�
-    - 鎵ц鍙傛暟锛氫换鍔℃墽琛屾墍闇�鐨勫弬鏁帮紱
-
-    
-### 3.1 BEAN妯″紡锛堢被褰㈠紡锛�
-
-鍩轰簬绫荤殑Bean妯″紡寮�鍙戞柟寮忥紝杩欐槸姣旇緝鍘熷鐨勪竴绉嶅紑鍙戞柟寮忋��
-
-- 浼樼偣锛氬吋瀹规�уソ銆佷笉闄愬埗椤圭洰鐜锛屽嵆浣挎槸鏃犳鏋堕」鐩紝濡俶ain鏂规硶鐩存帴鍚姩鐨勯」鐩篃鍙互鎻愪緵鏀寔锛屽彲浠ュ弬鑰冪ず渚嬮」鐩� "xxl-job-executor-sample-frameless"锛�
-- 缂虹偣锛氭瘡涓换鍔¢渶瑕佸崰鐢ㄤ竴涓狫ava绫伙紝姣旇緝娴垂璧勬簮锛涜�屼笖锛屼笉鏀寔鑷姩鎵弿浠诲姟娉ㄥ叆鍒版墽琛屽櫒瀹瑰櫒锛岄渶瑕佹墜鍔ㄦ敞鍏ャ��
-
-#### 姝ラ涓�锛氭墽琛屽櫒椤圭洰涓紝寮�鍙慗ob绫伙細
-
-    - 1銆佸紑鍙戜竴涓户鎵胯嚜"com.xxl.job.core.handler.IJobHandler"鐨凧obHandler绫汇��
-    - 2銆佹墜鍔ㄩ�氳繃濡備笅鏂瑰紡娉ㄥ叆鍒版墽琛屽櫒瀹瑰櫒銆�
-    ```
-    XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
-    ```
-
-#### 姝ラ浜岋細璋冨害涓績锛屾柊寤鸿皟搴︿换鍔�
-鍚庣画姝ラ鍜� "3.2 BEAN妯″紡锛堟柟娉曞舰寮忥級"涓�鑷达紝鍙互鍓嶅線鍙傝�冦��
-
-
-### 3.2 BEAN妯″紡锛堟柟娉曞舰寮忥級
-
-鍩轰簬鏂规硶鐨凚ean妯″紡寮�鍙戞柟寮忥紝杩欐槸姣旇緝鎺ㄨ崘鐨勫紑鍙戞柟寮忋��
-
-- 浼樼偣锛氭瘡涓换鍔″彧闇�瑕佸紑鍙戜竴涓柟娉曪紝娣诲姞"@XxlJob"娉ㄨВ鍗冲彲銆傛洿鍔犳柟渚裤�佸揩閫熴�備細鑷姩鎵弿浠诲姟娉ㄥ叆鍒版墽琛屽櫒瀹瑰櫒銆�
-- 缂虹偣锛氳姹係pring瀹瑰櫒鐜锛�
-
->鍩轰簬鏂规硶寮�鍙戠殑浠诲姟锛屽簳灞備細鐢熸垚JobHandler浠g悊锛屽拰鍩轰簬绫荤殑鏂瑰紡涓�鏍凤紝浠诲姟涔熶細浠obHandler鐨勫舰寮忓瓨鍦ㄤ簬鎵ц鍣ㄤ换鍔″鍣ㄤ腑銆�
-
-#### 姝ラ涓�锛氭墽琛屽櫒椤圭洰涓紝寮�鍙慗ob鏂规硶锛�
-
-    - 1銆佸湪Spring Bean瀹炰緥涓紝寮�鍙慗ob鏂规硶锛屾柟寮忔牸寮忚姹備负 "public ReturnT<String> execute(String param)"
-    - 2銆佷负Job鏂规硶娣诲姞娉ㄨВ "@XxlJob(value="鑷畾涔塲obhandler鍚嶇О", init = "JobHandler鍒濆鍖栨柟娉�", destroy = "JobHandler閿�姣佹柟娉�")"锛屾敞瑙alue鍊煎搴旂殑鏄皟搴︿腑蹇冩柊寤轰换鍔$殑JobHandler灞炴�х殑鍊笺��
-    - 3銆佹墽琛屾棩蹇楋細闇�瑕侀�氳繃 "XxlJobLogger.log" 鎵撳嵃鎵ц鏃ュ織锛�
-    
-```
-// 鍙弬鑰僑ample绀轰緥鎵ц鍣ㄤ腑鐨� "com.xxl.job.executor.service.jobhandler.SampleXxlJob" 锛屽涓嬶細
-@XxlJob("demoJobHandler")
-public ReturnT<String> execute(String param) {
-
-    XxlJobLogger.log("hello world.");
-    return ReturnT.SUCCESS;
-}
-```
-
-#### 姝ラ浜岋細璋冨害涓績锛屾柊寤鸿皟搴︿换鍔�
-鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "BEAN妯″紡"锛孞obHandler灞炴�у~鍐欎换鍔℃敞瑙b�淍XxlJob鈥濅腑瀹氫箟鐨勫�硷紱
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAsz.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-#### 鍘熺敓鍐呯疆Bean妯″紡浠诲姟
-涓烘柟渚跨敤鎴峰弬鑰冧笌蹇�熷疄鐢紝绀轰緥鎵ц鍣ㄥ唴鍘熺敓鎻愪緵澶氫釜Bean妯″紡浠诲姟Handler锛屽彲浠ョ洿鎺ラ厤缃疄鐢紝濡備笅锛�
-
-- demoJobHandler锛氱畝鍗曠ず渚嬩换鍔★紝浠诲姟鍐呴儴妯℃嫙鑰楁椂浠诲姟閫昏緫锛岀敤鎴峰彲鍦ㄧ嚎浣撻獙Rolling Log绛夊姛鑳斤紱
-- shardingJobHandler锛氬垎鐗囩ず渚嬩换鍔★紝浠诲姟鍐呴儴妯℃嫙澶勭悊鍒嗙墖鍙傛暟锛屽彲鍙傝�冪啛鎮夊垎鐗囦换鍔★紱
-- httpJobHandler锛氶�氱敤HTTP浠诲姟Handler锛涗笟鍔℃柟鍙渶瑕佹彁渚汬TTP閾炬帴鍗冲彲锛屼笉闄愬埗璇█銆佸钩鍙帮紱
-- commandJobHandler锛氶�氱敤鍛戒护琛屼换鍔andler锛涗笟鍔℃柟鍙渶瑕佹彁渚涘懡浠よ鍗冲彲锛涘 鈥減wd鈥濆懡浠わ紱
-
-
-### 3.3 GLUE妯″紡(Java)
-浠诲姟浠ユ簮鐮佹柟寮忕淮鎶ゅ湪璋冨害涓績锛屾敮鎸侀�氳繃Web IDE鍦ㄧ嚎鏇存柊锛屽疄鏃剁紪璇戝拰鐢熸晥锛屽洜姝や笉闇�瑕佹寚瀹欽obHandler銆傚紑鍙戞祦绋嬪涓嬶細
-
-#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟锛�
-鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(Java)"锛�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_tJOq.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
-閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
-
-鐗堟湰鍥炴函鍔熻兘锛堟敮鎸�30涓増鏈殑鐗堟湰鍥炴函锛夛細鍦℅LUE浠诲姟鐨刉eb IDE鐣岄潰锛岄�夋嫨鍙充笂瑙掍笅鎷夋鈥滅増鏈洖婧�濓紝浼氬垪鍑鸿GLUE鐨勬洿鏂板巻鍙诧紝閫夋嫨鐩稿簲鐗堟湰鍗冲彲鏄剧ず璇ョ増鏈唬鐮侊紝淇濆瓨鍚嶨LUE浠g爜鍗冲洖閫�鍒板搴旂殑鍘嗗彶鐗堟湰锛�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_dNUJ.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 3.4 GLUE妯″紡(Shell)
-
-#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟   
-鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(Shell)"锛�
-
-#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
-閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
-
-璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "shell" 鑴氭湰锛�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_iUw0.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 3.4 GLUE妯″紡(Python)
-
-#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟   
-鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(Python)"锛�
-
-#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
-閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
-
-璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "python" 鑴氭湰锛�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_BPLG.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 3.5 GLUE妯″紡(NodeJS)
-
-#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟   
-鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(NodeJS)"锛�
-
-#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
-閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
-
-璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "nodeJS" 鑴氭湰锛�
-
-### 3.6 GLUE妯″紡(PHP)
-鍚屼笂
-
-### 3.7 GLUE妯″紡(PowerShell)
-鍚屼笂
-
-
-
-## 鍥涖�佹搷浣滄寚鍗�
-
-### 4.1 閰嶇疆鎵ц鍣�
-鐐瑰嚮杩涘叆"鎵ц鍣ㄧ鐞�"鐣岄潰, 濡備笅鍥�:
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Hr2T.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-    1銆�"璋冨害涓績OnLine:"鍙充晶鏄剧ず鍦ㄧ嚎鐨�"璋冨害涓績"鍒楄〃, 浠诲姟鎵ц缁撴潫鍚�, 灏嗕細浠ailover鐨勬ā寮忚繘琛屽洖璋冭皟搴︿腑蹇冮�氱煡鎵ц缁撴灉, 閬垮厤鍥炶皟鐨勫崟鐐归闄�;
-    2銆�"鎵ц鍣ㄥ垪琛�" 涓樉绀哄湪绾跨殑鎵ц鍣ㄥ垪琛�, 鍙�氳繃"OnLine 鏈哄櫒"鏌ョ湅瀵瑰簲鎵ц鍣ㄧ殑闆嗙兢鏈哄櫒銆�
-
-鐐瑰嚮鎸夐挳 "+鏂板鎵ц鍣�" 寮规濡備笅鍥�, 鍙柊澧炴墽琛屽櫒閰嶇疆:
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_V3vF.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-鎵ц鍣ㄥ睘鎬ц鏄�
-
-    AppName: 鏄瘡涓墽琛屽櫒闆嗙兢鐨勫敮涓�鏍囩ずAppName, 鎵ц鍣ㄤ細鍛ㄦ湡鎬т互AppName涓哄璞¤繘琛岃嚜鍔ㄦ敞鍐屻�傚彲閫氳繃璇ラ厤缃嚜鍔ㄥ彂鐜版敞鍐屾垚鍔熺殑鎵ц鍣�, 渚涗换鍔¤皟搴︽椂浣跨敤;
-    鍚嶇О: 鎵ц鍣ㄧ殑鍚嶇О, 鍥犱负AppName闄愬埗瀛楁瘝鏁板瓧绛夌粍鎴�,鍙鎬т笉寮�, 鍚嶇О涓轰簡鎻愰珮鎵ц鍣ㄧ殑鍙鎬�;
-    鎺掑簭: 鎵ц鍣ㄧ殑鎺掑簭, 绯荤粺涓渶瑕佹墽琛屽櫒鐨勫湴鏂�,濡備换鍔℃柊澧�, 灏嗕細鎸夌収璇ユ帓搴忚鍙栧彲鐢ㄧ殑鎵ц鍣ㄥ垪琛�;
-    娉ㄥ唽鏂瑰紡锛氳皟搴︿腑蹇冭幏鍙栨墽琛屽櫒鍦板潃鐨勬柟寮忥紱
-        鑷姩娉ㄥ唽锛氭墽琛屽櫒鑷姩杩涜鎵ц鍣ㄦ敞鍐岋紝璋冨害涓績閫氳繃搴曞眰娉ㄥ唽琛ㄥ彲浠ュ姩鎬佸彂鐜版墽琛屽櫒鏈哄櫒鍦板潃锛�
-        鎵嬪姩褰曞叆锛氫汉宸ユ墜鍔ㄥ綍鍏ユ墽琛屽櫒鐨勫湴鍧�淇℃伅锛屽鍦板潃閫楀彿鍒嗛殧锛屼緵璋冨害涓績浣跨敤锛�
-    鏈哄櫒鍦板潃锛�"娉ㄥ唽鏂瑰紡"涓�"鎵嬪姩褰曞叆"鏃舵湁鏁堬紝鏀寔浜哄伐缁存姢鎵ц鍣ㄧ殑鍦板潃淇℃伅锛�
-
-### 4.2 鏂板缓浠诲姟
-杩涘叆浠诲姟绠$悊鐣岄潰锛岀偣鍑烩�滄柊澧炰换鍔♀�濇寜閽紝鍦ㄥ脊鍑虹殑鈥滄柊澧炰换鍔♀�濈晫闈㈤厤缃换鍔″睘鎬у悗淇濆瓨鍗冲彲銆傝鎯呴〉鍙傝�冪珷鑺� "涓夈�佷换鍔¤瑙�"銆�
-
-### 4.3 缂栬緫浠诲姟
-杩涘叆浠诲姟绠$悊鐣岄潰锛岄�変腑鎸囧畾浠诲姟銆傜偣鍑昏浠诲姟鍙充晶鈥滅紪杈戔�濇寜閽紝鍦ㄥ脊鍑虹殑鈥滅紪杈戜换鍔♀�濈晫闈㈡洿鏂颁换鍔″睘鎬у悗淇濆瓨鍗冲彲锛屽彲浠ヤ慨鏀硅缃殑浠诲姟灞炴�т俊鎭細
-
-### 4.4 缂栬緫GLUE浠g爜
-
-璇ユ搷浣滀粎閽堝GLUE浠诲姟銆�
-
-閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戙�傚彲鍙傝�冪珷鑺� "3.3 GLUE妯″紡(Java)"銆�
-
-### 4.5 鍚姩/鍋滄浠诲姟
-鍙浠诲姟杩涜鈥滃惎鍔ㄢ�濆拰鈥滃仠姝⑩�濇搷浣溿��
-闇�瑕佹敞鎰忕殑鏄紝姝ゅ鐨勫惎鍔�/鍋滄浠呴拡瀵逛换鍔$殑鍚庣画璋冨害瑙﹀彂琛屼负锛屼笉浼氬奖鍝嶅埌宸茬粡瑙﹀彂鐨勮皟搴︿换鍔★紝濡傞渶缁堟宸茬粡瑙﹀彂鐨勮皟搴︿换鍔★紝鍙煡鐪嬧��4.9 缁堟杩愯涓殑浠诲姟鈥�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAhX.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 4.6 鎵嬪姩瑙﹀彂涓�娆¤皟搴�
-鐐瑰嚮鈥滄墽琛屸�濇寜閽紝鍙墜鍔ㄨЕ鍙戜竴娆′换鍔¤皟搴︼紝涓嶅奖鍝嶅師鏈夎皟搴﹁鍒欍��
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAhX.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 4.7 鏌ョ湅璋冨害鏃ュ織
-鐐瑰嚮鈥滄棩蹇椻�濇寜閽紝鍙互鏌ョ湅浠诲姟鍘嗗彶璋冨害鏃ュ織銆傚湪鍘嗗彶璋冨叆鏃ュ織鐣岄潰鍙煡鐪嬫瘡娆′换鍔¤皟搴︾殑璋冨害缁撴灉銆佹墽琛岀粨鏋滅瓑锛岀偣鍑烩�滄墽琛屾棩蹇椻�濇寜閽彲鏌ョ湅鎵ц鍣ㄥ畬鏁存棩蹇椼��
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAhX.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_UDSo.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-    璋冨害鏃堕棿锛�"璋冨害涓績"瑙﹀彂鏈璋冨害骞跺悜"鎵ц鍣�"鍙戦�佷换鍔℃墽琛屼俊鍙风殑鏃堕棿锛�
-    璋冨害缁撴灉锛�"璋冨害涓績"瑙﹀彂鏈璋冨害鐨勭粨鏋滐紝200琛ㄧず鎴愬姛锛�500鎴栧叾浠栬〃绀哄け璐ワ紱
-    璋冨害澶囨敞锛�"璋冨害涓績"瑙﹀彂鏈璋冨害鐨勬棩蹇椾俊鎭紱
-    鎵ц鍣ㄥ湴鍧�锛氭湰娆′换鍔℃墽琛岀殑鏈哄櫒鍦板潃
-    杩愯妯″紡锛氳Е鍙戣皟搴︽椂浠诲姟鐨勮繍琛屾ā寮忥紝杩愯妯″紡鍙弬鑰冪珷鑺� "涓夈�佷换鍔¤瑙�"锛�
-    浠诲姟鍙傛暟锛氭湰鍦颁换鍔℃墽琛岀殑鍏ュ弬
-    鎵ц鏃堕棿锛�"鎵ц鍣�"涓湰娆′换鍔℃墽琛岀粨鏉熷悗鍥炶皟鐨勬椂闂达紱
-    鎵ц缁撴灉锛�"鎵ц鍣�"涓湰娆′换鍔℃墽琛岀殑缁撴灉锛�200琛ㄧず鎴愬姛锛�500鎴栧叾浠栬〃绀哄け璐ワ紱
-    鎵ц澶囨敞锛�"鎵ц鍣�"涓湰娆′换鍔℃墽琛岀殑鏃ュ織淇℃伅锛�
-    鎿嶄綔锛�
-        "鎵ц鏃ュ織"鎸夐挳锛氱偣鍑诲彲鏌ョ湅鏈湴浠诲姟鎵ц鐨勮缁嗘棩蹇椾俊鎭紱璇﹁鈥�4.8 鏌ョ湅鎵ц鏃ュ織鈥濓紱
-        "缁堟浠诲姟"鎸夐挳锛氱偣鍑诲彲缁堟鏈湴璋冨害瀵瑰簲鎵ц鍣ㄤ笂鏈换鍔$殑鎵ц绾跨▼锛屽寘鎷湭鎵ц鐨勯樆濉炰换鍔′竴骞惰缁堟锛�
-
-### 4.8 鏌ョ湅鎵ц鏃ュ織
-鐐瑰嚮鎵ц鏃ュ織鍙充晶鐨� 鈥滄墽琛屾棩蹇椻�� 鎸夐挳锛屽彲璺宠浆鑷虫墽琛屾棩蹇楃晫闈紝鍙互鏌ョ湅涓氬姟浠g爜涓墦鍗扮殑瀹屾暣鏃ュ織锛屽涓嬪浘锛�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_tvGI.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 4.9 缁堟杩愯涓殑浠诲姟
-浠呴拡瀵规墽琛屼腑鐨勪换鍔°��
-鍦ㄤ换鍔℃棩蹇楃晫闈紝鐐瑰嚮鍙充晶鐨勨�滅粓姝换鍔♀�濇寜閽紝灏嗕細鍚戞湰娆′换鍔″搴旂殑鎵ц鍣ㄥ彂閫佷换鍔$粓姝㈣姹傦紝灏嗕細缁堟鎺夋湰娆′换鍔★紝鍚屾椂浼氭竻绌烘帀鏁翠釜浠诲姟鎵ц闃熷垪銆�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_hIci.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-浠诲姟缁堟鏃堕�氳繃 "interrupt" 鎵ц绾跨▼鐨勬柟寮忓疄鐜�, 灏嗕細瑙﹀彂 "InterruptedException" 寮傚父銆傚洜姝ゅ鏋淛obHandler鍐呴儴catch鍒颁簡璇ュ紓甯稿苟娑堝寲鎺夌殑璇�, 浠诲姟缁堟鍔熻兘灏嗕笉鍙敤銆�
-
-鍥犳, 濡傛灉閬囧埌涓婅堪浠诲姟缁堟涓嶅彲鐢ㄧ殑鎯呭喌, 闇�瑕佸湪JobHandler涓簲璇ラ拡瀵� "InterruptedException" 寮傚父杩涜鐗规畩澶勭悊 (鍚戜笂鎶涘嚭) , 姝g‘閫昏緫濡備笅:
-```
-try{
-    // do something
-} catch (Exception e) {
-    if (e instanceof InterruptedException) {
-        throw e;
-    }
-    logger.warn("{}", e);
-}
-```
-
-鑰屼笖锛屽湪JobHandler涓紑鍚瓙绾跨▼鏃讹紝瀛愮嚎绋嬩篃涓嶅彲catch澶勭悊"InterruptedException"锛屽簲璇ヤ富鍔ㄥ悜涓婃姏鍑恒��
-
-浠诲姟缁堟鏃朵細鎵ц瀵瑰簲JobHandler鐨�"destroy()"鏂规硶锛屽彲浠ュ�熷姪璇ユ柟娉曞鐞嗕竴浜涜祫婧愬洖鏀剁殑閫昏緫銆�
-
-
-### 4.10 鍒犻櫎鎵ц鏃ュ織
-鍦ㄤ换鍔℃棩蹇楃晫闈紝閫変腑鎵ц鍣ㄥ拰浠诲姟涔嬪悗锛岀偣鍑诲彸渚х殑"鍒犻櫎"鎸夐挳灏嗕細鍑虹幇"鏃ュ織娓呯悊"寮规锛屽脊妗嗕腑鏀寔閫夋嫨涓嶅悓绫诲瀷鐨勬棩蹇楁竻鐞嗙瓥鐣ワ紝閫変腑鍚庣偣鍑�"纭畾"鎸夐挳鍗冲彲杩涜鏃ュ織娓呯悊鎿嶄綔锛�
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Ypik.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_EB65.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 4.11 鍒犻櫎浠诲姟
-鐐瑰嚮鍒犻櫎鎸夐挳锛屽彲浠ュ垹闄ゅ搴斾换鍔°��
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Z9Qr.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 4.12 鐢ㄦ埛绠$悊
-杩涘叆 "鐢ㄦ埛绠$悊" 鐣岄潰锛屽彲鏌ョ湅鍜岀鐞嗙敤鎴蜂俊鎭紱
-
-鐩墠鐢ㄦ埛鍒嗕负涓ょ瑙掕壊锛�
-- 绠$悊鍛橈細鎷ユ湁鍏ㄩ噺鏉冮檺锛屾敮鎸佸湪绾跨鐞嗙敤鎴蜂俊鎭紝涓虹敤鎴峰垎閰嶆潈闄愶紝鏉冮檺鍒嗛厤绮掑害涓烘墽琛屽櫒锛�
-- 鏅�氱敤鎴凤細浠呮嫢鏈夎鍒嗛厤鏉冮檺鐨勬墽琛屽櫒锛屽強鐩稿叧浠诲姟鐨勬搷浣滄潈闄愶紱
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_1001.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_1002.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-
-## 浜斻�佹�讳綋璁捐
-### 5.1 婧愮爜鐩綍浠嬬粛
-    - /doc :鏂囨。璧勬枡
-    - /db :鈥滆皟搴︽暟鎹簱鈥濆缓琛ㄨ剼鏈�
-    - /xxl-job-admin :璋冨害涓績锛岄」鐩簮鐮�
-    - /xxl-job-core :鍏叡Jar渚濊禆
-    - /xxl-job-executor-samples :鎵ц鍣紝Sample绀轰緥椤圭洰锛堝ぇ瀹跺彲浠ュ湪璇ラ」鐩笂杩涜寮�鍙戯紝涔熷彲浠ュ皢鐜版湁椤圭洰鏀归�犵敓鎴愭墽琛屽櫒椤圭洰锛�
-
-### 5.2 鈥滆皟搴︽暟鎹簱鈥濋厤缃�
-XXL-JOB璋冨害妯″潡鍩轰簬鑷爺璋冨害缁勪欢骞舵敮鎸侀泦缇ら儴缃诧紝璋冨害鏁版嵁搴撹〃璇存槑濡備笅锛�
-
-    - xxl_job_lock锛氫换鍔¤皟搴﹂攣琛紱
-    - xxl_job_group锛氭墽琛屽櫒淇℃伅琛紝缁存姢浠诲姟鎵ц鍣ㄤ俊鎭紱
-    - xxl_job_info锛氳皟搴︽墿灞曚俊鎭〃锛� 鐢ㄤ簬淇濆瓨XXL-JOB璋冨害浠诲姟鐨勬墿灞曚俊鎭紝濡備换鍔″垎缁勩�佷换鍔″悕銆佹満鍣ㄥ湴鍧�銆佹墽琛屽櫒銆佹墽琛屽叆鍙傚拰鎶ヨ閭欢绛夌瓑锛�
-    - xxl_job_log锛氳皟搴︽棩蹇楄〃锛� 鐢ㄤ簬淇濆瓨XXL-JOB浠诲姟璋冨害鐨勫巻鍙蹭俊鎭紝濡傝皟搴︾粨鏋溿�佹墽琛岀粨鏋溿�佽皟搴﹀叆鍙傘�佽皟搴︽満鍣ㄥ拰鎵ц鍣ㄧ瓑绛夛紱
-    - xxl_job_log_report锛氳皟搴︽棩蹇楁姤琛細鐢ㄦ埛瀛樺偍XXL-JOB浠诲姟璋冨害鏃ュ織鐨勬姤琛紝璋冨害涓績鎶ヨ〃鍔熻兘椤甸潰浼氱敤鍒帮紱
-    - xxl_job_logglue锛氫换鍔LUE鏃ュ織锛氱敤浜庝繚瀛楪LUE鏇存柊鍘嗗彶锛岀敤浜庢敮鎸丟LUE鐨勭増鏈洖婧姛鑳斤紱
-    - xxl_job_registry锛氭墽琛屽櫒娉ㄥ唽琛紝缁存姢鍦ㄧ嚎鐨勬墽琛屽櫒鍜岃皟搴︿腑蹇冩満鍣ㄥ湴鍧�淇℃伅锛�
-    - xxl_job_user锛氱郴缁熺敤鎴疯〃锛�
-
-
-### 5.3 鏋舵瀯璁捐
-#### 5.3.1 璁捐鎬濇兂
-灏嗚皟搴﹁涓烘娊璞″舰鎴愨�滆皟搴︿腑蹇冣�濆叕鍏卞钩鍙帮紝鑰屽钩鍙拌嚜韬苟涓嶆壙鎷呬笟鍔¢�昏緫锛屸�滆皟搴︿腑蹇冣�濊礋璐e彂璧疯皟搴﹁姹傘��
-
-灏嗕换鍔℃娊璞℃垚鍒嗘暎鐨凧obHandler锛屼氦鐢扁�滄墽琛屽櫒鈥濈粺涓�绠$悊锛屸�滄墽琛屽櫒鈥濊礋璐f帴鏀惰皟搴﹁姹傚苟鎵ц瀵瑰簲鐨凧obHandler涓笟鍔¢�昏緫銆�
-
-鍥犳锛屸�滆皟搴︹�濆拰鈥滀换鍔♀�濅袱閮ㄥ垎鍙互鐩镐簰瑙h�︼紝鎻愰珮绯荤粺鏁翠綋绋冲畾鎬у拰鎵╁睍鎬э紱
-
-#### 5.3.2 绯荤粺缁勬垚
-- **璋冨害妯″潡锛堣皟搴︿腑蹇冿級**锛�
-    璐熻矗绠$悊璋冨害淇℃伅锛屾寜鐓ц皟搴﹂厤缃彂鍑鸿皟搴﹁姹傦紝鑷韩涓嶆壙鎷呬笟鍔′唬鐮併�傝皟搴︾郴缁熶笌浠诲姟瑙h�︼紝鎻愰珮浜嗙郴缁熷彲鐢ㄦ�у拰绋冲畾鎬э紝鍚屾椂璋冨害绯荤粺鎬ц兘涓嶅啀鍙楅檺浜庝换鍔℃ā鍧楋紱
-    鏀寔鍙鍖栥�佺畝鍗曚笖鍔ㄦ�佺殑绠$悊璋冨害淇℃伅锛屽寘鎷换鍔℃柊寤猴紝鏇存柊锛屽垹闄わ紝GLUE寮�鍙戝拰浠诲姟鎶ヨ绛夛紝鎵�鏈変笂杩版搷浣滈兘浼氬疄鏃剁敓鏁堬紝鍚屾椂鏀寔鐩戞帶璋冨害缁撴灉浠ュ強鎵ц鏃ュ織锛屾敮鎸佹墽琛屽櫒Failover銆�
-- **鎵ц妯″潡锛堟墽琛屽櫒锛�**锛�
-    璐熻矗鎺ユ敹璋冨害璇锋眰骞舵墽琛屼换鍔¢�昏緫銆備换鍔℃ā鍧椾笓娉ㄤ簬浠诲姟鐨勬墽琛岀瓑鎿嶄綔锛屽紑鍙戝拰缁存姢鏇村姞绠�鍗曞拰楂樻晥锛�
-    鎺ユ敹鈥滆皟搴︿腑蹇冣�濈殑鎵ц璇锋眰銆佺粓姝㈣姹傚拰鏃ュ織璇锋眰绛夈��
-
-#### 5.3.3 鏋舵瀯鍥�
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Qohm.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-### 5.4 璋冨害妯″潡鍓栨瀽
-#### 5.4.1 quartz鐨勪笉瓒�
-Quartz浣滀负寮�婧愪綔涓氳皟搴︿腑鐨勪郊浣艰�咃紝鏄綔涓氳皟搴︾殑棣栭�夈�備絾鏄泦缇ょ幆澧冧腑Quartz閲囩敤API鐨勬柟寮忓浠诲姟杩涜绠$悊锛屼粠鑰屽彲浠ラ伩鍏嶄笂杩伴棶棰橈紝浣嗘槸鍚屾牱瀛樺湪浠ヤ笅闂锛�
-   
-- 闂涓�锛氳皟鐢ˋPI鐨勭殑鏂瑰紡鎿嶄綔浠诲姟锛屼笉浜烘�у寲锛�
-- 闂浜岋細闇�瑕佹寔涔呭寲涓氬姟QuartzJobBean鍒板簳灞傛暟鎹〃涓紝绯荤粺渚靛叆鎬х浉褰撲弗閲嶃��
-- 闂涓夛細璋冨害閫昏緫鍜孮uartzJobBean鑰﹀悎鍦ㄥ悓涓�涓」鐩腑锛岃繖灏嗗鑷翠竴涓棶棰橈紝鍦ㄨ皟搴︿换鍔℃暟閲忛�愭笎澧炲锛屽悓鏃惰皟搴︿换鍔¢�昏緫閫愭笎鍔犻噸鐨勬儏鍐典笅锛屾鏃惰皟搴︾郴缁熺殑鎬ц兘灏嗗ぇ澶у彈闄愪簬涓氬姟锛�
-- 闂鍥涳細quartz搴曞眰浠モ�滄姠鍗犲紡鈥濊幏鍙朌B閿佸苟鐢辨姠鍗犳垚鍔熻妭鐐硅礋璐h繍琛屼换鍔★紝浼氬鑷磋妭鐐硅礋杞芥偓娈婇潪甯稿ぇ锛涜�孹XL-JOB閫氳繃鎵ц鍣ㄥ疄鐜扳�滃崗鍚屽垎閰嶅紡鈥濊繍琛屼换鍔★紝鍏呭垎鍙戞尌闆嗙兢浼樺娍锛岃礋杞藉悇鑺傜偣鍧囪 銆�
-
-XXL-JOB寮ヨˉ浜唓uartz鐨勪笂杩颁笉瓒充箣澶勩��
-
-#### 5.4.2 鑷爺璋冨害妯″潡
-XXL-JOB鏈�缁堥�夋嫨鑷爺璋冨害缁勪欢锛堟棭鏈熻皟搴︾粍浠跺熀浜嶲uartz锛夛紱涓�鏂归潰鏄负浜嗙簿绠�绯荤粺闄嶄綆鍐椾綑渚濊禆锛屽彟涓�鏂归潰鏄负浜嗘彁渚涚郴缁熺殑鍙帶搴︿笌绋冲畾鎬э紱
-
-XXL-JOB涓�滆皟搴︽ā鍧椻�濆拰鈥滀换鍔℃ā鍧椻�濆畬鍏ㄨВ鑰︼紝璋冨害妯″潡杩涜浠诲姟璋冨害鏃讹紝灏嗕細瑙f瀽涓嶅悓鐨勪换鍔″弬鏁板彂璧疯繙绋嬭皟鐢紝璋冪敤鍚勮嚜鐨勮繙绋嬫墽琛屽櫒鏈嶅姟銆傝繖绉嶈皟鐢ㄦā鍨嬬被浼糝PC璋冪敤锛岃皟搴︿腑蹇冩彁渚涜皟鐢ㄤ唬鐞嗙殑鍔熻兘锛岃�屾墽琛屽櫒鎻愪緵杩滅▼鏈嶅姟鐨勫姛鑳姐��
-
-#### 5.4.3 璋冨害涓績HA锛堥泦缇わ級
-鍩轰簬鏁版嵁搴撶殑闆嗙兢鏂规锛屾暟鎹簱閫夌敤Mysql锛涢泦缇ゅ垎甯冨紡骞跺彂鐜涓繘琛屽畾鏃朵换鍔¤皟搴︽椂锛屼細鍦ㄥ悇涓妭鐐逛細涓婃姤浠诲姟锛屽瓨鍒版暟鎹簱涓紝鎵ц鏃朵細浠庢暟鎹簱涓彇鍑鸿Е鍙戝櫒鏉ユ墽琛岋紝濡傛灉瑙﹀彂鍣ㄧ殑鍚嶇О鍜屾墽琛屾椂闂寸浉鍚岋紝鍒欏彧鏈変竴涓妭鐐瑰幓鎵ц姝や换鍔°��
-
-#### 5.4.4 璋冨害绾跨▼姹�
-璋冨害閲囩敤绾跨▼姹犳柟寮忓疄鐜帮紝閬垮厤鍗曠嚎绋嬪洜闃诲鑰屽紩璧蜂换鍔¤皟搴﹀欢杩熴��
-
-
-#### 5.4.5 骞惰璋冨害
-XXL-JOB璋冨害妯″潡榛樿閲囩敤骞惰鏈哄埗锛屽湪澶氱嚎绋嬭皟搴︾殑鎯呭喌涓嬶紝璋冨害妯″潡琚樆濉炵殑鍑犵巼寰堜綆锛屽ぇ澶ф彁楂樹簡璋冨害绯荤粺鐨勬壙杞介噺銆�
-
-XXL-JOB鐨勬瘡涓皟搴︿换鍔¤櫧鐒跺湪璋冨害妯″潡鏄苟琛岃皟搴︽墽琛岀殑锛屼絾鏄换鍔¤皟搴︿紶閫掑埌浠诲姟妯″潡鐨勨�滄墽琛屽櫒鈥濈‘瀹炰覆琛屾墽琛岀殑锛屽悓鏃舵敮鎸佷换鍔$粓姝€��
-
-#### 5.4.6 杩囨湡澶勭悊绛栫暐
-浠诲姟璋冨害閿欒繃瑙﹀彂鏃堕棿鏃剁殑澶勭悊绛栫暐锛�
-- 鍙兘鍘熷洜锛氭湇鍔¢噸鍚紱璋冨害绾跨▼琚樆濉烇紝绾跨▼琚�楀敖锛涗笂娆¤皟搴︽寔缁樆濉烇紝涓嬫璋冨害琚敊杩囷紱
-- 澶勭悊绛栫暐锛�
-    - 杩囨湡瓒�5s锛氭湰娆″拷鐣ワ紝褰撳墠鏃堕棿寮�濮嬭绠椾笅娆¤Е鍙戞椂闂�
-    - 杩囨湡5s鍐咃細绔嬪嵆瑙﹀彂涓�娆★紝褰撳墠鏃堕棿寮�濮嬭绠椾笅娆¤Е鍙戞椂闂�
-
-
-#### 5.4.7 鏃ュ織鍥炶皟鏈嶅姟
-璋冨害妯″潡鐨勨�滆皟搴︿腑蹇冣�濅綔涓篧eb鏈嶅姟閮ㄧ讲鏃讹紝涓�鏂归潰鎵挎媴璋冨害涓績鍔熻兘锛屽彟涓�鏂归潰涔熶负鎵ц鍣ㄦ彁渚汚PI鏈嶅姟銆�
-
-璋冨害涓績鎻愪緵鐨�"鏃ュ織鍥炶皟鏈嶅姟API鏈嶅姟"浠g爜浣嶇疆濡備笅锛�
-```
-xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
-```
-
-鈥滄墽琛屽櫒鈥濆湪鎺ユ敹鍒颁换鍔℃墽琛岃姹傚悗锛屾墽琛屼换鍔★紝鍦ㄦ墽琛岀粨鏉熶箣鍚庝細灏嗘墽琛岀粨鏋滃洖璋冮�氱煡鈥滆皟搴︿腑蹇冣�濓細
-
-#### 5.4.8 浠诲姟HA锛團ailover锛�
-鎵ц鍣ㄥ鑻ラ泦缇ら儴缃诧紝璋冨害涓績灏嗕細鎰熺煡鍒板湪绾跨殑鎵�鏈夋墽琛屽櫒锛屽鈥�127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999鈥濄��
-
-褰撲换鍔�"璺敱绛栫暐"閫夋嫨"鏁呴殰杞Щ(FAILOVER)"鏃讹紝褰撹皟搴︿腑蹇冩瘡娆″彂璧疯皟搴﹁姹傛椂锛屼細鎸夌収椤哄簭瀵规墽琛屽櫒鍙戝嚭蹇冭烦妫�娴嬭姹傦紝绗竴涓娴嬩负瀛樻椿鐘舵�佺殑鎵ц鍣ㄥ皢浼氳閫夊畾骞跺彂閫佽皟搴﹁姹傘��
-
-璋冨害鎴愬姛鍚庯紝鍙湪鏃ュ織鐩戞帶鐣岄潰鏌ョ湅鈥滆皟搴﹀娉ㄢ�濓紝濡備笅锛�
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_jrdI.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-鈥滆皟搴﹀娉ㄢ�濆彲浠ョ湅鍑烘湰鍦拌皟搴﹁繍琛岃建杩癸紝鎵ц鍣ㄧ殑"娉ㄥ唽鏂瑰紡"銆�"鍦板潃鍒楄〃"鍜屼换鍔$殑"璺敱绛栫暐"銆�"鏁呴殰杞Щ(FAILOVER)"璺敱绛栫暐涓嬶紝璋冨害涓績棣栧厛瀵圭涓�涓湴鍧�杩涜蹇冭烦妫�娴嬶紝蹇冭烦澶辫触鍥犳鑷姩璺宠繃锛岀浜屼釜渚濈劧蹇冭烦妫�娴嬪け璐モ�︹��
-鐩磋嚦蹇冭烦妫�娴嬬涓変釜鍦板潃鈥�127.0.0.1:9999鈥濇垚鍔燂紝閫夊畾涓衡�滅洰鏍囨墽琛屽櫒鈥濓紱鐒跺悗瀵光�滅洰鏍囨墽琛屽櫒鈥濆彂閫佽皟搴﹁姹傦紝璋冨害娴佺▼缁撴潫锛岀瓑寰呮墽琛屽櫒鍥炶皟鎵ц缁撴灉銆�
-
-#### 5.4.9 璋冨害鏃ュ織
-璋冨害涓績姣忔杩涜浠诲姟璋冨害锛岄兘浼氳褰曚竴鏉′换鍔℃棩蹇楋紝浠诲姟鏃ュ織涓昏鍖呮嫭浠ヤ笅涓夐儴鍒嗗唴瀹癸細
-
-- 浠诲姟淇℃伅锛氬寘鎷�滄墽琛屽櫒鍦板潃鈥濄�佲�淛obHandler鈥濆拰鈥滄墽琛屽弬鏁扳�濈瓑灞炴�э紝鐐瑰嚮浠诲姟ID鎸夐挳鍙煡鐪嬶紝鏍规嵁杩欎簺鍙傛暟锛屽彲浠ョ簿纭殑瀹氫綅浠诲姟鎵ц鐨勫叿浣撴満鍣ㄥ拰浠诲姟浠g爜锛�
-- 璋冨害淇℃伅锛氬寘鎷�滆皟搴︽椂闂粹�濄�佲�滆皟搴︾粨鏋溾�濆拰鈥滆皟搴︽棩蹇椻�濈瓑锛屾牴鎹繖浜涘弬鏁帮紝鍙互浜嗚В鈥滆皟搴︿腑蹇冣�濆彂璧疯皟搴﹁姹傛椂鍏蜂綋鎯呭喌銆�
-- 鎵ц淇℃伅锛氬寘鎷�滄墽琛屾椂闂粹�濄�佲�滄墽琛岀粨鏋溾�濆拰鈥滄墽琛屾棩蹇椻�濈瓑锛屾牴鎹繖浜涘弬鏁帮紝鍙互浜嗚В鍦ㄢ�滄墽琛屽櫒鈥濈浠诲姟鎵ц鐨勫叿浣撴儏鍐碉紱
-
-璋冨害鏃ュ織锛岄拡瀵瑰崟娆¤皟搴︼紝灞炴�ц鏄庡涓嬶細
-- 鎵ц鍣ㄥ湴鍧�锛氫换鍔℃墽琛岀殑鏈哄櫒鍦板潃锛�
-- JobHandler锛欱ean妯″紡琛ㄧず浠诲姟鎵ц鐨凧obHandler鍚嶇О锛�
-- 浠诲姟鍙傛暟锛氫换鍔℃墽琛岀殑鍏ュ弬锛�
-- 璋冨害鏃堕棿锛氳皟搴︿腑蹇冿紝鍙戣捣璋冨害鐨勬椂闂达紱
-- 璋冨害缁撴灉锛氳皟搴︿腑蹇冿紝鍙戣捣璋冨害鐨勭粨鏋滐紝SUCCESS鎴朏AIL锛�
-- 璋冨害澶囨敞锛氳皟搴︿腑蹇冿紝鍙戣捣璋冨害鐨勫娉ㄤ俊鎭紝濡傚湴鍧�蹇冭烦妫�娴嬫棩蹇楃瓑锛�
-- 鎵ц鏃堕棿锛氭墽琛屽櫒锛屼换鍔℃墽琛岀粨鏉熷悗鍥炶皟鐨勬椂闂达紱
-- 鎵ц缁撴灉锛氭墽琛屽櫒锛屼换鍔℃墽琛岀殑缁撴灉锛孲UCCESS鎴朏AIL锛�
-- 鎵ц澶囨敞锛氭墽琛屽櫒锛屼换鍔℃墽琛岀殑澶囨敞淇℃伅锛屽寮傚父鏃ュ織绛夛紱
-- 鎵ц鏃ュ織锛氫换鍔℃墽琛岃繃绋嬩腑锛屼笟鍔′唬鐮佷腑鎵撳嵃鐨勫畬鏁存墽琛屾棩蹇楋紝瑙佲��4.8 鏌ョ湅鎵ц鏃ュ織鈥濓紱
-
-#### 5.4.10 浠诲姟渚濊禆
-鍘熺悊锛歑XL-JOB涓瘡涓换鍔¢兘瀵瑰簲鏈変竴涓换鍔D锛屽悓鏃讹紝姣忎釜浠诲姟鏀寔璁剧疆灞炴�р�滃瓙浠诲姟ID鈥濓紝鍥犳锛岄�氳繃鈥滀换鍔D鈥濆彲浠ュ尮閰嶄换鍔′緷璧栧叧绯汇��
-
-褰撶埗浠诲姟鎵ц缁撴潫骞朵笖鎵ц鎴愬姛鏃讹紝灏嗕細鏍规嵁鈥滃瓙浠诲姟ID鈥濆尮閰嶅瓙浠诲姟渚濊禆锛屽鏋滃尮閰嶅埌瀛愪换鍔★紝灏嗕細涓诲姩瑙﹀彂涓�娆″瓙浠诲姟鐨勬墽琛屻��
-
-鍦ㄤ换鍔℃棩蹇楃晫闈紝鐐瑰嚮浠诲姟鐨勨�滄墽琛屽娉ㄢ�濈殑鈥滄煡鐪嬧�濇寜閽紝鍙互鐪嬪埌鍖归厤瀛愪换鍔′互鍙婅Е鍙戝瓙浠诲姟鎵ц鐨勬棩蹇椾俊鎭紝濡傛棤淇℃伅鍒欒〃绀烘湭瑙﹀彂瀛愪换鍔℃墽琛岋紝鍙弬鑰冧笅鍥俱��
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Wb2o.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_jOAU.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-#### 5.4.11  鍏ㄥ紓姝ュ寲 & 杞婚噺绾�
-
-- 鍏ㄥ紓姝ュ寲璁捐锛歑XL-JOB绯荤粺涓笟鍔¢�昏緫鍦ㄨ繙绋嬫墽琛屽櫒鎵ц锛岃Е鍙戞祦绋嬪叏寮傛鍖栬璁°�傜浉姣旂洿鎺ュ湪璋冨害涓績鍐呴儴鎵ц涓氬姟閫昏緫锛屾瀬澶х殑闄嶄綆浜嗚皟搴︾嚎绋嬪崰鐢ㄦ椂闂达紱
-    - 寮傛璋冨害锛氳皟搴︿腑蹇冩瘡娆′换鍔¤Е鍙戞椂浠呭彂閫佷竴娆¤皟搴﹁姹傦紝璇ヨ皟搴﹁姹傞鍏堟帹閫佲�滃紓姝ヨ皟搴﹂槦鍒椻�濓紝鐒跺悗寮傛鎺ㄩ�佺粰杩滅▼鎵ц鍣�
-    - 寮傛鎵ц锛氭墽琛屽櫒浼氬皢璇锋眰瀛樺叆鈥滃紓姝ユ墽琛岄槦鍒椻�濆苟涓旂珛鍗冲搷搴旇皟搴︿腑蹇冿紝寮傛杩愯銆�
-- 杞婚噺绾ц璁★細XXL-JOB璋冨害涓績涓瘡涓狫OB閫昏緫闈炲父 鈥滆交鈥濓紝鍦ㄥ叏寮傛鍖栫殑鍩虹涓婏紝鍗曚釜JOB涓�娆¤繍琛屽钩鍧囪�楁椂鍩烘湰鍦� "10ms" 涔嬪唴锛堝熀鏈负涓�娆¤姹傜殑缃戠粶寮�閿�锛夛紱鍥犳锛屽彲浠ヤ繚璇佷娇鐢ㄦ湁闄愮殑绾跨▼鏀拺澶ч噺鐨凧OB骞跺彂杩愯锛�
-
-寰楃泭浜庝笂杩颁袱鐐逛紭鍖栵紝鐞嗚涓婇粯璁ら厤缃笅鐨勮皟搴︿腑蹇冿紝鍗曟満鑳藉鏀拺 5000 浠诲姟骞跺彂杩愯绋冲畾杩愯锛�
-
-瀹為檯鍦烘櫙涓紝鐢变簬璋冨害涓績涓庢墽琛屽櫒缃戠粶ping寤惰繜涓嶅悓銆丏B璇诲啓鑰楁椂涓嶅悓銆佷换鍔¤皟搴﹀瘑闆嗙▼搴︿笉鍚岋紝浼氬鑷翠换鍔¢噺涓婇檺浼氫笂涓嬫尝鍔ㄣ��
-
-濡傝嫢闇�瑕佹敮鎾戞洿澶氱殑浠诲姟閲忥紝鍙互閫氳繃 "璋冨ぇ璋冨害绾跨▼鏁�" 銆�"闄嶄綆璋冨害涓績涓庢墽琛屽櫒ping寤惰繜" 鍜� "鎻愬崌鏈哄櫒閰嶇疆" 鍑犵鏂瑰紡浼樺寲銆�
-
-#### 5.4.12 鍧囪 璋冨害
-
-璋冨害涓績鍦ㄩ泦缇ら儴缃叉椂浼氳嚜鍔ㄨ繘琛屼换鍔″钩鍧囧垎閰嶏紝瑙﹀彂缁勪欢姣忔鑾峰彇涓庣嚎绋嬫睜鏁伴噺锛堣皟搴︿腑蹇冩敮鎸佽嚜瀹氫箟璋冨害绾跨▼姹犲ぇ灏忥級鐩稿叧鏁伴噺鐨勪换鍔★紝閬垮厤澶ч噺浠诲姟闆嗕腑鍦ㄥ崟涓皟搴︿腑蹇冮泦缇よ妭鐐癸紱
-
-
-### 5.5 浠诲姟 "杩愯妯″紡" 鍓栨瀽
-#### 5.5.1 "Bean妯″紡" 浠诲姟
-寮�鍙戞楠わ細鍙弬鑰� "绔犺妭涓�" 锛�
-鍘熺悊锛氭瘡涓狟ean妯″紡浠诲姟閮芥槸涓�涓猄pring鐨凚ean绫诲疄渚嬶紝瀹冭缁存姢鍦ㄢ�滄墽琛屽櫒鈥濋」鐩殑Spring瀹瑰櫒涓�備换鍔$被闇�瑕佸姞鈥淍JobHandler(value="鍚嶇О")鈥濇敞瑙o紝鍥犱负鈥滄墽琛屽櫒鈥濅細鏍规嵁璇ユ敞瑙h瘑鍒玈pring瀹瑰櫒涓殑浠诲姟銆備换鍔$被闇�瑕佺户鎵跨粺涓�鎺ュ彛鈥淚JobHandler鈥濓紝浠诲姟閫昏緫鍦╡xecute鏂规硶涓紑鍙戯紝鍥犱负鈥滄墽琛屽櫒鈥濆湪鎺ユ敹鍒拌皟搴︿腑蹇冪殑璋冨害璇锋眰鏃讹紝灏嗕細璋冪敤鈥淚JobHandler鈥濈殑execute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆�
-
-#### 5.5.2 "GLUE妯″紡(Java)" 浠诲姟
-寮�鍙戞楠わ細鍙弬鑰� "绔犺妭涓�" 锛�
-鍘熺悊锛氭瘡涓� "GLUE妯″紡(Java)" 浠诲姟鐨勪唬鐮侊紝瀹為檯涓婃槸鈥滀竴涓户鎵胯嚜鈥淚JobHandler鈥濈殑瀹炵幇绫荤殑绫讳唬鐮佲�濓紝鈥滄墽琛屽櫒鈥濇帴鏀跺埌鈥滆皟搴︿腑蹇冣�濈殑璋冨害璇锋眰鏃讹紝浼氶�氳繃Groovy绫诲姞杞藉櫒鍔犺浇姝や唬鐮侊紝瀹炰緥鍖栨垚Java瀵硅薄锛屽悓鏃舵敞鍏ユ浠g爜涓0鏄庣殑Spring鏈嶅姟锛堣纭繚Glue浠g爜涓殑鏈嶅姟鍜岀被寮曠敤鍦ㄢ�滄墽琛屽櫒鈥濋」鐩腑瀛樺湪锛夛紝鐒跺悗璋冪敤璇ュ璞$殑execute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆�
-
-#### 5.5.3 GLUE妯″紡(Shell) + GLUE妯″紡(Python) + GLUE妯″紡(NodeJS)
-寮�鍙戞楠わ細鍙弬鑰� "绔犺妭涓�" 锛�
-鍘熺悊锛氳剼鏈换鍔$殑婧愮爜鎵樼鍦ㄨ皟搴︿腑蹇冿紝鑴氭湰閫昏緫鍦ㄦ墽琛屽櫒杩愯銆傚綋瑙﹀彂鑴氭湰浠诲姟鏃讹紝鎵ц鍣ㄤ細鍔犺浇鑴氭湰婧愮爜鍦ㄦ墽琛屽櫒鏈哄櫒涓婄敓鎴愪竴浠借剼鏈枃浠讹紝鐒跺悗閫氳繃Java浠g爜璋冪敤璇ヨ剼鏈紱骞朵笖瀹炴椂灏嗚剼鏈緭鍑烘棩蹇楀啓鍒颁换鍔℃棩蹇楁枃浠朵腑锛屼粠鑰屽湪璋冨害涓績鍙互瀹炴椂鐩戞帶鑴氭湰杩愯鎯呭喌锛�
-
-鐩墠鏀寔鐨勮剼鏈被鍨嬪涓嬶細
-
-    - shell鑴氭湰锛氫换鍔¤繍琛屾ā寮忛�夋嫨涓� "GLUE妯″紡(Shell)"鏃舵敮鎸� "shell" 鑴氭湰浠诲姟锛�
-    - python鑴氭湰锛氫换鍔¤繍琛屾ā寮忛�夋嫨涓� "GLUE妯″紡(Python)"鏃舵敮鎸� "python" 鑴氭湰浠诲姟锛�
-    - nodejs鑴氭湰锛氬姟杩愯妯″紡閫夋嫨涓� "GLUE妯″紡(NodeJS)"鏃舵敮鎸� "nodejs" 鑴氭湰浠诲姟锛�
-
-鑴氭湰浠诲姟閫氳繃 Exit Code 鍒ゆ柇浠诲姟鎵ц缁撴灉锛岀姸鎬佺爜鍙弬鑰冪珷鑺� "5.15 浠诲姟鎵ц缁撴灉璇存槑"锛�
-
-#### 5.5.4 鎵ц鍣�
-鎵ц鍣ㄥ疄闄呬笂鏄竴涓唴宓岀殑Server锛岄粯璁ょ鍙�9999锛堥厤缃」锛歺xl.job.executor.port锛夈��
-
-鍦ㄩ」鐩惎鍔ㄦ椂锛屾墽琛屽櫒浼氶�氳繃鈥淍JobHandler鈥濊瘑鍒玈pring瀹瑰櫒涓�淏ean妯″紡浠诲姟鈥濓紝浠ユ敞瑙g殑value灞炴�т负key绠$悊璧锋潵銆�
-
-鈥滄墽琛屽櫒鈥濇帴鏀跺埌鈥滆皟搴︿腑蹇冣�濈殑璋冨害璇锋眰鏃讹紝濡傛灉浠诲姟绫诲瀷涓衡�淏ean妯″紡鈥濓紝灏嗕細鍖归厤Spring瀹瑰櫒涓殑鈥淏ean妯″紡浠诲姟鈥濓紝鐒跺悗璋冪敤鍏秂xecute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆傚鏋滀换鍔$被鍨嬩负鈥淕LUE妯″紡鈥濓紝灏嗕細鍔犺浇GLue浠g爜锛屽疄渚嬪寲Java瀵硅薄锛屾敞鍏ヤ緷璧栫殑Spring鏈嶅姟锛堟敞鎰忥細Glue浠g爜涓敞鍏ョ殑Spring鏈嶅姟锛屽繀椤诲瓨鍦ㄤ笌璇モ�滄墽琛屽櫒鈥濋」鐩殑Spring瀹瑰櫒涓級锛岀劧鍚庤皟鐢╡xecute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆�
-
-#### 5.5.5 浠诲姟鏃ュ織
-XXL-JOB浼氫负姣忔璋冨害璇锋眰鐢熸垚涓�涓崟鐙殑鏃ュ織鏂囦欢锛岄渶瑕侀�氳繃 "XxlJobLogger.log" 鎵撳嵃鎵ц鏃ュ織锛屸�滆皟搴︿腑蹇冣�濇煡鐪嬫墽琛屾棩蹇楁椂灏嗕細鍔犺浇瀵瑰簲鐨勬棩蹇楁枃浠躲��
-
-(鍘嗗彶鐗堟湰閫氳繃閲嶅啓LOG4J鐨凙ppender瀹炵幇锛屽瓨鍦ㄤ緷璧栭檺鍒讹紝璇ユ柟寮忓湪鏂扮増鏈凡缁忚鎶涘純)
-
-鏃ュ織鏂囦欢瀛樻斁鐨勪綅缃彲鍦ㄢ�滄墽琛屽櫒鈥濋厤缃枃浠惰繘琛岃嚜瀹氫箟锛岄粯璁ょ洰褰曟牸寮忎负锛�/data/applogs/xxl-job/jobhandler/鈥滄牸寮忓寲鏃ユ湡鈥�/鈥滄暟鎹簱璋冨害鏃ュ織璁板綍鐨勪富閿甀D.log鈥濄��
-
-鍦↗obHandler涓紑鍚瓙绾跨▼鏃讹紝瀛愮嚎绋嬪皢浼氬皢浼氭妸鏃ュ織鎵撳嵃鍦ㄧ埗绾跨▼鍗矹obHandler鐨勬墽琛屾棩蹇椾腑锛屾柟渚挎棩蹇楄拷韪��
-
-### 5.6 閫氳妯″潡鍓栨瀽
-
-#### 5.6.1 涓�娆″畬鏁寸殑浠诲姟璋冨害閫氳娴佺▼ 
-    - 1銆佲�滆皟搴︿腑蹇冣�濆悜鈥滄墽琛屽櫒鈥濆彂閫乭ttp璋冨害璇锋眰: 鈥滄墽琛屽櫒鈥濅腑鎺ユ敹璇锋眰鐨勬湇鍔★紝瀹為檯涓婃槸涓�鍙板唴宓孲erver锛岄粯璁ょ鍙�9999;
-    - 2銆佲�滄墽琛屽櫒鈥濇墽琛屼换鍔¢�昏緫锛�
-    - 3銆佲�滄墽琛屽櫒鈥漢ttp鍥炶皟鈥滆皟搴︿腑蹇冣�濊皟搴︾粨鏋�: 鈥滆皟搴︿腑蹇冣�濅腑鎺ユ敹鍥炶皟鐨勬湇鍔★紝鏄拡瀵规墽琛屽櫒寮�鏀句竴濂桝PI鏈嶅姟;
-
-#### 5.6.2 閫氳鏁版嵁鍔犲瘑
-璋冨害涓績鍚戞墽琛屽櫒鍙戦�佺殑璋冨害璇锋眰鏃朵娇鐢≧equestModel鍜孯esponseModel涓や釜瀵硅薄灏佽璋冨害璇锋眰鍙傛暟鍜屽搷搴旀暟鎹�, 鍦ㄨ繘琛岄�氳涔嬪墠搴曞眰浼氬皢涓婅堪涓や釜瀵硅薄瀵硅薄搴忓垪鍖栵紝骞惰繘琛屾暟鎹崗璁互鍙婃椂闂存埑妫�楠�,浠庤�岃揪鍒版暟鎹姞瀵嗙殑鍔熻兘;
-
-### 5.7 浠诲姟娉ㄥ唽, 浠诲姟鑷姩鍙戠幇   
-鑷獀1.5鐗堟湰涔嬪悗, 浠诲姟鍙栨秷浜�"浠诲姟鎵ц鏈哄櫒"灞炴��, 鏀逛负閫氳繃浠诲姟娉ㄥ唽鍜岃嚜鍔ㄥ彂鐜扮殑鏂瑰紡, 鍔ㄦ�佽幏鍙栬繙绋嬫墽琛屽櫒鍦板潃骞舵墽琛屻��
-
-    AppName: 姣忎釜鎵ц鍣ㄦ満鍣ㄩ泦缇ょ殑鍞竴鏍囩ず, 浠诲姟娉ㄥ唽浠� "鎵ц鍣�" 涓烘渶灏忕矑搴﹁繘琛屾敞鍐�; 姣忎釜浠诲姟閫氳繃鍏剁粦瀹氱殑鎵ц鍣ㄥ彲鎰熺煡瀵瑰簲鐨勬墽琛屽櫒鏈哄櫒鍒楄〃;
-    娉ㄥ唽琛�: 瑙�"xxl_job_registry"琛�, "鎵ц鍣�" 鍦ㄨ繘琛屼换鍔℃敞鍐屾椂灏嗕細鍛ㄦ湡鎬х淮鎶や竴鏉℃敞鍐岃褰曪紝鍗虫満鍣ㄥ湴鍧�鍜孉ppName鐨勭粦瀹氬叧绯�; "璋冨害涓績" 浠庤�屽彲浠ュ姩鎬佹劅鐭ユ瘡涓狝ppName鍦ㄧ嚎鐨勬満鍣ㄥ垪琛�;
-    鎵ц鍣ㄦ敞鍐�: 浠诲姟娉ㄥ唽Beat鍛ㄦ湡榛樿30s; 鎵ц鍣ㄤ互涓�鍊岯eat杩涜鎵ц鍣ㄦ敞鍐�, 璋冨害涓績浠ヤ竴鍊岯eat杩涜鍔ㄦ�佷换鍔″彂鐜�; 娉ㄥ唽淇℃伅鐨勫け鏁堟椂闂翠负涓夊�岯eat; 
-    鎵ц鍣ㄦ敞鍐屾憳闄わ細鎵ц鍣ㄩ攢姣佹椂锛屽皢浼氫富鍔ㄤ笂鎶ヨ皟搴︿腑蹇冨苟鎽橀櫎瀵瑰簲鐨勬墽琛屽櫒鏈哄櫒淇℃伅锛屾彁楂樺績璺虫敞鍐岀殑瀹炴椂鎬э紱
-    
-
-涓轰繚璇佺郴缁�"杞婚噺绾�"骞朵笖闄嶄綆瀛︿範閮ㄧ讲鎴愭湰锛屾病鏈夐噰鐢╖ookeeper浣滀负娉ㄥ唽涓績锛岄噰鐢―B鏂瑰紡杩涜浠诲姟娉ㄥ唽鍙戠幇锛�
-
-### 5.8 浠诲姟鎵ц缁撴灉
-鑷獀1.6.2涔嬪悗锛屼换鍔℃墽琛岀粨鏋滈�氳繃 "IJobHandler" 鐨勮繑鍥炲�� "ReturnT" 杩涜鍒ゆ柇锛�
-褰撹繑鍥炲�肩鍚� "ReturnT.code == ReturnT.SUCCESS_CODE" 鏃惰〃绀轰换鍔℃墽琛屾垚鍔燂紝鍚﹀垯琛ㄧず浠诲姟鎵ц澶辫触锛岃�屼笖鍙互閫氳繃 "ReturnT.msg" 鍥炶皟閿欒淇℃伅缁欒皟搴︿腑蹇冿紱
-浠庤�岋紝鍦ㄤ换鍔¢�昏緫涓彲浠ユ柟渚跨殑鎺у埗浠诲姟鎵ц缁撴灉锛�
-
-### 5.9 鍒嗙墖骞挎挱 & 鍔ㄦ�佸垎鐗�   
-鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屼换鍔¤矾鐢辩瓥鐣ラ�夋嫨"鍒嗙墖骞挎挱"鎯呭喌涓嬶紝涓�娆′换鍔¤皟搴﹀皢浼氬箍鎾Е鍙戝搴旈泦缇や腑鎵�鏈夋墽琛屽櫒鎵ц涓�娆′换鍔★紝鍚屾椂绯荤粺鑷姩浼犻�掑垎鐗囧弬鏁帮紱鍙牴鎹垎鐗囧弬鏁板紑鍙戝垎鐗囦换鍔★紱
-
-"鍒嗙墖骞挎挱" 浠ユ墽琛屽櫒涓虹淮搴﹁繘琛屽垎鐗囷紝鏀寔鍔ㄦ�佹墿瀹规墽琛屽櫒闆嗙兢浠庤�屽姩鎬佸鍔犲垎鐗囨暟閲忥紝鍗忓悓杩涜涓氬姟澶勭悊锛涘湪杩涜澶ф暟鎹噺涓氬姟鎿嶄綔鏃跺彲鏄捐憲鎻愬崌浠诲姟澶勭悊鑳藉姏鍜岄�熷害銆�
-
-"鍒嗙墖骞挎挱" 鍜屾櫘閫氫换鍔″紑鍙戞祦绋嬩竴鑷达紝涓嶅悓涔嬪鍦ㄤ簬鍙互鍙互鑾峰彇鍒嗙墖鍙傛暟锛岃幏鍙栧垎鐗囧弬鏁拌繘琛屽垎鐗囦笟鍔″鐞嗐��
-
-- Java璇█浠诲姟鑾峰彇鍒嗙墖鍙傛暟鏂瑰紡锛欱EAN銆丟LUE妯″紡(Java)
-```
-// 鍙弬鑰僑ample绀轰緥鎵ц鍣ㄤ腑鐨勭ず渚嬩换鍔�"ShardingJobHandler"浜嗚В璇曠敤 
-ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
-```
-- 鑴氭湰璇█浠诲姟鑾峰彇鍒嗙墖鍙傛暟鏂瑰紡锛欸LUE妯″紡(Shell)銆丟LUE妯″紡(Python)銆丟LUE妯″紡(Nodejs)
-```
-// 鑴氭湰浠诲姟鍏ュ弬鍥哄畾涓轰笁涓紝渚濇涓猴細浠诲姟浼犲弬銆佸垎鐗囧簭鍙枫�佸垎鐗囨�绘暟銆備互Shell妯″紡浠诲姟涓轰緥锛岃幏鍙栧垎鐗囧弬鏁颁唬鐮佸涓�
-echo "鍒嗙墖搴忓彿 index = $2"
-echo "鍒嗙墖鎬绘暟 total = $3"
-```  
-    
-鍒嗙墖鍙傛暟灞炴�ц鏄庯細
-
-    index锛氬綋鍓嶅垎鐗囧簭鍙�(浠�0寮�濮�)锛屾墽琛屽櫒闆嗙兢鍒楄〃涓綋鍓嶆墽琛屽櫒鐨勫簭鍙凤紱
-    total锛氭�诲垎鐗囨暟锛屾墽琛屽櫒闆嗙兢鐨勬�绘満鍣ㄦ暟閲忥紱
-
-璇ョ壒鎬ч�傜敤鍦烘櫙濡傦細
-- 1銆佸垎鐗囦换鍔″満鏅細10涓墽琛屽櫒鐨勯泦缇ゆ潵澶勭悊10w鏉℃暟鎹紝姣忓彴鏈哄櫒鍙渶瑕佸鐞�1w鏉℃暟鎹紝鑰楁椂闄嶄綆10鍊嶏紱
-- 2銆佸箍鎾换鍔″満鏅細骞挎挱鎵ц鍣ㄦ満鍣ㄨ繍琛宻hell鑴氭湰銆佸箍鎾泦缇よ妭鐐硅繘琛岀紦瀛樻洿鏂扮瓑
-
-### 5.10 璁块棶浠ょ墝锛圓ccessToken锛�
-涓烘彁鍗囩郴缁熷畨鍏ㄦ�э紝璋冨害涓績鍜屾墽琛屽櫒杩涜瀹夊叏鎬ф牎楠岋紝鍙屾柟AccessToken鍖归厤鎵嶅厑璁搁�氳锛�
-
-璋冨害涓績鍜屾墽琛屽櫒锛屽彲閫氳繃閰嶇疆椤� "xxl.job.accessToken" 杩涜AccessToken鐨勮缃��
-
-璋冨害涓績鍜屾墽琛屽櫒锛屽鏋滈渶瑕佹甯搁�氳锛屽彧鏈変袱绉嶈缃紱
-
-- 璁剧疆涓�锛氳皟搴︿腑蹇冨拰鎵ц鍣紝鍧囦笉璁剧疆AccessToken锛涘叧闂畨鍏ㄦ�ф牎楠岋紱
-- 璁剧疆浜岋細璋冨害涓績鍜屾墽琛屽櫒锛岃缃簡鐩稿悓鐨凙ccessToken锛�
-
-### 5.11 璋冨害涓績API鏈嶅姟
-
-璋冨害涓績鎻愪緵浜咥PI鏈嶅姟锛屼富瑕佸垎涓轰袱绉嶇被鍨嬶細
-#### 5.11.1 鎻愪緵缁欐墽琛屽櫒鐨凙PI鏈嶅姟锛�
-    1銆佷换鍔$粨鏋滃洖璋冩湇鍔★紱
-    2銆佹墽琛屽櫒娉ㄥ唽鏈嶅姟锛�
-    3銆佹墽琛屽櫒娉ㄥ唽鎽橀櫎鏈嶅姟锛�
-    4銆佽Е鍙戜换鍔″崟娆℃墽琛屾湇鍔★紝鏀寔浠诲姟鏍规嵁涓氬姟浜嬩欢瑙﹀彂锛�
-    
-API鏈嶅姟浣嶇疆锛歝om.xxl.job.core.biz.AdminBiz.java  
-API鏈嶅姟璇锋眰鍙傝�冧唬鐮侊細com.xxl.job.adminbiz.AdminBizTest.java
-
-#### 5.11.2 鎻愪緵缁欎笟鍔$殑API鏈嶅姟锛�
-    1銆佷换鍔″垪琛ㄦ煡璇紱
-    2銆佷换鍔℃柊澧烇紱
-    3銆佷换鍔℃洿鏂帮紱
-    4銆佷换鍔″垹闄わ紱
-    5銆佷换鍔″惎鍔紱
-    6銆佷换鍔″仠姝紱
-    7銆佷换鍔¤Е鍙戯紱
-    
-API鏈嶅姟浣嶇疆锛歝om.xxl.job.admin.controller.JobInfoController.java     
-API鏈嶅姟璇锋眰鍙傝�冧唬鐮侊細鍙弬鑰冧换鍔$晫闈㈡搷浣滅殑ajax璇锋眰銆備换浣昦jax鎺ュ彛鍧囧彲閰嶇疆鎴愪负API鏈嶅姟锛屽彧闇�鍦ㄥ緟鍚敤鐨凙PI鏈嶅姟涓婃坊鍔� 鈥淍PermissionLimit(limit = false)鈥� 娉ㄨВ鍙栨秷鐧婚檰鎬佹嫤鎴嵆鍙紱
-
-### 5.12 鎵ц鍣ˋPI鏈嶅姟
-鎵ц鍣ㄦ彁渚涗簡API鏈嶅姟锛屼緵璋冨害涓績閫夋嫨浣跨敤锛岀洰鍓嶆彁渚涚殑API鏈嶅姟鏈夛細
-
-    1銆佸績璺虫娴嬶細璋冨害涓績浣跨敤
-    2銆佸繖纰屾娴嬶細璋冨害涓績浣跨敤
-    3銆佽Е鍙戜换鍔℃墽琛岋細璋冨害涓績浣跨敤锛涙湰鍦拌繘琛屼换鍔″紑鍙戞椂锛屽彲浣跨敤璇PI鏈嶅姟妯℃嫙瑙﹀彂浠诲姟锛�
-    4銆佽幏鍙朢olling Log锛氳皟搴︿腑蹇冧娇鐢�
-    5銆佺粓姝换鍔★細璋冨害涓績浣跨敤
-    
-API鏈嶅姟浣嶇疆锛歝om.xxl.job.core.biz.ExecutorBiz     
-API鏈嶅姟璇锋眰鍙傝�冧唬鐮侊細com.xxl.job.executor.ExecutorBizTest
-
-### 5.13 鏁呴殰杞Щ & 澶辫触閲嶈瘯
-涓�娆″畬鏁翠换鍔℃祦绋嬪寘鎷�"璋冨害锛堣皟搴︿腑蹇冿級 + 鎵ц锛堟墽琛屽櫒锛�"涓や釜闃舵銆�
-    
-- "鏁呴殰杞Щ"鍙戠敓鍦ㄨ皟搴﹂樁娈碉紝鍦ㄦ墽琛屽櫒闆嗙兢閮ㄧ讲鏃讹紝濡傛灉鏌愪竴鍙版墽琛屽櫒鍙戠敓鏁呴殰锛岃绛栫暐鏀寔鑷姩杩涜Failover鍒囨崲鍒颁竴鍙版甯哥殑鎵ц鍣ㄦ満鍣ㄥ苟涓斿畬鎴愯皟搴﹁姹傛祦绋嬨��
-- "澶辫触閲嶈瘯"鍙戠敓鍦�"璋冨害 + 鎵ц"涓や釜闃舵锛屾敮鎸侀�氳繃鑷畾涔変换鍔″け璐ラ噸璇曟鏁帮紝褰撲换鍔″け璐ユ椂灏嗕細鎸夌収棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇曪紱
-
-### 5.14 鎵ц鍣ㄧ伆搴︿笂绾�
-璋冨害涓績涓庝笟鍔¤В鑰︼紝鍙渶閮ㄧ讲涓�娆″悗甯稿勾涓嶉渶瑕佺淮鎶ゃ�備絾鏄紝鎵ц鍣ㄤ腑鎵樼杩愯鐫�涓氬姟浣滀笟锛屼綔涓氫笂绾垮拰鍙樻洿闇�瑕侀噸鍚墽琛屽櫒锛屽挨鍏舵槸Bean妯″紡浠诲姟銆�
-鎵ц鍣ㄩ噸鍚彲鑳戒細涓柇杩愯涓殑浠诲姟銆備絾鏄紝XXL-JOB寰楃泭浜庤嚜寤烘墽琛屽櫒涓庤嚜寤烘敞鍐屼腑蹇冿紝鍙互閫氳繃鐏板害涓婄嚎鐨勬柟寮忥紝閬垮厤鍥犻噸鍚鑷寸殑浠诲姟涓柇鐨勯棶棰樸��
-
-姝ラ濡備笅锛�
-- 1銆佹墽琛屽櫒鏀逛负鎵嬪姩娉ㄥ唽锛屼笅绾夸竴鍗婃満鍣ㄥ垪琛紙A缁勶級锛岀嚎涓婅繍琛屽彟涓�鍗婃満鍣ㄥ垪琛紙B缁勶級锛�
-- 2銆佺瓑寰匒缁勬満鍣ㄤ换鍔¤繍琛岀粨鏉熷苟缂栬瘧涓婄嚎锛涙墽琛屽櫒娉ㄥ唽鍦板潃鏇挎崲涓篈缁勶紱
-- 3銆佺瓑寰匓缁勬満鍣ㄤ换鍔¤繍琛岀粨鏉熷苟缂栬瘧涓婄嚎锛涙墽琛屽櫒娉ㄥ唽鍦板潃鏇挎崲涓篈缁�+B缁勶紱
-鎿嶄綔缁撴潫锛�
-
-### 5.15 浠诲姟鎵ц缁撴灉璇存槑
-绯荤粺鏍规嵁浠ヤ笅鏍囧噯鍒ゆ柇浠诲姟鎵ц缁撴灉锛屽彲鍙傝�冧箣銆�
-
--- | Bean/Glue(Java) | Glue(Shell) 绛夎剼鏈换鍔�
---- | --- | ---
-鎴愬姛 | IJobHandler.SUCCESS | 0
-澶辫触 | IJobHandler.FAIL | -1锛堥潪0鐘舵�佺爜锛�
-
-### 5.16 浠诲姟瓒呮椂鎺у埗
-鏀寔璁剧疆浠诲姟瓒呮椂鏃堕棿锛屼换鍔¤繍琛岃秴鏃剁殑鎯呭喌涓嬶紝灏嗕細涓诲姩涓柇浠诲姟锛�
-
-闇�瑕佹敞鎰忕殑鏄紝浠诲姟瓒呮椂涓柇鏃朵笌浠诲姟缁堟鏈哄埗锛堝彲鏌ョ湅鈥�4.9 缁堟杩愯涓殑浠诲姟鈥濓級绫讳技锛屼篃鏄�氳繃 "interrupt" 涓柇浠诲姟锛屽洜姝や笟鍔′唬鐮侀渶瑕佸皢 "InterruptedException" 澶栨姏锛屽惁鍒欏姛鑳戒笉鍙敤銆�
-
-### 5.17 璺ㄥ钩鍙� & 璺ㄨ瑷�
-璺ㄥ钩鍙般�佽法璇█涓昏浣撶幇鍦ㄤ互涓嬩袱涓柟闈細
-- 1銆佹彁渚汮ava銆丳ython銆丳HP鈥︹�︾瓑鍗佹潵绉嶄换鍔℃ā寮忥紝鍙弬鑰冪珷鑺� 鈥�5.5 浠诲姟 "杩愯妯″紡" 鈥濓紱鐞嗚涓婂彲鎵╁睍浠绘剰璇█浠诲姟妯″紡锛�
-- 2銆佹彁渚涘熀浜嶩TTP鐨勪换鍔andler锛圔ean浠诲姟锛孞obHandler="HttpJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚汬TTP閾炬帴鍗冲彲锛屼笉闄愬埗璇█銆佸钩鍙帮紱
-
-### 5.18 浠诲姟澶辫触鍛婅
-榛樿鎻愪緵閭欢澶辫触鍛婅锛屽彲鎵╁睍鐭俊銆侀拤閽夌瓑鏂瑰紡锛屾墿灞曚唬鐮佷綅缃负 "JobFailMonitorHelper.failAlarm"锛�
-
-### 5.19 璋冨害涓績Docker闀滃儚鏋勫缓
-鍙互閫氳繃浠ヤ笅鍛戒护蹇�熸瀯寤鸿皟搴︿腑蹇冿紝骞跺惎鍔ㄨ繍琛岋紱
-```
-mvn clean package
-docker build -t xuxueli/xxl-job-admin ./xxl-job-admin
-docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin
-```
-
-### 5.20 閬垮厤浠诲姟閲嶅鎵ц   
-璋冨害瀵嗛泦鎴栬�呰�楁椂浠诲姟鍙兘浼氬鑷翠换鍔¢樆濉烇紝闆嗙兢鎯呭喌涓嬭皟搴︾粍浠跺皬姒傜巼鎯呭喌涓嬩細閲嶅瑙﹀彂锛�
-閽堝涓婅堪鎯呭喌锛屽彲浠ラ�氳繃缁撳悎 "鍗曟満璺敱绛栫暐锛堝锛氱涓�鍙般�佷竴鑷存�у搱甯岋級" + "闃诲绛栫暐锛堝锛氬崟鏈轰覆琛屻�佷涪寮冨悗缁皟搴︼級" 鏉ヨ閬匡紝鏈�缁堥伩鍏嶄换鍔¢噸澶嶆墽琛屻�� 
-
-### 5.21 鍛戒护琛屼换鍔�   
-鍘熺敓鎻愪緵閫氱敤鍛戒护琛屼换鍔andler锛圔ean浠诲姟锛�"CommandJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚涘懡浠よ鍗冲彲锛�
-濡備换鍔″弬鏁� "pwd" 灏嗕細鎵ц鍛戒护骞惰緭鍑烘暟鎹紱
-
-### 5.22  鏃ュ織鑷姩娓呯悊
-XXL-JOB鏃ュ織涓昏鍖呭惈濡備笅涓ら儴鍒嗭紝鍧囨敮鎸佹棩蹇楄嚜鍔ㄦ竻鐞嗭紝璇存槑濡備笅锛�
-- 璋冨害涓績鏃ュ織琛ㄦ暟鎹細鍙�熷姪閰嶇疆椤� "xxl.job.logretentiondays" 璁剧疆鏃ュ織琛ㄦ暟鎹繚瀛樺ぉ鏁帮紝杩囨湡鏃ュ織鑷姩娓呯悊锛涜鎯呭彲鏌ョ湅涓婃枃閰嶇疆璇存槑锛�
-- 鎵ц鍣ㄦ棩蹇楁枃浠舵暟鎹細鍙�熷姪閰嶇疆椤� "xxl.job.executor.logretentiondays" 璁剧疆鏃ュ織鏂囦欢鏁版嵁淇濆瓨澶╂暟锛岃繃鏈熸棩蹇楄嚜鍔ㄦ竻鐞嗭紱璇︽儏鍙煡鐪嬩笂鏂囬厤缃鏄庯紱
-
-
-## 鍏�佺増鏈洿鏂版棩蹇�
-### 6.1 鐗堟湰 V1.1.x锛屾柊鐗规�2015-12-05]
-**銆愪簬V1.1.x鐗堟湰锛孹XL-JOB姝e紡搴旂敤浜庢垜鍙革紝鍐呴儴瀹氬埗鍒悕涓� 鈥淔errari鈥濓紝鏂版帴鍏ュ簲鐢ㄦ帹鑽愪娇鐢ㄦ渶鏂扮増鏈��**
-- 1銆佺畝鍗曪細鏀寔閫氳繃Web椤甸潰瀵逛换鍔¤繘琛孋RUD鎿嶄綔锛屾搷浣滅畝鍗曪紝涓�鍒嗛挓涓婃墜锛�
-- 2銆佸姩鎬侊細鏀寔鍔ㄦ�佷慨鏀逛换鍔$姸鎬侊紝鍔ㄦ�佹殏鍋�/鎭㈠浠诲姟锛屽嵆鏃剁敓鏁堬紱
-- 3銆佹湇鍔A锛氫换鍔′俊鎭寔涔呭寲鍒癿ysql涓紝Job鏈嶅姟澶╃劧鏀寔闆嗙兢锛屼繚璇佹湇鍔A锛�
-- 4銆佷换鍔A锛氭煇鍙癑ob鏈嶅姟鎸傛帀锛屼换鍔′細骞虫粦鍒嗛厤缁欏叾浠栫殑鏌愪竴鍙板瓨娲绘湇鍔★紝鍗充娇鎵�鏈夋湇鍔℃寕鎺夛紝閲嶅惎鏃舵垨琛ュ伩鎵ц涓㈠け浠诲姟锛�
-- 5銆佷竴涓换鍔″彧浼氬湪鍏朵腑涓�鍙版湇鍔″櫒涓婃墽琛岋紱
-- 6銆佷换鍔′覆琛屾墽琛岋紱
-- 7銆佹敮鎸佽嚜瀹氫箟鍙傛暟锛�
-- 8銆佹敮鎸佽繙绋嬩换鍔℃墽琛岀粓姝紱
-
-### 6.2 鐗堟湰 V1.2.x锛屾柊鐗规�2016-01-17]
-- 1銆佹敮鎸佷换鍔″垎缁勶紱
-- 2銆佹敮鎸佲�滄湰鍦颁换鍔♀�濄�佲�滆繙绋嬩换鍔♀�濓紱
-- 3銆佸簳灞傞�氳鏀寔涓ょ鏂瑰紡锛孲ervlet鏂瑰紡 + JETTY鏂瑰紡锛�
-- 4銆佹敮鎸佲�滀换鍔℃棩蹇椻�濓紱
-- 5銆佹敮鎸佲�滀覆琛屾墽琛屸�濓紝骞惰鎵ц锛�
-	
-	璇存槑锛歏1.2鐗堟湰灏嗙郴缁熸灦鏋勬寜鍔熻兘鎷嗗垎涓猴細
-	
-		- 璋冨害妯″潡锛堣皟搴︿腑蹇冿級锛氳礋璐g鐞嗚皟搴︿俊鎭紝鎸夌収璋冨害閰嶇疆鍙戝嚭璋冨害璇锋眰锛�
-		- 鎵ц妯″潡锛堟墽琛屽櫒锛夛細璐熻矗鎺ユ敹璋冨害璇锋眰骞舵墽琛屼换鍔¢�昏緫锛�
-		- 閫氳妯″潡锛氳礋璐h皟搴︽ā鍧楀拰浠诲姟妯″潡涔嬮棿鐨勪俊鎭�氳锛�
-	浼樼偣锛�
-	
-		- 瑙h�︼細浠诲姟妯″潡鎻愪緵浠诲姟鎺ュ彛锛岃皟搴︽ā鍧楃淮鎶よ皟搴︿俊鎭紝涓氬姟鐩镐簰鐙珛锛�
-		- 楂樻墿灞曟�э紱
-		- 绋冲畾鎬э紱
-
-### 6.3 鐗堟湰 V1.3.0锛屾柊鐗规�2016-05-19]
-- 1銆侀仐寮冣�滄湰鍦颁换鍔♀�濇ā寮忥紝鎺ㄨ崘浣跨敤鈥滆繙绋嬩换鍔♀�濓紝鏄撲簬绯荤粺瑙h�︼紝浠诲姟瀵瑰簲鐨凧obHandler缁熺О涓衡�滄墽琛屽櫒鈥濓紱
-- 2銆侀仐寮冣�渟ervlet鈥濇柟寮忓簳灞傜郴缁熼�氳锛屾帹鑽愪娇鐢↗ETTY鏂瑰紡锛岃皟搴�+鍥炶皟鍙屽悜閫氳锛岄噸鏋勯�氳閫昏緫锛�
-- 3銆乁I浜や簰浼樺寲锛氬乏渚ц彍鍗曞睍寮�鐘舵�佷紭鍖栵紝鑿滃崟椤归�変腑鐘舵�佷紭鍖栵紝浠诲姟鍒楄〃鎵撳紑琛ㄦ牸鏈夊帇缂╀紭鍖栵紱
-- 4銆併�愰噸瑕併�戔�滄墽琛屽櫒鈥濈粏鍒嗕负锛欱EAN銆丟LUE涓ょ寮�鍙戞ā寮忥紝绠�浠嬭涓嬫枃锛�
-	
-	鈥滄墽琛屽櫒鈥� 妯″紡绠�浠嬶細
-		- BEAN妯″紡鎵ц鍣細姣忎釜鎵ц鍣ㄩ兘鏄疭pring鐨勪竴涓狟ean瀹炰緥锛孹XL-JOB閫氳繃娉ㄨВ@JobHandler璇嗗埆鍜岃皟搴︽墽琛屽櫒锛�
-		 -GLUE妯″紡鎵ц鍣細姣忎釜鎵ц鍣ㄥ搴斾竴娈典唬鐮侊紝鍦ㄧ嚎Web缂栬緫鍜岀淮鎶わ紝鍔ㄦ�佺紪璇戠敓鏁堬紝鎵ц鍣ㄨ礋璐e姞杞紾LUE浠g爜鍜屾墽琛岋紱
-
-### 6.4 鐗堟湰 V1.3.1锛屾柊鐗规�2016-05-23]
-- 1銆佹洿鏂伴」鐩洰褰曠粨鏋勶細
-	- /xxl-job-admin -------------------- 銆愯皟搴︿腑蹇冦�戯細璐熻矗绠$悊璋冨害淇℃伅锛屾寜鐓ц皟搴﹂厤缃彂鍑鸿皟搴﹁姹傦紱
-	- /xxl-job-core ----------------------- 鍏叡渚濊禆
-	- /xxl-job-executor-example ------ 銆愭墽琛屽櫒銆戯細璐熻矗鎺ユ敹璋冨害璇锋眰骞舵墽琛屼换鍔¢�昏緫锛�
-	- /db ---------------------------------- 寤鸿〃鑴氭湰
-	- /doc --------------------------------- 鐢ㄦ埛鎵嬪唽
-- 2銆佸湪鏂扮殑鐩綍缁撴瀯涓婏紝鍗囩骇浜嗙敤鎴锋墜鍐岋紱
-- 3銆佷紭鍖栦簡涓�浜涗氦浜掑拰UI锛�
-
-### 6.5 鐗堟湰 V1.3.2锛屾柊鐗规�2016-05-28]
-- 1銆佽皟搴﹂�昏緫杩涜浜嬪姟鍖呰9锛�
-- 2銆佹墽琛屽櫒寮傛鍥炶皟鎵ц鏃ュ織锛�
-- 3銆併�愰噸瑕併�戝湪 鈥滆皟搴︿腑蹇冣�� 鏀寔HA鐨勫熀纭�涓婏紝鎵╁睍鎵ц鍣ㄧ殑Failover鏀寔锛屾敮鎸侀厤缃鎵ц鏈熷湴鍧�锛�
-
-### 6.6 鐗堟湰 V1.4.0 鏂扮壒鎬2016-07-24]
-- 1銆佷换鍔′緷璧�: 閫氳繃浜嬩欢瑙﹀彂鏂瑰紡瀹炵幇, 浠诲姟鎵ц鎴愬姛骞跺洖璋冩椂浼氫富鍔ㄨЕ鍙戜竴娆″瓙浠诲姟鐨勮皟搴�, 澶氫釜瀛愪换鍔$敤閫楀彿鍒嗛殧;
-- 2銆佹墽琛屽櫒搴曞眰瀹炵幇浠g爜杩涜閲嶅害閲嶆瀯, 浼樺寲搴曞眰寤鸿〃鑴氭湰;
-- 3銆佹墽琛屽櫒涓换鍔$嚎绋嬪垎缁勯�昏緫浼樺寲: 涔嬪墠鏍规嵁鎵ц鍣↗obHandler杩涜绾跨▼鍒嗙粍,褰撳涓换鍔″鐢↗obhanlder浼氬鑷寸浉浜掗樆濉炪�傜幇鏀逛负鏍规嵁璋冨害涓績浠诲姟杩涜浠诲姟绾跨▼鍒嗙粍,浠诲姟涓庝换鍔℃墽琛岀浉浜掗殧绂�;
-- 4銆佹墽琛屽櫒璋冨害閫氳鏂规浼樺寲, 閫氳繃Hex + HC瀹炵幇寤鸿RPC閫氳鍗忚, 浼樺寲浜嗛�氳鍙傛暟鐨勭淮鎶ゅ拰瑙f瀽娴佺▼;
-- 5銆佽皟搴︿腑蹇�, 鏂板缓/缂栬緫浠诲姟, 鐣岄潰灞炴�ц皟鏁�: 
-    - 5.1銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "浠诲姟鍚岼obName"灞炴�� ,璇ュ睘鎬ф敼涓虹郴缁熻嚜鍔ㄧ敓鎴�: 璇ュ瓧娈典箣鍓嶄富瑕佺敤浜庡湪 "璋冨害涓績" 鍞竴鏍囩ず涓�涓换鍔�, 鐜板疄鎰忎箟涓嶅ぇ, 鍥犳璁″垝娣″寲鎺夎瀛楁,鏀逛负绯荤粺鐢熸垚UUID,浠庤�岀畝鍖栦换鍔℃柊寤虹殑鎿嶄綔;
-    - 5.2銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "GLUE妯″紡" 澶嶉�夋浣嶇疆璋冩暣, 鏀逛负璐磋繎"JobHandler"杈撳叆妗嗗彸渚�;
-    - 5.3銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "鎶ヨ闃堝��" 灞炴��;
-    - 5.4銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "瀛愪换鍔ey" 灞炴��, 姣忎釜浠诲姟鍏ㄥ眬浠诲姟Key鍙互浠庝换鍔″垪琛ㄨ幏鍙�, 褰撴湰浠诲姟鎵ц缁撴潫涓旀垚鍔熷悗, 灏嗕細鏍规嵁瀛愪换鍔ey鍖归厤瀛愪换鍔″苟涓诲姩瑙﹀彂涓�娆″瓙浠诲姟鎵ц;
-- 6銆侀棶棰樹慨澶�:
-    - 6.1銆佹墽琛屽櫒jetty鍏抽棴浼樺寲,瑙e喅涓�澶勫彲鑳藉鑷磈etty鏃犳硶鍏抽棴鐨勯棶棰�;
-    - 6.2銆佹墽琛屽櫒浠诲姟缁堟鏃�,鎵ц闃熷垪鍥炶皟浼樺寲,瑙e喅涓�澶勫鑷翠换鍔℃棤娉曞洖璋冪殑闂锛�
-    - 6.3銆佽皟搴︿腑蹇冧腑鍒楄〃鍒嗛〉鍙傛暟浼樺寲,瑙e喅涓�澶勫洜鏈嶅姟鍣ㄩ檺鍒秔ost闀垮害鑰屽紩璧风殑闂;
-    - 6.4銆佹墽琛屽櫒Jobhandler娉ㄨВ浼樺寲,瑙e喅涓�澶勫洜浜嬪姟浠g悊瀵艰嚧鐨勫鍣ㄦ棤娉曞姞杞絁obHandler鐨勯棶棰�;
-    - 6.5銆佽繙绋嬭皟搴︿紭鍖�,绂佺敤retry绛栫暐,瑙e喅涓�澶勫彲鑳藉鑷撮噸澶嶈皟鐢ㄧ殑闂;
-
-Tips: 鍘嗗彶鐗堟湰(V1.3.x)鐩墠宸茬粡Release鑷崇ǔ瀹氱増鏈�, 杩涘叆缁存姢闃舵, 鍦板潃瑙佸垎鏀� [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) 銆傛柊鐗规�у皢浼氬湪master鍒嗘敮鎸佺画鏇存柊銆�
-
-### 6.7 鐗堟湰 V1.4.1 鏂扮壒鎬2016-09-06]
-- 1銆侀」鐩垚鍔熸帹閫乵aven涓ぎ浠撳簱, 涓ぎ浠撳簱鍦板潃浠ュ強渚濊禆濡備笅: 
-    ```
-    <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
-    <dependency>
-        <groupId>com.xuxueli</groupId>
-        <artifactId>xxl-job-core</artifactId>
-        <version>${鏈�鏂扮ǔ瀹氱増}</version>
-    </dependency>
-    ```
-- 2銆佷负閫傞厤涓ぎ浠撳簱瑙勫垯, 椤圭洰groupId浠巆om.xxl鏀逛负com.xuxueli銆�
-- 3銆佺郴缁熺増鏈笉鍦ㄧ淮鎶ゅ湪椤圭洰璺焢om涓�,鍚勪釜瀛愭ā鍧楀崟鐙厤缃増鏈厤缃�,瑙e喅瀛愭ā鍧楁棤娉曞崟鐙紪璇戠殑闂;
-- 4銆佸簳灞俁PC閫氳,浼犺緭鏁版嵁鐨勫瓧鑺傞暱搴︾粺璁¤鍒欎紭鍖�,鍙妭鐪�50%鏁版嵁浼犺緭閲�;
-- 5銆両JobHandler鍙栨秷浠诲姟杩斿洖鍊�,鍘熼�氳繃杩斿洖鍊煎垽鏂墽琛岀姸鎬�,閫昏緫鏀逛负:榛樿浠诲姟鎵ц鎴愬姛,浠呭湪鎹曡幏寮傚父鏃惰瀹氫换鍔℃墽琛屽け璐ャ��
-- 6銆佺郴缁熷叕鍏卞脊妗嗗姛鑳�,鎻掍欢鍖�;
-- 7銆佸簳灞傝〃缁撴瀯,琛ㄦ槑缁熶竴澶у啓;
-- 8銆佽皟搴︿腑蹇�,寮傚父澶勭悊鍣↗SON鍝嶅簲鐨凜ontentType淇敼,淇娴忚鍣ㄤ笉璇嗗埆鐨勯棶棰�;
-
-### 6.8 鐗堟湰 V1.4.2 鏂扮壒鎬2016-09-29]
-- 1銆佹帹閫佹柊鐗堟湰 V1.4.2 鑷充腑澶粨搴�, 澶х増鏈� V1.4 杩涘叆缁存姢闃舵;
-- 2銆佷换鍔℃柊澧炴椂,浠诲姟鍒楄〃鍋忕Щ闂淇;
-- 3銆佷慨澶嶄竴澶勫洜bootstrap涓嶆敮鎸佹ā鎬佹閲嶅彔鑰屽鑷寸殑鏍峰紡閿欎贡鐨勯棶棰�, 鍦ㄤ换鍔$紪杈戞椂浼氬嚭鐜拌闂;
-- 4銆佽皟搴﹁秴鏃跺拰Handler鍖归厤涓嶅埌鏃�,璋冨害鐘舵�佷紭鍖�;
-- 5銆佸洜catch寮傚父,瀵艰嚧浠诲姟涓嶅彲缁堟鐨勯棶棰�,缁欏嚭瑙e喅鏂规, 瑙佹枃妗�;
-
-### 6.9 鐗堟湰 V1.5.0 鐗规�2016-11-13]
-- 1銆佷换鍔℃敞鍐�: 鎵ц鍣ㄤ細鍛ㄦ湡鎬ц嚜鍔ㄦ敞鍐屼换鍔�, 璋冨害涓績灏嗕細鑷姩鍙戠幇娉ㄥ唽鐨勪换鍔″苟瑙﹀彂鎵ц銆�
-- 2銆�"鎵ц鍣�" 鏂板鍙傛暟 "AppName" : 鏄瘡涓墽琛屽櫒闆嗙兢鐨勫敮涓�鏍囩ずAppName, 骞跺懆鏈熸�т互AppName涓哄璞¤繘琛岃嚜鍔ㄦ敞鍐屻��
-- 3銆佽皟搴︿腑蹇冩柊澧炴爮鐩� "鎵ц鍣ㄧ鐞�" : 绠$悊鍦ㄧ嚎鐨勬墽琛屽櫒, 閫氳繃灞炴�ppName鑷姩鍙戠幇娉ㄥ唽鐨勬墽琛屽櫒銆傚彧鏈夎绠$悊鐨勬墽琛屽櫒鎵嶅厑璁歌浣跨敤;
-- 4銆�"浠诲姟缁�"灞炴�ф敼涓�"鎵ц鍣�": 姣忎釜浠诲姟闇�瑕佺粦瀹氭寚瀹氱殑鎵ц鍣�, 璋冨害鍦板潃閫氳繃缁戝畾鐨勬墽琛屽櫒鑾峰彇;
-- 5銆佹姏寮�"浠诲姟鏈哄櫒"灞炴��: 閫氳繃浠诲姟缁戝畾鐨勬墽琛屽櫒, 鑷姩鍙戠幇娉ㄥ唽鐨勮繙绋嬫墽琛屽櫒鍦板潃骞惰Е鍙戣皟搴﹁姹傘��
-- 6銆�"鍏叡渚濊禆"涓柊澧濪BGlueLoader,鍩轰簬鍘熺敓jdbc瀹炵幇GLUE婧愮爜鐨勫姞杞藉櫒,鍑忓皯绗笁鏂逛緷璧�(mybatis,spring-orm绛�);绮剧畝鍜屼紭鍖栨墽琛屽櫒娴嬮厤缃�(閽堝GLUE浠诲姟),闄嶄綆涓婃墜闅惧害;
-- 7銆佽〃缁撴瀯璋冩暣,搴曞眰閲嶆瀯浼樺寲;
-- 8銆�"璋冨害涓績"鑷姩娉ㄥ唽鍜屽彂鐜�,failover: 璋冨害涓績鍛ㄦ湡鎬ц嚜鍔ㄦ敞鍐�, 浠诲姟鍥炶皟鏃跺彲浠ユ劅鐭ュ湪绾跨殑鎵�鏈夎皟搴︿腑蹇冨湴鍧�, 閫氳繃failover鐨勬柟寮忚繘琛屼换鍔″洖璋�,閬垮厤鍥炶皟鍗曠偣椋庨櫓銆�
-
-### 6.10 鐗堟湰 V1.5.1 鐗规�2016-11-13]
-- 1銆佸簳灞備唬鐮侀噸鏋勫拰閫昏緫浼樺寲锛孭OM娓呯悊浠ュ強CleanCode锛�
-- 2銆丼ervlet/JSP Spec璁惧畾涓�3.0/2.2
-- 3銆丼pring鍗囩骇鑷�3.2.17.RELEASE鐗堟湰锛�
-- 4銆丣etty鍗囩骇鐗堟湰鑷�8.2.0.v20160908锛�
-- 5銆佸凡鎺ㄩ�乂1.5.0鍜孷1.5.1鑷矼aven涓ぎ浠撳簱锛�
-
-### 6.10 鐗堟湰 V1.5.2 鐗规�2017-02-28]
-- 1銆両P宸ュ叿绫昏幏鍙朓P閫昏緫浼樺寲锛孖P闈欐�佺紦瀛橈紱
-- 2銆佹墽琛屽櫒銆佽皟搴︿腑蹇冿紝鍧囨敮鎸佽嚜瀹氫箟娉ㄥ唽IP鍦板潃锛涜В鍐虫満鍣ㄥ缃戝崱鏃堕敊璇綉鍗℃敞鍐岀殑鎯呭喌锛�
-- 3銆佷换鍔¤法澶╂墽琛屾椂鐢熸垚澶氫唤鏃ュ織鏂囦欢鐨勯棶棰樹慨澶嶏紱
-- 4銆佸簳灞傛棩蹇楀簳灞傛棩蹇楄皟鏁达紝闈炴晱鎰熸棩蹇條evel璋冩暣涓篸ebug锛�
-- 5銆佸崌绾ф暟鎹簱杩炴帴姹燾3p0鐗堟湰锛�
-- 6銆佹墽琛屽櫒log4j閰嶇疆浼樺寲锛屽幓闄ゆ棤鏁堝睘鎬э紱
-- 7銆佸簳灞備唬鐮侀噸鏋勫拰閫昏緫浼樺寲浠ュ強CleanCode锛�
-- 8銆丟LUE渚濊禆娉ㄥ叆閫昏緫浼樺寲锛屾敮鎸佸埆鍚嶆敞鍏ワ紱
-
-### 6.11 鐗堟湰 V1.6.0 鐗规�2017-03-13]
-- 1銆侀�氳鏂规鍗囩骇锛屽師鍩轰簬HEX鐨勯�氳妯″瀷璋冩暣涓哄熀浜嶩TTP鐨凚-RPC鐨勯�氳妯″瀷锛�
-- 2銆佹墽琛屽櫒鏀寔鎵嬪姩璁剧疆鎵ц鍦板潃鍒楄〃锛屾彁渚涘紑鍏冲垏鎹娇鐢ㄦ敞鍐屽湴鍧�杩樻槸鎵嬪姩璁剧疆鐨勫湴鍧�锛�
-- 3銆佹墽琛屽櫒璺敱瑙勫垯锛氱涓�涓�佹渶鍚庝竴涓�佽疆璇€�侀殢鏈恒�佷竴鑷存�ASH銆佹渶涓嶇粡甯镐娇鐢ㄣ�佹渶杩戞渶涔呮湭浣跨敤銆佹晠闅滆浆绉伙紱
-- 4銆佽鑼冪嚎绋嬫ā鍨嬬粺涓�锛岀粺涓�绾跨▼閿�姣佹柟妗�(閫氳繃listener鎴杝top鏂规硶锛屽鍣ㄩ攢姣佹椂閿�姣佺嚎绋嬶紱Daemon鏂瑰紡鏈夋椂涓嶅お鐞嗘兂)锛�
-- 5銆佽鑼冪郴缁熼厤缃暟鎹紝閫氳繃閰嶇疆鏂囦欢缁熶竴绠$悊锛�
-- 6銆丆leanCode锛屾竻鐞嗘棤鏁堢殑鍘嗗彶鍙傛暟锛�
-- 7銆佸簳灞傛墿灞曟暟鎹粨鏋勪互鍙婄浉鍏宠〃缁撴瀯璋冩暣锛�
-- 8銆佹柊寤轰换鍔¢粯璁や负闈炶繍琛岀姸鎬侊紱
-- 9銆丟LUE妯″紡浠诲姟瀹炰緥鏇存柊閫昏緫浼樺寲锛屽師鏍规嵁瓒呮椂鏃堕棿鏇存柊鏀逛负鏍规嵁鐗堟湰鍙锋洿鏂帮紝婧愮爜鍙樺姩鐗堟湰鍙峰姞涓�锛�
-
-### 6.12 鐗堟湰 V1.6.1 鐗规�2017-03-25]
-- 1銆丷olling鏃ュ織锛�
-- 2銆乄ebIDE浜や簰閲嶆瀯锛�
-- 3銆侀�氳澧炲己鏍¢獙锛屾湁鏁堣繃婊ら潪姝e父璇锋眰锛�
-- 4銆佹潈闄愬寮烘牎楠岋紝閲囩敤鍔ㄦ�佺櫥褰昑OKEN锛堟帹鑽愭帴鍏ュ唴閮⊿SO锛夛紱
-- 5銆佹暟鎹簱閰嶇疆浼樺寲锛岃В鍐充贡鐮侀棶棰橈紱
-
-### 6.13 鐗堟湰 V1.6.2 鐗规�2017-04-25]
-- 1銆佽繍琛屾姤琛細鏀寔瀹炴椂鏌ョ湅杩愯鏁版嵁锛屽浠诲姟鏁伴噺銆佽皟搴︽鏁般�佹墽琛屽櫒鏁伴噺绛夛紱浠ュ強璋冨害鎶ヨ〃锛屽璋冨害鏃ユ湡鍒嗗竷鍥撅紝璋冨害鎴愬姛鍒嗗竷鍥剧瓑锛�
-- 2銆丣obHandler鏀寔璁剧疆浠诲姟杩斿洖鍊硷紝鍦ㄤ换鍔¢�昏緫涓彲浠ユ柟渚跨殑鎺у埗浠诲姟鎵ц缁撴灉锛�
-- 3銆佽祫婧愯矾寰勫寘鍚┖鏍兼垨涓枃鏃惰祫婧愭枃浠舵棤娉曞姞杞芥椂锛屾棤娉曞噯纭煡鐪嬪紓甯镐俊鎭殑闂澶勭悊銆�
-- 4銆佽矾鐢辩瓥瓒婁紭鍖栵細寰幆鍜孡FU璺敱绛栫暐璁℃暟鍣ㄨ嚜澧炴棤涓婇檺闂鍜岄娆¤矾鐢卞帇鍔涢泦涓湪棣栧彴鏈哄櫒鐨勯棶棰樹慨澶嶏紱
-
-### 6.14 鐗堟湰 V1.7.0 鐗规�2017-05-02]
-- 1銆佽剼鏈换鍔★細鏀寔浠LUE妯″紡寮�鍙戝拰杩愯鑴氭湰浠诲姟锛屽寘鎷琒hell銆丳ython鍜孏roovy绛夌被鍨嬭剼鏈�;
-- 2銆佹柊澧瀞pring-boot绫诲瀷鎵ц鍣╡xample椤圭洰锛�
-- 3銆佸崌绾etty鐗堟湰鑷�9.2锛�
-- 4銆佷换鍔¤繍琛屾棩蹇楃Щ闄og4j缁勪欢渚濊禆锛屾敼涓哄簳灞傝嚜涓诲疄鐜帮紝浠庤�屽彇娑堜簡瀵规棩蹇楃粍浠剁殑渚濊禆闄愬埗锛�
-- 5銆佹墽琛屽櫒绉婚櫎GlueLoader渚濊禆锛屾敼涓烘帹閫佹柟寮忓疄鐜帮紝浠庤�孏LUE婧愮爜鍔犺浇涓嶅啀渚濊禆JDBC锛�
-- 6銆佺櫥褰曟嫤鎴猂edirect鏃惰幏鍙栭」鐩悕锛岃В鍐抽潪鏍规嵁鐩綍鍙戝竷鏃惰烦杞�404闂锛�
-
-### 6.15 鐗堟湰 V1.7.1 鐗规�2017-05-08]
-- 1銆佽繍琛屾棩蹇楄鍐欑紪鐮佺粺涓�涓篣TF-8锛岃В鍐硍indows鐜涓嬫棩蹇椾贡鐮侀棶棰橈紱
-- 2銆侀�氳瓒呮椂鏃堕棿闄愬畾涓�10s锛岄伩鍏嶅紓甯告儏鍐典笅璋冨害绾跨▼鍗犵敤锛�
-- 3銆佹墽琛屽櫒锛宻erver鍚姩銆侀攢姣佸拰娉ㄥ唽閫昏緫璋冩暣锛�
-- 4銆丣ettyServer鍏抽棴閫昏緫浼樺寲锛屼慨澶嶆墽琛屽櫒鏃犳硶姝e父鍏抽棴瀵艰嚧绔彛鍗犵敤鍜岄绻佹墦鍗癱3p0鏃ュ織鐨勯棶棰橈紱
-- 5銆丣obHandler涓紑鍚瓙绾跨▼鏃讹紝鏀寔瀛愮嚎绋嬭緭鍑烘墽琛屾棩蹇楀苟閫氳繃Rolling鏌ョ湅銆�
-- 6銆佷换鍔℃棩蹇楁竻鐞嗗姛鑳斤紱
-- 7銆佸脊妗嗙粍浠剁粺涓�鏇挎崲涓簂ayer锛�
-- 8銆佸崌绾uartz鐗堟湰鑷�2.3.0锛�
-
-### 6.16 鐗堟湰 V1.7.2 鐗规�2017-05-17]
-- 1銆侀樆濉炲鐞嗙瓥鐣ワ細璋冨害杩囦簬瀵嗛泦鎵ц鍣ㄦ潵涓嶅強澶勭悊鏃剁殑澶勭悊绛栫暐锛岀瓥鐣ュ寘鎷細鍗曟満涓茶锛堥粯璁わ級銆佷涪寮冨悗缁皟搴︺�佽鐩栦箣鍓嶈皟搴︼紱
-- 2銆佸け璐ュ鐞嗙瓥鐣ワ紱璋冨害澶辫触鏃剁殑澶勭悊绛栫暐锛岀瓥鐣ュ寘鎷細澶辫触鍛婅锛堥粯璁わ級銆佸け璐ラ噸璇曪紱
-- 3銆侀�氳鏃堕棿鎴宠秴鏃舵椂闂磋皟鏁翠负180s锛�
-- 4銆佹墽琛屽櫒涓庢暟鎹簱褰诲簳瑙h�︼紝浣嗘槸鎵ц鍣ㄩ渶瑕侀厤缃皟搴︿腑蹇冮泦缇ゅ湴鍧�銆傝皟搴︿腑蹇冩彁渚汚PI渚涙墽琛屽櫒鍥炶皟鍜屽績璺虫敞鍐屾湇鍔★紝鍙栨秷璋冨害涓績鍐呴儴jetty锛屽績璺冲懆鏈熻皟鏁翠负30s锛屽績璺冲け鏁堜负涓夊�嶅績璺筹紱
-- 5銆佹墽琛屽弬鏁扮紪杈戞椂涓㈠け闂淇锛�
-- 6銆佹柊澧炰换鍔℃祴璇旸emo锛屾柟渚垮湪寮�鍙戞椂杩涜浠诲姟閫昏緫娴嬭瘯锛�
-
-### 6.17 鐗堟湰 V1.8.0 鐗规�2017-07-17]
-- 1銆佷换鍔ron鏇存柊閫昏緫浼樺寲锛屾敼涓簉escheduleJob锛屽悓鏃堕槻姝ron閲嶅璁剧疆锛�
-- 2銆丄PI鍥炶皟鏈嶅姟澶辫触鐘舵�佺爜浼樺寲锛屾柟渚块棶棰樻帓鏌ワ紱
-- 3銆乆xlJobLogger鐨勬棩蹇楀鍙傛暟鏀寔锛�
-- 4銆佽矾鐢辩瓥鐣ユ柊澧� "蹇欑杞Щ" 妯″紡锛氭寜鐓ч『搴忎緷娆¤繘琛岀┖闂叉娴嬶紝绗竴涓┖闂叉娴嬫垚鍔熺殑鏈哄櫒閫夊畾涓虹洰鏍囨墽琛屽櫒骞跺彂璧疯皟搴︼紱
-- 5銆佽矾鐢辩瓥鐣ヤ唬鐮侀噸鏋勶紱
-- 6銆佹墽琛屽櫒閲嶅娉ㄥ唽闂淇锛�
-- 7銆佷换鍔$嚎绋嬭疆绌�30娆″悗鑷姩閿�姣侊紝闄嶄綆浣庨浠诲姟鐨勬棤鏁堢嚎绋嬫秷鑰椼��
-- 8銆佹墽琛屽櫒浠诲姟鎵ц缁撴灉鎵归噺鍥炶皟锛岄檷浣庡洖璋冮鐜囨彁鍗囨墽琛屽櫒鎬ц兘锛�
-- 9銆乻pringboot鐗堟湰鎵ц鍣紝鍙栨秷XML閰嶇疆锛屾敼涓虹被閰嶇疆鏂瑰紡锛�
-- 10銆佹墽琛屾棩蹇楋紝鏀寔鏍规嵁杩愯 "鐘舵��" 绛涢�夋棩蹇楋紱
-- 11銆佽皟搴︿腑蹇冧换鍔℃敞鍐屾娴嬮�昏緫浼樺寲锛�
-
-### 6.18 鐗堟湰 V1.8.1 鐗规�2017-07-30]
-- 1銆佸垎鐗囧箍鎾换鍔★細鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屼换鍔¤矾鐢辩瓥鐣ラ�夋嫨"鍒嗙墖骞挎挱"鎯呭喌涓嬶紝涓�娆′换鍔¤皟搴﹀皢浼氬箍鎾Е鍙戦泦缇や腑鎵�鏈夋墽琛屽櫒鎵ц涓�娆′换鍔★紝鍙牴鎹垎鐗囧弬鏁板鐞嗗垎鐗囦换鍔★紱
-- 2銆佸姩鎬佸垎鐗囷細鍒嗙墖骞挎挱浠诲姟浠ユ墽琛屽櫒涓虹淮搴﹁繘琛屽垎鐗囷紝鏀寔鍔ㄦ�佹墿瀹规墽琛屽櫒闆嗙兢浠庤�屽姩鎬佸鍔犲垎鐗囨暟閲忥紝鍗忓悓杩涜涓氬姟澶勭悊锛涘湪杩涜澶ф暟鎹噺涓氬姟鎿嶄綔鏃跺彲鏄捐憲鎻愬崌浠诲姟澶勭悊鑳藉姏鍜岄�熷害銆�
-- 3銆佹墽琛屽櫒JobHandler绂佹鍛藉悕鍐茬獊锛�
-- 4銆佹墽琛屽櫒闆嗙兢鍦板潃鍒楄〃杩涜鑷劧鎺掑簭锛�
-- 5銆佽皟搴︿腑蹇冿紝DAO灞備唬鐮佺簿绠�浼樺寲骞朵笖鏂板娴嬭瘯鐢ㄤ緥瑕嗙洊锛�
-- 6銆佽皟搴︿腑蹇傾PI鏈嶅姟鏀逛负鑷爺RPC褰㈠紡锛岀粺涓�搴曞眰閫氳妯″瀷锛�
-- 7銆佹柊澧炶皟搴︿腑蹇傾PI鏈嶅姟娴嬭瘯Demo锛屾柟渚垮湪璋冨害涓績API鎵╁睍鍜屾祴璇曪紱
-- 8銆佷换鍔″垪琛ㄩ〉浜や簰浼樺寲锛屾洿鎹㈡墽琛屽櫒鍒嗙粍鏃惰嚜鍔ㄥ埛鏂颁换鍔″垪琛紝鏂板缓浠诲姟鏃堕粯璁ゅ畾浣嶅湪褰撳墠鎵ц鍣ㄤ綅缃紱
-- 9銆佽闂护鐗岋紙accessToken锛夛細涓烘彁鍗囩郴缁熷畨鍏ㄦ�э紝璋冨害涓績鍜屾墽琛屽櫒杩涜瀹夊叏鎬ф牎楠岋紝鍙屾柟AccessToken鍖归厤鎵嶅厑璁搁�氳锛�
-- 10銆乻pringboot鐗堟湰鎵ц鍣紝鍗囩骇鑷�1.5.6.RELEASE鐗堟湰锛�
-- 11銆佺粺涓�maven渚濊禆鐗堟湰绠$悊锛�
-
-### 6.19 鐗堟湰 V1.8.2 鐗规�2017-09-04]
-- 1銆侀」鐩富椤垫惌寤猴細鎻愪緵涓嫳鏂囨枃妗o細https://www.xuxueli.com/xxl-job 
-- 2銆丣Final鎵ц鍣⊿ample绀轰緥椤圭洰锛�
-- 3銆佷簨浠惰Е鍙戯細闄や簡"Cron鏂瑰紡"鍜�"浠诲姟渚濊禆鏂瑰紡"瑙﹀彂浠诲姟鎵ц涔嬪锛屾敮鎸佸熀浜庝簨浠剁殑瑙﹀彂浠诲姟鏂瑰紡銆傝皟搴︿腑蹇冩彁渚涜Е鍙戜换鍔″崟娆℃墽琛岀殑API鏈嶅姟锛屽彲鏍规嵁涓氬姟浜嬩欢鐏垫椿瑙﹀彂銆�
-- 4銆佹墽琛屽櫒鎽橀櫎锛氭墽琛屽櫒閿�姣佹椂锛屼富鍔ㄩ�氱煡璋冨害涓績骞舵憳闄ゅ搴旀墽琛屽櫒鑺傜偣锛屾彁楂樻墽琛屽櫒鐘舵�佹劅鐭ョ殑鏃舵晥鎬с��
-- 5銆佹墽琛屽櫒鎵嬪姩璁剧疆IP鏃跺皢浼氱粦瀹欻ost锛�
-- 6銆佽鑼冮」鐩洰褰曪紝鏂逛究鎵╁睍澶氭墽琛屽櫒锛�
-- 7銆佽В鍐虫墽琛屽櫒鍥炶皟URL涓嶆敮鎸侀厤缃瓾TTPS鏃堕棶棰橈紱
-- 8銆佹墽琛屽櫒鍥炶皟绾跨▼閿�姣佸墠, 鎵归噺鍥炶皟闃熷垪涓暟鎹紝闃叉浠诲姟缁撴灉涓㈠け锛�
-- 9銆佽皟搴︿腑蹇冧换鍔$洃鎺х嚎绋嬮攢姣佹椂锛屾壒閲忓澶辫触浠诲姟鍛婅锛岄槻姝㈠憡璀︿俊鎭涪澶憋紱
-- 10銆佷换鍔℃棩蹇楁枃浠惰矾寰勬椂闂存埑鏍煎紡鍖栨椂SimpleDateFormat骞跺彂闂瑙e喅锛�
-
-### 6.20 鐗堟湰 V1.9.0 鐗规�2017-12-29]
-- 1銆佹柊澧濶utz鎵ц鍣⊿ample绀轰緥椤圭洰锛�
-- 2銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(NodeJS) "锛屾敮鎸丯odeJS鑴氭湰浠诲姟锛�
-- 3銆佽剼鏈换鍔hell銆丳ython鍜孨odejs绛夋敮鎸佽幏鍙栧垎鐗囧弬鏁帮紱
-- 4銆佸け璐ラ噸璇曪紝瀹屾暣鏀寔锛氳皟搴︿腑蹇冭皟搴﹀け璐ヤ笖鍚敤"澶辫触閲嶈瘯"绛栫暐鏃讹紝灏嗕細鑷姩閲嶈瘯涓�娆★紱鎵ц鍣ㄦ墽琛屽け璐ヤ笖鍥炶皟澶辫触閲嶈瘯鐘舵�侊紙鏂板澶辫触閲嶈瘯鐘舵�佽繑鍥炲�硷級鏃讹紝涔熷皢浼氳嚜鍔ㄩ噸璇曚竴娆★紱
-- 5銆佸け璐ュ憡璀︾瓥鐣ユ墿灞曪細榛樿鎻愪緵閭欢澶辫触鍛婅锛屽彲鎵╁睍鐭俊绛夛紝鎵╁睍浠g爜浣嶇疆涓� "JobFailMonitorHelper.failAlarm"锛�
-- 6銆佹墽琛屽櫒绔彛鏀寔鑷姩鐢熸垚(灏忎簬绛変簬0鏃�)锛岄伩鍏嶇鍙e畾涔夊啿绐侊紱
-- 7銆佽皟搴︽姤琛ㄤ紭鍖栵紝鏀寔鏃堕棿鍖洪棿绛涢�夛紱
-- 8銆丩og缁勪欢鏀寔杈撳嚭寮傚父鏍堜俊鎭紝搴曞眰瀹炵幇浼樺寲锛�
-- 9銆佸憡璀﹂偖浠舵牱寮忎紭鍖栵紝璋冩暣涓鸿〃鏍煎舰寮忥紝閭欢缁勪欢璋冩暣涓篶ommons-email绠�鍖栭偖浠舵搷浣滐紱
-- 10銆侀」鐩緷璧栧叏閲忓崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乯ackson绛夌瓑锛�
-- 11銆佷换鍔℃棩蹇楋紝璁板綍鍙戣捣璋冨害鐨勬満鍣ㄤ俊鎭紱
-- 12銆佷氦浜掍紭鍖栵紝濡傜櫥闄嗘敞閿�锛�
-- 13銆佷换鍔ron闀垮害鎵╁睍鏀寔鑷�128浣嶏紝鏀寔璐熻矗绫诲瀷Cron璁剧疆锛�
-- 14銆佹墽琛屽櫒鍦板潃褰曞叆浜や簰浼樺寲锛屽湴鍧�闀垮害鎵╁睍鏀寔鑷�512浣嶏紝鏀寔澶ц妯℃墽琛屽櫒闆嗙兢閰嶇疆锛�
-- 15銆佷换鍔″弬鏁扳�淚JobHandler.execute鈥濆叆鍙傛敼涓衡�淪tring params鈥濓紝澧炲己鍏ュ弬閫氱敤鎬с��
-- 16銆両JobHandler鎻愪緵init/destroy鏂规硶锛屾敮鎸佸湪鐩稿簲浠诲姟绾跨▼鍒濆鍖栧拰閿�姣佹椂杩涜闄勫姞鎿嶄綔锛�
-- 17銆佷换鍔℃敞瑙h皟鏁翠负 鈥淍JobHandler鈥濓紝涓庝换鍔℃娊璞℃帴鍙g粺涓�锛�
-- 18銆佷慨澶嶄换鍔$洃鎺х嚎绋嬭鑰楁椂浠诲姟闃诲鐨勯棶棰橈紱
-- 19銆佷慨澶嶄换鍔$洃鎺х嚎绋嬫棤娉曠洃鎺т换鍔¤Е鍙戝拰鎵ц鐘舵�佸潎鏈�0鐨勯棶棰橈紱
-- 20銆佹墽琛屽櫒鍔ㄦ�佷唬鐞嗗璞★紝鎷︽埅闈炰笟鍔℃柟娉曠殑鎵ц锛�
-- 21銆佷慨澶岼obThread鎹曡幏Error閿欒涓嶆洿鏂癑obLog鐨勯棶棰橈紱
-- 22銆佷慨澶嶄换鍔″垪琛ㄧ晫闈㈠乏渚ц彍鍗曞悎骞舵椂鏍峰紡閿欎贡闂锛�
-- 23銆佽皟搴︿腑蹇冮」鐩棩蹇楅厤缃敼涓簒ml鏂囦欢鏍煎紡锛�
-- 24銆丩og鍦板潃鏍煎紡鍏煎锛屾敮鎸侀潪"/"缁撳熬璺緞閰嶇疆锛�
-- 25銆佸簳灞傜郴缁熸棩蹇楃骇鍒鑼冭皟鏁达紝娓呯悊閬楃暀浠g爜锛�
-- 26銆佸缓琛⊿QL浼樺寲锛屾敮鎸佸悓姝ュ垱寤哄埗瀹氱紪鐮佺殑搴撳拰琛紱
-- 27銆佺郴缁熷畨鍏ㄦ�т紭鍖栵紝鐧婚檰Token鍐機ookie鏃惰繘琛孧D5鍔犲瘑锛屽悓鏃禖ookie鍚敤HttpOnly锛�
-- 28銆佹柊澧�"浠诲姟ID"灞炴�э紝绉婚櫎"JobKey"灞炴�э紝鍓嶈�呮壙鎷呮墍鏈夊姛鑳斤紝鏂逛究鍚庣画澧炲己浠诲姟渚濊禆鍔熻兘銆�
-- 29銆佷换鍔″惊鐜緷璧栭棶棰樹慨澶嶏紝閬垮厤瀛愪换鍔′笌鐖朵换鍔¢噸澶嶅鑷寸殑璋冨害姝诲惊鐜紱
-- 30銆佷换鍔″垪琛ㄦ柊澧炵瓫閫夋潯浠� "浠诲姟鎻忚堪"锛屽揩閫熸绱换鍔★紱
-- 31銆佹墽琛屽櫒Log鏂囦欢瀹氭湡娓呯悊鍔熻兘锛氭墽琛屽櫒鏂板閰嶇疆椤癸紙"xxl.job.executor.logretentiondays"锛夋棩蹇椾繚瀛樺ぉ鏁帮紝鏃ュ織鏂囦欢杩囨湡鑷姩鍒犻櫎銆�
-
-### 6.21 鐗堟湰 V1.9.1 鐗规�2018-02-22]
-- 1銆佸浗闄呭寲锛氳皟搴︿腑蹇冨疄鐜板浗闄呭寲锛屾敮鎸佷腑鏂囥�佽嫳鏂囦袱绉嶈瑷�锛岄粯璁や负涓枃銆�
-- 2銆佽皟搴︽姤琛ㄦ柊澧�"杩愯涓�"涓姸鎬侀」锛�
-- 3銆佽皟搴︽姤琛ㄤ紭鍖栵紝鎶ヨ〃SQL璋冧紭骞朵笖鏂板LocalCache缂撳瓨锛堢紦瀛樻椂闂�60s锛夛紝鎻愰珮澶ф暟鎹噺涓嬫姤琛ㄥ姞杞介�熷害锛�
-- 4銆佷慨澶嶆墦鍖呴儴缃叉椂璧勬簮鏂囦欢涔辩爜闂锛�
-- 5銆佷慨澶嶆柊鐗堟湰chrome婊氬姩鍒伴《閮ㄥけ鏁堥棶棰橈紱
-- 6銆佽皟搴︿腑蹇冮厤缃姞杞戒紭鍖栵紝鍙栨秷瀵归厤缃枃浠跺悕鐨勫己渚濊禆锛屾敮鎸佸姞杞界鐩橀厤缃紱
-- 7銆佷慨澶嶈剼鏈换鍔og鏂囦欢鏈甯竎lose鐨勯棶棰橈紱
-- 8銆侀」鐩緷璧栧叏閲忓崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乯ackson绛夌瓑锛�
-
-### 6.22 鐗堟湰 V1.9.2 鐗规�2018-10-05]
-- 1銆佷换鍔¤秴鏃舵帶鍒讹細鏂板浠诲姟灞炴�� "浠诲姟瓒呮椂鏃堕棿"锛屽苟鏀寔鑷畾涔夛紝浠诲姟杩愯瓒呮椂灏嗕細涓诲姩涓柇浠诲姟锛�
-- 2銆佷换鍔″け璐ラ噸璇曟鏁帮細鏂板浠诲姟灞炴�� "澶辫触閲嶈瘯娆℃暟"锛屽苟鏀寔鑷畾涔夛紝褰撲换鍔″け璐ユ椂灏嗕細鎸夌収棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇曪紱鍚屾椂鏀舵暃搴熷純鍏朵粬澶辫触閲嶈瘯绛栫暐锛屽璋冨害澶辫触銆佹墽琛屽け璐ャ�佺姸鎬佺爜澶辫触绛夛紱
-- 3銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(PHP) "锛屾敮鎸乸hp鑴氭湰浠诲姟锛�
-- 4銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(PowerShell) "锛屾敮鎸丳owerShell鑴氭湰浠诲姟锛�
-- 5銆佽皟搴﹀叏寮傛澶勭悊锛氫换鍔¤Е鍙戜箣鍚庯紝鎺ㄩ�佸埌璋冨害闃熷垪锛屽绾跨▼骞跺彂澶勭悊璋冨害璇锋眰锛屾彁楂樹换鍔¤皟搴﹂�熺巼鐨勫悓鏃讹紝閬垮厤鍥犵綉缁滈棶棰樺鑷磓uartz璋冨害绾跨▼闃诲鐨勯棶棰橈紱
-- 6銆佹墽琛屽櫒浠诲姟缁撴灉钀界洏浼樺寲锛氭墽琛屽櫒鍥炶皟澶辫触鏃跺皢浠诲姟缁撴灉鍐欑鐩橈紝寰呴噸鍚垨缃戠粶鎭㈠鏃堕噸璇曞洖璋冧换鍔$粨鏋滐紝闃叉浠诲姟鎵ц缁撴灉涓㈠け锛�
-- 7銆佷换鍔℃棩蹇楁煡璇㈤�熷害澶у箙鎻愬崌锛氱櫨涓囩骇鍒暟鎹噺鎼滅储閫熷害鎻愬崌1000鍊嶏紱
-- 8銆佽皟搴︿腑蹇冩彁渚汚PI鏈嶅姟锛屾敮鎸侀�氳繃API鏈嶅姟瀵逛换鍔¤繘琛屾煡璇€�佹柊澧炪�佹洿鏂般�佸惎鍋滅瓑鎿嶄綔锛�
-- 9銆佸簳灞傝嚜鐮擫og缁勪欢鍙傛暟鍗犱綅绗︽敼涓�"{}"锛屽苟淇鎵撳嵃鏈夊弬鏃ュ織鏃跺弬鏁颁笉鍖归厤瀵艰嚧鎶ラ敊鐨勯棶棰橈紱
-- 10銆佷换鍔″洖璋冪粨鏋滀紭鍖栵紝鏀寔灞曠ず鍦≧olling log涓紝鏂逛究闂鎺掓煡锛�
-- 11銆佸簳灞侺ocalCache缁勪欢鍏煎鎬т紭鍖栵紝鏀寔jdk9銆乯dk10鍙婁互涓婄増鏈紪璇戦儴缃诧紱
-- 12銆佸憡璀﹂偖浠跺浐瀹氫娇鐢� UTF-8 缂栫爜鏍煎紡锛屼慨澶嶇敱鏈哄櫒缂栫爜瀵艰嚧鐨勯偖浠朵贡鐮侀棶棰橈紱
-- 13銆佸憡璀﹂偖浠朵腑灞曠ず澶辫触鍛婅淇℃伅锛�
-- 14銆佸憡璀﹂偖绠辨敮鎸丼SL閰嶇疆锛�
-- 15銆乄indow鏈哄櫒涓婩ile.separator涓嶅吋瀹归棶棰樹慨澶嶏紱
-- 16銆佽剼鏈换鍔″紓甯窵og杈撳嚭浼樺寲锛�
-- 17銆佷换鍔$嚎绋嬪仠姝㈠彉閲忎慨楗扮浼樺寲锛�
-- 18銆佽剼鏈换鍔og鏂囦欢娴佸叧闂紭鍖栵紱
-- 19銆佷换鍔℃姤琛ㄦ垚鍔熴�佸け璐ュ拰杩涜涓粺璁¢棶棰樹慨澶嶏紱
-- 20銆佹牳蹇冧緷璧朇ore鍐呴儴鍥介檯鍖栧鐞嗭紱
-- 21銆侀粯璁uartz绾跨▼鏁拌皟鏁翠负50锛�
-- 22銆佹柊澧炲乏渚ц彍鍗�"杩愯鎶ヨ〃"锛�
-- 23銆佹墽琛屽櫒鎵嬪姩璁剧疆IP鏃跺彇娑堢粦瀹欻ost鐨勬搷浣滐紝璇P浠呬緵鎵ц鍣ㄦ敞鍐屼娇鐢紱淇鎸囧畾澶栫綉IP鏃舵棤娉曠粦瀹氭墽琛屽櫒Host鐨勯棶棰橈紱
-- 24銆佸彇娑堢埗瀛愪换鍔′笉鍙噸澶嶇殑闄愬埗锛屾敮鎸佸惊鐜换鍔¤Е鍙戠瓑鐗规畩鍦烘櫙锛�
-- 25銆佷换鍔¤皟搴﹀娉ㄤ腑鏍囨敞浠诲姟瑙﹀彂绫诲瀷锛屽Cron瑙﹀彂銆佺埗浠诲姟瑙﹀彂銆丄PI瑙﹀彂绛夌瓑锛屾柟渚挎帓鏌ヨ皟搴︽棩蹇楋紱
-- 26銆佸簳灞傛棩蹇楃粍浠禨impleDateFormat绾跨▼瀹夊叏闂淇锛�
-- 27銆佹墽琛屽櫒閫氳绾跨▼浼樺寲锛宑orePoolSize浠�256闄嶄綆鑷�32锛�
-- 28銆佷换鍔℃棩蹇楄〃鐘舵�佸瓧娈电被鍨嬩紭鍖栵紱
-- 29銆丟LUE鑴氭湰鏂囦欢鑷姩娓呯悊鍔熻兘锛屽強鏃舵竻鐞嗚繃鏈熻剼鏈枃浠讹紱
-- 30銆佹墽琛屽櫒娉ㄥ唽鏂瑰紡鍒囨崲浼樺寲锛屽垏鎹㈣嚜鍔ㄦ敞鍐屾椂涓诲姩鍚屾鍦ㄧ嚎鏈哄櫒锛岄伩鍏嶆墽琛屽櫒涓虹┖鐨勯棶棰橈紱
-- 31銆佽法骞冲彴锛氶櫎浜嗘彁渚汮ava銆丳ython銆丳HP绛夊崄鏉ョ浠诲姟妯″紡涔嬪锛屾柊澧炴彁渚涘熀浜嶩TTP鐨勪换鍔℃ā寮忥紱
-- 32銆佸簳灞俁PC搴忓垪鍖栧崗璁皟鏁翠负hessian2锛�
-- 33銆佷慨澶嶈〃瀛楁 鈥渢.order鈥濅笌鏁版嵁搴撳叧閿瓧鍐茬獊鏌ヨ澶辫触鐨勯棶棰橈紝
-- 34銆佷换鍔″睘鎬ф灇涓� "浠诲姟妯″紡銆侀樆濉炵瓥鐣�" 鍥介檯鍖栦紭鍖栵紱
-- 35銆佸垎鐗囦换鍔″け璐ラ噸璇曚紭鍖栵紝浠呴噸璇曞綋鍓嶅け璐ョ殑鍒嗙墖锛�
-- 36銆佷换鍔¤Е鍙戞椂鏀寔鍔ㄦ�佷紶鍙傦紝璋冨害涓績涓嶢PI鏈嶅姟鍧囨彁渚涙彁渚涘姩鎬佸弬鏁板姛鑳斤紱
-- 37銆佷换鍔℃墽琛屾棩蹇椼�佽皟搴︽棩蹇楀瓧娈电被鍨嬭皟鏁达紝鏀逛负text绫诲瀷骞跺彇娑堝瓧鏁伴檺鍒讹紱
-- 38銆丟LUE浠诲姟鑴氭湰瀛楁绫诲瀷璋冩暣锛屾敼涓簃ediumtext绫诲瀷锛屾彁楂楪LUE闀垮害涓婇檺锛�
-- 39銆佷换鍔$洃鎺х嚎绋婰og杈撳嚭浼樺寲锛岃繍琛屼腑浠诲姟鐨勭洃鎺og鏀逛负debug绾у埆锛屽噺灏戦潪鏍稿績鏃ュ織閲忥紱
-- 40銆侀」鐩緷璧栧叏閲忓崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆丣ackson銆乬roovy绛夌瓑锛�
-- 41銆乨ocker鏀寔锛氳皟搴︿腑蹇冩彁渚� Dockerfile 鏂逛究蹇�熸瀯寤篸ocker闀滃儚锛� 
-
-### 6.23 鐗堟湰 V2.0.0 Release Notes[2018-11-04]
-- 1銆佽皟搴︿腑蹇冭縼绉诲埌 springboot锛�
-- 2銆佸簳灞傞�氳缁勪欢杩佺Щ鑷� xxl-rpc锛�
-- 3銆佸鍣ㄥ寲锛氭彁渚涘畼鏂筪ocker闀滃儚锛屽苟瀹炴椂鏇存柊鎺ㄩ�乨ockerhub锛坉ocker pull xuxueli/xxl-job-admin锛夛紝杩涗竴姝ュ疄鐜颁骇鍝佸紑绠卞嵆鐢紱
-- 4銆佹柊澧炴棤妗嗘灦鎵ц鍣⊿ample绀轰緥椤圭洰 "xxl-job-executor-sample-frameless"銆備笉渚濊禆绗笁鏂规鏋讹紝鍙渶main鏂规硶鍗冲彲鍚姩杩愯鎵ц鍣紱
-- 5銆佸懡浠よ浠诲姟锛氬師鐢熸彁渚涢�氱敤鍛戒护琛屼换鍔andler锛圔ean浠诲姟锛�"CommandJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚涘懡浠よ鍗冲彲锛�
-- 6銆佷换鍔$姸鎬佷紭鍖栵紝浠呰繍琛岀姸鎬�"NORMAL"浠诲姟鍏宠仈鑷硄uartz锛岄檷浣巕uartz搴曞眰鏁版嵁瀛樺偍涓庤皟搴﹀帇鍔涳紱
-- 7銆佷换鍔$姸鎬佽鑼冿細鏂板浠诲姟榛樿鍋滄鐘舵�侊紝浠诲姟鏇存柊鏃朵繚鎸佷换鍔$姸鎬佷笉鍙橈紱
-- 8銆両P鑾峰彇閫昏緫浼樺寲锛屼紭鍏堥亶鍘嗙綉鍗℃潵鑾峰彇鍙敤IP锛�
-- 9銆佷换鍔℃柊澧炵殑API鏈嶅姟鎺ュ彛杩斿洖浠诲姟ID锛屾柟渚胯皟鐢ㄦ柟瀹炵敤锛�
-- 10銆佺粍浠跺寲浼樺寲锛岀Щ闄ゅ spring 鐨勪緷璧栵細闈瀞pring搴旂敤閫夌敤 "XxlJobExecutor" 銆乻pring搴旂敤閫夌敤 "XxlJobSpringExecutor" 浣滀负鎵ц鍣ㄧ粍浠讹紱 
-- 11銆佷换鍔ollingLog灞曠ず閫昏緫浼樺寲锛屼慨澶嶈秴鏃朵换鍔℃棤娉曟煡鐪嬬殑闂锛�
-- 12銆佸椤筓I缁勪欢鍗囩骇鍒版渶鏂扮増鏈紝濡傦細CodeMirror銆丒charts銆丣query 绛夛紱
-- 13銆侀」鐩緷璧栧崌绾� groovy 鑷宠緝鏂扮ǔ瀹氱増鏈紱pom娓呯悊锛�
-- 14銆佸瓙浠诲姟澶辫触閲嶈瘯閲嶈瘯閫昏緫浼樺寲锛屽瓙浠诲姟澶辫触鏃跺皢浼氭寜鐓у叾棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇�
-
-### 6.23 鐗堟湰 v2.0.1 Release Notes[2018-11-09]
-- 1銆佸乏渚ц彍鍗曟姌鍙犲姩鐢婚棶棰樹慨澶嶏紱
-- 2銆佽皟搴︽姤琛ㄦ棩鏈熷垎甯冨浘榛樿鍊肩粺涓�锛�
-- 3銆乫reemarker瀵规暟瀛楅粯璁ゅ姞鍗冨垎浣嶉棶棰樹慨澶嶏紝瑙e喅鏃ュ織ID琚垎闅斿鑷存煡鐪嬫棩蹇楀け璐ラ棶棰橈紱
-- 4銆佸簳灞傞�氳缁勪欢鍗囩骇锛屼慨澶嶉�氳寮傚父鏃舵棤鏁堢瓑寰呯殑闂锛�
-- 5銆佹墽琛屽櫒鍚姩涔嬪悗jetty鍋滄鐨勯棶棰樹慨澶嶏紱
-
-### 6.24 鐗堟湰 v2.0.2 Release Notes[2019-04-20]
-- 1銆佸簳灞傞�氳鏂规浼樺寲锛氬崌绾ц緝鏂扮増鏈瑇xl-rpc锛岀敱"JETTY"鏂规璋冩暣涓�"NETTY_HTTP"鏂规锛屾墽琛屽櫒鍐呭祵netty-http-server鎻愪緵鏈嶅姟锛岃皟搴︿腑蹇冨鐢ㄥ鍣ㄧ鍙f彁渚涙湇鍔★紱
-- 2銆佷换鍔″憡璀﹂�昏緫璋冩暣锛屾敼涓洪�氳繃鎵弿澶辫触鏃ュ織鏂瑰紡瑙﹀彂銆備竴鏂归潰绮剧‘鎵弿澶辫触浠诲姟锛岄檷浣庢壂鎻忚寖鍥达紱鍙︿竴鏂归潰鍙栨秷鍐呭瓨闃熷垪锛岄檷浣庣嚎绋嬪唴瀛樻秷鑰楋紱
-- 3銆丵uartz瑙﹀彂绾跨▼姹犲簾寮冨苟鏇挎崲涓� "XxlJobThreadPool"锛岄檷浣庣嚎绋嬪垏鎹€�佸唴瀛樺崰鐢ㄥ甫鏉ョ殑娑堣�楋紝鎻愰珮璋冨害鎬ц兘锛�
-- 4銆佽皟搴︾嚎绋嬫睜闅旂锛屾媶鍒嗕负"Fast"鍜�"Slow"涓や釜绾跨▼姹狅紝1鍒嗛挓绐楀彛鏈熷唴浠诲姟鑰楁椂杈�500ms瓒呰繃10娆★紝璇ョ獥鍙f湡鍐呭垽瀹氫负鎱换鍔★紝鎱换鍔¤嚜鍔ㄩ檷绾ц繘鍏�"Slow"绾跨▼姹狅紝閬垮厤鑰楀敖璋冨害绾跨▼锛屾彁楂樼郴缁熺ǔ瀹氭�э紱
-- 5銆佹墽琛屽櫒鐑儴缃叉椂JobHandler閲嶆柊鍒濆鍖栵紝淇鐢辨瀵艰嚧鐨� "jobhandler naming conflicts." 闂锛�
-- 6銆佹柊澧濩lass鐨勫姞杞界紦瀛橈紝瑙e喅棰戠箒鍔犺浇Class浼氫娇jvm鐨勬柟娉曞尯绌洪棿涓嶈冻瀵艰嚧OOM鐨勯棶棰橈紱
-- 7銆佷换鍔℃敮鎸佹洿鎹㈢粦瀹氭墽琛屽櫒锛屾柟渚夸换鍔″垎缁勮浆绉诲拰绠$悊锛�
-- 8銆佽皟搴︿腑蹇冨憡璀﹂偖浠跺彂閫佺粍浠舵敼涓� 鈥渟pring-boot-starter-mail鈥濓紱
-- 9銆佽浣忓瘑鐮佸姛鑳戒紭鍖栵紝閫変腑鏃舵案涔呰浣忥紱闈為�変腑鏃跺叧闂祻瑙堝櫒鍗崇櫥鍑猴紱
-- 10銆侀」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽quartz銆乻pring銆乯ackson銆乬roovy銆亁xl-rpc绛夌瓑锛�
-- 11銆佺簿绠�椤圭洰锛屽彇娑堢涓夋柟渚濊禆锛屽 commons-collections4銆乧ommons-lang3 ;
-- 12銆佹墽琛屽櫒鍥炶皟鏃ュ織钀界洏鏂规澶嶇敤RPC搴忓垪鍖栨柟妗堬紝骞剁Щ闄ackson渚濊禆锛�
-- 13銆佸簳灞侺og璋冧紭锛屽簲鐢ㄦ甯哥粓姝㈠彇娑堝紓甯告爤淇℃伅鎵撳嵃锛�
-- 14銆佷氦浜掍紭鍖栵紝灏介噺閬垮厤鏂板紑椤甸潰绐楀彛锛涗粎WebIDE鏀寔鏂板紑椤碉紝骞舵彁渚涚獥鍙e揩閫熷叧闂寜閽紱浠诲姟鍚�佸仠銆佸垹闄ゃ�佽Е鍙戠瓑杞绘搷浣滄彁绀烘敼涓簍oast鏂瑰紡锛�
-- 15銆佷换鍔℃殏鍋溿�佸垹闄や紭鍖栵紝閬垮厤quartz delete涓嶅畬鏁村鑷翠换鍔¤剰鏁版嵁锛�
-- 16銆佷换鍔″洖璋冦�佸績璺虫敞鍐屾垚鍔熸棩蹇椾紭鍖栵紝闈炴牳蹇冨父瑙勬棩蹇楄皟鏁翠负debug绾у埆锛岄檷浣庡啑浣欐棩蹇楄緭鍑猴紱
-- 17銆佽皟鏁撮椤垫姤琛ㄩ粯璁ゅ尯闂翠负鏈懆锛岄伩鍏嶆棩蹇楅噺澶ぇ鏌ヨ缂撴參锛�
-- 18銆丩RU璺敱鏇存柊涓嶅強鏃堕棶棰樹慨澶嶏紱
-- 19銆佷换鍔″け璐ュ憡璀﹂偖浠跺彂閫侀�昏緫浼樺寲锛�
-- 20銆佽皟搴︽棩蹇楁帓搴忛�昏緫璋冩暣涓烘寜鐓ц皟搴︽椂闂村�掑簭锛屽吋瀹筎IDB绛変富閿笉杩炵画鏃ュ織瀛樺偍缁勪欢锛�
-- 21銆佹墽琛屽櫒浼橀泤鍋滄満浼樺寲锛�
-- 22銆佽繛鎺ユ睜閰嶇疆浼樺寲锛屽寮鸿繛鎺ユ湁鏁堟�ч獙璇侊紱
-- 23銆丣obHandler#msg闀垮害闄愬埗锛屼慨澶嶅紓甯告儏鍐典笅鏃ュ織瓒呴暱瀵艰嚧鍐呭瓨婧㈠嚭鐨勯棶棰橈紱
-- 24銆佸崌绾xl-rpc鑷宠緝鏂扮増鏈紝淇springboot 2.x鐗堟湰鍏煎鎬ч棶棰橈紱
-
-### 6.25 鐗堟湰 v2.1.0 Release Notes[2019-07-07]
-- 1銆佽嚜鐮旇皟搴︾粍浠讹紝绉婚櫎quartz渚濊禆锛氫竴鏂归潰鏄负浜嗙簿绠�绯荤粺闄嶄綆鍐椾綑渚濊禆锛屽彟涓�鏂归潰鏄负浜嗘彁渚涚郴缁熺殑鍙帶搴︿笌绋冲畾鎬э紱
-    - 瑙﹀彂锛氬崟鑺傜偣鍛ㄦ湡鎬цЕ鍙戯紝杩愯浜嬩欢濡俤elayqueue锛�
-    - 璋冨害锛氶泦缇ょ珵浜夛紝璐熻浇鏂瑰紡鍗忓悓澶勭悊锛岄攣绔炰簤-鏇存柊瑙﹀彂淇℃伅-鎺ㄩ�佹椂闂磋疆-閿侀噴鏀�-閿佺珵浜夛紱
-- 2銆佸簳灞傝〃缁撴瀯閲嶆瀯锛氱Щ闄�11寮爍uartz鐩稿叧琛紝骞跺鐜版湁琛ㄧ粨鏋勪紭鍖栨⒊鐞嗭紱
-- 3銆佷换鍔℃棩蹇椾富閿皟鏁翠负long鏁版嵁绫诲瀷锛岄槻姝㈡捣閲忔棩蹇楁儏鍐典笅鏁版嵁婧㈠嚭锛�
-- 4銆佸簳灞傜嚎绋嬫ā鍨嬮噸鏋勶細绉婚櫎Quartz绾跨▼姹狅紝闄嶄綆绯荤粺绾跨▼涓庡唴瀛樺紑閿�锛�
-- 5銆佺敤鎴风鐞嗭細鏀寔鍦ㄧ嚎绠$悊绯荤粺鐢ㄦ埛锛屽瓨鍦ㄧ鐞嗗憳銆佹櫘閫氱敤鎴蜂袱绉嶈鑹诧紱
-- 6銆佹潈闄愮鐞嗭細鎵ц鍣ㄧ淮搴﹁繘琛屾潈闄愭帶鍒讹紝绠$悊鍛樻嫢鏈夊叏閲忔潈闄愶紝鏅�氱敤鎴烽渶瑕佸垎閰嶆墽琛屽櫒鏉冮檺鍚庢墠鍏佽鐩稿叧鎿嶄綔锛�
-- 7銆佽皟搴︾嚎绋嬫睜鍙傛暟璋冧紭锛�
-- 8銆佹敞鍐岃〃绱㈠紩浼樺寲锛岀紦瑙i攣琛ㄩ棶棰橈紱
-- 9銆佹柊澧濲boot鎵ц鍣⊿ample绀轰緥椤圭洰锛�
-- 10銆佷换鍔″垪琛ㄤ紭鍖栵紝鏀寔鏍规嵁 "浠诲姟鐘舵��"銆�"璐熻矗浜�" 灞炴�х瓫閫変换鍔★紱
-- 11銆佷换鍔℃棩蹇楀垪琛ㄤ氦浜掍紭鍖栵紝鎿嶄綔鎸夐挳鍚堝苟涓哄垎鍓叉寜閽紱
-- 12銆侀」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乻pringboot銆乬roovy銆亁xl-rpc绛夌瓑锛涘苟娓呯悊鍐椾綑POM锛�
-- 13銆佸崌绾xl-rpc鑷宠緝鏂扮増鏈紝淇浠g悊鏈嶅姟鍒濆鍖栨椂杩滅▼鏈嶅姟涓嶅彲鐢ㄥ鑷撮暱杩炲啑浣欏垱寤虹殑闂;
-- 14銆侀椤佃皟搴︽姤琛ㄧ殑鏃ユ湡鎺掑簭鍦═IDB涓嬩贡搴忛棶棰樹慨澶嶏紱
-- 15銆佽皟搴︿腑蹇冧笌鎵ц鍣ㄥ弻鍚戦�氳瓒呮椂鏃堕棿璋冩暣涓�3s锛�
-- 16銆佽皟搴︾粍浠堕攢姣佹祦绋嬩紭鍖栵紝鍏堝仠姝㈣皟搴︾嚎绋嬶紝鐒跺悗绛夊緟鏃堕棿杞唴瀛橀噺浠诲姟澶勭悊瀹屾垚锛屾渶缁堥攢姣佹椂闂磋疆绾跨▼锛�
-- 17銆佹墽琛屽櫒鍥炶皟绾跨▼浼樺寲锛屽洖璋冨湴鍧�涓虹┖鏃堕攢姣侀棶棰樹慨澶嶏紱
-- 18銆丠ttpJobHandler浼樺寲锛屽搷搴旀暟鎹寚瀹歎TF-8鏍煎紡锛岄伩鍏嶄腑鏂囦贡鐮侊紱
-- 19銆佷唬鐮佷紭鍖栵紝ConcurrentHashMap鍙橀噺绫诲瀷鏀逛负ConcurrentMap锛岄伩鍏嶅洜涓嶅悓鐗堟湰瀹炵幇涓嶅悓瀵艰嚧鐨勫吋瀹规�ч棶棰橈紱
-
-
-### 6.26 鐗堟湰 v2.1.1 Release Notes[2019-11-24]
-- 1銆� 璋冨害涓績鏃ュ織鑷姩娓呯悊鍔熻兘锛堣嚦姝わ紝璋冨害涓績/鎵ц鍣ㄥ潎鏀寔鏃ュ織鑷姩娓呯悊锛岃繃鏈熷ぉ鏁板潎榛樿璁剧疆涓�30澶╋級锛氳皟搴︿腑蹇冩柊澧為厤缃」锛�"xxl.job.logretentiondays"锛夋棩蹇椾繚瀛樺ぉ鏁帮紝杩囨湡鏃ュ織鑷姩娓呯悊锛涜В鍐虫捣閲忔棩蹇楁儏鍐典笅鏃ュ織琛ㄦ參SQL闂锛涢檺鍒跺ぇ浜庣瓑浜�7鏃剁敓鏁堬紝鍚﹀垯鍏抽棴娓呯悊鍔熻兘锛岄粯璁や负30锛�
-- 2銆� 璋冨害鎶ヨ〃浼樺寲锛氭柊澧炴棩蹇楁姤琛ㄧ殑瀛樺偍琛紝涓夊ぉ鍐呯殑浠诲姟鏃ュ織浼氫互姣忓垎閽熶竴娆$殑棰戠巼寮傛鍚屾鑷虫姤琛ㄤ腑锛涗换鍔℃姤琛ㄤ粎璇诲彇鎶ヨ〃鏁版嵁锛屾瀬澶ф彁鍗囧姞杞介�熷害锛�
-- 3銆� Cron鍦ㄧ嚎鐢熸垚宸ュ叿锛氫换鍔℃柊澧炪�佺紪杈戞閫氳繃缁勪欢鍦ㄧ嚎鐢熸垚Cron琛ㄨ揪寮忥紱
-- 4銆� Cron涓嬫鎵ц鏃堕棿鏌ヨ锛氭敮鎸侀�氳繃鐣岄潰鍦ㄧ嚎鏌ョ湅鍚庣画杩炵画5娆℃墽琛屾椂闂达紱
-- 5銆� 璋冨害涓績鏂板搴旂敤鍋ュ悍妫�鏌ュ姛鑳斤紝鍊熷姪鈥渟pring-boot-starter-actuator鈥濓紝鐩稿鍦板潃 鈥�/actuator/health鈥濓紱
-- 6銆� DB鑴氭湰榛樿缂栫爜鏀逛负utf8mb4锛屼慨澶嶅瓧绗︿贡鐮侀棶棰�(寤鸿Mysql鐗堟湰5.7+)锛�
-- 7銆� 璋冨害涓績浠诲姟骞冲潎鍒嗛厤锛岃Е鍙戠粍浠舵瘡娆¤幏鍙栦笌绾跨▼姹犳暟閲忕浉鍏虫暟閲忕殑浠诲姟锛岄伩鍏嶅ぇ閲忎换鍔¢泦涓湪鍗曚釜璋冨害涓績闆嗙兢鑺傜偣锛�
-- 8銆� 浠诲姟瑙﹀彂缁勪欢浼樺寲锛岄鍔犺浇棰戠巼姝e父1s涓�娆★紝褰撻鍔犺浇杞┖鏃朵富鍔ㄤ紤鐪犱竴涓姞杞藉懆鏈燂紝鍔ㄦ�侀檷浣庡姞杞介鐜囦粠鑰岄檷浣嶥B鍘嬪姏锛�
-- 9銆� 璋冨害缁勪欢浼樺寲锛氶拡瀵规案杩滀笉浼氳Е鍙戠殑Cron绂佹閰嶇疆鍜屽惎鍔紱浠诲姟Cron鏈�鍚庝竴娆¤Е鍙戝悗鍐嶄篃涓嶄細瑙﹀彂鏃讹紝姣斿涓�娆℃�т换鍔★紝涓诲姩鍋滄鐩稿叧浠诲姟锛�
-- 10銆丏B閲嶈繛浼樺寲锛屼慨澶岲B瀹曟満閲嶈繛鍚庝换鍔¤皟搴﹀仠姝㈢殑闂锛岄噸杩炲悗鑷姩鍔犲叆璋冨害闆嗙兢瑙﹀彂浠诲姟璋冨害锛�
-- 11銆佹敞鍐岀洃鎺х嚎绋嬩紭鍖栵紝闄嶄綆姝婚攣鍑犵巼锛�
-- 12銆佽皟搴︿腑蹇冩棩蹇楀垹闄や紭鍖栵紝鏀逛负鍒嗛〉鑾峰彇ID骞舵牴鎹甀D鍒犻櫎鐨勬柟寮忥紝閬垮厤鎵归噺鍒犻櫎娴烽噺鏃ュ織瀵艰嚧姝婚攣闂锛�
-- 13銆佷换鍔¢噸璇曟椂鍙傛暟涓㈠け鐨勯棶棰樹慨澶嶏紱
-- 14銆佽皟搴︿腑蹇冪Щ闄QL涓殑 "now()" 鍑芥暟锛涢泦缇ら儴缃叉椂涓嶅啀渚濊禆DB鏃堕挓锛屼粎闇�瑕佷繚璇佽皟搴︿腑蹇冨簲鐢ㄨ妭鐐规椂閽熶竴鑷村嵆鍙紱
-- 15銆佷换鍔¤Е鍙戠粍浠跺姞杞介『搴忚皟鏁达紝閬垮厤灏忔鐜囨儏鍐典笅缁勪欢闅忔満鍔犺浇椤哄簭瀵艰嚧鐨処18N鐨凬PE闂;
-- 16銆丣obThread鑷攢姣佷紭鍖栵紝閬垮厤骞跺彂瑙﹀彂瀵艰嚧triggerQueue涓换鍔′涪澶遍棶棰橈紱
-- 17銆佽皟搴︿腑蹇冨瘑鐮侀檺鍒�18浣嶏紝淇淇敼瀵嗙爜瓒呰繃18浣嶆棤娉曠櫥闄嗙殑闂锛�
-- 18銆佷换鍔″憡璀︾粍浠跺垎椤靛弬鏁版棤鏁堥棶棰樹慨澶嶏紱
-- 19銆佸崌绾xl-rpc鐗堟湰锛氭湇鍔$绾跨▼浼樺寲锛岄檷浣庣嚎绋嬪唴瀛樺紑閿�锛汭pUtil浼樺寲锛氬鍔犺繛閫氭�ф牎锛岃繃婊ゆ槑纭潪娉曠殑缃戝崱锛�
-- 20銆佽皟搴︿腑蹇冨洖璋傾PI鏈嶅姟鏀逛负restful鏂瑰紡锛�
-- 21銆乁I浼樺寲锛屼换鍔″垪琛ㄥ拰鏃ュ織鍒楄〃鏁版嵁琛ㄦ牸瀹藉害姣斾緥璋冩暣锛岄伩鍏嶆暟鎹崲琛屾彁鍗囦綋楠岋紱
-- 22銆佺櫥褰曠晫闈㈠彇娑堥粯璁ゅ~鍐欑殑鐧诲綍璐﹀彿瀵嗙爜锛�
-- 23銆佹墽琛屽櫒琛ㄥ睘鎬ц皟鏁达紝"椤哄簭" 灞炴�ц皟鏁翠负鏁村瀷锛岃В鍐虫墽琛屽櫒鏁版嵁杈冨鏃舵棤娉曟纭帓搴忕殑闂锛�
-- 24銆佷换鍔″垪琛ㄤ氦浜掍紭鍖栵紝鏀寔鏌ョ湅浠诲姟鎵�灞炴墽琛屽櫒鐨勬敞鍐岃妭鐐癸紱
-- 25銆侀」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乻pring-boot銆乵ybatis銆乻lf4j銆乬roovy绛夌瓑锛�
-
-### 6.27 鐗堟湰 v2.1.2 Release Notes[2019-12-12]
-- 1銆佹柟娉曚换鍔℃敮鎸侊細鐢卞師鏉ュ熀浜嶫obHandler绫讳换鍔″紑鍙戞柟寮忥紝浼樺寲涓烘敮鎸佸熀浜庢柟娉曠殑浠诲姟寮�鍙戞柟寮忥紱鍥犳锛屽彲浠ユ敮鎸佸崟涓被涓紑鍙戝涓换鍔℃柟娉曪紝杩涜绫诲鐢�
-```
-@XxlJob("demoJobHandler")
-public ReturnT<String> execute(String param) {
-    XxlJobLogger.log("hello world");
-    return ReturnT.SUCCESS;
-}
-```
-- 2銆佺Щ闄ommons-exec锛岄噰鐢ㄥ師鐢熸柟寮忓疄鐜帮紝闄嶄綆绗笁鏂逛緷璧栵紱
-- 3銆佹墽琛屽櫒鍥炶皟涔辩爜闂淇锛�
-- 4銆佽皟搴︿腑蹇僤ispatcher servlet鍔犺浇椤哄簭浼樺寲锛�
-- 5銆佹墽琛屽櫒鍥炶皟鍦板潃https鍏煎鏀寔锛�
-- 6銆佸涓」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛�
-- 娉ㄦ剰锛氭渶鏂扮増鏈� "XxlJobSpringExecutor" 閫昏緫鏈夎皟鏁达紝鍘嗗彶椤圭洰涓缁勪欢鐨勯厤缃柟寮忚鍙傝�僑ample绀轰緥椤圭洰杩涜璋冩暣锛屽挨鍏舵敞鎰忛渶瑕佺Щ闄ょ粍浠剁殑init鍜宒estroy鏂规硶锛�
-
-
-### TODO LIST
-- 1銆佷换鍔″垎鐗囪矾鐢憋細鍒嗙墖閲囩敤涓�鑷存�ash绠楁硶璁$畻鍑哄敖閲忕ǔ瀹氱殑鍒嗙墖椤哄簭锛屽嵆浣挎敞鍐屾満鍣ㄥ瓨鍦ㄦ尝鍔ㄤ篃涓嶄細寮曡捣鍒嗘壒鍒嗙墖椤哄簭澶х殑娉㈠姩锛涚洰鍓嶉噰鐢↖P鑷劧鎺掑簭锛屽彲浠ユ弧瓒抽渶姹傦紝寰呭畾锛�
-- 2銆佷换鍔″崟鏈哄绾跨▼锛氭彁鍗囦换鍔″崟鏈哄苟琛屽鐞嗚兘鍔涳紱
-- 3銆佽皟搴︿换鍔′紭鍏堢骇锛�
-- 4銆佸鏁版嵁搴撴敮鎸侊紝鍦ㄩ噸鍐欏苟绉婚櫎Quartz鐨勫熀纭�涓婏紝DAO灞傞�氳繃JPA瀹炵幇锛屼笉闄愬埗鏁版嵁搴撶被鍨嬶紱
-- 5銆佹墽琛屽櫒Log娓呯悊鍔熻兘锛氳皟搴︿腑蹇僉og鍒犻櫎鏃跺悓姝ュ垹闄ゆ墽琛屽櫒涓殑Log鏂囦欢锛�
-- 6銆佷换鍔¤嚜鍔ㄦ敞鍐岋細Bean妯″紡浠诲姟锛孞obHandler鑷姩浠庢墽琛屽櫒涓煡璇㈠睍绀轰负涓嬫媺妗嗭紝閫夋嫨鍚庤嚜鍔ㄥ~鍏呬换鍔″悕绉扮瓑灞炴�э紱寰呰�冭檻锛屽洜涓轰换鍔¤嚜鍔ㄦ敞鍐屽皢浼氬鑷翠换鍔¢毦浠ョ鐞嗘帶鍒讹紱
-- 7銆丄PI浜嬩欢瑙﹀彂绫诲瀷浠诲姟锛堟洿绫讳技MQ娑堟伅锛夋敮鎸�"鍔ㄦ�佷紶鍙傘�佸欢鏃舵秷璐�"锛涜绫诲瀷浠诲姟涓嶈蛋璋冨害缁勪欢锛屽崟鐙缓绔婱Q娑堟伅琛紝璋冨害涓績绔炰簤瑙﹀彂锛涘緟瀹氾紝璇ュ姛鑳戒笌 XXL-MQ 鍐茬獊锛岃鍦烘櫙寤鸿鐢ㄥ悗鑰咃紱
-- 8銆佽皟搴︾嚎绋嬫睜鏀逛负鍗忕▼鏂瑰紡瀹炵幇锛屽ぇ骞呴檷浣庣郴缁熷唴瀛樻秷鑰楋紱
-- 9銆佷换鍔°�佹墽琛屽櫒鏁版嵁鍏ㄩ噺鏈湴缂撳瓨锛涙柊澧炴秷鎭〃骞挎挱閫氱煡锛�
-- 10銆佸繖纰岃浆绉讳紭鍖栵紝鍏ㄩ儴鏈哄櫒蹇欑鏃朵笉鍐嶇洿鎺ュけ璐ワ紱
-- 11銆佸け璐ラ噸璇曢棿闅旓紱
-- 12銆丼impleTrigger锛氶櫎Cron澶栵紝鏀寔璁剧疆鍥哄畾鏃堕棿闂撮殧瑙﹀彂锛�
-- 13銆佽皟搴︽棩蹇楀垪琛ㄥ姞涓婃墽琛屾椂闀垮垪锛屽苟鏀寔鎺掑簭锛�
-- 14銆丏AG娴佺▼浠诲姟锛氭浛鎹㈠瓙浠诲姟锛屾敮鎸佸弬鏁颁紶閫掞細閰嶇疆骞跺垪鐨�"a-b銆乥-c"璺緞鍒楄〃锛屾瀯鎴愪覆琛屻�佸苟琛屻�乨ag浠诲姟娴佺▼锛�"dagre-d3"缁樺浘锛涗换鍔′緷璧栵紝娴佺▼鍥撅紝瀛愪换鍔�+浼氱浠诲姟锛屽悇鑺傜偣鏃ュ織锛涙敮鎸佹牴鎹垚鍔熴�佸け璐ラ�夋嫨鍒嗘敮锛�
-- 15銆佹棩鏈熻繃婊わ細鏀寔澶氫釜鏃堕棿娈垫帓闄わ紱
-- 16銆佸憡璀﹂偖浠跺唴瀹癸紝鏀寔鑷畾涔夋ā鏉块厤缃紱
-- 17銆佹殏鍋滅姸鎬侊紝鏀寔Cron 涓虹┖锛�
-- 18銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(GO) "锛屾敮鎸丟O浠诲姟锛�
-- 19銆佹敞鍐屼腑蹇冧紭鍖栵紝瀹炴椂鎬ф敞鍐屽彂鐜帮細蹇冭烦娉ㄥ唽闂撮殧10s锛宺efresh澶辫触鍒欓娆℃敞鍐屽苟绔嬪嵆鏇存柊娉ㄥ唽淇℃伅锛屽績璺崇被浼硷紱30s杩囨湡閿�姣侊紱
-- 20銆佹彁渚涙墽琛屽櫒Docker闀滃儚锛�
-- 21銆佽剼鏈换鍔★紝鏀寔鏁版嵁鍙傛暟锛屾柊鐗堟湰浠呮敮鎸佸崟鍙傛暟涓嶆敮鎸侀渶瑕佸吋瀹癸紱
-- 22銆丟LUE 妯″紡 Web Ide 鐗堟湰瀵规瘮鍔熻兘锛�
-- 23銆佹壒閲忚皟搴︼細璋冨害璇锋眰鍏ueue锛岃皟搴︾嚎绋嬫壒閲忚幏鍙栬皟搴﹁姹傚苟鍙戣捣杩滅▼璋冨害锛涙彁楂樼嚎绋嬫晥鐜囷紱
-- 24銆佸璇█鎵ц鍣細绾﹀畾璺ㄨ瑷�閫氳鏂规锛屼互鍙婇�氳鎺ュ彛锛�
-- 25銆佺Щ闄ommons-exec锛岄噰鐢ㄥ師鐢熷疄鐜帮紱
-- 26銆佽皟搴︿腑蹇僇DK鐗堟湰璋冩暣涓篔DK8锛屼粠鑰屽崌绾ц嚦鏈�鏂扮増鏈琒pringBoot锛�
-- 27銆佹墽琛屽櫒鏈嶅姟绔彛涓庢敞鍐岀鍙e垎绂伙紝鏀寔docker鍔ㄦ�侀殢鏈虹鍙o紱
-- 28銆佹墽琛屽櫒绔彛澶嶇敤锛屽鐢ㄥ鍣ㄧ鍙f彁渚涢�氳鏈嶅姟锛�
-- 29銆佽嚜瀹氫箟澶辫触閲嶈瘯鏃堕棿闂撮殧锛�
-- 30銆佸垎鐗囦换鍔″叏閮ㄦ垚鍔熷悗瑙﹀彂瀛愪换鍔★紱
-- 31銆佷换鍔″鍒跺姛鑳斤紱鐐瑰嚮澶嶅埗鏄脊鍑烘柊寤轰换鍔″脊妗嗭紝骞跺垵濮嬪寲琚鍒朵换鍔′俊鎭紱
-- 32銆丄ccessToken鎸夌収鎵ц鍣ㄧ淮搴﹁缃紱鎺у埗璋冨害銆佸洖璋冿紱
-- 33銆佷换鍔℃墽琛屼竴娆$殑鏃跺�欐寚瀹欼P锛�
-- 34銆侀�氳璋冩暣锛涘弻鍚慔TTP锛屽洖璋冨拰鍏朵粬API鑷畾涔堿ccessToken锛孯estful锛屾墽琛屽櫒澶嶇敤瀹瑰櫒绔彛锛�
-- 35銆佺埗瀛愪换鍔″弬鏁颁紶閫掞紱娴佺▼浠诲姟绛夛紝閫忎紶鍔ㄦ�佸弬鏁帮紱
-- 36銆佹柊澧炴墽琛屽櫒鎻忚堪銆佷换鍔℃弿杩板睘鎬э紱
-
-
-## 涓冦�佸叾浠�
-
-### 7.1 椤圭洰璐$尞
-娆㈣繋鍙備笌椤圭洰璐$尞锛佹瘮濡傛彁浜R淇涓�涓猙ug锛屾垨鑰呮柊寤� [Issue](https://github.com/xuxueli/xxl-job/issues/) 璁ㄨ鏂扮壒鎬ф垨鑰呭彉鏇淬��
-
-### 7.2 鐢ㄦ埛鎺ュ叆鐧昏
-鏇村鎺ュ叆鐨勫叕鍙革紝娆㈣繋鍦� [鐧昏鍦板潃](https://github.com/xuxueli/xxl-job/issues/1 ) 鐧昏锛岀櫥璁颁粎浠呬负浜嗕骇鍝佹帹骞裤��
-
-### 7.3 寮�婧愬崗璁拰鐗堟潈
-浜у搧寮�婧愬厤璐癸紝骞朵笖灏嗘寔缁彁渚涘厤璐圭殑绀惧尯鎶�鏈敮鎸併�備釜浜烘垨浼佷笟鍐呴儴鍙嚜鐢辩殑鎺ュ叆鍜屼娇鐢ㄣ��
-
-- Licensed under the GNU General Public License (GPL) v3.
-- Copyright (c) 2015-present, xuxueli.
-
----
-### 鎹愯禒
-鏃犺鎹愯禒閲戦澶氬皯閮借冻澶熻〃杈炬偍杩欎唤蹇冩剰锛岄潪甯告劅璋� 锛氾級      [鍓嶅線鎹愯禒](https://www.xuxueli.com/page/donate.html )
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml
deleted file mode 100644
index 46cb5d8..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-xxljob-admin</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
-        <maven.compiler.source>1.8</maven.compiler.source>
-        <maven.compiler.target>1.8</maven.compiler.target>
-        <maven.test.skip>true</maven.test.skip>
-
-        <xxl-rpc.version>1.5.0</xxl-rpc.version>
-
-        <spring.version>4.3.25.RELEASE</spring.version>
-        <spring-boot.version>1.5.22.RELEASE</spring-boot.version>
-        <mybatis-spring-boot-starter.version>1.3.5</mybatis-spring-boot-starter.version>
-        <mysql-connector-java.version>5.1.48</mysql-connector-java.version>
-
-        <slf4j-api.version>1.7.29</slf4j-api.version>
-        <junit.version>4.12</junit.version>
-
-        <groovy.version>2.5.8</groovy.version>
-
-        <maven-source-plugin.version>3.2.0</maven-source-plugin.version>
-        <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
-        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
-        <maven-war-plugin.version>3.2.3</maven-war-plugin.version>
-    </properties>
-
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-cloud</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-launch</artifactId>
-        </dependency>
-        <!-- freemarker-starter -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-freemarker</artifactId>
-        </dependency>
-
-        <!-- mail-starter -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-mail</artifactId>
-        </dependency>
-        <!-- starter-actuator -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-        </dependency>
-        <!-- mybatis-starter锛歮ybatis + mybatis-spring + tomcat-jdbc锛坉efault锛� -->
-        <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-            <version>${mybatis-spring-boot-starter.version}</version>
-        </dependency>
-        <!-- mysql -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
-        <!-- xxl-job-core -->
-        <dependency>
-            <groupId>com.xuxueli</groupId>
-            <artifactId>xxl-job-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/JobAdminApplication.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/JobAdminApplication.java
deleted file mode 100644
index 6e683eb..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/JobAdminApplication.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.xxl.job.admin;
-
-import org.springblade.common.constant.LauncherConstant;
-import org.springblade.core.launch.BladeApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-/**
- * @author xuxueli 2018-10-28 00:38:13
- */
-@SpringBootApplication
-public class JobAdminApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(LauncherConstant.APPLICATION_XXLJOB_ADMIN_NAME, JobAdminApplication.class, args);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
deleted file mode 100644
index 6c57af9..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.controller.annotation.PermissionLimit;
-import com.xxl.job.admin.service.LoginService;
-import com.xxl.job.admin.service.XxlJobService;
-import com.xxl.job.core.biz.model.ReturnT;
-import org.springframework.beans.propertyeditors.CustomDateEditor;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * index controller
- * @author xuxueli 2015-12-19 16:13:16
- */
-@Controller
-public class IndexController {
-
-	@Resource
-	private XxlJobService xxlJobService;
-	@Resource
-	private LoginService loginService;
-
-
-	@RequestMapping("/")
-	public String index(Model model) {
-
-		Map<String, Object> dashboardMap = xxlJobService.dashboardInfo();
-		model.addAllAttributes(dashboardMap);
-
-		return "index";
-	}
-
-    @RequestMapping("/chartInfo")
-	@ResponseBody
-	public ReturnT<Map<String, Object>> chartInfo(Date startDate, Date endDate) {
-        ReturnT<Map<String, Object>> chartInfo = xxlJobService.chartInfo(startDate, endDate);
-        return chartInfo;
-    }
-
-	@RequestMapping("/toLogin")
-	@PermissionLimit(limit=false)
-	public String toLogin(HttpServletRequest request, HttpServletResponse response) {
-		if (loginService.ifLogin(request, response) != null) {
-			return "redirect:/";
-		}
-		return "login";
-	}
-
-	@RequestMapping(value="login", method=RequestMethod.POST)
-	@ResponseBody
-	@PermissionLimit(limit=false)
-	public ReturnT<String> loginDo(HttpServletRequest request, HttpServletResponse response, String userName, String password, String ifRemember){
-		boolean ifRem = (ifRemember!=null && ifRemember.trim().length()>0 && "on".equals(ifRemember))?true:false;
-		return loginService.login(request, response, userName, password, ifRem);
-	}
-
-	@RequestMapping(value="logout", method=RequestMethod.POST)
-	@ResponseBody
-	@PermissionLimit(limit=false)
-	public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response){
-		return loginService.logout(request, response);
-	}
-
-	@RequestMapping("/help")
-	public String help() {
-
-		/*if (!PermissionInterceptor.ifLogin(request)) {
-			return "redirect:/toLogin";
-		}*/
-
-		return "help";
-	}
-
-	@InitBinder
-	public void initBinder(WebDataBinder binder) {
-		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-		dateFormat.setLenient(false);
-		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
deleted file mode 100644
index ad1244a..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.controller.annotation.PermissionLimit;
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.exception.XxlJobException;
-import com.xxl.job.admin.core.util.JacksonUtil;
-import com.xxl.job.core.biz.AdminBiz;
-import com.xxl.job.core.biz.model.HandleCallbackParam;
-import com.xxl.job.core.biz.model.RegistryParam;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.util.XxlJobRemotingUtil;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/5/10.
- */
-@Controller
-@RequestMapping("/api")
-public class JobApiController {
-
-    @Resource
-    private AdminBiz adminBiz;
-
-
-    // ---------------------- base ----------------------
-
-    /**
-     * valid access token
-     */
-    private void validAccessToken(HttpServletRequest request){
-        if (XxlJobAdminConfig.getAdminConfig().getAccessToken()!=null
-                && XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length()>0
-                && !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_RPC_ACCESS_TOKEN))) {
-            throw new XxlJobException("The access token is wrong.");
-        }
-    }
-
-    /**
-     * parse Param
-     */
-    private Object parseParam(String data, Class<?> parametrized, Class<?>... parameterClasses){
-        Object param = null;
-        try {
-            if (parameterClasses != null) {
-                param = JacksonUtil.readValue(data, parametrized, parameterClasses);
-            } else {
-                param = JacksonUtil.readValue(data, parametrized);
-            }
-        } catch (Exception e) { }
-        if (param==null) {
-            throw new XxlJobException("The request data invalid.");
-        }
-        return param;
-    }
-
-    // ---------------------- admin biz ----------------------
-
-    /**
-     * callback
-     *
-     * @param data
-     * @return
-     */
-    @RequestMapping("/callback")
-    @ResponseBody
-    @PermissionLimit(limit=false)
-    public ReturnT<String> callback(HttpServletRequest request, @RequestBody(required = false) String data) {
-        // valid
-        validAccessToken(request);
-
-        // param
-        List<HandleCallbackParam> callbackParamList = (List<HandleCallbackParam>) parseParam(data, List.class, HandleCallbackParam.class);
-
-        // invoke
-        return adminBiz.callback(callbackParamList);
-    }
-
-
-
-    /**
-     * registry
-     *
-     * @param data
-     * @return
-     */
-    @RequestMapping("/registry")
-    @ResponseBody
-    @PermissionLimit(limit=false)
-    public ReturnT<String> registry(HttpServletRequest request, @RequestBody(required = false) String data) {
-        // valid
-        validAccessToken(request);
-
-        // param
-        RegistryParam registryParam = (RegistryParam) parseParam(data, RegistryParam.class);
-
-        // invoke
-        return adminBiz.registry(registryParam);
-    }
-
-    /**
-     * registry remove
-     *
-     * @param data
-     * @return
-     */
-    @RequestMapping("/registryRemove")
-    @ResponseBody
-    @PermissionLimit(limit=false)
-    public ReturnT<String> registryRemove(HttpServletRequest request, @RequestBody(required = false) String data) {
-        // valid
-        validAccessToken(request);
-
-        // param
-        RegistryParam registryParam = (RegistryParam) parseParam(data, RegistryParam.class);
-
-        // invoke
-        return adminBiz.registryRemove(registryParam);
-    }
-
-    // ---------------------- job biz ----------------------
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
deleted file mode 100644
index 559d965..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLogGlue;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.XxlJobInfoDao;
-import com.xxl.job.admin.dao.XxlJobLogGlueDao;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.glue.GlueTypeEnum;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
-import java.util.List;
-
-/**
- * job code controller
- * @author xuxueli 2015-12-19 16:13:16
- */
-@Controller
-@RequestMapping("/jobcode")
-public class JobCodeController {
-
-	@Resource
-	private XxlJobInfoDao xxlJobInfoDao;
-	@Resource
-	private XxlJobLogGlueDao xxlJobLogGlueDao;
-
-	@RequestMapping
-	public String index(HttpServletRequest request, Model model, int jobId) {
-		XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
-		List<XxlJobLogGlue> jobLogGlues = xxlJobLogGlueDao.findByJobId(jobId);
-
-		if (jobInfo == null) {
-			throw new RuntimeException(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
-		}
-		if (GlueTypeEnum.BEAN == GlueTypeEnum.match(jobInfo.getGlueType())) {
-			throw new RuntimeException(I18nUtil.getString("jobinfo_glue_gluetype_unvalid"));
-		}
-
-		// valid permission
-		JobInfoController.validPermission(request, jobInfo.getJobGroup());
-
-		// Glue绫诲瀷-瀛楀吀
-		model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());
-
-		model.addAttribute("jobInfo", jobInfo);
-		model.addAttribute("jobLogGlues", jobLogGlues);
-		return "jobcode/jobcode.index";
-	}
-
-	@RequestMapping("/save")
-	@ResponseBody
-	public ReturnT<String> save(Model model, int id, String glueSource, String glueRemark) {
-		// valid
-		if (glueRemark==null) {
-			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) );
-		}
-		if (glueRemark.length()<4 || glueRemark.length()>100) {
-			return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_remark_limit"));
-		}
-		XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(id);
-		if (exists_jobInfo == null) {
-			return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
-		}
-
-		// update new code
-		exists_jobInfo.setGlueSource(glueSource);
-		exists_jobInfo.setGlueRemark(glueRemark);
-		exists_jobInfo.setGlueUpdatetime(new Date());
-
-		exists_jobInfo.setUpdateTime(new Date());
-		xxlJobInfoDao.update(exists_jobInfo);
-
-		// log old code
-		XxlJobLogGlue xxlJobLogGlue = new XxlJobLogGlue();
-		xxlJobLogGlue.setJobId(exists_jobInfo.getId());
-		xxlJobLogGlue.setGlueType(exists_jobInfo.getGlueType());
-		xxlJobLogGlue.setGlueSource(glueSource);
-		xxlJobLogGlue.setGlueRemark(glueRemark);
-
-		xxlJobLogGlue.setAddTime(new Date());
-		xxlJobLogGlue.setUpdateTime(new Date());
-		xxlJobLogGlueDao.save(xxlJobLogGlue);
-
-		// remove code backup more than 30
-		xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 30);
-
-		return ReturnT.SUCCESS;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
deleted file mode 100644
index 9376eb7..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobRegistry;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.XxlJobGroupDao;
-import com.xxl.job.admin.dao.XxlJobInfoDao;
-import com.xxl.job.admin.dao.XxlJobRegistryDao;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.enums.RegistryConfig;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-/**
- * job group controller
- * @author xuxueli 2016-10-02 20:52:56
- */
-@Controller
-@RequestMapping("/jobgroup")
-public class JobGroupController {
-
-	@Resource
-	public XxlJobInfoDao xxlJobInfoDao;
-	@Resource
-	public XxlJobGroupDao xxlJobGroupDao;
-	@Resource
-	private XxlJobRegistryDao xxlJobRegistryDao;
-
-	@RequestMapping
-	public String index(Model model) {
-
-		// job group (executor)
-		List<XxlJobGroup> list = xxlJobGroupDao.findAll();
-
-		model.addAttribute("list", list);
-		return "jobgroup/jobgroup.index";
-	}
-
-	@RequestMapping("/save")
-	@ResponseBody
-	public ReturnT<String> save(XxlJobGroup xxlJobGroup){
-
-		// valid
-		if (xxlJobGroup.getAppName()==null || xxlJobGroup.getAppName().trim().length()==0) {
-			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input")+"AppName") );
-		}
-		if (xxlJobGroup.getAppName().length()<4 || xxlJobGroup.getAppName().length()>64) {
-			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_appName_length") );
-		}
-		if (xxlJobGroup.getTitle()==null || xxlJobGroup.getTitle().trim().length()==0) {
-			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) );
-		}
-		if (xxlJobGroup.getAddressType()!=0) {
-			if (xxlJobGroup.getAddressList()==null || xxlJobGroup.getAddressList().trim().length()==0) {
-				return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_addressType_limit") );
-			}
-			String[] addresss = xxlJobGroup.getAddressList().split(",");
-			for (String item: addresss) {
-				if (item==null || item.trim().length()==0) {
-					return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_registryList_unvalid") );
-				}
-			}
-		}
-
-		int ret = xxlJobGroupDao.save(xxlJobGroup);
-		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
-	}
-
-	@RequestMapping("/update")
-	@ResponseBody
-	public ReturnT<String> update(XxlJobGroup xxlJobGroup){
-		// valid
-		if (xxlJobGroup.getAppName()==null || xxlJobGroup.getAppName().trim().length()==0) {
-			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input")+"AppName") );
-		}
-		if (xxlJobGroup.getAppName().length()<4 || xxlJobGroup.getAppName().length()>64) {
-			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_appName_length") );
-		}
-		if (xxlJobGroup.getTitle()==null || xxlJobGroup.getTitle().trim().length()==0) {
-			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) );
-		}
-		if (xxlJobGroup.getAddressType() == 0) {
-			// 0=鑷姩娉ㄥ唽
-			List<String> registryList = findRegistryByAppName(xxlJobGroup.getAppName());
-			String addressListStr = null;
-			if (registryList!=null && !registryList.isEmpty()) {
-				Collections.sort(registryList);
-				addressListStr = "";
-				for (String item:registryList) {
-					addressListStr += item + ",";
-				}
-				addressListStr = addressListStr.substring(0, addressListStr.length()-1);
-			}
-			xxlJobGroup.setAddressList(addressListStr);
-		} else {
-			// 1=鎵嬪姩褰曞叆
-			if (xxlJobGroup.getAddressList()==null || xxlJobGroup.getAddressList().trim().length()==0) {
-				return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_addressType_limit") );
-			}
-			String[] addresss = xxlJobGroup.getAddressList().split(",");
-			for (String item: addresss) {
-				if (item==null || item.trim().length()==0) {
-					return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_registryList_unvalid") );
-				}
-			}
-		}
-
-		int ret = xxlJobGroupDao.update(xxlJobGroup);
-		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
-	}
-
-	private List<String> findRegistryByAppName(String appNameParam){
-		HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
-		List<XxlJobRegistry> list = xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
-		if (list != null) {
-			for (XxlJobRegistry item: list) {
-				if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
-					String appName = item.getRegistryKey();
-					List<String> registryList = appAddressMap.get(appName);
-					if (registryList == null) {
-						registryList = new ArrayList<String>();
-					}
-
-					if (!registryList.contains(item.getRegistryValue())) {
-						registryList.add(item.getRegistryValue());
-					}
-					appAddressMap.put(appName, registryList);
-				}
-			}
-		}
-		return appAddressMap.get(appNameParam);
-	}
-
-	@RequestMapping("/remove")
-	@ResponseBody
-	public ReturnT<String> remove(int id){
-
-		// valid
-		int count = xxlJobInfoDao.pageListCount(0, 10, id, -1,  null, null, null);
-		if (count > 0) {
-			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_del_limit_0") );
-		}
-
-		List<XxlJobGroup> allList = xxlJobGroupDao.findAll();
-		if (allList.size() == 1) {
-			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_del_limit_1") );
-		}
-
-		int ret = xxlJobGroupDao.remove(id);
-		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
-	}
-
-	@RequestMapping("/loadById")
-	@ResponseBody
-	public ReturnT<XxlJobGroup> loadById(int id){
-		XxlJobGroup jobGroup = xxlJobGroupDao.load(id);
-		return jobGroup!=null?new ReturnT<XxlJobGroup>(jobGroup):new ReturnT<XxlJobGroup>(ReturnT.FAIL_CODE, null);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
deleted file mode 100644
index ec9f37d..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.core.cron.CronExpression;
-import com.xxl.job.admin.core.exception.XxlJobException;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobUser;
-import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
-import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.XxlJobGroupDao;
-import com.xxl.job.admin.service.LoginService;
-import com.xxl.job.admin.service.XxlJobService;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-import com.xxl.job.core.glue.GlueTypeEnum;
-import com.xxl.job.core.util.DateUtil;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.text.ParseException;
-import java.util.*;
-
-/**
- * index controller
- * @author xuxueli 2015-12-19 16:13:16
- */
-@Controller
-@RequestMapping("/jobinfo")
-public class JobInfoController {
-
-	@Resource
-	private XxlJobGroupDao xxlJobGroupDao;
-	@Resource
-	private XxlJobService xxlJobService;
-
-	@RequestMapping
-	public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) {
-
-		// 鏋氫妇-瀛楀吀
-		model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values());	    // 璺敱绛栫暐-鍒楄〃
-		model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());								// Glue绫诲瀷-瀛楀吀
-		model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values());	    // 闃诲澶勭悊绛栫暐-瀛楀吀
-
-		// 鎵ц鍣ㄥ垪琛�
-		List<XxlJobGroup> jobGroupList_all =  xxlJobGroupDao.findAll();
-
-		// filter group
-		List<XxlJobGroup> jobGroupList = filterJobGroupByRole(request, jobGroupList_all);
-		if (jobGroupList==null || jobGroupList.size()==0) {
-			throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
-		}
-
-		model.addAttribute("JobGroupList", jobGroupList);
-		model.addAttribute("jobGroup", jobGroup);
-
-		return "jobinfo/jobinfo.index";
-	}
-
-	public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all){
-		List<XxlJobGroup> jobGroupList = new ArrayList<>();
-		if (jobGroupList_all!=null && jobGroupList_all.size()>0) {
-			XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
-			if (loginUser.getRole() == 1) {
-				jobGroupList = jobGroupList_all;
-			} else {
-				List<String> groupIdStrs = new ArrayList<>();
-				if (loginUser.getPermission()!=null && loginUser.getPermission().trim().length()>0) {
-					groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(","));
-				}
-				for (XxlJobGroup groupItem:jobGroupList_all) {
-					if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) {
-						jobGroupList.add(groupItem);
-					}
-				}
-			}
-		}
-		return jobGroupList;
-	}
-	public static void validPermission(HttpServletRequest request, int jobGroup) {
-		XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
-		if (!loginUser.validPermission(jobGroup)) {
-			throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginUser.getUsername() +"]");
-		}
-	}
-
-	@RequestMapping("/pageList")
-	@ResponseBody
-	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
-			@RequestParam(required = false, defaultValue = "10") int length,
-			int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
-
-		return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
-	}
-
-	@RequestMapping("/add")
-	@ResponseBody
-	public ReturnT<String> add(XxlJobInfo jobInfo) {
-		return xxlJobService.add(jobInfo);
-	}
-
-	@RequestMapping("/update")
-	@ResponseBody
-	public ReturnT<String> update(XxlJobInfo jobInfo) {
-		return xxlJobService.update(jobInfo);
-	}
-
-	@RequestMapping("/remove")
-	@ResponseBody
-	public ReturnT<String> remove(int id) {
-		return xxlJobService.remove(id);
-	}
-
-	@RequestMapping("/stop")
-	@ResponseBody
-	public ReturnT<String> pause(int id) {
-		return xxlJobService.stop(id);
-	}
-
-	@RequestMapping("/start")
-	@ResponseBody
-	public ReturnT<String> start(int id) {
-		return xxlJobService.start(id);
-	}
-
-	@RequestMapping("/trigger")
-	@ResponseBody
-	//@PermissionLimit(limit = false)
-	public ReturnT<String> triggerJob(int id, String executorParam) {
-		// force cover job param
-		if (executorParam == null) {
-			executorParam = "";
-		}
-
-		JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam);
-		return ReturnT.SUCCESS;
-	}
-
-	@RequestMapping("/nextTriggerTime")
-	@ResponseBody
-	public ReturnT<List<String>> nextTriggerTime(String cron) {
-		List<String> result = new ArrayList<>();
-		try {
-			CronExpression cronExpression = new CronExpression(cron);
-			Date lastTime = new Date();
-			for (int i = 0; i < 5; i++) {
-				lastTime = cronExpression.getNextValidTimeAfter(lastTime);
-				if (lastTime != null) {
-					result.add(DateUtil.formatDateTime(lastTime));
-				} else {
-					break;
-				}
-			}
-		} catch (ParseException e) {
-			return new ReturnT<List<String>>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid"));
-		}
-		return new ReturnT<List<String>>(result);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
deleted file mode 100644
index 309769c..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.core.exception.XxlJobException;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.XxlJobGroupDao;
-import com.xxl.job.admin.dao.XxlJobInfoDao;
-import com.xxl.job.admin.dao.XxlJobLogDao;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.model.LogResult;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.util.DateUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * index controller
- * @author xuxueli 2015-12-19 16:13:16
- */
-@Controller
-@RequestMapping("/joblog")
-public class JobLogController {
-	private static Logger logger = LoggerFactory.getLogger(JobLogController.class);
-
-	@Resource
-	private XxlJobGroupDao xxlJobGroupDao;
-	@Resource
-	public XxlJobInfoDao xxlJobInfoDao;
-	@Resource
-	public XxlJobLogDao xxlJobLogDao;
-
-	@RequestMapping
-	public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) {
-
-		// 鎵ц鍣ㄥ垪琛�
-		List<XxlJobGroup> jobGroupList_all =  xxlJobGroupDao.findAll();
-
-		// filter group
-		List<XxlJobGroup> jobGroupList = JobInfoController.filterJobGroupByRole(request, jobGroupList_all);
-		if (jobGroupList==null || jobGroupList.size()==0) {
-			throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
-		}
-
-		model.addAttribute("JobGroupList", jobGroupList);
-
-		// 浠诲姟
-		if (jobId > 0) {
-			XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
-			if (jobInfo == null) {
-				throw new RuntimeException(I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_unvalid"));
-			}
-
-			model.addAttribute("jobInfo", jobInfo);
-
-			// valid permission
-			JobInfoController.validPermission(request, jobInfo.getJobGroup());
-		}
-
-		return "joblog/joblog.index";
-	}
-
-	@RequestMapping("/getJobsByGroup")
-	@ResponseBody
-	public ReturnT<List<XxlJobInfo>> getJobsByGroup(int jobGroup){
-		List<XxlJobInfo> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
-		return new ReturnT<List<XxlJobInfo>>(list);
-	}
-
-	@RequestMapping("/pageList")
-	@ResponseBody
-	public Map<String, Object> pageList(HttpServletRequest request,
-										@RequestParam(required = false, defaultValue = "0") int start,
-										@RequestParam(required = false, defaultValue = "10") int length,
-										int jobGroup, int jobId, int logStatus, String filterTime) {
-
-		// valid permission
-		JobInfoController.validPermission(request, jobGroup);	// 浠呯鐞嗗憳鏀寔鏌ヨ鍏ㄩ儴锛涙櫘閫氱敤鎴蜂粎鏀寔鏌ヨ鏈夋潈闄愮殑 jobGroup
-
-		// parse param
-		Date triggerTimeStart = null;
-		Date triggerTimeEnd = null;
-		if (filterTime!=null && filterTime.trim().length()>0) {
-			String[] temp = filterTime.split(" - ");
-			if (temp.length == 2) {
-				triggerTimeStart = DateUtil.parseDateTime(temp[0]);
-				triggerTimeEnd = DateUtil.parseDateTime(temp[1]);
-			}
-		}
-
-		// page query
-		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
-		int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
-
-		// package result
-		Map<String, Object> maps = new HashMap<String, Object>();
-	    maps.put("recordsTotal", list_count);		// 鎬昏褰曟暟
-	    maps.put("recordsFiltered", list_count);	// 杩囨护鍚庣殑鎬昏褰曟暟
-	    maps.put("data", list);  					// 鍒嗛〉鍒楄〃
-		return maps;
-	}
-
-	@RequestMapping("/logDetailPage")
-	public String logDetailPage(int id, Model model){
-
-		// base check
-		ReturnT<String> logStatue = ReturnT.SUCCESS;
-		XxlJobLog jobLog = xxlJobLogDao.load(id);
-		if (jobLog == null) {
-            throw new RuntimeException(I18nUtil.getString("joblog_logid_unvalid"));
-		}
-
-        model.addAttribute("triggerCode", jobLog.getTriggerCode());
-        model.addAttribute("handleCode", jobLog.getHandleCode());
-        model.addAttribute("executorAddress", jobLog.getExecutorAddress());
-        model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
-        model.addAttribute("logId", jobLog.getId());
-		return "joblog/joblog.detail";
-	}
-
-	@RequestMapping("/logDetailCat")
-	@ResponseBody
-	public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum){
-		try {
-			ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(executorAddress);
-			ReturnT<LogResult> logResult = executorBiz.log(triggerTime, logId, fromLineNum);
-
-			// is end
-            if (logResult.getContent()!=null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
-                XxlJobLog jobLog = xxlJobLogDao.load(logId);
-                if (jobLog.getHandleCode() > 0) {
-                    logResult.getContent().setEnd(true);
-                }
-            }
-
-			return logResult;
-		} catch (Exception e) {
-			logger.error(e.getMessage(), e);
-			return new ReturnT<LogResult>(ReturnT.FAIL_CODE, e.getMessage());
-		}
-	}
-
-	@RequestMapping("/logKill")
-	@ResponseBody
-	public ReturnT<String> logKill(int id){
-		// base check
-		XxlJobLog log = xxlJobLogDao.load(id);
-		XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId());
-		if (jobInfo==null) {
-			return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
-		}
-		if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
-			return new ReturnT<String>(500, I18nUtil.getString("joblog_kill_log_limit"));
-		}
-
-		// request of kill
-		ReturnT<String> runResult = null;
-		try {
-			ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(log.getExecutorAddress());
-			runResult = executorBiz.kill(jobInfo.getId());
-		} catch (Exception e) {
-			logger.error(e.getMessage(), e);
-			runResult = new ReturnT<String>(500, e.getMessage());
-		}
-
-		if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
-			log.setHandleCode(ReturnT.FAIL_CODE);
-			log.setHandleMsg( I18nUtil.getString("joblog_kill_log_byman")+":" + (runResult.getMsg()!=null?runResult.getMsg():""));
-			log.setHandleTime(new Date());
-			xxlJobLogDao.updateHandleInfo(log);
-			return new ReturnT<String>(runResult.getMsg());
-		} else {
-			return new ReturnT<String>(500, runResult.getMsg());
-		}
-	}
-
-	@RequestMapping("/clearLog")
-	@ResponseBody
-	public ReturnT<String> clearLog(int jobGroup, int jobId, int type){
-
-		Date clearBeforeTime = null;
-		int clearBeforeNum = 0;
-		if (type == 1) {
-			clearBeforeTime = DateUtil.addMonths(new Date(), -1);	// 娓呯悊涓�涓湀涔嬪墠鏃ュ織鏁版嵁
-		} else if (type == 2) {
-			clearBeforeTime = DateUtil.addMonths(new Date(), -3);	// 娓呯悊涓変釜鏈堜箣鍓嶆棩蹇楁暟鎹�
-		} else if (type == 3) {
-			clearBeforeTime = DateUtil.addMonths(new Date(), -6);	// 娓呯悊鍏釜鏈堜箣鍓嶆棩蹇楁暟鎹�
-		} else if (type == 4) {
-			clearBeforeTime = DateUtil.addYears(new Date(), -1);	// 娓呯悊涓�骞翠箣鍓嶆棩蹇楁暟鎹�
-		} else if (type == 5) {
-			clearBeforeNum = 1000;		// 娓呯悊涓�鍗冩潯浠ュ墠鏃ュ織鏁版嵁
-		} else if (type == 6) {
-			clearBeforeNum = 10000;		// 娓呯悊涓�涓囨潯浠ュ墠鏃ュ織鏁版嵁
-		} else if (type == 7) {
-			clearBeforeNum = 30000;		// 娓呯悊涓変竾鏉′互鍓嶆棩蹇楁暟鎹�
-		} else if (type == 8) {
-			clearBeforeNum = 100000;	// 娓呯悊鍗佷竾鏉′互鍓嶆棩蹇楁暟鎹�
-		} else if (type == 9) {
-			clearBeforeNum = 0;			// 娓呯悊鎵�鏈夋棩蹇楁暟鎹�
-		} else {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_clean_type_unvalid"));
-		}
-
-		List<Long> logIds = null;
-		do {
-			logIds = xxlJobLogDao.findClearLogIds(jobGroup, jobId, clearBeforeTime, clearBeforeNum, 1000);
-			if (logIds!=null && logIds.size()>0) {
-				xxlJobLogDao.clearLog(logIds);
-			}
-		} while (logIds!=null && logIds.size()>0);
-
-		return ReturnT.SUCCESS;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/UserController.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/UserController.java
deleted file mode 100644
index 573ffcc..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/UserController.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.controller.annotation.PermissionLimit;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobUser;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.XxlJobGroupDao;
-import com.xxl.job.admin.dao.XxlJobUserDao;
-import com.xxl.job.admin.service.LoginService;
-import com.xxl.job.core.biz.model.ReturnT;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.util.DigestUtils;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author xuxueli 2019-05-04 16:39:50
- */
-@Controller
-@RequestMapping("/user")
-public class UserController {
-
-    @Resource
-    private XxlJobUserDao xxlJobUserDao;
-    @Resource
-    private XxlJobGroupDao xxlJobGroupDao;
-
-    @RequestMapping
-    @PermissionLimit(adminuser = true)
-    public String index(Model model) {
-
-        // 鎵ц鍣ㄥ垪琛�
-        List<XxlJobGroup> groupList = xxlJobGroupDao.findAll();
-        model.addAttribute("groupList", groupList);
-
-        return "user/user.index";
-    }
-
-    @RequestMapping("/pageList")
-    @ResponseBody
-    @PermissionLimit(adminuser = true)
-    public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
-                                        @RequestParam(required = false, defaultValue = "10") int length,
-                                        String username, int role) {
-
-        // page list
-        List<XxlJobUser> list = xxlJobUserDao.pageList(start, length, username, role);
-        int list_count = xxlJobUserDao.pageListCount(start, length, username, role);
-
-        // package result
-        Map<String, Object> maps = new HashMap<String, Object>();
-        maps.put("recordsTotal", list_count);		// 鎬昏褰曟暟
-        maps.put("recordsFiltered", list_count);	// 杩囨护鍚庣殑鎬昏褰曟暟
-        maps.put("data", list);  					// 鍒嗛〉鍒楄〃
-        return maps;
-    }
-
-    @RequestMapping("/add")
-    @ResponseBody
-    @PermissionLimit(adminuser = true)
-    public ReturnT<String> add(XxlJobUser xxlJobUser) {
-
-        // valid username
-        if (!StringUtils.hasText(xxlJobUser.getUsername())) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input")+I18nUtil.getString("user_username") );
-        }
-        xxlJobUser.setUsername(xxlJobUser.getUsername().trim());
-        if (!(xxlJobUser.getUsername().length()>=4 && xxlJobUser.getUsername().length()<=20)) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
-        }
-        // valid password
-        if (!StringUtils.hasText(xxlJobUser.getPassword())) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input")+I18nUtil.getString("user_password") );
-        }
-        xxlJobUser.setPassword(xxlJobUser.getPassword().trim());
-        if (!(xxlJobUser.getPassword().length()>=4 && xxlJobUser.getPassword().length()<=20)) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
-        }
-        // md5 password
-        xxlJobUser.setPassword(DigestUtils.md5DigestAsHex(xxlJobUser.getPassword().getBytes()));
-
-        // check repeat
-        XxlJobUser existUser = xxlJobUserDao.loadByUserName(xxlJobUser.getUsername());
-        if (existUser != null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("user_username_repeat") );
-        }
-
-        // write
-        xxlJobUserDao.save(xxlJobUser);
-        return ReturnT.SUCCESS;
-    }
-
-    @RequestMapping("/update")
-    @ResponseBody
-    @PermissionLimit(adminuser = true)
-    public ReturnT<String> update(HttpServletRequest request, XxlJobUser xxlJobUser) {
-
-        // avoid opt login seft
-        XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
-        if (loginUser.getUsername().equals(xxlJobUser.getUsername())) {
-            return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("user_update_loginuser_limit"));
-        }
-
-        // valid password
-        if (StringUtils.hasText(xxlJobUser.getPassword())) {
-            xxlJobUser.setPassword(xxlJobUser.getPassword().trim());
-            if (!(xxlJobUser.getPassword().length()>=4 && xxlJobUser.getPassword().length()<=20)) {
-                return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
-            }
-            // md5 password
-            xxlJobUser.setPassword(DigestUtils.md5DigestAsHex(xxlJobUser.getPassword().getBytes()));
-        } else {
-            xxlJobUser.setPassword(null);
-        }
-
-        // write
-        xxlJobUserDao.update(xxlJobUser);
-        return ReturnT.SUCCESS;
-    }
-
-    @RequestMapping("/remove")
-    @ResponseBody
-    @PermissionLimit(adminuser = true)
-    public ReturnT<String> remove(HttpServletRequest request, int id) {
-
-        // avoid opt login seft
-        XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
-        if (loginUser.getId() == id) {
-            return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("user_update_loginuser_limit"));
-        }
-
-        xxlJobUserDao.delete(id);
-        return ReturnT.SUCCESS;
-    }
-
-    @RequestMapping("/updatePwd")
-    @ResponseBody
-    public ReturnT<String> updatePwd(HttpServletRequest request, String password){
-
-        // valid password
-        if (password==null || password.trim().length()==0){
-            return new ReturnT<String>(ReturnT.FAIL.getCode(), "瀵嗙爜涓嶅彲涓虹┖");
-        }
-        password = password.trim();
-        if (!(password.length()>=4 && password.length()<=20)) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
-        }
-
-        // md5 password
-        String md5Password = DigestUtils.md5DigestAsHex(password.getBytes());
-
-        // update pwd
-        XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
-
-        // do write
-        XxlJobUser existUser = xxlJobUserDao.loadByUserName(loginUser.getUsername());
-        existUser.setPassword(md5Password);
-        xxlJobUserDao.update(existUser);
-
-        return ReturnT.SUCCESS;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
deleted file mode 100644
index 379efd4..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.xxl.job.admin.controller.annotation;
-
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 鏉冮檺闄愬埗
- * @author xuxueli 2015-12-12 18:29:02
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface PermissionLimit {
-	
-	/**
-	 * 鐧诲綍鎷︽埅 (榛樿鎷︽埅)
-	 */
-	boolean limit() default true;
-
-	/**
-	 * 瑕佹眰绠$悊鍛樻潈闄�
-	 *
-	 * @return
-	 */
-	boolean adminuser() default false;
-
-}
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java
deleted file mode 100644
index 57c1c08..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.xxl.job.admin.controller.interceptor;
-
-import com.xxl.job.admin.core.util.FtlUtil;
-import com.xxl.job.admin.core.util.I18nUtil;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.HashMap;
-
-/**
- * push cookies to model as cookieMap
- *
- * @author xuxueli 2015-12-12 18:09:04
- */
-@Component
-public class CookieInterceptor extends HandlerInterceptorAdapter {
-
-	@Override
-	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
-			ModelAndView modelAndView) throws Exception {
-
-		// cookie
-		if (modelAndView!=null && request.getCookies()!=null && request.getCookies().length>0) {
-			HashMap<String, Cookie> cookieMap = new HashMap<String, Cookie>();
-			for (Cookie ck : request.getCookies()) {
-				cookieMap.put(ck.getName(), ck);
-			}
-			modelAndView.addObject("cookieMap", cookieMap);
-		}
-
-		// static method
-		if (modelAndView != null) {
-			modelAndView.addObject("I18nUtil", FtlUtil.generateStaticModel(I18nUtil.class.getName()));
-		}
-		
-		super.postHandle(request, response, handler, modelAndView);
-	}
-	
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
deleted file mode 100644
index 12d0517..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.xxl.job.admin.controller.interceptor;
-
-import com.xxl.job.admin.controller.annotation.PermissionLimit;
-import com.xxl.job.admin.core.model.XxlJobUser;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.service.LoginService;
-import org.springframework.stereotype.Component;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 鏉冮檺鎷︽埅
- *
- * @author xuxueli 2015-12-12 18:09:04
- */
-@Component
-public class PermissionInterceptor extends HandlerInterceptorAdapter {
-
-	@Resource
-	private LoginService loginService;
-
-	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-
-		if (!(handler instanceof HandlerMethod)) {
-			return super.preHandle(request, response, handler);
-		}
-
-		// if need login
-		boolean needLogin = true;
-		boolean needAdminuser = false;
-		HandlerMethod method = (HandlerMethod)handler;
-		PermissionLimit permission = method.getMethodAnnotation(PermissionLimit.class);
-		if (permission!=null) {
-			needLogin = permission.limit();
-			needAdminuser = permission.adminuser();
-		}
-
-		if (needLogin) {
-			XxlJobUser loginUser = loginService.ifLogin(request, response);
-			if (loginUser == null) {
-				response.sendRedirect(request.getContextPath() + "/toLogin");
-				//request.getRequestDispatcher("/toLogin").forward(request, response);
-				return false;
-			}
-			if (needAdminuser && loginUser.getRole()!=1) {
-				throw new RuntimeException(I18nUtil.getString("system_permission_limit"));
-			}
-			request.setAttribute(LoginService.LOGIN_IDENTITY_KEY, loginUser);
-		}
-
-		return super.preHandle(request, response, handler);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java
deleted file mode 100644
index a9dd7b5..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.xxl.job.admin.controller.interceptor;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-
-/**
- * web mvc config
- *
- * @author xuxueli 2018-04-02 20:48:20
- */
-@Configuration(proxyBeanMethods = false)
-public class WebMvcConfig extends WebMvcConfigurerAdapter {
-
-    @Autowired
-    private PermissionInterceptor permissionInterceptor;
-    @Autowired
-    private CookieInterceptor cookieInterceptor;
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(permissionInterceptor).addPathPatterns("/**");
-        registry.addInterceptor(cookieInterceptor).addPathPatterns("/**");
-        super.addInterceptors(registry);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java
deleted file mode 100644
index 5b14353..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.xxl.job.admin.controller.resolver;
-
-import com.xxl.job.admin.core.exception.XxlJobException;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.admin.core.util.JacksonUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.HandlerExceptionResolver;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * common exception resolver
- *
- * @author xuxueli 2016-1-6 19:22:18
- */
-@Component
-public class WebExceptionResolver implements HandlerExceptionResolver {
-	private static transient Logger logger = LoggerFactory.getLogger(WebExceptionResolver.class);
-
-	@Override
-	public ModelAndView resolveException(HttpServletRequest request,
-			HttpServletResponse response, Object handler, Exception ex) {
-
-		if (!(ex instanceof XxlJobException)) {
-			logger.error("WebExceptionResolver:{}", ex);
-		}
-
-		// if json
-		boolean isJson = false;
-		HandlerMethod method = (HandlerMethod)handler;
-		ResponseBody responseBody = method.getMethodAnnotation(ResponseBody.class);
-		if (responseBody != null) {
-			isJson = true;
-		}
-
-		// error result
-		ReturnT<String> errorResult = new ReturnT<String>(ReturnT.FAIL_CODE, ex.toString().replaceAll("\n", "<br/>"));
-
-		// response
-		ModelAndView mv = new ModelAndView();
-		if (isJson) {
-			try {
-				response.setContentType("application/json;charset=utf-8");
-				response.getWriter().print(JacksonUtil.writeValueAsString(errorResult));
-			} catch (IOException e) {
-				logger.error(e.getMessage(), e);
-			}
-			return mv;
-		} else {
-
-			mv.addObject("exceptionMsg", errorResult.getMsg());
-			mv.setViewName("/common/common.exception");
-			return mv;
-		}
-	}
-	
-}
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
deleted file mode 100644
index 7fc2644..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.xxl.job.admin.core.conf;
-
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.dao.*;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import javax.sql.DataSource;
-
-/**
- * xxl-job config
- *
- * @author xuxueli 2017-04-28
- */
-
-@Component
-public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
-
-    private static XxlJobAdminConfig adminConfig = null;
-    public static XxlJobAdminConfig getAdminConfig() {
-        return adminConfig;
-    }
-
-
-    // ---------------------- XxlJobScheduler ----------------------
-
-    private XxlJobScheduler xxlJobScheduler;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        adminConfig = this;
-
-        xxlJobScheduler = new XxlJobScheduler();
-        xxlJobScheduler.init();
-    }
-
-    @Override
-    public void destroy() throws Exception {
-        xxlJobScheduler.destroy();
-    }
-
-
-    // ---------------------- XxlJobScheduler ----------------------
-
-    // conf
-    @Value("${xxl.job.i18n}")
-    private String i18n;
-
-    @Value("${xxl.job.accessToken}")
-    private String accessToken;
-
-    @Value("${spring.mail.username}")
-    private String emailUserName;
-
-    @Value("${xxl.job.triggerpool.fast.max}")
-    private int triggerPoolFastMax;
-
-    @Value("${xxl.job.triggerpool.slow.max}")
-    private int triggerPoolSlowMax;
-
-    @Value("${xxl.job.logretentiondays}")
-    private int logretentiondays;
-
-    // dao, service
-
-    @Resource
-    private XxlJobLogDao xxlJobLogDao;
-    @Resource
-    private XxlJobInfoDao xxlJobInfoDao;
-    @Resource
-    private XxlJobRegistryDao xxlJobRegistryDao;
-    @Resource
-    private XxlJobGroupDao xxlJobGroupDao;
-    @Resource
-    private XxlJobLogReportDao xxlJobLogReportDao;
-    @Resource
-    private JavaMailSender mailSender;
-    @Resource
-    private DataSource dataSource;
-
-
-    public String getI18n() {
-        return i18n;
-    }
-
-    public String getAccessToken() {
-        return accessToken;
-    }
-
-    public String getEmailUserName() {
-        return emailUserName;
-    }
-
-    public int getTriggerPoolFastMax() {
-        if (triggerPoolFastMax < 200) {
-            return 200;
-        }
-        return triggerPoolFastMax;
-    }
-
-    public int getTriggerPoolSlowMax() {
-        if (triggerPoolSlowMax < 100) {
-            return 100;
-        }
-        return triggerPoolSlowMax;
-    }
-
-    public int getLogretentiondays() {
-        if (logretentiondays < 7) {
-            return -1;  // Limit greater than or equal to 7, otherwise close
-        }
-        return logretentiondays;
-    }
-
-    public XxlJobLogDao getXxlJobLogDao() {
-        return xxlJobLogDao;
-    }
-
-    public XxlJobInfoDao getXxlJobInfoDao() {
-        return xxlJobInfoDao;
-    }
-
-    public XxlJobRegistryDao getXxlJobRegistryDao() {
-        return xxlJobRegistryDao;
-    }
-
-    public XxlJobGroupDao getXxlJobGroupDao() {
-        return xxlJobGroupDao;
-    }
-
-    public XxlJobLogReportDao getXxlJobLogReportDao() {
-        return xxlJobLogReportDao;
-    }
-
-    public JavaMailSender getMailSender() {
-        return mailSender;
-    }
-
-    public DataSource getDataSource() {
-        return dataSource;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java
deleted file mode 100644
index fce2352..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java
+++ /dev/null
@@ -1,1666 +0,0 @@
-/*
- * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
- * use this file except in compliance with the License. You may obtain a copy 
- * of the License at 
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0 
- *   
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
- * License for the specific language governing permissions and limitations 
- * under the License.
- * 
- */
-
-package com.xxl.job.admin.core.cron;
-
-import java.io.Serializable;
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.SortedSet;
-import java.util.StringTokenizer;
-import java.util.TimeZone;
-import java.util.TreeSet;
-
-/**
- * Provides a parser and evaluator for unix-like cron expressions. Cron 
- * expressions provide the ability to specify complex time combinations such as
- * &quot;At 8:00am every Monday through Friday&quot; or &quot;At 1:30am every 
- * last Friday of the month&quot;. 
- * <P>
- * Cron expressions are comprised of 6 required fields and one optional field
- * separated by white space. The fields respectively are described as follows:
- * 
- * <table cellspacing="8">
- * <tr>
- * <th align="left">Field Name</th>
- * <th align="left">&nbsp;</th>
- * <th align="left">Allowed Values</th>
- * <th align="left">&nbsp;</th>
- * <th align="left">Allowed Special Characters</th>
- * </tr>
- * <tr>
- * <td align="left"><code>Seconds</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>0-59</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>, - * /</code></td>
- * </tr>
- * <tr>
- * <td align="left"><code>Minutes</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>0-59</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>, - * /</code></td>
- * </tr>
- * <tr>
- * <td align="left"><code>Hours</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>0-23</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>, - * /</code></td>
- * </tr>
- * <tr>
- * <td align="left"><code>Day-of-month</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>1-31</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>, - * ? / L W</code></td>
- * </tr>
- * <tr>
- * <td align="left"><code>Month</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>0-11 or JAN-DEC</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>, - * /</code></td>
- * </tr>
- * <tr>
- * <td align="left"><code>Day-of-Week</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>1-7 or SUN-SAT</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>, - * ? / L #</code></td>
- * </tr>
- * <tr>
- * <td align="left"><code>Year (Optional)</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>empty, 1970-2199</code></td>
- * <td align="left">&nbsp;</th>
- * <td align="left"><code>, - * /</code></td>
- * </tr>
- * </table>
- * <P>
- * The '*' character is used to specify all values. For example, &quot;*&quot; 
- * in the minute field means &quot;every minute&quot;.
- * <P>
- * The '?' character is allowed for the day-of-month and day-of-week fields. It
- * is used to specify 'no specific value'. This is useful when you need to
- * specify something in one of the two fields, but not the other.
- * <P>
- * The '-' character is used to specify ranges For example &quot;10-12&quot; in
- * the hour field means &quot;the hours 10, 11 and 12&quot;.
- * <P>
- * The ',' character is used to specify additional values. For example
- * &quot;MON,WED,FRI&quot; in the day-of-week field means &quot;the days Monday,
- * Wednesday, and Friday&quot;.
- * <P>
- * The '/' character is used to specify increments. For example &quot;0/15&quot;
- * in the seconds field means &quot;the seconds 0, 15, 30, and 45&quot;. And 
- * &quot;5/15&quot; in the seconds field means &quot;the seconds 5, 20, 35, and
- * 50&quot;.  Specifying '*' before the  '/' is equivalent to specifying 0 is
- * the value to start with. Essentially, for each field in the expression, there
- * is a set of numbers that can be turned on or off. For seconds and minutes, 
- * the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to
- * 31, and for months 0 to 11 (JAN to DEC). The &quot;/&quot; character simply helps you turn
- * on every &quot;nth&quot; value in the given set. Thus &quot;7/6&quot; in the
- * month field only turns on month &quot;7&quot;, it does NOT mean every 6th 
- * month, please note that subtlety.  
- * <P>
- * The 'L' character is allowed for the day-of-month and day-of-week fields.
- * This character is short-hand for &quot;last&quot;, but it has different 
- * meaning in each of the two fields. For example, the value &quot;L&quot; in 
- * the day-of-month field means &quot;the last day of the month&quot; - day 31 
- * for January, day 28 for February on non-leap years. If used in the 
- * day-of-week field by itself, it simply means &quot;7&quot; or 
- * &quot;SAT&quot;. But if used in the day-of-week field after another value, it
- * means &quot;the last xxx day of the month&quot; - for example &quot;6L&quot;
- * means &quot;the last friday of the month&quot;. You can also specify an offset 
- * from the last day of the month, such as "L-3" which would mean the third-to-last 
- * day of the calendar month. <i>When using the 'L' option, it is important not to 
- * specify lists, or ranges of values, as you'll get confusing/unexpected results.</i>
- * <P>
- * The 'W' character is allowed for the day-of-month field.  This character 
- * is used to specify the weekday (Monday-Friday) nearest the given day.  As an 
- * example, if you were to specify &quot;15W&quot; as the value for the 
- * day-of-month field, the meaning is: &quot;the nearest weekday to the 15th of
- * the month&quot;. So if the 15th is a Saturday, the trigger will fire on 
- * Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the
- * 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. 
- * However if you specify &quot;1W&quot; as the value for day-of-month, and the
- * 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not 
- * 'jump' over the boundary of a month's days.  The 'W' character can only be 
- * specified when the day-of-month is a single day, not a range or list of days.
- * <P>
- * The 'L' and 'W' characters can also be combined for the day-of-month 
- * expression to yield 'LW', which translates to &quot;last weekday of the 
- * month&quot;.
- * <P>
- * The '#' character is allowed for the day-of-week field. This character is
- * used to specify &quot;the nth&quot; XXX day of the month. For example, the 
- * value of &quot;6#3&quot; in the day-of-week field means the third Friday of 
- * the month (day 6 = Friday and &quot;#3&quot; = the 3rd one in the month). 
- * Other examples: &quot;2#1&quot; = the first Monday of the month and 
- * &quot;4#5&quot; = the fifth Wednesday of the month. Note that if you specify
- * &quot;#5&quot; and there is not 5 of the given day-of-week in the month, then
- * no firing will occur that month.  If the '#' character is used, there can
- * only be one expression in the day-of-week field (&quot;3#1,6#3&quot; is 
- * not valid, since there are two expressions).
- * <P>
- * <!--The 'C' character is allowed for the day-of-month and day-of-week fields.
- * This character is short-hand for "calendar". This means values are
- * calculated against the associated calendar, if any. If no calendar is
- * associated, then it is equivalent to having an all-inclusive calendar. A
- * value of "5C" in the day-of-month field means "the first day included by the
- * calendar on or after the 5th". A value of "1C" in the day-of-week field
- * means "the first day included by the calendar on or after Sunday".-->
- * <P>
- * The legal characters and the names of months and days of the week are not
- * case sensitive.
- * 
- * <p>
- * <b>NOTES:</b>
- * <ul>
- * <li>Support for specifying both a day-of-week and a day-of-month value is
- * not complete (you'll need to use the '?' character in one of these fields).
- * </li>
- * <li>Overflowing ranges is supported - that is, having a larger number on 
- * the left hand side than the right. You might do 22-2 to catch 10 o'clock 
- * at night until 2 o'clock in the morning, or you might have NOV-FEB. It is 
- * very important to note that overuse of overflowing ranges creates ranges 
- * that don't make sense and no effort has been made to determine which 
- * interpretation CronExpression chooses. An example would be 
- * "0 0 14-6 ? * FRI-MON". </li>
- * </ul>
- * </p>
- * 
- * 
- * @author Sharada Jambula, James House
- * @author Contributions from Mads Henderson
- * @author Refactoring from CronTrigger to CronExpression by Aaron Craven
- *
- * Borrowed from quartz v2.3.1
- *
- */
-public final class CronExpression implements Serializable, Cloneable {
-
-    private static final long serialVersionUID = 12423409423L;
-    
-    protected static final int SECOND = 0;
-    protected static final int MINUTE = 1;
-    protected static final int HOUR = 2;
-    protected static final int DAY_OF_MONTH = 3;
-    protected static final int MONTH = 4;
-    protected static final int DAY_OF_WEEK = 5;
-    protected static final int YEAR = 6;
-    protected static final int ALL_SPEC_INT = 99; // '*'
-    protected static final int NO_SPEC_INT = 98; // '?'
-    protected static final Integer ALL_SPEC = ALL_SPEC_INT;
-    protected static final Integer NO_SPEC = NO_SPEC_INT;
-    
-    protected static final Map<String, Integer> monthMap = new HashMap<String, Integer>(20);
-    protected static final Map<String, Integer> dayMap = new HashMap<String, Integer>(60);
-    static {
-        monthMap.put("JAN", 0);
-        monthMap.put("FEB", 1);
-        monthMap.put("MAR", 2);
-        monthMap.put("APR", 3);
-        monthMap.put("MAY", 4);
-        monthMap.put("JUN", 5);
-        monthMap.put("JUL", 6);
-        monthMap.put("AUG", 7);
-        monthMap.put("SEP", 8);
-        monthMap.put("OCT", 9);
-        monthMap.put("NOV", 10);
-        monthMap.put("DEC", 11);
-
-        dayMap.put("SUN", 1);
-        dayMap.put("MON", 2);
-        dayMap.put("TUE", 3);
-        dayMap.put("WED", 4);
-        dayMap.put("THU", 5);
-        dayMap.put("FRI", 6);
-        dayMap.put("SAT", 7);
-    }
-
-    private final String cronExpression;
-    private TimeZone timeZone = null;
-    protected transient TreeSet<Integer> seconds;
-    protected transient TreeSet<Integer> minutes;
-    protected transient TreeSet<Integer> hours;
-    protected transient TreeSet<Integer> daysOfMonth;
-    protected transient TreeSet<Integer> months;
-    protected transient TreeSet<Integer> daysOfWeek;
-    protected transient TreeSet<Integer> years;
-
-    protected transient boolean lastdayOfWeek = false;
-    protected transient int nthdayOfWeek = 0;
-    protected transient boolean lastdayOfMonth = false;
-    protected transient boolean nearestWeekday = false;
-    protected transient int lastdayOffset = 0;
-    protected transient boolean expressionParsed = false;
-    
-    public static final int MAX_YEAR = Calendar.getInstance().get(Calendar.YEAR) + 100;
-
-    /**
-     * Constructs a new <CODE>CronExpression</CODE> based on the specified 
-     * parameter.
-     * 
-     * @param cronExpression String representation of the cron expression the
-     *                       new object should represent
-     * @throws java.text.ParseException
-     *         if the string expression cannot be parsed into a valid 
-     *         <CODE>CronExpression</CODE>
-     */
-    public CronExpression(String cronExpression) throws ParseException {
-        if (cronExpression == null) {
-            throw new IllegalArgumentException("cronExpression cannot be null");
-        }
-        
-        this.cronExpression = cronExpression.toUpperCase(Locale.US);
-        
-        buildExpression(this.cronExpression);
-    }
-    
-    /**
-     * Constructs a new {@code CronExpression} as a copy of an existing
-     * instance.
-     * 
-     * @param expression
-     *            The existing cron expression to be copied
-     */
-    public CronExpression(CronExpression expression) {
-        /*
-         * We don't call the other constructor here since we need to swallow the
-         * ParseException. We also elide some of the sanity checking as it is
-         * not logically trippable.
-         */
-        this.cronExpression = expression.getCronExpression();
-        try {
-            buildExpression(cronExpression);
-        } catch (ParseException ex) {
-            throw new AssertionError();
-        }
-        if (expression.getTimeZone() != null) {
-            setTimeZone((TimeZone) expression.getTimeZone().clone());
-        }
-    }
-
-    /**
-     * Indicates whether the given date satisfies the cron expression. Note that
-     * milliseconds are ignored, so two Dates falling on different milliseconds
-     * of the same second will always have the same result here.
-     * 
-     * @param date the date to evaluate
-     * @return a boolean indicating whether the given date satisfies the cron
-     *         expression
-     */
-    public boolean isSatisfiedBy(Date date) {
-        Calendar testDateCal = Calendar.getInstance(getTimeZone());
-        testDateCal.setTime(date);
-        testDateCal.set(Calendar.MILLISECOND, 0);
-        Date originalDate = testDateCal.getTime();
-        
-        testDateCal.add(Calendar.SECOND, -1);
-        
-        Date timeAfter = getTimeAfter(testDateCal.getTime());
-
-        return ((timeAfter != null) && (timeAfter.equals(originalDate)));
-    }
-    
-    /**
-     * Returns the next date/time <I>after</I> the given date/time which
-     * satisfies the cron expression.
-     * 
-     * @param date the date/time at which to begin the search for the next valid
-     *             date/time
-     * @return the next valid date/time
-     */
-    public Date getNextValidTimeAfter(Date date) {
-        return getTimeAfter(date);
-    }
-    
-    /**
-     * Returns the next date/time <I>after</I> the given date/time which does
-     * <I>not</I> satisfy the expression
-     * 
-     * @param date the date/time at which to begin the search for the next 
-     *             invalid date/time
-     * @return the next valid date/time
-     */
-    public Date getNextInvalidTimeAfter(Date date) {
-        long difference = 1000;
-        
-        //move back to the nearest second so differences will be accurate
-        Calendar adjustCal = Calendar.getInstance(getTimeZone());
-        adjustCal.setTime(date);
-        adjustCal.set(Calendar.MILLISECOND, 0);
-        Date lastDate = adjustCal.getTime();
-        
-        Date newDate;
-        
-        //FUTURE_TODO: (QUARTZ-481) IMPROVE THIS! The following is a BAD solution to this problem. Performance will be very bad here, depending on the cron expression. It is, however A solution.
-        
-        //keep getting the next included time until it's farther than one second
-        // apart. At that point, lastDate is the last valid fire time. We return
-        // the second immediately following it.
-        while (difference == 1000) {
-            newDate = getTimeAfter(lastDate);
-            if(newDate == null)
-                break;
-            
-            difference = newDate.getTime() - lastDate.getTime();
-            
-            if (difference == 1000) {
-                lastDate = newDate;
-            }
-        }
-        
-        return new Date(lastDate.getTime() + 1000);
-    }
-    
-    /**
-     * Returns the time zone for which this <code>CronExpression</code> 
-     * will be resolved.
-     */
-    public TimeZone getTimeZone() {
-        if (timeZone == null) {
-            timeZone = TimeZone.getDefault();
-        }
-
-        return timeZone;
-    }
-
-    /**
-     * Sets the time zone for which  this <code>CronExpression</code> 
-     * will be resolved.
-     */
-    public void setTimeZone(TimeZone timeZone) {
-        this.timeZone = timeZone;
-    }
-    
-    /**
-     * Returns the string representation of the <CODE>CronExpression</CODE>
-     * 
-     * @return a string representation of the <CODE>CronExpression</CODE>
-     */
-    @Override
-    public String toString() {
-        return cronExpression;
-    }
-
-    /**
-     * Indicates whether the specified cron expression can be parsed into a 
-     * valid cron expression
-     * 
-     * @param cronExpression the expression to evaluate
-     * @return a boolean indicating whether the given expression is a valid cron
-     *         expression
-     */
-    public static boolean isValidExpression(String cronExpression) {
-        
-        try {
-            new CronExpression(cronExpression);
-        } catch (ParseException pe) {
-            return false;
-        }
-        
-        return true;
-    }
-
-    public static void validateExpression(String cronExpression) throws ParseException {
-        
-        new CronExpression(cronExpression);
-    }
-    
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Expression Parsing Functions
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    protected void buildExpression(String expression) throws ParseException {
-        expressionParsed = true;
-
-        try {
-
-            if (seconds == null) {
-                seconds = new TreeSet<Integer>();
-            }
-            if (minutes == null) {
-                minutes = new TreeSet<Integer>();
-            }
-            if (hours == null) {
-                hours = new TreeSet<Integer>();
-            }
-            if (daysOfMonth == null) {
-                daysOfMonth = new TreeSet<Integer>();
-            }
-            if (months == null) {
-                months = new TreeSet<Integer>();
-            }
-            if (daysOfWeek == null) {
-                daysOfWeek = new TreeSet<Integer>();
-            }
-            if (years == null) {
-                years = new TreeSet<Integer>();
-            }
-
-            int exprOn = SECOND;
-
-            StringTokenizer exprsTok = new StringTokenizer(expression, " \t",
-                    false);
-
-            while (exprsTok.hasMoreTokens() && exprOn <= YEAR) {
-                String expr = exprsTok.nextToken().trim();
-
-                // throw an exception if L is used with other days of the month
-                if(exprOn == DAY_OF_MONTH && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
-                    throw new ParseException("Support for specifying 'L' and 'LW' with other days of the month is not implemented", -1);
-                }
-                // throw an exception if L is used with other days of the week
-                if(exprOn == DAY_OF_WEEK && expr.indexOf('L') != -1 && expr.length() > 1  && expr.contains(",")) {
-                    throw new ParseException("Support for specifying 'L' with other days of the week is not implemented", -1);
-                }
-                if(exprOn == DAY_OF_WEEK && expr.indexOf('#') != -1 && expr.indexOf('#', expr.indexOf('#') +1) != -1) {
-                    throw new ParseException("Support for specifying multiple \"nth\" days is not implemented.", -1);
-                }
-                
-                StringTokenizer vTok = new StringTokenizer(expr, ",");
-                while (vTok.hasMoreTokens()) {
-                    String v = vTok.nextToken();
-                    storeExpressionVals(0, v, exprOn);
-                }
-
-                exprOn++;
-            }
-
-            if (exprOn <= DAY_OF_WEEK) {
-                throw new ParseException("Unexpected end of expression.",
-                            expression.length());
-            }
-
-            if (exprOn <= YEAR) {
-                storeExpressionVals(0, "*", YEAR);
-            }
-
-            TreeSet<Integer> dow = getSet(DAY_OF_WEEK);
-            TreeSet<Integer> dom = getSet(DAY_OF_MONTH);
-
-            // Copying the logic from the UnsupportedOperationException below
-            boolean dayOfMSpec = !dom.contains(NO_SPEC);
-            boolean dayOfWSpec = !dow.contains(NO_SPEC);
-
-            if (!dayOfMSpec || dayOfWSpec) {
-                if (!dayOfWSpec || dayOfMSpec) {
-                    throw new ParseException(
-                            "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.", 0);
-                }
-            }
-        } catch (ParseException pe) {
-            throw pe;
-        } catch (Exception e) {
-            throw new ParseException("Illegal cron expression format ("
-                    + e.toString() + ")", 0);
-        }
-    }
-
-    protected int storeExpressionVals(int pos, String s, int type)
-        throws ParseException {
-
-        int incr = 0;
-        int i = skipWhiteSpace(pos, s);
-        if (i >= s.length()) {
-            return i;
-        }
-        char c = s.charAt(i);
-        if ((c >= 'A') && (c <= 'Z') && (!s.equals("L")) && (!s.equals("LW")) && (!s.matches("^L-[0-9]*[W]?"))) {
-            String sub = s.substring(i, i + 3);
-            int sval = -1;
-            int eval = -1;
-            if (type == MONTH) {
-                sval = getMonthNumber(sub) + 1;
-                if (sval <= 0) {
-                    throw new ParseException("Invalid Month value: '" + sub + "'", i);
-                }
-                if (s.length() > i + 3) {
-                    c = s.charAt(i + 3);
-                    if (c == '-') {
-                        i += 4;
-                        sub = s.substring(i, i + 3);
-                        eval = getMonthNumber(sub) + 1;
-                        if (eval <= 0) {
-                            throw new ParseException("Invalid Month value: '" + sub + "'", i);
-                        }
-                    }
-                }
-            } else if (type == DAY_OF_WEEK) {
-                sval = getDayOfWeekNumber(sub);
-                if (sval < 0) {
-                    throw new ParseException("Invalid Day-of-Week value: '"
-                                + sub + "'", i);
-                }
-                if (s.length() > i + 3) {
-                    c = s.charAt(i + 3);
-                    if (c == '-') {
-                        i += 4;
-                        sub = s.substring(i, i + 3);
-                        eval = getDayOfWeekNumber(sub);
-                        if (eval < 0) {
-                            throw new ParseException(
-                                    "Invalid Day-of-Week value: '" + sub
-                                        + "'", i);
-                        }
-                    } else if (c == '#') {
-                        try {
-                            i += 4;
-                            nthdayOfWeek = Integer.parseInt(s.substring(i));
-                            if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
-                                throw new Exception();
-                            }
-                        } catch (Exception e) {
-                            throw new ParseException(
-                                    "A numeric value between 1 and 5 must follow the '#' option",
-                                    i);
-                        }
-                    } else if (c == 'L') {
-                        lastdayOfWeek = true;
-                        i++;
-                    }
-                }
-
-            } else {
-                throw new ParseException(
-                        "Illegal characters for this position: '" + sub + "'",
-                        i);
-            }
-            if (eval != -1) {
-                incr = 1;
-            }
-            addToSet(sval, eval, incr, type);
-            return (i + 3);
-        }
-
-        if (c == '?') {
-            i++;
-            if ((i + 1) < s.length() 
-                    && (s.charAt(i) != ' ' && s.charAt(i + 1) != '\t')) {
-                throw new ParseException("Illegal character after '?': "
-                            + s.charAt(i), i);
-            }
-            if (type != DAY_OF_WEEK && type != DAY_OF_MONTH) {
-                throw new ParseException(
-                            "'?' can only be specified for Day-of-Month or Day-of-Week.",
-                            i);
-            }
-            if (type == DAY_OF_WEEK && !lastdayOfMonth) {
-                int val = daysOfMonth.last();
-                if (val == NO_SPEC_INT) {
-                    throw new ParseException(
-                                "'?' can only be specified for Day-of-Month -OR- Day-of-Week.",
-                                i);
-                }
-            }
-
-            addToSet(NO_SPEC_INT, -1, 0, type);
-            return i;
-        }
-
-        if (c == '*' || c == '/') {
-            if (c == '*' && (i + 1) >= s.length()) {
-                addToSet(ALL_SPEC_INT, -1, incr, type);
-                return i + 1;
-            } else if (c == '/'
-                    && ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s
-                            .charAt(i + 1) == '\t')) { 
-                throw new ParseException("'/' must be followed by an integer.", i);
-            } else if (c == '*') {
-                i++;
-            }
-            c = s.charAt(i);
-            if (c == '/') { // is an increment specified?
-                i++;
-                if (i >= s.length()) {
-                    throw new ParseException("Unexpected end of string.", i);
-                }
-
-                incr = getNumericValue(s, i);
-
-                i++;
-                if (incr > 10) {
-                    i++;
-                }
-                checkIncrementRange(incr, type, i);
-            } else {
-                incr = 1;
-            }
-
-            addToSet(ALL_SPEC_INT, -1, incr, type);
-            return i;
-        } else if (c == 'L') {
-            i++;
-            if (type == DAY_OF_MONTH) {
-                lastdayOfMonth = true;
-            }
-            if (type == DAY_OF_WEEK) {
-                addToSet(7, 7, 0, type);
-            }
-            if(type == DAY_OF_MONTH && s.length() > i) {
-                c = s.charAt(i);
-                if(c == '-') {
-                    ValueSet vs = getValue(0, s, i+1);
-                    lastdayOffset = vs.value;
-                    if(lastdayOffset > 30)
-                        throw new ParseException("Offset from last day must be <= 30", i+1);
-                    i = vs.pos;
-                }                        
-                if(s.length() > i) {
-                    c = s.charAt(i);
-                    if(c == 'W') {
-                        nearestWeekday = true;
-                        i++;
-                    }
-                }
-            }
-            return i;
-        } else if (c >= '0' && c <= '9') {
-            int val = Integer.parseInt(String.valueOf(c));
-            i++;
-            if (i >= s.length()) {
-                addToSet(val, -1, -1, type);
-            } else {
-                c = s.charAt(i);
-                if (c >= '0' && c <= '9') {
-                    ValueSet vs = getValue(val, s, i);
-                    val = vs.value;
-                    i = vs.pos;
-                }
-                i = checkNext(i, s, val, type);
-                return i;
-            }
-        } else {
-            throw new ParseException("Unexpected character: " + c, i);
-        }
-
-        return i;
-    }
-
-    private void checkIncrementRange(int incr, int type, int idxPos) throws ParseException {
-        if (incr > 59 && (type == SECOND || type == MINUTE)) {
-            throw new ParseException("Increment > 60 : " + incr, idxPos);
-        } else if (incr > 23 && (type == HOUR)) {
-            throw new ParseException("Increment > 24 : " + incr, idxPos);
-        } else if (incr > 31 && (type == DAY_OF_MONTH)) {
-            throw new ParseException("Increment > 31 : " + incr, idxPos);
-        } else if (incr > 7 && (type == DAY_OF_WEEK)) {
-            throw new ParseException("Increment > 7 : " + incr, idxPos);
-        } else if (incr > 12 && (type == MONTH)) {
-            throw new ParseException("Increment > 12 : " + incr, idxPos);
-        }
-    }
-
-    protected int checkNext(int pos, String s, int val, int type)
-        throws ParseException {
-        
-        int end = -1;
-        int i = pos;
-
-        if (i >= s.length()) {
-            addToSet(val, end, -1, type);
-            return i;
-        }
-
-        char c = s.charAt(pos);
-
-        if (c == 'L') {
-            if (type == DAY_OF_WEEK) {
-                if(val < 1 || val > 7)
-                    throw new ParseException("Day-of-Week values must be between 1 and 7", -1);
-                lastdayOfWeek = true;
-            } else {
-                throw new ParseException("'L' option is not valid here. (pos=" + i + ")", i);
-            }
-            TreeSet<Integer> set = getSet(type);
-            set.add(val);
-            i++;
-            return i;
-        }
-        
-        if (c == 'W') {
-            if (type == DAY_OF_MONTH) {
-                nearestWeekday = true;
-            } else {
-                throw new ParseException("'W' option is not valid here. (pos=" + i + ")", i);
-            }
-            if(val > 31)
-                throw new ParseException("The 'W' option does not make sense with values larger than 31 (max number of days in a month)", i); 
-            TreeSet<Integer> set = getSet(type);
-            set.add(val);
-            i++;
-            return i;
-        }
-
-        if (c == '#') {
-            if (type != DAY_OF_WEEK) {
-                throw new ParseException("'#' option is not valid here. (pos=" + i + ")", i);
-            }
-            i++;
-            try {
-                nthdayOfWeek = Integer.parseInt(s.substring(i));
-                if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
-                    throw new Exception();
-                }
-            } catch (Exception e) {
-                throw new ParseException(
-                        "A numeric value between 1 and 5 must follow the '#' option",
-                        i);
-            }
-
-            TreeSet<Integer> set = getSet(type);
-            set.add(val);
-            i++;
-            return i;
-        }
-
-        if (c == '-') {
-            i++;
-            c = s.charAt(i);
-            int v = Integer.parseInt(String.valueOf(c));
-            end = v;
-            i++;
-            if (i >= s.length()) {
-                addToSet(val, end, 1, type);
-                return i;
-            }
-            c = s.charAt(i);
-            if (c >= '0' && c <= '9') {
-                ValueSet vs = getValue(v, s, i);
-                end = vs.value;
-                i = vs.pos;
-            }
-            if (i < s.length() && ((c = s.charAt(i)) == '/')) {
-                i++;
-                c = s.charAt(i);
-                int v2 = Integer.parseInt(String.valueOf(c));
-                i++;
-                if (i >= s.length()) {
-                    addToSet(val, end, v2, type);
-                    return i;
-                }
-                c = s.charAt(i);
-                if (c >= '0' && c <= '9') {
-                    ValueSet vs = getValue(v2, s, i);
-                    int v3 = vs.value;
-                    addToSet(val, end, v3, type);
-                    i = vs.pos;
-                    return i;
-                } else {
-                    addToSet(val, end, v2, type);
-                    return i;
-                }
-            } else {
-                addToSet(val, end, 1, type);
-                return i;
-            }
-        }
-
-        if (c == '/') {
-            if ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s.charAt(i + 1) == '\t') {
-                throw new ParseException("'/' must be followed by an integer.", i);
-            }
-
-            i++;
-            c = s.charAt(i);
-            int v2 = Integer.parseInt(String.valueOf(c));
-            i++;
-            if (i >= s.length()) {
-                checkIncrementRange(v2, type, i);
-                addToSet(val, end, v2, type);
-                return i;
-            }
-            c = s.charAt(i);
-            if (c >= '0' && c <= '9') {
-                ValueSet vs = getValue(v2, s, i);
-                int v3 = vs.value;
-                checkIncrementRange(v3, type, i);
-                addToSet(val, end, v3, type);
-                i = vs.pos;
-                return i;
-            } else {
-                throw new ParseException("Unexpected character '" + c + "' after '/'", i);
-            }
-        }
-
-        addToSet(val, end, 0, type);
-        i++;
-        return i;
-    }
-
-    public String getCronExpression() {
-        return cronExpression;
-    }
-    
-    public String getExpressionSummary() {
-        StringBuilder buf = new StringBuilder();
-
-        buf.append("seconds: ");
-        buf.append(getExpressionSetSummary(seconds));
-        buf.append("\n");
-        buf.append("minutes: ");
-        buf.append(getExpressionSetSummary(minutes));
-        buf.append("\n");
-        buf.append("hours: ");
-        buf.append(getExpressionSetSummary(hours));
-        buf.append("\n");
-        buf.append("daysOfMonth: ");
-        buf.append(getExpressionSetSummary(daysOfMonth));
-        buf.append("\n");
-        buf.append("months: ");
-        buf.append(getExpressionSetSummary(months));
-        buf.append("\n");
-        buf.append("daysOfWeek: ");
-        buf.append(getExpressionSetSummary(daysOfWeek));
-        buf.append("\n");
-        buf.append("lastdayOfWeek: ");
-        buf.append(lastdayOfWeek);
-        buf.append("\n");
-        buf.append("nearestWeekday: ");
-        buf.append(nearestWeekday);
-        buf.append("\n");
-        buf.append("NthDayOfWeek: ");
-        buf.append(nthdayOfWeek);
-        buf.append("\n");
-        buf.append("lastdayOfMonth: ");
-        buf.append(lastdayOfMonth);
-        buf.append("\n");
-        buf.append("years: ");
-        buf.append(getExpressionSetSummary(years));
-        buf.append("\n");
-
-        return buf.toString();
-    }
-
-    protected String getExpressionSetSummary(java.util.Set<Integer> set) {
-
-        if (set.contains(NO_SPEC)) {
-            return "?";
-        }
-        if (set.contains(ALL_SPEC)) {
-            return "*";
-        }
-
-        StringBuilder buf = new StringBuilder();
-
-        Iterator<Integer> itr = set.iterator();
-        boolean first = true;
-        while (itr.hasNext()) {
-            Integer iVal = itr.next();
-            String val = iVal.toString();
-            if (!first) {
-                buf.append(",");
-            }
-            buf.append(val);
-            first = false;
-        }
-
-        return buf.toString();
-    }
-
-    protected String getExpressionSetSummary(java.util.ArrayList<Integer> list) {
-
-        if (list.contains(NO_SPEC)) {
-            return "?";
-        }
-        if (list.contains(ALL_SPEC)) {
-            return "*";
-        }
-
-        StringBuilder buf = new StringBuilder();
-
-        Iterator<Integer> itr = list.iterator();
-        boolean first = true;
-        while (itr.hasNext()) {
-            Integer iVal = itr.next();
-            String val = iVal.toString();
-            if (!first) {
-                buf.append(",");
-            }
-            buf.append(val);
-            first = false;
-        }
-
-        return buf.toString();
-    }
-
-    protected int skipWhiteSpace(int i, String s) {
-        for (; i < s.length() && (s.charAt(i) == ' ' || s.charAt(i) == '\t'); i++) {
-        }
-
-        return i;
-    }
-
-    protected int findNextWhiteSpace(int i, String s) {
-        for (; i < s.length() && (s.charAt(i) != ' ' || s.charAt(i) != '\t'); i++) {
-        }
-
-        return i;
-    }
-
-    protected void addToSet(int val, int end, int incr, int type)
-        throws ParseException {
-        
-        TreeSet<Integer> set = getSet(type);
-
-        if (type == SECOND || type == MINUTE) {
-            if ((val < 0 || val > 59 || end > 59) && (val != ALL_SPEC_INT)) {
-                throw new ParseException(
-                        "Minute and Second values must be between 0 and 59",
-                        -1);
-            }
-        } else if (type == HOUR) {
-            if ((val < 0 || val > 23 || end > 23) && (val != ALL_SPEC_INT)) {
-                throw new ParseException(
-                        "Hour values must be between 0 and 23", -1);
-            }
-        } else if (type == DAY_OF_MONTH) {
-            if ((val < 1 || val > 31 || end > 31) && (val != ALL_SPEC_INT) 
-                    && (val != NO_SPEC_INT)) {
-                throw new ParseException(
-                        "Day of month values must be between 1 and 31", -1);
-            }
-        } else if (type == MONTH) {
-            if ((val < 1 || val > 12 || end > 12) && (val != ALL_SPEC_INT)) {
-                throw new ParseException(
-                        "Month values must be between 1 and 12", -1);
-            }
-        } else if (type == DAY_OF_WEEK) {
-            if ((val == 0 || val > 7 || end > 7) && (val != ALL_SPEC_INT)
-                    && (val != NO_SPEC_INT)) {
-                throw new ParseException(
-                        "Day-of-Week values must be between 1 and 7", -1);
-            }
-        }
-
-        if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) {
-            if (val != -1) {
-                set.add(val);
-            } else {
-                set.add(NO_SPEC);
-            }
-            
-            return;
-        }
-
-        int startAt = val;
-        int stopAt = end;
-
-        if (val == ALL_SPEC_INT && incr <= 0) {
-            incr = 1;
-            set.add(ALL_SPEC); // put in a marker, but also fill values
-        }
-
-        if (type == SECOND || type == MINUTE) {
-            if (stopAt == -1) {
-                stopAt = 59;
-            }
-            if (startAt == -1 || startAt == ALL_SPEC_INT) {
-                startAt = 0;
-            }
-        } else if (type == HOUR) {
-            if (stopAt == -1) {
-                stopAt = 23;
-            }
-            if (startAt == -1 || startAt == ALL_SPEC_INT) {
-                startAt = 0;
-            }
-        } else if (type == DAY_OF_MONTH) {
-            if (stopAt == -1) {
-                stopAt = 31;
-            }
-            if (startAt == -1 || startAt == ALL_SPEC_INT) {
-                startAt = 1;
-            }
-        } else if (type == MONTH) {
-            if (stopAt == -1) {
-                stopAt = 12;
-            }
-            if (startAt == -1 || startAt == ALL_SPEC_INT) {
-                startAt = 1;
-            }
-        } else if (type == DAY_OF_WEEK) {
-            if (stopAt == -1) {
-                stopAt = 7;
-            }
-            if (startAt == -1 || startAt == ALL_SPEC_INT) {
-                startAt = 1;
-            }
-        } else if (type == YEAR) {
-            if (stopAt == -1) {
-                stopAt = MAX_YEAR;
-            }
-            if (startAt == -1 || startAt == ALL_SPEC_INT) {
-                startAt = 1970;
-            }
-        }
-
-        // if the end of the range is before the start, then we need to overflow into 
-        // the next day, month etc. This is done by adding the maximum amount for that 
-        // type, and using modulus max to determine the value being added.
-        int max = -1;
-        if (stopAt < startAt) {
-            switch (type) {
-              case       SECOND : max = 60; break;
-              case       MINUTE : max = 60; break;
-              case         HOUR : max = 24; break;
-              case        MONTH : max = 12; break;
-              case  DAY_OF_WEEK : max = 7;  break;
-              case DAY_OF_MONTH : max = 31; break;
-              case         YEAR : throw new IllegalArgumentException("Start year must be less than stop year");
-              default           : throw new IllegalArgumentException("Unexpected type encountered");
-            }
-            stopAt += max;
-        }
-
-        for (int i = startAt; i <= stopAt; i += incr) {
-            if (max == -1) {
-                // ie: there's no max to overflow over
-                set.add(i);
-            } else {
-                // take the modulus to get the real value
-                int i2 = i % max;
-
-                // 1-indexed ranges should not include 0, and should include their max
-                if (i2 == 0 && (type == MONTH || type == DAY_OF_WEEK || type == DAY_OF_MONTH) ) {
-                    i2 = max;
-                }
-
-                set.add(i2);
-            }
-        }
-    }
-
-    TreeSet<Integer> getSet(int type) {
-        switch (type) {
-            case SECOND:
-                return seconds;
-            case MINUTE:
-                return minutes;
-            case HOUR:
-                return hours;
-            case DAY_OF_MONTH:
-                return daysOfMonth;
-            case MONTH:
-                return months;
-            case DAY_OF_WEEK:
-                return daysOfWeek;
-            case YEAR:
-                return years;
-            default:
-                return null;
-        }
-    }
-
-    protected ValueSet getValue(int v, String s, int i) {
-        char c = s.charAt(i);
-        StringBuilder s1 = new StringBuilder(String.valueOf(v));
-        while (c >= '0' && c <= '9') {
-            s1.append(c);
-            i++;
-            if (i >= s.length()) {
-                break;
-            }
-            c = s.charAt(i);
-        }
-        ValueSet val = new ValueSet();
-        
-        val.pos = (i < s.length()) ? i : i + 1;
-        val.value = Integer.parseInt(s1.toString());
-        return val;
-    }
-
-    protected int getNumericValue(String s, int i) {
-        int endOfVal = findNextWhiteSpace(i, s);
-        String val = s.substring(i, endOfVal);
-        return Integer.parseInt(val);
-    }
-
-    protected int getMonthNumber(String s) {
-        Integer integer = monthMap.get(s);
-
-        if (integer == null) {
-            return -1;
-        }
-
-        return integer;
-    }
-
-    protected int getDayOfWeekNumber(String s) {
-        Integer integer = dayMap.get(s);
-
-        if (integer == null) {
-            return -1;
-        }
-
-        return integer;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Computation Functions
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    public Date getTimeAfter(Date afterTime) {
-
-        // Computation is based on Gregorian year only.
-        Calendar cl = new java.util.GregorianCalendar(getTimeZone()); 
-
-        // move ahead one second, since we're computing the time *after* the
-        // given time
-        afterTime = new Date(afterTime.getTime() + 1000);
-        // CronTrigger does not deal with milliseconds
-        cl.setTime(afterTime);
-        cl.set(Calendar.MILLISECOND, 0);
-
-        boolean gotOne = false;
-        // loop until we've computed the next time, or we've past the endTime
-        while (!gotOne) {
-
-            //if (endTime != null && cl.getTime().after(endTime)) return null;
-            if(cl.get(Calendar.YEAR) > 2999) { // prevent endless loop...
-                return null;
-            }
-
-            SortedSet<Integer> st = null;
-            int t = 0;
-
-            int sec = cl.get(Calendar.SECOND);
-            int min = cl.get(Calendar.MINUTE);
-
-            // get second.................................................
-            st = seconds.tailSet(sec);
-            if (st != null && st.size() != 0) {
-                sec = st.first();
-            } else {
-                sec = seconds.first();
-                min++;
-                cl.set(Calendar.MINUTE, min);
-            }
-            cl.set(Calendar.SECOND, sec);
-
-            min = cl.get(Calendar.MINUTE);
-            int hr = cl.get(Calendar.HOUR_OF_DAY);
-            t = -1;
-
-            // get minute.................................................
-            st = minutes.tailSet(min);
-            if (st != null && st.size() != 0) {
-                t = min;
-                min = st.first();
-            } else {
-                min = minutes.first();
-                hr++;
-            }
-            if (min != t) {
-                cl.set(Calendar.SECOND, 0);
-                cl.set(Calendar.MINUTE, min);
-                setCalendarHour(cl, hr);
-                continue;
-            }
-            cl.set(Calendar.MINUTE, min);
-
-            hr = cl.get(Calendar.HOUR_OF_DAY);
-            int day = cl.get(Calendar.DAY_OF_MONTH);
-            t = -1;
-
-            // get hour...................................................
-            st = hours.tailSet(hr);
-            if (st != null && st.size() != 0) {
-                t = hr;
-                hr = st.first();
-            } else {
-                hr = hours.first();
-                day++;
-            }
-            if (hr != t) {
-                cl.set(Calendar.SECOND, 0);
-                cl.set(Calendar.MINUTE, 0);
-                cl.set(Calendar.DAY_OF_MONTH, day);
-                setCalendarHour(cl, hr);
-                continue;
-            }
-            cl.set(Calendar.HOUR_OF_DAY, hr);
-
-            day = cl.get(Calendar.DAY_OF_MONTH);
-            int mon = cl.get(Calendar.MONTH) + 1;
-            // '+ 1' because calendar is 0-based for this field, and we are
-            // 1-based
-            t = -1;
-            int tmon = mon;
-            
-            // get day...................................................
-            boolean dayOfMSpec = !daysOfMonth.contains(NO_SPEC);
-            boolean dayOfWSpec = !daysOfWeek.contains(NO_SPEC);
-            if (dayOfMSpec && !dayOfWSpec) { // get day by day of month rule
-                st = daysOfMonth.tailSet(day);
-                if (lastdayOfMonth) {
-                    if(!nearestWeekday) {
-                        t = day;
-                        day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-                        day -= lastdayOffset;
-                        if(t > day) {
-                            mon++;
-                            if(mon > 12) { 
-                                mon = 1;
-                                tmon = 3333; // ensure test of mon != tmon further below fails
-                                cl.add(Calendar.YEAR, 1);
-                            }
-                            day = 1;
-                        }
-                    } else {
-                        t = day;
-                        day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-                        day -= lastdayOffset;
-                        
-                        java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
-                        tcal.set(Calendar.SECOND, 0);
-                        tcal.set(Calendar.MINUTE, 0);
-                        tcal.set(Calendar.HOUR_OF_DAY, 0);
-                        tcal.set(Calendar.DAY_OF_MONTH, day);
-                        tcal.set(Calendar.MONTH, mon - 1);
-                        tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
-                        
-                        int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-                        int dow = tcal.get(Calendar.DAY_OF_WEEK);
-
-                        if(dow == Calendar.SATURDAY && day == 1) {
-                            day += 2;
-                        } else if(dow == Calendar.SATURDAY) {
-                            day -= 1;
-                        } else if(dow == Calendar.SUNDAY && day == ldom) { 
-                            day -= 2;
-                        } else if(dow == Calendar.SUNDAY) { 
-                            day += 1;
-                        }
-                    
-                        tcal.set(Calendar.SECOND, sec);
-                        tcal.set(Calendar.MINUTE, min);
-                        tcal.set(Calendar.HOUR_OF_DAY, hr);
-                        tcal.set(Calendar.DAY_OF_MONTH, day);
-                        tcal.set(Calendar.MONTH, mon - 1);
-                        Date nTime = tcal.getTime();
-                        if(nTime.before(afterTime)) {
-                            day = 1;
-                            mon++;
-                        }
-                    }
-                } else if(nearestWeekday) {
-                    t = day;
-                    day = daysOfMonth.first();
-
-                    java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
-                    tcal.set(Calendar.SECOND, 0);
-                    tcal.set(Calendar.MINUTE, 0);
-                    tcal.set(Calendar.HOUR_OF_DAY, 0);
-                    tcal.set(Calendar.DAY_OF_MONTH, day);
-                    tcal.set(Calendar.MONTH, mon - 1);
-                    tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
-                    
-                    int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-                    int dow = tcal.get(Calendar.DAY_OF_WEEK);
-
-                    if(dow == Calendar.SATURDAY && day == 1) {
-                        day += 2;
-                    } else if(dow == Calendar.SATURDAY) {
-                        day -= 1;
-                    } else if(dow == Calendar.SUNDAY && day == ldom) { 
-                        day -= 2;
-                    } else if(dow == Calendar.SUNDAY) { 
-                        day += 1;
-                    }
-                        
-                
-                    tcal.set(Calendar.SECOND, sec);
-                    tcal.set(Calendar.MINUTE, min);
-                    tcal.set(Calendar.HOUR_OF_DAY, hr);
-                    tcal.set(Calendar.DAY_OF_MONTH, day);
-                    tcal.set(Calendar.MONTH, mon - 1);
-                    Date nTime = tcal.getTime();
-                    if(nTime.before(afterTime)) {
-                        day = daysOfMonth.first();
-                        mon++;
-                    }
-                } else if (st != null && st.size() != 0) {
-                    t = day;
-                    day = st.first();
-                    // make sure we don't over-run a short month, such as february
-                    int lastDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-                    if (day > lastDay) {
-                        day = daysOfMonth.first();
-                        mon++;
-                    }
-                } else {
-                    day = daysOfMonth.first();
-                    mon++;
-                }
-                
-                if (day != t || mon != tmon) {
-                    cl.set(Calendar.SECOND, 0);
-                    cl.set(Calendar.MINUTE, 0);
-                    cl.set(Calendar.HOUR_OF_DAY, 0);
-                    cl.set(Calendar.DAY_OF_MONTH, day);
-                    cl.set(Calendar.MONTH, mon - 1);
-                    // '- 1' because calendar is 0-based for this field, and we
-                    // are 1-based
-                    continue;
-                }
-            } else if (dayOfWSpec && !dayOfMSpec) { // get day by day of week rule
-                if (lastdayOfWeek) { // are we looking for the last XXX day of
-                    // the month?
-                    int dow = daysOfWeek.first(); // desired
-                    // d-o-w
-                    int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
-                    int daysToAdd = 0;
-                    if (cDow < dow) {
-                        daysToAdd = dow - cDow;
-                    }
-                    if (cDow > dow) {
-                        daysToAdd = dow + (7 - cDow);
-                    }
-
-                    int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-
-                    if (day + daysToAdd > lDay) { // did we already miss the
-                        // last one?
-                        cl.set(Calendar.SECOND, 0);
-                        cl.set(Calendar.MINUTE, 0);
-                        cl.set(Calendar.HOUR_OF_DAY, 0);
-                        cl.set(Calendar.DAY_OF_MONTH, 1);
-                        cl.set(Calendar.MONTH, mon);
-                        // no '- 1' here because we are promoting the month
-                        continue;
-                    }
-
-                    // find date of last occurrence of this day in this month...
-                    while ((day + daysToAdd + 7) <= lDay) {
-                        daysToAdd += 7;
-                    }
-
-                    day += daysToAdd;
-
-                    if (daysToAdd > 0) {
-                        cl.set(Calendar.SECOND, 0);
-                        cl.set(Calendar.MINUTE, 0);
-                        cl.set(Calendar.HOUR_OF_DAY, 0);
-                        cl.set(Calendar.DAY_OF_MONTH, day);
-                        cl.set(Calendar.MONTH, mon - 1);
-                        // '- 1' here because we are not promoting the month
-                        continue;
-                    }
-
-                } else if (nthdayOfWeek != 0) {
-                    // are we looking for the Nth XXX day in the month?
-                    int dow = daysOfWeek.first(); // desired
-                    // d-o-w
-                    int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
-                    int daysToAdd = 0;
-                    if (cDow < dow) {
-                        daysToAdd = dow - cDow;
-                    } else if (cDow > dow) {
-                        daysToAdd = dow + (7 - cDow);
-                    }
-
-                    boolean dayShifted = false;
-                    if (daysToAdd > 0) {
-                        dayShifted = true;
-                    }
-
-                    day += daysToAdd;
-                    int weekOfMonth = day / 7;
-                    if (day % 7 > 0) {
-                        weekOfMonth++;
-                    }
-
-                    daysToAdd = (nthdayOfWeek - weekOfMonth) * 7;
-                    day += daysToAdd;
-                    if (daysToAdd < 0
-                            || day > getLastDayOfMonth(mon, cl
-                                    .get(Calendar.YEAR))) {
-                        cl.set(Calendar.SECOND, 0);
-                        cl.set(Calendar.MINUTE, 0);
-                        cl.set(Calendar.HOUR_OF_DAY, 0);
-                        cl.set(Calendar.DAY_OF_MONTH, 1);
-                        cl.set(Calendar.MONTH, mon);
-                        // no '- 1' here because we are promoting the month
-                        continue;
-                    } else if (daysToAdd > 0 || dayShifted) {
-                        cl.set(Calendar.SECOND, 0);
-                        cl.set(Calendar.MINUTE, 0);
-                        cl.set(Calendar.HOUR_OF_DAY, 0);
-                        cl.set(Calendar.DAY_OF_MONTH, day);
-                        cl.set(Calendar.MONTH, mon - 1);
-                        // '- 1' here because we are NOT promoting the month
-                        continue;
-                    }
-                } else {
-                    int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
-                    int dow = daysOfWeek.first(); // desired
-                    // d-o-w
-                    st = daysOfWeek.tailSet(cDow);
-                    if (st != null && st.size() > 0) {
-                        dow = st.first();
-                    }
-
-                    int daysToAdd = 0;
-                    if (cDow < dow) {
-                        daysToAdd = dow - cDow;
-                    }
-                    if (cDow > dow) {
-                        daysToAdd = dow + (7 - cDow);
-                    }
-
-                    int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-
-                    if (day + daysToAdd > lDay) { // will we pass the end of
-                        // the month?
-                        cl.set(Calendar.SECOND, 0);
-                        cl.set(Calendar.MINUTE, 0);
-                        cl.set(Calendar.HOUR_OF_DAY, 0);
-                        cl.set(Calendar.DAY_OF_MONTH, 1);
-                        cl.set(Calendar.MONTH, mon);
-                        // no '- 1' here because we are promoting the month
-                        continue;
-                    } else if (daysToAdd > 0) { // are we swithing days?
-                        cl.set(Calendar.SECOND, 0);
-                        cl.set(Calendar.MINUTE, 0);
-                        cl.set(Calendar.HOUR_OF_DAY, 0);
-                        cl.set(Calendar.DAY_OF_MONTH, day + daysToAdd);
-                        cl.set(Calendar.MONTH, mon - 1);
-                        // '- 1' because calendar is 0-based for this field,
-                        // and we are 1-based
-                        continue;
-                    }
-                }
-            } else { // dayOfWSpec && !dayOfMSpec
-                throw new UnsupportedOperationException(
-                        "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.");
-            }
-            cl.set(Calendar.DAY_OF_MONTH, day);
-
-            mon = cl.get(Calendar.MONTH) + 1;
-            // '+ 1' because calendar is 0-based for this field, and we are
-            // 1-based
-            int year = cl.get(Calendar.YEAR);
-            t = -1;
-
-            // test for expressions that never generate a valid fire date,
-            // but keep looping...
-            if (year > MAX_YEAR) {
-                return null;
-            }
-
-            // get month...................................................
-            st = months.tailSet(mon);
-            if (st != null && st.size() != 0) {
-                t = mon;
-                mon = st.first();
-            } else {
-                mon = months.first();
-                year++;
-            }
-            if (mon != t) {
-                cl.set(Calendar.SECOND, 0);
-                cl.set(Calendar.MINUTE, 0);
-                cl.set(Calendar.HOUR_OF_DAY, 0);
-                cl.set(Calendar.DAY_OF_MONTH, 1);
-                cl.set(Calendar.MONTH, mon - 1);
-                // '- 1' because calendar is 0-based for this field, and we are
-                // 1-based
-                cl.set(Calendar.YEAR, year);
-                continue;
-            }
-            cl.set(Calendar.MONTH, mon - 1);
-            // '- 1' because calendar is 0-based for this field, and we are
-            // 1-based
-
-            year = cl.get(Calendar.YEAR);
-            t = -1;
-
-            // get year...................................................
-            st = years.tailSet(year);
-            if (st != null && st.size() != 0) {
-                t = year;
-                year = st.first();
-            } else {
-                return null; // ran out of years...
-            }
-
-            if (year != t) {
-                cl.set(Calendar.SECOND, 0);
-                cl.set(Calendar.MINUTE, 0);
-                cl.set(Calendar.HOUR_OF_DAY, 0);
-                cl.set(Calendar.DAY_OF_MONTH, 1);
-                cl.set(Calendar.MONTH, 0);
-                // '- 1' because calendar is 0-based for this field, and we are
-                // 1-based
-                cl.set(Calendar.YEAR, year);
-                continue;
-            }
-            cl.set(Calendar.YEAR, year);
-
-            gotOne = true;
-        } // while( !done )
-
-        return cl.getTime();
-    }
-
-    /**
-     * Advance the calendar to the particular hour paying particular attention
-     * to daylight saving problems.
-     * 
-     * @param cal the calendar to operate on
-     * @param hour the hour to set
-     */
-    protected void setCalendarHour(Calendar cal, int hour) {
-        cal.set(java.util.Calendar.HOUR_OF_DAY, hour);
-        if (cal.get(java.util.Calendar.HOUR_OF_DAY) != hour && hour != 24) {
-            cal.set(java.util.Calendar.HOUR_OF_DAY, hour + 1);
-        }
-    }
-
-    /**
-     * NOT YET IMPLEMENTED: Returns the time before the given time
-     * that the <code>CronExpression</code> matches.
-     */ 
-    public Date getTimeBefore(Date endTime) { 
-        // FUTURE_TODO: implement QUARTZ-423
-        return null;
-    }
-
-    /**
-     * NOT YET IMPLEMENTED: Returns the final time that the 
-     * <code>CronExpression</code> will match.
-     */
-    public Date getFinalFireTime() {
-        // FUTURE_TODO: implement QUARTZ-423
-        return null;
-    }
-    
-    protected boolean isLeapYear(int year) {
-        return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
-    }
-
-    protected int getLastDayOfMonth(int monthNum, int year) {
-
-        switch (monthNum) {
-            case 1:
-                return 31;
-            case 2:
-                return (isLeapYear(year)) ? 29 : 28;
-            case 3:
-                return 31;
-            case 4:
-                return 30;
-            case 5:
-                return 31;
-            case 6:
-                return 30;
-            case 7:
-                return 31;
-            case 8:
-                return 31;
-            case 9:
-                return 30;
-            case 10:
-                return 31;
-            case 11:
-                return 30;
-            case 12:
-                return 31;
-            default:
-                throw new IllegalArgumentException("Illegal month number: "
-                        + monthNum);
-        }
-    }
-    
-
-    private void readObject(java.io.ObjectInputStream stream)
-        throws java.io.IOException, ClassNotFoundException {
-        
-        stream.defaultReadObject();
-        try {
-            buildExpression(cronExpression);
-        } catch (Exception ignore) {
-        } // never happens
-    }    
-    
-    @Override
-    @Deprecated
-    public Object clone() {
-        return new CronExpression(this);
-    }
-}
-
-class ValueSet {
-    public int value;
-
-    public int pos;
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
deleted file mode 100644
index faa6063..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.xxl.job.admin.core.exception;
-
-/**
- * @author xuxueli 2019-05-04 23:19:29
- */
-public class XxlJobException extends RuntimeException {
-
-    public XxlJobException() {
-    }
-    public XxlJobException(String message) {
-        super(message);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
deleted file mode 100644
index 8af1a63..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-public class XxlJobGroup {
-
-    private int id;
-    private String appName;
-    private String title;
-    private int order;
-    private int addressType;        // 鎵ц鍣ㄥ湴鍧�绫诲瀷锛�0=鑷姩娉ㄥ唽銆�1=鎵嬪姩褰曞叆
-    private String addressList;     // 鎵ц鍣ㄥ湴鍧�鍒楄〃锛屽鍦板潃閫楀彿鍒嗛殧(鎵嬪姩褰曞叆)
-
-    // registry list
-    private List<String> registryList;  // 鎵ц鍣ㄥ湴鍧�鍒楄〃(绯荤粺娉ㄥ唽)
-    public List<String> getRegistryList() {
-        if (addressList!=null && addressList.trim().length()>0) {
-            registryList = new ArrayList<String>(Arrays.asList(addressList.split(",")));
-        }
-        return registryList;
-    }
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getAppName() {
-        return appName;
-    }
-
-    public void setAppName(String appName) {
-        this.appName = appName;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public int getOrder() {
-        return order;
-    }
-
-    public void setOrder(int order) {
-        this.order = order;
-    }
-
-    public int getAddressType() {
-        return addressType;
-    }
-
-    public void setAddressType(int addressType) {
-        this.addressType = addressType;
-    }
-
-    public String getAddressList() {
-        return addressList;
-    }
-
-    public void setAddressList(String addressList) {
-        this.addressList = addressList;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
deleted file mode 100644
index 1e4a74b..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
+++ /dev/null
@@ -1,218 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job info
- *
- * @author xuxueli  2016-1-12 18:25:49
- */
-public class XxlJobInfo {
-	
-	private int id;				// 涓婚敭ID
-	
-	private int jobGroup;		// 鎵ц鍣ㄤ富閿甀D
-	private String jobCron;		// 浠诲姟鎵цCRON琛ㄨ揪寮�
-	private String jobDesc;
-	
-	private Date addTime;
-	private Date updateTime;
-	
-	private String author;		// 璐熻矗浜�
-	private String alarmEmail;	// 鎶ヨ閭欢
-
-	private String executorRouteStrategy;	// 鎵ц鍣ㄨ矾鐢辩瓥鐣�
-	private String executorHandler;		    // 鎵ц鍣紝浠诲姟Handler鍚嶇О
-	private String executorParam;		    // 鎵ц鍣紝浠诲姟鍙傛暟
-	private String executorBlockStrategy;	// 闃诲澶勭悊绛栫暐
-	private int executorTimeout;     		// 浠诲姟鎵ц瓒呮椂鏃堕棿锛屽崟浣嶇
-	private int executorFailRetryCount;		// 澶辫触閲嶈瘯娆℃暟
-	
-	private String glueType;		// GLUE绫诲瀷	#com.xxl.job.core.glue.GlueTypeEnum
-	private String glueSource;		// GLUE婧愪唬鐮�
-	private String glueRemark;		// GLUE澶囨敞
-	private Date glueUpdatetime;	// GLUE鏇存柊鏃堕棿
-
-	private String childJobId;		// 瀛愪换鍔D锛屽涓�楀彿鍒嗛殧
-
-	private int triggerStatus;		// 璋冨害鐘舵�侊細0-鍋滄锛�1-杩愯
-	private long triggerLastTime;	// 涓婃璋冨害鏃堕棿
-	private long triggerNextTime;	// 涓嬫璋冨害鏃堕棿
-
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public int getJobGroup() {
-		return jobGroup;
-	}
-
-	public void setJobGroup(int jobGroup) {
-		this.jobGroup = jobGroup;
-	}
-
-	public String getJobCron() {
-		return jobCron;
-	}
-
-	public void setJobCron(String jobCron) {
-		this.jobCron = jobCron;
-	}
-
-	public String getJobDesc() {
-		return jobDesc;
-	}
-
-	public void setJobDesc(String jobDesc) {
-		this.jobDesc = jobDesc;
-	}
-
-	public Date getAddTime() {
-		return addTime;
-	}
-
-	public void setAddTime(Date addTime) {
-		this.addTime = addTime;
-	}
-
-	public Date getUpdateTime() {
-		return updateTime;
-	}
-
-	public void setUpdateTime(Date updateTime) {
-		this.updateTime = updateTime;
-	}
-
-	public String getAuthor() {
-		return author;
-	}
-
-	public void setAuthor(String author) {
-		this.author = author;
-	}
-
-	public String getAlarmEmail() {
-		return alarmEmail;
-	}
-
-	public void setAlarmEmail(String alarmEmail) {
-		this.alarmEmail = alarmEmail;
-	}
-
-	public String getExecutorRouteStrategy() {
-		return executorRouteStrategy;
-	}
-
-	public void setExecutorRouteStrategy(String executorRouteStrategy) {
-		this.executorRouteStrategy = executorRouteStrategy;
-	}
-
-	public String getExecutorHandler() {
-		return executorHandler;
-	}
-
-	public void setExecutorHandler(String executorHandler) {
-		this.executorHandler = executorHandler;
-	}
-
-	public String getExecutorParam() {
-		return executorParam;
-	}
-
-	public void setExecutorParam(String executorParam) {
-		this.executorParam = executorParam;
-	}
-
-	public String getExecutorBlockStrategy() {
-		return executorBlockStrategy;
-	}
-
-	public void setExecutorBlockStrategy(String executorBlockStrategy) {
-		this.executorBlockStrategy = executorBlockStrategy;
-	}
-
-	public int getExecutorTimeout() {
-		return executorTimeout;
-	}
-
-	public void setExecutorTimeout(int executorTimeout) {
-		this.executorTimeout = executorTimeout;
-	}
-
-	public int getExecutorFailRetryCount() {
-		return executorFailRetryCount;
-	}
-
-	public void setExecutorFailRetryCount(int executorFailRetryCount) {
-		this.executorFailRetryCount = executorFailRetryCount;
-	}
-
-	public String getGlueType() {
-		return glueType;
-	}
-
-	public void setGlueType(String glueType) {
-		this.glueType = glueType;
-	}
-
-	public String getGlueSource() {
-		return glueSource;
-	}
-
-	public void setGlueSource(String glueSource) {
-		this.glueSource = glueSource;
-	}
-
-	public String getGlueRemark() {
-		return glueRemark;
-	}
-
-	public void setGlueRemark(String glueRemark) {
-		this.glueRemark = glueRemark;
-	}
-
-	public Date getGlueUpdatetime() {
-		return glueUpdatetime;
-	}
-
-	public void setGlueUpdatetime(Date glueUpdatetime) {
-		this.glueUpdatetime = glueUpdatetime;
-	}
-
-	public String getChildJobId() {
-		return childJobId;
-	}
-
-	public void setChildJobId(String childJobId) {
-		this.childJobId = childJobId;
-	}
-
-	public int getTriggerStatus() {
-		return triggerStatus;
-	}
-
-	public void setTriggerStatus(int triggerStatus) {
-		this.triggerStatus = triggerStatus;
-	}
-
-	public long getTriggerLastTime() {
-		return triggerLastTime;
-	}
-
-	public void setTriggerLastTime(long triggerLastTime) {
-		this.triggerLastTime = triggerLastTime;
-	}
-
-	public long getTriggerNextTime() {
-		return triggerNextTime;
-	}
-
-	public void setTriggerNextTime(long triggerNextTime) {
-		this.triggerNextTime = triggerNextTime;
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
deleted file mode 100644
index 7d3072a..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job log, used to track trigger process
- * @author xuxueli  2015-12-19 23:19:09
- */
-public class XxlJobLog {
-	
-	private long id;
-	
-	// job info
-	private int jobGroup;
-	private int jobId;
-
-	// execute info
-	private String executorAddress;
-	private String executorHandler;
-	private String executorParam;
-	private String executorShardingParam;
-	private int executorFailRetryCount;
-	
-	// trigger info
-	private Date triggerTime;
-	private int triggerCode;
-	private String triggerMsg;
-	
-	// handle info
-	private Date handleTime;
-	private int handleCode;
-	private String handleMsg;
-
-	// alarm info
-	private int alarmStatus;
-
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-	public int getJobGroup() {
-		return jobGroup;
-	}
-
-	public void setJobGroup(int jobGroup) {
-		this.jobGroup = jobGroup;
-	}
-
-	public int getJobId() {
-		return jobId;
-	}
-
-	public void setJobId(int jobId) {
-		this.jobId = jobId;
-	}
-
-	public String getExecutorAddress() {
-		return executorAddress;
-	}
-
-	public void setExecutorAddress(String executorAddress) {
-		this.executorAddress = executorAddress;
-	}
-
-	public String getExecutorHandler() {
-		return executorHandler;
-	}
-
-	public void setExecutorHandler(String executorHandler) {
-		this.executorHandler = executorHandler;
-	}
-
-	public String getExecutorParam() {
-		return executorParam;
-	}
-
-	public void setExecutorParam(String executorParam) {
-		this.executorParam = executorParam;
-	}
-
-	public String getExecutorShardingParam() {
-		return executorShardingParam;
-	}
-
-	public void setExecutorShardingParam(String executorShardingParam) {
-		this.executorShardingParam = executorShardingParam;
-	}
-
-	public int getExecutorFailRetryCount() {
-		return executorFailRetryCount;
-	}
-
-	public void setExecutorFailRetryCount(int executorFailRetryCount) {
-		this.executorFailRetryCount = executorFailRetryCount;
-	}
-
-	public Date getTriggerTime() {
-		return triggerTime;
-	}
-
-	public void setTriggerTime(Date triggerTime) {
-		this.triggerTime = triggerTime;
-	}
-
-	public int getTriggerCode() {
-		return triggerCode;
-	}
-
-	public void setTriggerCode(int triggerCode) {
-		this.triggerCode = triggerCode;
-	}
-
-	public String getTriggerMsg() {
-		return triggerMsg;
-	}
-
-	public void setTriggerMsg(String triggerMsg) {
-		this.triggerMsg = triggerMsg;
-	}
-
-	public Date getHandleTime() {
-		return handleTime;
-	}
-
-	public void setHandleTime(Date handleTime) {
-		this.handleTime = handleTime;
-	}
-
-	public int getHandleCode() {
-		return handleCode;
-	}
-
-	public void setHandleCode(int handleCode) {
-		this.handleCode = handleCode;
-	}
-
-	public String getHandleMsg() {
-		return handleMsg;
-	}
-
-	public void setHandleMsg(String handleMsg) {
-		this.handleMsg = handleMsg;
-	}
-
-	public int getAlarmStatus() {
-		return alarmStatus;
-	}
-
-	public void setAlarmStatus(int alarmStatus) {
-		this.alarmStatus = alarmStatus;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
deleted file mode 100644
index 2f59ffa..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job log for glue, used to track job code process
- * @author xuxueli 2016-5-19 17:57:46
- */
-public class XxlJobLogGlue {
-	
-	private int id;
-	private int jobId;				// 浠诲姟涓婚敭ID
-	private String glueType;		// GLUE绫诲瀷	#com.xxl.job.core.glue.GlueTypeEnum
-	private String glueSource;
-	private String glueRemark;
-	private Date addTime;
-	private Date updateTime;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public int getJobId() {
-		return jobId;
-	}
-
-	public void setJobId(int jobId) {
-		this.jobId = jobId;
-	}
-
-	public String getGlueType() {
-		return glueType;
-	}
-
-	public void setGlueType(String glueType) {
-		this.glueType = glueType;
-	}
-
-	public String getGlueSource() {
-		return glueSource;
-	}
-
-	public void setGlueSource(String glueSource) {
-		this.glueSource = glueSource;
-	}
-
-	public String getGlueRemark() {
-		return glueRemark;
-	}
-
-	public void setGlueRemark(String glueRemark) {
-		this.glueRemark = glueRemark;
-	}
-
-	public Date getAddTime() {
-		return addTime;
-	}
-
-	public void setAddTime(Date addTime) {
-		this.addTime = addTime;
-	}
-
-	public Date getUpdateTime() {
-		return updateTime;
-	}
-
-	public void setUpdateTime(Date updateTime) {
-		this.updateTime = updateTime;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
deleted file mode 100644
index e58ff1a..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-public class XxlJobLogReport {
-
-    private int id;
-
-    private Date triggerDay;
-
-    private int runningCount;
-    private int sucCount;
-    private int failCount;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public Date getTriggerDay() {
-        return triggerDay;
-    }
-
-    public void setTriggerDay(Date triggerDay) {
-        this.triggerDay = triggerDay;
-    }
-
-    public int getRunningCount() {
-        return runningCount;
-    }
-
-    public void setRunningCount(int runningCount) {
-        this.runningCount = runningCount;
-    }
-
-    public int getSucCount() {
-        return sucCount;
-    }
-
-    public void setSucCount(int sucCount) {
-        this.sucCount = sucCount;
-    }
-
-    public int getFailCount() {
-        return failCount;
-    }
-
-    public void setFailCount(int failCount) {
-        this.failCount = failCount;
-    }
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
deleted file mode 100644
index 924d6d3..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-public class XxlJobRegistry {
-
-    private int id;
-    private String registryGroup;
-    private String registryKey;
-    private String registryValue;
-    private Date updateTime;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getRegistryGroup() {
-        return registryGroup;
-    }
-
-    public void setRegistryGroup(String registryGroup) {
-        this.registryGroup = registryGroup;
-    }
-
-    public String getRegistryKey() {
-        return registryKey;
-    }
-
-    public void setRegistryKey(String registryKey) {
-        this.registryKey = registryKey;
-    }
-
-    public String getRegistryValue() {
-        return registryValue;
-    }
-
-    public void setRegistryValue(String registryValue) {
-        this.registryValue = registryValue;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
deleted file mode 100644
index db17327..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import org.springframework.util.StringUtils;
-
-/**
- * @author xuxueli 2019-05-04 16:43:12
- */
-public class XxlJobUser {
-	
-	private int id;
-	private String username;		// 璐﹀彿
-	private String password;		// 瀵嗙爜
-	private int role;				// 瑙掕壊锛�0-鏅�氱敤鎴枫��1-绠$悊鍛�
-	private String permission;	// 鏉冮檺锛氭墽琛屽櫒ID鍒楄〃锛屽涓�楀彿鍒嗗壊
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getUsername() {
-		return username;
-	}
-
-	public void setUsername(String username) {
-		this.username = username;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	public int getRole() {
-		return role;
-	}
-
-	public void setRole(int role) {
-		this.role = role;
-	}
-
-	public String getPermission() {
-		return permission;
-	}
-
-	public void setPermission(String permission) {
-		this.permission = permission;
-	}
-
-	// plugin
-	public boolean validPermission(int jobGroup){
-		if (this.role == 1) {
-			return true;
-		} else {
-			if (StringUtils.hasText(this.permission)) {
-				for (String permissionItem : this.permission.split(",")) {
-					if (String.valueOf(jobGroup).equals(permissionItem)) {
-						return true;
-					}
-				}
-			}
-			return false;
-		}
-
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
deleted file mode 100644
index 7fff93a..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.xxl.job.admin.core.route;
-
-import com.xxl.job.admin.core.route.strategy.*;
-import com.xxl.job.admin.core.util.I18nUtil;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public enum ExecutorRouteStrategyEnum {
-
-    FIRST(I18nUtil.getString("jobconf_route_first"), new ExecutorRouteFirst()),
-    LAST(I18nUtil.getString("jobconf_route_last"), new ExecutorRouteLast()),
-    ROUND(I18nUtil.getString("jobconf_route_round"), new ExecutorRouteRound()),
-    RANDOM(I18nUtil.getString("jobconf_route_random"), new ExecutorRouteRandom()),
-    CONSISTENT_HASH(I18nUtil.getString("jobconf_route_consistenthash"), new ExecutorRouteConsistentHash()),
-    LEAST_FREQUENTLY_USED(I18nUtil.getString("jobconf_route_lfu"), new ExecutorRouteLFU()),
-    LEAST_RECENTLY_USED(I18nUtil.getString("jobconf_route_lru"), new ExecutorRouteLRU()),
-    FAILOVER(I18nUtil.getString("jobconf_route_failover"), new ExecutorRouteFailover()),
-    BUSYOVER(I18nUtil.getString("jobconf_route_busyover"), new ExecutorRouteBusyover()),
-    SHARDING_BROADCAST(I18nUtil.getString("jobconf_route_shard"), null);
-
-    ExecutorRouteStrategyEnum(String title, ExecutorRouter router) {
-        this.title = title;
-        this.router = router;
-    }
-
-    private String title;
-    private ExecutorRouter router;
-
-    public String getTitle() {
-        return title;
-    }
-    public ExecutorRouter getRouter() {
-        return router;
-    }
-
-    public static ExecutorRouteStrategyEnum match(String name, ExecutorRouteStrategyEnum defaultItem){
-        if (name != null) {
-            for (ExecutorRouteStrategyEnum item: ExecutorRouteStrategyEnum.values()) {
-                if (item.name().equals(name)) {
-                    return item;
-                }
-            }
-        }
-        return defaultItem;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
deleted file mode 100644
index 5de9a1d..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.xxl.job.admin.core.route;
-
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public abstract class ExecutorRouter {
-    protected static Logger logger = LoggerFactory.getLogger(ExecutorRouter.class);
-
-    /**
-     * route address
-     *
-     * @param addressList
-     * @return  ReturnT.content=address
-     */
-    public abstract ReturnT<String> route(TriggerParam triggerParam, List<String> addressList);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
deleted file mode 100644
index 2601599..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteBusyover extends ExecutorRouter {
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-        StringBuffer idleBeatResultSB = new StringBuffer();
-        for (String address : addressList) {
-            // beat
-            ReturnT<String> idleBeatResult = null;
-            try {
-                ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
-                idleBeatResult = executorBiz.idleBeat(triggerParam.getJobId());
-            } catch (Exception e) {
-                logger.error(e.getMessage(), e);
-                idleBeatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
-            }
-            idleBeatResultSB.append( (idleBeatResultSB.length()>0)?"<br><br>":"")
-                    .append(I18nUtil.getString("jobconf_idleBeat") + "锛�")
-                    .append("<br>address锛�").append(address)
-                    .append("<br>code锛�").append(idleBeatResult.getCode())
-                    .append("<br>msg锛�").append(idleBeatResult.getMsg());
-
-            // beat success
-            if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
-                idleBeatResult.setMsg(idleBeatResultSB.toString());
-                idleBeatResult.setContent(address);
-                return idleBeatResult;
-            }
-        }
-
-        return new ReturnT<String>(ReturnT.FAIL_CODE, idleBeatResultSB.toString());
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
deleted file mode 100644
index 72e8118..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.List;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-/**
- * 鍒嗙粍涓嬫満鍣ㄥ湴鍧�鐩稿悓锛屼笉鍚孞OB鍧囧寑鏁e垪鍦ㄤ笉鍚屾満鍣ㄤ笂锛屼繚璇佸垎缁勪笅鏈哄櫒鍒嗛厤JOB骞冲潎锛涗笖姣忎釜JOB鍥哄畾璋冨害鍏朵腑涓�鍙版満鍣紱
- *      a銆乿irtual node锛氳В鍐充笉鍧囪 闂
- *      b銆乭ash method replace hashCode锛歋tring鐨刪ashCode鍙兘閲嶅锛岄渶瑕佽繘涓�姝ユ墿澶ashCode鐨勫彇鍊艰寖鍥�
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteConsistentHash extends ExecutorRouter {
-
-    private static int VIRTUAL_NODE_NUM = 5;
-
-    /**
-     * get hash code on 2^32 ring (md5鏁e垪鐨勬柟寮忚绠梙ash鍊�)
-     * @param key
-     * @return
-     */
-    private static long hash(String key) {
-
-        // md5 byte
-        MessageDigest md5;
-        try {
-            md5 = MessageDigest.getInstance("MD5");
-        } catch (NoSuchAlgorithmException e) {
-            throw new RuntimeException("MD5 not supported", e);
-        }
-        md5.reset();
-        byte[] keyBytes = null;
-        try {
-            keyBytes = key.getBytes("UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            throw new RuntimeException("Unknown string :" + key, e);
-        }
-
-        md5.update(keyBytes);
-        byte[] digest = md5.digest();
-
-        // hash code, Truncate to 32-bits
-        long hashCode = ((long) (digest[3] & 0xFF) << 24)
-                | ((long) (digest[2] & 0xFF) << 16)
-                | ((long) (digest[1] & 0xFF) << 8)
-                | (digest[0] & 0xFF);
-
-        long truncateHashCode = hashCode & 0xffffffffL;
-        return truncateHashCode;
-    }
-
-    public String hashJob(int jobId, List<String> addressList) {
-
-        // ------A1------A2-------A3------
-        // -----------J1------------------
-        TreeMap<Long, String> addressRing = new TreeMap<Long, String>();
-        for (String address: addressList) {
-            for (int i = 0; i < VIRTUAL_NODE_NUM; i++) {
-                long addressHash = hash("SHARD-" + address + "-NODE-" + i);
-                addressRing.put(addressHash, address);
-            }
-        }
-
-        long jobHash = hash(String.valueOf(jobId));
-        SortedMap<Long, String> lastRing = addressRing.tailMap(jobHash);
-        if (!lastRing.isEmpty()) {
-            return lastRing.get(lastRing.firstKey());
-        }
-        return addressRing.firstEntry().getValue();
-    }
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-        String address = hashJob(triggerParam.getJobId(), addressList);
-        return new ReturnT<String>(address);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
deleted file mode 100644
index a2e4c90..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteFailover extends ExecutorRouter {
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-
-        StringBuffer beatResultSB = new StringBuffer();
-        for (String address : addressList) {
-            // beat
-            ReturnT<String> beatResult = null;
-            try {
-                ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
-                beatResult = executorBiz.beat();
-            } catch (Exception e) {
-                logger.error(e.getMessage(), e);
-                beatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
-            }
-            beatResultSB.append( (beatResultSB.length()>0)?"<br><br>":"")
-                    .append(I18nUtil.getString("jobconf_beat") + "锛�")
-                    .append("<br>address锛�").append(address)
-                    .append("<br>code锛�").append(beatResult.getCode())
-                    .append("<br>msg锛�").append(beatResult.getMsg());
-
-            // beat success
-            if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
-
-                beatResult.setMsg(beatResultSB.toString());
-                beatResult.setContent(address);
-                return beatResult;
-            }
-        }
-        return new ReturnT<String>(ReturnT.FAIL_CODE, beatResultSB.toString());
-
-    }
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
deleted file mode 100644
index de4d7af..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteFirst extends ExecutorRouter {
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList){
-        return new ReturnT<String>(addressList.get(0));
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
deleted file mode 100644
index 9df1972..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * 鍗曚釜JOB瀵瑰簲鐨勬瘡涓墽琛屽櫒锛屼娇鐢ㄩ鐜囨渶浣庣殑浼樺厛琚�変妇
- *      a(*)銆丩FU(Least Frequently Used)锛氭渶涓嶇粡甯镐娇鐢紝棰戠巼/娆℃暟
- *      b銆丩RU(Least Recently Used)锛氭渶杩戞渶涔呮湭浣跨敤锛屾椂闂�
- *
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteLFU extends ExecutorRouter {
-
-    private static ConcurrentMap<Integer, HashMap<String, Integer>> jobLfuMap = new ConcurrentHashMap<Integer, HashMap<String, Integer>>();
-    private static long CACHE_VALID_TIME = 0;
-
-    public String route(int jobId, List<String> addressList) {
-
-        // cache clear
-        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
-            jobLfuMap.clear();
-            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
-        }
-
-        // lfu item init
-        HashMap<String, Integer> lfuItemMap = jobLfuMap.get(jobId);     // Key鎺掑簭鍙互鐢═reeMap+鏋勯�犲叆鍙侰ompare锛沄alue鎺掑簭鏆傛椂鍙兘閫氳繃ArrayList锛�
-        if (lfuItemMap == null) {
-            lfuItemMap = new HashMap<String, Integer>();
-            jobLfuMap.putIfAbsent(jobId, lfuItemMap);   // 閬垮厤閲嶅瑕嗙洊
-        }
-
-        // put new
-        for (String address: addressList) {
-            if (!lfuItemMap.containsKey(address) || lfuItemMap.get(address) >1000000 ) {
-                lfuItemMap.put(address, new Random().nextInt(addressList.size()));  // 鍒濆鍖栨椂涓诲姩Random涓�娆★紝缂撹В棣栨鍘嬪姏
-            }
-        }
-        // remove old
-        List<String> delKeys = new ArrayList<>();
-        for (String existKey: lfuItemMap.keySet()) {
-            if (!addressList.contains(existKey)) {
-                delKeys.add(existKey);
-            }
-        }
-        if (delKeys.size() > 0) {
-            for (String delKey: delKeys) {
-                lfuItemMap.remove(delKey);
-            }
-        }
-
-        // load least userd count address
-        List<Map.Entry<String, Integer>> lfuItemList = new ArrayList<Map.Entry<String, Integer>>(lfuItemMap.entrySet());
-        Collections.sort(lfuItemList, new Comparator<Map.Entry<String, Integer>>() {
-            @Override
-            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
-                return o1.getValue().compareTo(o2.getValue());
-            }
-        });
-
-        Map.Entry<String, Integer> addressItem = lfuItemList.get(0);
-        String minAddress = addressItem.getKey();
-        addressItem.setValue(addressItem.getValue() + 1);
-
-        return addressItem.getKey();
-    }
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-        String address = route(triggerParam.getJobId(), addressList);
-        return new ReturnT<String>(address);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
deleted file mode 100644
index 2d54006..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * 鍗曚釜JOB瀵瑰簲鐨勬瘡涓墽琛屽櫒锛屾渶涔呬负浣跨敤鐨勪紭鍏堣閫変妇
- *      a銆丩FU(Least Frequently Used)锛氭渶涓嶇粡甯镐娇鐢紝棰戠巼/娆℃暟
- *      b(*)銆丩RU(Least Recently Used)锛氭渶杩戞渶涔呮湭浣跨敤锛屾椂闂�
- *
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteLRU extends ExecutorRouter {
-
-    private static ConcurrentMap<Integer, LinkedHashMap<String, String>> jobLRUMap = new ConcurrentHashMap<Integer, LinkedHashMap<String, String>>();
-    private static long CACHE_VALID_TIME = 0;
-
-    public String route(int jobId, List<String> addressList) {
-
-        // cache clear
-        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
-            jobLRUMap.clear();
-            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
-        }
-
-        // init lru
-        LinkedHashMap<String, String> lruItem = jobLRUMap.get(jobId);
-        if (lruItem == null) {
-            /**
-             * LinkedHashMap
-             *      a銆乤ccessOrder锛歵rue=璁块棶椤哄簭鎺掑簭锛坓et/put鏃舵帓搴忥級锛沠alse=鎻掑叆椤哄簭鎺掓湡锛�
-             *      b銆乺emoveEldestEntry锛氭柊澧炲厓绱犳椂灏嗕細璋冪敤锛岃繑鍥瀟rue鏃朵細鍒犻櫎鏈�鑰佸厓绱狅紱鍙皝瑁匧inkedHashMap骞堕噸鍐欒鏂规硶锛屾瘮濡傚畾涔夋渶澶у閲忥紝瓒呭嚭鏄繑鍥瀟rue鍗冲彲瀹炵幇鍥哄畾闀垮害鐨凩RU绠楁硶锛�
-             */
-            lruItem = new LinkedHashMap<String, String>(16, 0.75f, true);
-            jobLRUMap.putIfAbsent(jobId, lruItem);
-        }
-
-        // put new
-        for (String address: addressList) {
-            if (!lruItem.containsKey(address)) {
-                lruItem.put(address, address);
-            }
-        }
-        // remove old
-        List<String> delKeys = new ArrayList<>();
-        for (String existKey: lruItem.keySet()) {
-            if (!addressList.contains(existKey)) {
-                delKeys.add(existKey);
-            }
-        }
-        if (delKeys.size() > 0) {
-            for (String delKey: delKeys) {
-                lruItem.remove(delKey);
-            }
-        }
-
-        // load
-        String eldestKey = lruItem.entrySet().iterator().next().getKey();
-        String eldestValue = lruItem.get(eldestKey);
-        return eldestValue;
-    }
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-        String address = route(triggerParam.getJobId(), addressList);
-        return new ReturnT<String>(address);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
deleted file mode 100644
index 4ff3cf6..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteLast extends ExecutorRouter {
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-        return new ReturnT<String>(addressList.get(addressList.size()-1));
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
deleted file mode 100644
index 5ea4a38..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-import java.util.Random;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteRandom extends ExecutorRouter {
-
-    private static Random localRandom = new Random();
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-        String address = addressList.get(localRandom.nextInt(addressList.size()));
-        return new ReturnT<String>(address);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
deleted file mode 100644
index 936ef0e..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteRound extends ExecutorRouter {
-
-    private static ConcurrentMap<Integer, Integer> routeCountEachJob = new ConcurrentHashMap<Integer, Integer>();
-    private static long CACHE_VALID_TIME = 0;
-    private static int count(int jobId) {
-        // cache clear
-        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
-            routeCountEachJob.clear();
-            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
-        }
-
-        // count++
-        Integer count = routeCountEachJob.get(jobId);
-        count = (count==null || count>1000000)?(new Random().nextInt(100)):++count;  // 鍒濆鍖栨椂涓诲姩Random涓�娆★紝缂撹В棣栨鍘嬪姏
-        routeCountEachJob.put(jobId, count);
-        return count;
-    }
-
-    @Override
-    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
-        String address = addressList.get(count(triggerParam.getJobId())%addressList.size());
-        return new ReturnT<String>(address);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
deleted file mode 100644
index 2b72877..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.xxl.job.admin.core.scheduler;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.thread.*;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-import com.xxl.rpc.remoting.invoker.call.CallType;
-import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;
-import com.xxl.rpc.remoting.invoker.route.LoadBalance;
-import com.xxl.rpc.remoting.net.impl.netty_http.client.NettyHttpClient;
-import com.xxl.rpc.serialize.impl.HessianSerializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * @author xuxueli 2018-10-28 00:18:17
- */
-
-public class XxlJobScheduler  {
-    private static final Logger logger = LoggerFactory.getLogger(XxlJobScheduler.class);
-
-
-    public void init() throws Exception {
-        // init i18n
-        initI18n();
-
-        // admin registry monitor run
-        JobRegistryMonitorHelper.getInstance().start();
-
-        // admin monitor run
-        JobFailMonitorHelper.getInstance().start();
-
-        // admin trigger pool start
-        JobTriggerPoolHelper.toStart();
-
-        // admin log report start
-        JobLogReportHelper.getInstance().start();
-
-        // start-schedule
-        JobScheduleHelper.getInstance().start();
-
-        logger.info(">>>>>>>>> init xxl-job admin success.");
-    }
-
-    
-    public void destroy() throws Exception {
-
-        // stop-schedule
-        JobScheduleHelper.getInstance().toStop();
-
-        // admin log report stop
-        JobLogReportHelper.getInstance().toStop();
-
-        // admin trigger pool stop
-        JobTriggerPoolHelper.toStop();
-
-        // admin monitor stop
-        JobFailMonitorHelper.getInstance().toStop();
-
-        // admin registry stop
-        JobRegistryMonitorHelper.getInstance().toStop();
-
-    }
-
-    // ---------------------- I18n ----------------------
-
-    private void initI18n(){
-        for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) {
-            item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));
-        }
-    }
-
-    // ---------------------- executor-client ----------------------
-    private static ConcurrentMap<String, ExecutorBiz> executorBizRepository = new ConcurrentHashMap<String, ExecutorBiz>();
-    public static ExecutorBiz getExecutorBiz(String address) throws Exception {
-        // valid
-        if (address==null || address.trim().length()==0) {
-            return null;
-        }
-
-        // load-cache
-        address = address.trim();
-        ExecutorBiz executorBiz = executorBizRepository.get(address);
-        if (executorBiz != null) {
-            return executorBiz;
-        }
-
-        // set-cache
-        XxlRpcReferenceBean referenceBean = new XxlRpcReferenceBean();
-        referenceBean.setClient(NettyHttpClient.class);
-        referenceBean.setSerializer(HessianSerializer.class);
-        referenceBean.setCallType(CallType.SYNC);
-        referenceBean.setLoadBalance(LoadBalance.ROUND);
-        referenceBean.setIface(ExecutorBiz.class);
-        referenceBean.setVersion(null);
-        referenceBean.setTimeout(3000);
-        referenceBean.setAddress(address);
-        referenceBean.setAccessToken(XxlJobAdminConfig.getAdminConfig().getAccessToken());
-        referenceBean.setInvokeCallback(null);
-        referenceBean.setInvokerFactory(null);
-
-        executorBiz = (ExecutorBiz) referenceBean.getObject();
-
-        executorBizRepository.put(address, executorBiz);
-        return executorBiz;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
deleted file mode 100644
index 67c6b27..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.model.ReturnT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.mail.javamail.MimeMessageHelper;
-
-import javax.mail.internet.MimeMessage;
-import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-/**
- * job monitor instance
- *
- * @author xuxueli 2015-9-1 18:05:56
- */
-public class JobFailMonitorHelper {
-	private static Logger logger = LoggerFactory.getLogger(JobFailMonitorHelper.class);
-	
-	private static JobFailMonitorHelper instance = new JobFailMonitorHelper();
-	public static JobFailMonitorHelper getInstance(){
-		return instance;
-	}
-
-	// ---------------------- monitor ----------------------
-
-	private Thread monitorThread;
-	private volatile boolean toStop = false;
-	public void start(){
-		monitorThread = new Thread(new Runnable() {
-
-			@Override
-			public void run() {
-
-				// monitor
-				while (!toStop) {
-					try {
-
-						List<Long> failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findFailJobLogIds(1000);
-						if (failLogIds!=null && !failLogIds.isEmpty()) {
-							for (long failLogId: failLogIds) {
-
-								// lock log
-								int lockRet = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, 0, -1);
-								if (lockRet < 1) {
-									continue;
-								}
-								XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(failLogId);
-								XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(log.getJobId());
-
-								// 1銆乫ail retry monitor
-								if (log.getExecutorFailRetryCount() > 0) {
-									JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam(), log.getExecutorParam());
-									String retryMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_type_retry") +"<<<<<<<<<<< </span><br>";
-									log.setTriggerMsg(log.getTriggerMsg() + retryMsg);
-									XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(log);
-								}
-
-								// 2銆乫ail alarm monitor
-								int newAlarmStatus = 0;		// 鍛婅鐘舵�侊細0-榛樿銆�-1=閿佸畾鐘舵�併��1-鏃犻渶鍛婅銆�2-鍛婅鎴愬姛銆�3-鍛婅澶辫触
-								if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
-									boolean alarmResult = true;
-									try {
-										alarmResult = failAlarm(info, log);
-									} catch (Exception e) {
-										alarmResult = false;
-										logger.error(e.getMessage(), e);
-									}
-									newAlarmStatus = alarmResult?2:3;
-								} else {
-									newAlarmStatus = 1;
-								}
-
-								XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, -1, newAlarmStatus);
-							}
-						}
-
-					} catch (Exception e) {
-						if (!toStop) {
-							logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
-						}
-					}
-
-                    try {
-                        TimeUnit.SECONDS.sleep(10);
-                    } catch (Exception e) {
-                        if (!toStop) {
-                            logger.error(e.getMessage(), e);
-                        }
-                    }
-
-                }
-
-				logger.info(">>>>>>>>>>> xxl-job, job fail monitor thread stop");
-
-			}
-		});
-		monitorThread.setDaemon(true);
-		monitorThread.setName("xxl-job, admin JobFailMonitorHelper");
-		monitorThread.start();
-	}
-
-	public void toStop(){
-		toStop = true;
-		// interrupt and wait
-		monitorThread.interrupt();
-		try {
-			monitorThread.join();
-		} catch (InterruptedException e) {
-			logger.error(e.getMessage(), e);
-		}
-	}
-
-
-	// ---------------------- alarm ----------------------
-
-	// email alarm template
-	private static final String mailBodyTemplate = "<h5>" + I18nUtil.getString("jobconf_monitor_detail") + "锛�</span>" +
-			"<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
-			"   <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
-			"      <tr>\n" +
-			"         <td width=\"20%\" >"+ I18nUtil.getString("jobinfo_field_jobgroup") +"</td>\n" +
-			"         <td width=\"10%\" >"+ I18nUtil.getString("jobinfo_field_id") +"</td>\n" +
-			"         <td width=\"20%\" >"+ I18nUtil.getString("jobinfo_field_jobdesc") +"</td>\n" +
-			"         <td width=\"10%\" >"+ I18nUtil.getString("jobconf_monitor_alarm_title") +"</td>\n" +
-			"         <td width=\"40%\" >"+ I18nUtil.getString("jobconf_monitor_alarm_content") +"</td>\n" +
-			"      </tr>\n" +
-			"   </thead>\n" +
-			"   <tbody>\n" +
-			"      <tr>\n" +
-			"         <td>{0}</td>\n" +
-			"         <td>{1}</td>\n" +
-			"         <td>{2}</td>\n" +
-			"         <td>"+ I18nUtil.getString("jobconf_monitor_alarm_type") +"</td>\n" +
-			"         <td>{3}</td>\n" +
-			"      </tr>\n" +
-			"   </tbody>\n" +
-			"</table>";
-
-	/**
-	 * fail alarm
-	 *
-	 * @param jobLog
-	 */
-	private boolean failAlarm(XxlJobInfo info, XxlJobLog jobLog){
-		boolean alarmResult = true;
-
-		// send monitor email
-		if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
-
-			// alarmContent
-			String alarmContent = "Alarm Job LogId=" + jobLog.getId();
-			if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
-				alarmContent += "<br>TriggerMsg=<br>" + jobLog.getTriggerMsg();
-			}
-			if (jobLog.getHandleCode()>0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
-				alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
-			}
-
-			// email info
-			XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup()));
-			String personal = I18nUtil.getString("admin_name_full");
-			String title = I18nUtil.getString("jobconf_monitor");
-			String content = MessageFormat.format(mailBodyTemplate,
-					group!=null?group.getTitle():"null",
-					info.getId(),
-					info.getJobDesc(),
-					alarmContent);
-
-			Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
-			for (String email: emailSet) {
-
-				// make mail
-				try {
-					MimeMessage mimeMessage = XxlJobAdminConfig.getAdminConfig().getMailSender().createMimeMessage();
-
-					MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
-					helper.setFrom(XxlJobAdminConfig.getAdminConfig().getEmailUserName(), personal);
-					helper.setTo(email);
-					helper.setSubject(title);
-					helper.setText(content, true);
-
-					XxlJobAdminConfig.getAdminConfig().getMailSender().send(mimeMessage);
-				} catch (Exception e) {
-					logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(), e);
-
-					alarmResult = false;
-				}
-
-			}
-		}
-
-		// do something, custom alarm strategy, such as sms
-
-
-		return alarmResult;
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
deleted file mode 100644
index 2387a0c..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobLogReport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * job log report helper
- *
- * @author xuxueli 2019-11-22
- */
-public class JobLogReportHelper {
-    private static Logger logger = LoggerFactory.getLogger(JobLogReportHelper.class);
-
-    private static JobLogReportHelper instance = new JobLogReportHelper();
-    public static JobLogReportHelper getInstance(){
-        return instance;
-    }
-
-
-    private Thread logrThread;
-    private volatile boolean toStop = false;
-    public void start(){
-        logrThread = new Thread(new Runnable() {
-
-            @Override
-            public void run() {
-
-                // last clean log time
-                long lastCleanLogTime = 0;
-
-
-                while (!toStop) {
-
-                    // 1銆乴og-report refresh: refresh log report in 3 days
-                    try {
-
-                        for (int i = 0; i < 3; i++) {
-
-                            // today
-                            Calendar itemDay = Calendar.getInstance();
-                            itemDay.add(Calendar.DAY_OF_MONTH, -i);
-                            itemDay.set(Calendar.HOUR_OF_DAY, 0);
-                            itemDay.set(Calendar.MINUTE, 0);
-                            itemDay.set(Calendar.SECOND, 0);
-                            itemDay.set(Calendar.MILLISECOND, 0);
-
-                            Date todayFrom = itemDay.getTime();
-
-                            itemDay.set(Calendar.HOUR_OF_DAY, 23);
-                            itemDay.set(Calendar.MINUTE, 59);
-                            itemDay.set(Calendar.SECOND, 59);
-                            itemDay.set(Calendar.MILLISECOND, 999);
-
-                            Date todayTo = itemDay.getTime();
-
-                            // refresh log-report every minute
-                            XxlJobLogReport xxlJobLogReport = new XxlJobLogReport();
-                            xxlJobLogReport.setTriggerDay(todayFrom);
-                            xxlJobLogReport.setRunningCount(0);
-                            xxlJobLogReport.setSucCount(0);
-                            xxlJobLogReport.setFailCount(0);
-
-                            Map<String, Object> triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLogReport(todayFrom, todayTo);
-                            if (triggerCountMap!=null && triggerCountMap.size()>0) {
-                                int triggerDayCount = triggerCountMap.containsKey("triggerDayCount")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))):0;
-                                int triggerDayCountRunning = triggerCountMap.containsKey("triggerDayCountRunning")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountRunning"))):0;
-                                int triggerDayCountSuc = triggerCountMap.containsKey("triggerDayCountSuc")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountSuc"))):0;
-                                int triggerDayCountFail = triggerDayCount - triggerDayCountRunning - triggerDayCountSuc;
-
-                                xxlJobLogReport.setRunningCount(triggerDayCountRunning);
-                                xxlJobLogReport.setSucCount(triggerDayCountSuc);
-                                xxlJobLogReport.setFailCount(triggerDayCountFail);
-                            }
-
-                            // do refresh
-                            int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().update(xxlJobLogReport);
-                            if (ret < 1) {
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport);
-                            }
-                        }
-
-                    } catch (Exception e) {
-                        if (!toStop) {
-                            logger.error(">>>>>>>>>>> xxl-job, job log report thread error:{}", e);
-                        }
-                    }
-
-                    // 2銆乴og-clean: switch open & once each day
-                    if (XxlJobAdminConfig.getAdminConfig().getLogretentiondays()>0
-                            && System.currentTimeMillis() - lastCleanLogTime > 24*60*60*1000) {
-
-                        // expire-time
-                        Calendar expiredDay = Calendar.getInstance();
-                        expiredDay.add(Calendar.DAY_OF_MONTH, -1 * XxlJobAdminConfig.getAdminConfig().getLogretentiondays());
-                        expiredDay.set(Calendar.HOUR_OF_DAY, 0);
-                        expiredDay.set(Calendar.MINUTE, 0);
-                        expiredDay.set(Calendar.SECOND, 0);
-                        expiredDay.set(Calendar.MILLISECOND, 0);
-                        Date clearBeforeTime = expiredDay.getTime();
-
-                        // clean expired log
-                        List<Long> logIds = null;
-                        do {
-                            logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, clearBeforeTime, 0, 1000);
-                            if (logIds!=null && logIds.size()>0) {
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds);
-                            }
-                        } while (logIds!=null && logIds.size()>0);
-
-                        // update clean time
-                        lastCleanLogTime = System.currentTimeMillis();
-                    }
-
-                    try {
-                        TimeUnit.MINUTES.sleep(1);
-                    } catch (Exception e) {
-                        if (!toStop) {
-                            logger.error(e.getMessage(), e);
-                        }
-                    }
-
-                }
-
-                logger.info(">>>>>>>>>>> xxl-job, job log report thread stop");
-
-            }
-        });
-        logrThread.setDaemon(true);
-        logrThread.setName("xxl-job, admin JobLogReportHelper");
-        logrThread.start();
-    }
-
-    public void toStop(){
-        toStop = true;
-        // interrupt and wait
-        logrThread.interrupt();
-        try {
-            logrThread.join();
-        } catch (InterruptedException e) {
-            logger.error(e.getMessage(), e);
-        }
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
deleted file mode 100644
index 1e91014..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobRegistry;
-import com.xxl.job.core.enums.RegistryConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-
-/**
- * job registry instance
- * @author xuxueli 2016-10-02 19:10:24
- */
-public class JobRegistryMonitorHelper {
-	private static Logger logger = LoggerFactory.getLogger(JobRegistryMonitorHelper.class);
-
-	private static JobRegistryMonitorHelper instance = new JobRegistryMonitorHelper();
-	public static JobRegistryMonitorHelper getInstance(){
-		return instance;
-	}
-
-	private Thread registryThread;
-	private volatile boolean toStop = false;
-	public void start(){
-		registryThread = new Thread(new Runnable() {
-			@Override
-			public void run() {
-				while (!toStop) {
-					try {
-						// auto registry group
-						List<XxlJobGroup> groupList = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().findByAddressType(0);
-						if (groupList!=null && !groupList.isEmpty()) {
-
-							// remove dead address (admin/executor)
-							List<Integer> ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
-							if (ids!=null && ids.size()>0) {
-								XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids);
-							}
-
-							// fresh online address (admin/executor)
-							HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
-							List<XxlJobRegistry> list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
-							if (list != null) {
-								for (XxlJobRegistry item: list) {
-									if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
-										String appName = item.getRegistryKey();
-										List<String> registryList = appAddressMap.get(appName);
-										if (registryList == null) {
-											registryList = new ArrayList<String>();
-										}
-
-										if (!registryList.contains(item.getRegistryValue())) {
-											registryList.add(item.getRegistryValue());
-										}
-										appAddressMap.put(appName, registryList);
-									}
-								}
-							}
-
-							// fresh group address
-							for (XxlJobGroup group: groupList) {
-								List<String> registryList = appAddressMap.get(group.getAppName());
-								String addressListStr = null;
-								if (registryList!=null && !registryList.isEmpty()) {
-									Collections.sort(registryList);
-									addressListStr = "";
-									for (String item:registryList) {
-										addressListStr += item + ",";
-									}
-									addressListStr = addressListStr.substring(0, addressListStr.length()-1);
-								}
-								group.setAddressList(addressListStr);
-								XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().update(group);
-							}
-						}
-					} catch (Exception e) {
-						if (!toStop) {
-							logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
-						}
-					}
-					try {
-						TimeUnit.SECONDS.sleep(RegistryConfig.BEAT_TIMEOUT);
-					} catch (InterruptedException e) {
-						if (!toStop) {
-							logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
-						}
-					}
-				}
-				logger.info(">>>>>>>>>>> xxl-job, job registry monitor thread stop");
-			}
-		});
-		registryThread.setDaemon(true);
-		registryThread.setName("xxl-job, admin JobRegistryMonitorHelper");
-		registryThread.start();
-	}
-
-	public void toStop(){
-		toStop = true;
-		// interrupt and wait
-		registryThread.interrupt();
-		try {
-			registryThread.join();
-		} catch (InterruptedException e) {
-			logger.error(e.getMessage(), e);
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
deleted file mode 100644
index 765161a..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
+++ /dev/null
@@ -1,354 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.cron.CronExpression;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.text.ParseException;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author xuxueli 2019-05-21
- */
-public class JobScheduleHelper {
-    private static Logger logger = LoggerFactory.getLogger(JobScheduleHelper.class);
-
-    private static JobScheduleHelper instance = new JobScheduleHelper();
-    public static JobScheduleHelper getInstance(){
-        return instance;
-    }
-
-    public static final long PRE_READ_MS = 5000;    // pre read
-
-    private Thread scheduleThread;
-    private Thread ringThread;
-    private volatile boolean scheduleThreadToStop = false;
-    private volatile boolean ringThreadToStop = false;
-    private volatile static Map<Integer, List<Integer>> ringData = new ConcurrentHashMap<>();
-
-    public void start(){
-
-        // schedule thread
-        scheduleThread = new Thread(new Runnable() {
-            @Override
-            public void run() {
-
-                try {
-                    TimeUnit.MILLISECONDS.sleep(5000 - System.currentTimeMillis()%1000 );
-                } catch (InterruptedException e) {
-                    if (!scheduleThreadToStop) {
-                        logger.error(e.getMessage(), e);
-                    }
-                }
-                logger.info(">>>>>>>>> init xxl-job admin scheduler success.");
-
-                // pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20)
-                int preReadCount = (XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax() + XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax()) * 20;
-
-                while (!scheduleThreadToStop) {
-
-                    // Scan Job
-                    long start = System.currentTimeMillis();
-
-                    Connection conn = null;
-                    Boolean connAutoCommit = null;
-                    PreparedStatement preparedStatement = null;
-
-                    boolean preReadSuc = true;
-                    try {
-
-                        conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
-                        connAutoCommit = conn.getAutoCommit();
-                        conn.setAutoCommit(false);
-
-                        preparedStatement = conn.prepareStatement(  "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
-                        preparedStatement.execute();
-
-                        // tx start
-
-                        // 1銆乸re read
-                        long nowTime = System.currentTimeMillis();
-                        List<XxlJobInfo> scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
-                        if (scheduleList!=null && scheduleList.size()>0) {
-                            // 2銆乸ush time-ring
-                            for (XxlJobInfo jobInfo: scheduleList) {
-
-                                // time-ring jump
-                                if (nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS) {
-                                    // 2.1銆乼rigger-expire > 5s锛歱ass && make next-trigger-time
-                                    logger.warn(">>>>>>>>>>> xxl-job, schedule misfire, jobId = " + jobInfo.getId());
-
-                                    // fresh next
-                                    refreshNextValidTime(jobInfo, new Date());
-
-                                } else if (nowTime > jobInfo.getTriggerNextTime()) {
-                                    // 2.2銆乼rigger-expire < 5s锛歞irect-trigger && make next-trigger-time
-
-                                    // 1銆乼rigger
-                                    JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null);
-                                    logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );
-
-                                    // 2銆乫resh next
-                                    refreshNextValidTime(jobInfo, new Date());
-
-                                    // next-trigger-time in 5s, pre-read again
-                                    if (jobInfo.getTriggerStatus()==1 && nowTime + PRE_READ_MS > jobInfo.getTriggerNextTime()) {
-
-                                        // 1銆乵ake ring second
-                                        int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);
-
-                                        // 2銆乸ush time ring
-                                        pushTimeRing(ringSecond, jobInfo.getId());
-
-                                        // 3銆乫resh next
-                                        refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
-
-                                    }
-
-                                } else {
-                                    // 2.3銆乼rigger-pre-read锛歵ime-ring trigger && make next-trigger-time
-
-                                    // 1銆乵ake ring second
-                                    int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);
-
-                                    // 2銆乸ush time ring
-                                    pushTimeRing(ringSecond, jobInfo.getId());
-
-                                    // 3銆乫resh next
-                                    refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
-
-                                }
-
-                            }
-
-                            // 3銆乽pdate trigger info
-                            for (XxlJobInfo jobInfo: scheduleList) {
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo);
-                            }
-
-                        } else {
-                            preReadSuc = false;
-                        }
-
-                        // tx stop
-
-
-                    } catch (Exception e) {
-                        if (!scheduleThreadToStop) {
-                            logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread error:{}", e);
-                        }
-                    } finally {
-
-                        // commit
-                        if (conn != null) {
-                            try {
-                                conn.commit();
-                            } catch (SQLException e) {
-                                if (!scheduleThreadToStop) {
-                                    logger.error(e.getMessage(), e);
-                                }
-                            }
-                            try {
-                                conn.setAutoCommit(connAutoCommit);
-                            } catch (SQLException e) {
-                                if (!scheduleThreadToStop) {
-                                    logger.error(e.getMessage(), e);
-                                }
-                            }
-                            try {
-                                conn.close();
-                            } catch (SQLException e) {
-                                if (!scheduleThreadToStop) {
-                                    logger.error(e.getMessage(), e);
-                                }
-                            }
-                        }
-
-                        // close PreparedStatement
-                        if (null != preparedStatement) {
-                            try {
-                                preparedStatement.close();
-                            } catch (SQLException e) {
-                                if (!scheduleThreadToStop) {
-                                    logger.error(e.getMessage(), e);
-                                }
-                            }
-                        }
-                    }
-                    long cost = System.currentTimeMillis()-start;
-
-
-                    // Wait seconds, align second
-                    if (cost < 1000) {  // scan-overtime, not wait
-                        try {
-                            // pre-read period: success > scan each second; fail > skip this period;
-                            TimeUnit.MILLISECONDS.sleep((preReadSuc?1000:PRE_READ_MS) - System.currentTimeMillis()%1000);
-                        } catch (InterruptedException e) {
-                            if (!scheduleThreadToStop) {
-                                logger.error(e.getMessage(), e);
-                            }
-                        }
-                    }
-
-                }
-
-                logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread stop");
-            }
-        });
-        scheduleThread.setDaemon(true);
-        scheduleThread.setName("xxl-job, admin JobScheduleHelper#scheduleThread");
-        scheduleThread.start();
-
-
-        // ring thread
-        ringThread = new Thread(new Runnable() {
-            @Override
-            public void run() {
-
-                // align second
-                try {
-                    TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis()%1000 );
-                } catch (InterruptedException e) {
-                    if (!ringThreadToStop) {
-                        logger.error(e.getMessage(), e);
-                    }
-                }
-
-                while (!ringThreadToStop) {
-
-                    try {
-                        // second data
-                        List<Integer> ringItemData = new ArrayList<>();
-                        int nowSecond = Calendar.getInstance().get(Calendar.SECOND);   // 閬垮厤澶勭悊鑰楁椂澶暱锛岃法杩囧埢搴︼紝鍚戝墠鏍¢獙涓�涓埢搴︼紱
-                        for (int i = 0; i < 2; i++) {
-                            List<Integer> tmpData = ringData.remove( (nowSecond+60-i)%60 );
-                            if (tmpData != null) {
-                                ringItemData.addAll(tmpData);
-                            }
-                        }
-
-                        // ring trigger
-                        logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData) );
-                        if (ringItemData.size() > 0) {
-                            // do trigger
-                            for (int jobId: ringItemData) {
-                                // do trigger
-                                JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null);
-                            }
-                            // clear
-                            ringItemData.clear();
-                        }
-                    } catch (Exception e) {
-                        if (!ringThreadToStop) {
-                            logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread error:{}", e);
-                        }
-                    }
-
-                    // next second, align second
-                    try {
-                        TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis()%1000);
-                    } catch (InterruptedException e) {
-                        if (!ringThreadToStop) {
-                            logger.error(e.getMessage(), e);
-                        }
-                    }
-                }
-                logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread stop");
-            }
-        });
-        ringThread.setDaemon(true);
-        ringThread.setName("xxl-job, admin JobScheduleHelper#ringThread");
-        ringThread.start();
-    }
-
-    private void refreshNextValidTime(XxlJobInfo jobInfo, Date fromTime) throws ParseException {
-        Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(fromTime);
-        if (nextValidTime != null) {
-            jobInfo.setTriggerLastTime(jobInfo.getTriggerNextTime());
-            jobInfo.setTriggerNextTime(nextValidTime.getTime());
-        } else {
-            jobInfo.setTriggerStatus(0);
-            jobInfo.setTriggerLastTime(0);
-            jobInfo.setTriggerNextTime(0);
-        }
-    }
-
-    private void pushTimeRing(int ringSecond, int jobId){
-        // push async ring
-        List<Integer> ringItemData = ringData.get(ringSecond);
-        if (ringItemData == null) {
-            ringItemData = new ArrayList<Integer>();
-            ringData.put(ringSecond, ringItemData);
-        }
-        ringItemData.add(jobId);
-
-        logger.debug(">>>>>>>>>>> xxl-job, schedule push time-ring : " + ringSecond + " = " + Arrays.asList(ringItemData) );
-    }
-
-    public void toStop(){
-
-        // 1銆乻top schedule
-        scheduleThreadToStop = true;
-        try {
-            TimeUnit.SECONDS.sleep(1);  // wait
-        } catch (InterruptedException e) {
-            logger.error(e.getMessage(), e);
-        }
-        if (scheduleThread.getState() != Thread.State.TERMINATED){
-            // interrupt and wait
-            scheduleThread.interrupt();
-            try {
-                scheduleThread.join();
-            } catch (InterruptedException e) {
-                logger.error(e.getMessage(), e);
-            }
-        }
-
-        // if has ring data
-        boolean hasRingData = false;
-        if (!ringData.isEmpty()) {
-            for (int second : ringData.keySet()) {
-                List<Integer> tmpData = ringData.get(second);
-                if (tmpData!=null && tmpData.size()>0) {
-                    hasRingData = true;
-                    break;
-                }
-            }
-        }
-        if (hasRingData) {
-            try {
-                TimeUnit.SECONDS.sleep(8);
-            } catch (InterruptedException e) {
-                logger.error(e.getMessage(), e);
-            }
-        }
-
-        // stop ring (wait job-in-memory stop)
-        ringThreadToStop = true;
-        try {
-            TimeUnit.SECONDS.sleep(1);
-        } catch (InterruptedException e) {
-            logger.error(e.getMessage(), e);
-        }
-        if (ringThread.getState() != Thread.State.TERMINATED){
-            // interrupt and wait
-            ringThread.interrupt();
-            try {
-                ringThread.join();
-            } catch (InterruptedException e) {
-                logger.error(e.getMessage(), e);
-            }
-        }
-
-        logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper stop");
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
deleted file mode 100644
index d4d4db9..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import com.xxl.job.admin.core.trigger.XxlJobTrigger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * job trigger thread pool helper
- *
- * @author xuxueli 2018-07-03 21:08:07
- */
-public class JobTriggerPoolHelper {
-    private static Logger logger = LoggerFactory.getLogger(JobTriggerPoolHelper.class);
-
-
-    // ---------------------- trigger pool ----------------------
-
-    // fast/slow thread pool
-    private ThreadPoolExecutor fastTriggerPool = null;
-    private ThreadPoolExecutor slowTriggerPool = null;
-
-    public void start(){
-        fastTriggerPool = new ThreadPoolExecutor(
-                10,
-                XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax(),
-                60L,
-                TimeUnit.SECONDS,
-                new LinkedBlockingQueue<Runnable>(1000),
-                new ThreadFactory() {
-                    @Override
-                    public Thread newThread(Runnable r) {
-                        return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-" + r.hashCode());
-                    }
-                });
-
-        slowTriggerPool = new ThreadPoolExecutor(
-                10,
-                XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax(),
-                60L,
-                TimeUnit.SECONDS,
-                new LinkedBlockingQueue<Runnable>(2000),
-                new ThreadFactory() {
-                    @Override
-                    public Thread newThread(Runnable r) {
-                        return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-slowTriggerPool-" + r.hashCode());
-                    }
-                });
-    }
-
-
-    public void stop() {
-        //triggerPool.shutdown();
-        fastTriggerPool.shutdownNow();
-        slowTriggerPool.shutdownNow();
-        logger.info(">>>>>>>>> xxl-job trigger thread pool shutdown success.");
-    }
-
-
-    // job timeout count
-    private volatile long minTim = System.currentTimeMillis()/60000;     // ms > min
-    private volatile ConcurrentMap<Integer, AtomicInteger> jobTimeoutCountMap = new ConcurrentHashMap<>();
-
-
-    /**
-     * add trigger
-     */
-    public void addTrigger(final int jobId, final TriggerTypeEnum triggerType, final int failRetryCount, final String executorShardingParam, final String executorParam) {
-
-        // choose thread pool
-        ThreadPoolExecutor triggerPool_ = fastTriggerPool;
-        AtomicInteger jobTimeoutCount = jobTimeoutCountMap.get(jobId);
-        if (jobTimeoutCount!=null && jobTimeoutCount.get() > 10) {      // job-timeout 10 times in 1 min
-            triggerPool_ = slowTriggerPool;
-        }
-
-        // trigger
-        triggerPool_.execute(new Runnable() {
-            @Override
-            public void run() {
-
-                long start = System.currentTimeMillis();
-
-                try {
-                    // do trigger
-                    XxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
-                } catch (Exception e) {
-                    logger.error(e.getMessage(), e);
-                } finally {
-
-                    // check timeout-count-map
-                    long minTim_now = System.currentTimeMillis()/60000;
-                    if (minTim != minTim_now) {
-                        minTim = minTim_now;
-                        jobTimeoutCountMap.clear();
-                    }
-
-                    // incr timeout-count-map
-                    long cost = System.currentTimeMillis()-start;
-                    if (cost > 500) {       // ob-timeout threshold 500ms
-                        AtomicInteger timeoutCount = jobTimeoutCountMap.putIfAbsent(jobId, new AtomicInteger(1));
-                        if (timeoutCount != null) {
-                            timeoutCount.incrementAndGet();
-                        }
-                    }
-
-                }
-
-            }
-        });
-    }
-
-
-
-    // ---------------------- helper ----------------------
-
-    private static JobTriggerPoolHelper helper = new JobTriggerPoolHelper();
-
-    public static void toStart() {
-        helper.start();
-    }
-    public static void toStop() {
-        helper.stop();
-    }
-
-    /**
-     * @param jobId
-     * @param triggerType
-     * @param failRetryCount
-     * 			>=0: use this param
-     * 			<0: use param from job info config
-     * @param executorShardingParam
-     * @param executorParam
-     *          null: use job param
-     *          not null: cover job param
-     */
-    public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
-        helper.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
deleted file mode 100644
index bfb66d0..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.xxl.job.admin.core.trigger;
-
-import com.xxl.job.admin.core.util.I18nUtil;
-
-/**
- * trigger type enum
- *
- * @author xuxueli 2018-09-16 04:56:41
- */
-public enum TriggerTypeEnum {
-
-    MANUAL(I18nUtil.getString("jobconf_trigger_type_manual")),
-    CRON(I18nUtil.getString("jobconf_trigger_type_cron")),
-    RETRY(I18nUtil.getString("jobconf_trigger_type_retry")),
-    PARENT(I18nUtil.getString("jobconf_trigger_type_parent")),
-    API(I18nUtil.getString("jobconf_trigger_type_api"));
-
-    private TriggerTypeEnum(String title){
-        this.title = title;
-    }
-    private String title;
-    public String getTitle() {
-        return title;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
deleted file mode 100644
index d2a92b8..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package com.xxl.job.admin.core.trigger;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
-import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-import com.xxl.rpc.util.IpUtil;
-import com.xxl.rpc.util.ThrowableUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Date;
-
-/**
- * xxl-job trigger
- * Created by xuxueli on 17/7/13.
- */
-public class XxlJobTrigger {
-    private static Logger logger = LoggerFactory.getLogger(XxlJobTrigger.class);
-
-    /**
-     * trigger job
-     *
-     * @param jobId
-     * @param triggerType
-     * @param failRetryCount
-     * 			>=0: use this param
-     * 			<0: use param from job info config
-     * @param executorShardingParam
-     * @param executorParam
-     *          null: use job param
-     *          not null: cover job param
-     */
-    public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
-        // load data
-        XxlJobInfo jobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(jobId);
-        if (jobInfo == null) {
-            logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid锛宩obId={}", jobId);
-            return;
-        }
-        if (executorParam != null) {
-            jobInfo.setExecutorParam(executorParam);
-        }
-        int finalFailRetryCount = failRetryCount>=0?failRetryCount:jobInfo.getExecutorFailRetryCount();
-        XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(jobInfo.getJobGroup());
-
-        // sharding param
-        int[] shardingParam = null;
-        if (executorShardingParam!=null){
-            String[] shardingArr = executorShardingParam.split("/");
-            if (shardingArr.length==2 && isNumeric(shardingArr[0]) && isNumeric(shardingArr[1])) {
-                shardingParam = new int[2];
-                shardingParam[0] = Integer.valueOf(shardingArr[0]);
-                shardingParam[1] = Integer.valueOf(shardingArr[1]);
-            }
-        }
-        if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null)
-                && group.getRegistryList()!=null && !group.getRegistryList().isEmpty()
-                && shardingParam==null) {
-            for (int i = 0; i < group.getRegistryList().size(); i++) {
-                processTrigger(group, jobInfo, finalFailRetryCount, triggerType, i, group.getRegistryList().size());
-            }
-        } else {
-            if (shardingParam == null) {
-                shardingParam = new int[]{0, 1};
-            }
-            processTrigger(group, jobInfo, finalFailRetryCount, triggerType, shardingParam[0], shardingParam[1]);
-        }
-
-    }
-
-    private static boolean isNumeric(String str){
-        try {
-            int result = Integer.valueOf(str);
-            return true;
-        } catch (NumberFormatException e) {
-            return false;
-        }
-    }
-
-    /**
-     * @param group                     job group, registry list may be empty
-     * @param jobInfo
-     * @param finalFailRetryCount
-     * @param triggerType
-     * @param index                     sharding index
-     * @param total                     sharding index
-     */
-    private static void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount, TriggerTypeEnum triggerType, int index, int total){
-
-        // param
-        ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION);  // block strategy
-        ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null);    // route strategy
-        String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==executorRouteStrategyEnum)?String.valueOf(index).concat("/").concat(String.valueOf(total)):null;
-
-        // 1銆乻ave log-id
-        XxlJobLog jobLog = new XxlJobLog();
-        jobLog.setJobGroup(jobInfo.getJobGroup());
-        jobLog.setJobId(jobInfo.getId());
-        jobLog.setTriggerTime(new Date());
-        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().save(jobLog);
-        logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
-
-        // 2銆乮nit trigger-param
-        TriggerParam triggerParam = new TriggerParam();
-        triggerParam.setJobId(jobInfo.getId());
-        triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
-        triggerParam.setExecutorParams(jobInfo.getExecutorParam());
-        triggerParam.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
-        triggerParam.setExecutorTimeout(jobInfo.getExecutorTimeout());
-        triggerParam.setLogId(jobLog.getId());
-        triggerParam.setLogDateTime(jobLog.getTriggerTime().getTime());
-        triggerParam.setGlueType(jobInfo.getGlueType());
-        triggerParam.setGlueSource(jobInfo.getGlueSource());
-        triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime());
-        triggerParam.setBroadcastIndex(index);
-        triggerParam.setBroadcastTotal(total);
-
-        // 3銆乮nit address
-        String address = null;
-        ReturnT<String> routeAddressResult = null;
-        if (group.getRegistryList()!=null && !group.getRegistryList().isEmpty()) {
-            if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum) {
-                if (index < group.getRegistryList().size()) {
-                    address = group.getRegistryList().get(index);
-                } else {
-                    address = group.getRegistryList().get(0);
-                }
-            } else {
-                routeAddressResult = executorRouteStrategyEnum.getRouter().route(triggerParam, group.getRegistryList());
-                if (routeAddressResult.getCode() == ReturnT.SUCCESS_CODE) {
-                    address = routeAddressResult.getContent();
-                }
-            }
-        } else {
-            routeAddressResult = new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobconf_trigger_address_empty"));
-        }
-
-        // 4銆乼rigger remote executor
-        ReturnT<String> triggerResult = null;
-        if (address != null) {
-            triggerResult = runExecutor(triggerParam, address);
-        } else {
-            triggerResult = new ReturnT<String>(ReturnT.FAIL_CODE, null);
-        }
-
-        // 5銆乧ollection trigger info
-        StringBuffer triggerMsgSb = new StringBuffer();
-        triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_type")).append("锛�").append(triggerType.getTitle());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_admin_adress")).append("锛�").append(IpUtil.getIp());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regtype")).append("锛�")
-                .append( (group.getAddressType() == 0)?I18nUtil.getString("jobgroup_field_addressType_0"):I18nUtil.getString("jobgroup_field_addressType_1") );
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append("锛�").append(group.getRegistryList());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append("锛�").append(executorRouteStrategyEnum.getTitle());
-        if (shardingParam != null) {
-            triggerMsgSb.append("("+shardingParam+")");
-        }
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append("锛�").append(blockStrategy.getTitle());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append("锛�").append(jobInfo.getExecutorTimeout());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append("锛�").append(finalFailRetryCount);
-
-        triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_run") +"<<<<<<<<<<< </span><br>")
-                .append((routeAddressResult!=null&&routeAddressResult.getMsg()!=null)?routeAddressResult.getMsg()+"<br><br>":"").append(triggerResult.getMsg()!=null?triggerResult.getMsg():"");
-
-        // 6銆乻ave log trigger-info
-        jobLog.setExecutorAddress(address);
-        jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
-        jobLog.setExecutorParam(jobInfo.getExecutorParam());
-        jobLog.setExecutorShardingParam(shardingParam);
-        jobLog.setExecutorFailRetryCount(finalFailRetryCount);
-        //jobLog.setTriggerTime();
-        jobLog.setTriggerCode(triggerResult.getCode());
-        jobLog.setTriggerMsg(triggerMsgSb.toString());
-        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(jobLog);
-
-        logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
-    }
-
-    /**
-     * run executor
-     * @param triggerParam
-     * @param address
-     * @return
-     */
-    public static ReturnT<String> runExecutor(TriggerParam triggerParam, String address){
-        ReturnT<String> runResult = null;
-        try {
-            ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
-            runResult = executorBiz.run(triggerParam);
-        } catch (Exception e) {
-            logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e);
-            runResult = new ReturnT<String>(ReturnT.FAIL_CODE, ThrowableUtil.toString(e));
-        }
-
-        StringBuffer runResultSB = new StringBuffer(I18nUtil.getString("jobconf_trigger_run") + "锛�");
-        runResultSB.append("<br>address锛�").append(address);
-        runResultSB.append("<br>code锛�").append(runResult.getCode());
-        runResultSB.append("<br>msg锛�").append(runResult.getMsg());
-
-        runResult.setMsg(runResultSB.toString());
-        return runResult;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
deleted file mode 100644
index a1523aa..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Cookie.Util
- *
- * @author xuxueli 2015-12-12 18:01:06
- */
-public class CookieUtil {
-
-	// 榛樿缂撳瓨鏃堕棿,鍗曚綅/绉�, 2H
-	private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE;
-	// 淇濆瓨璺緞,鏍硅矾寰�
-	private static final String COOKIE_PATH = "/";
-	
-	/**
-	 * 淇濆瓨
-	 *
-	 * @param response
-	 * @param key
-	 * @param value
-	 * @param ifRemember 
-	 */
-	public static void set(HttpServletResponse response, String key, String value, boolean ifRemember) {
-		int age = ifRemember?COOKIE_MAX_AGE:-1;
-		set(response, key, value, null, COOKIE_PATH, age, true);
-	}
-
-	/**
-	 * 淇濆瓨
-	 *
-	 * @param response
-	 * @param key
-	 * @param value
-	 * @param maxAge
-	 */
-	private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) {
-		Cookie cookie = new Cookie(key, value);
-		if (domain != null) {
-			cookie.setDomain(domain);
-		}
-		cookie.setPath(path);
-		cookie.setMaxAge(maxAge);
-		cookie.setHttpOnly(isHttpOnly);
-		response.addCookie(cookie);
-	}
-	
-	/**
-	 * 鏌ヨvalue
-	 *
-	 * @param request
-	 * @param key
-	 * @return
-	 */
-	public static String getValue(HttpServletRequest request, String key) {
-		Cookie cookie = get(request, key);
-		if (cookie != null) {
-			return cookie.getValue();
-		}
-		return null;
-	}
-
-	/**
-	 * 鏌ヨCookie
-	 *
-	 * @param request
-	 * @param key
-	 */
-	private static Cookie get(HttpServletRequest request, String key) {
-		Cookie[] arr_cookie = request.getCookies();
-		if (arr_cookie != null && arr_cookie.length > 0) {
-			for (Cookie cookie : arr_cookie) {
-				if (cookie.getName().equals(key)) {
-					return cookie;
-				}
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * 鍒犻櫎Cookie
-	 *
-	 * @param request
-	 * @param response
-	 * @param key
-	 */
-	public static void remove(HttpServletRequest request, HttpServletResponse response, String key) {
-		Cookie cookie = get(request, key);
-		if (cookie != null) {
-			set(response, key, "", null, COOKIE_PATH, 0, true);
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
deleted file mode 100644
index e90af43..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import freemarker.ext.beans.BeansWrapper;
-import freemarker.ext.beans.BeansWrapperBuilder;
-import freemarker.template.Configuration;
-import freemarker.template.TemplateHashModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * ftl util
- *
- * @author xuxueli 2018-01-17 20:37:48
- */
-public class FtlUtil {
-    private static Logger logger = LoggerFactory.getLogger(FtlUtil.class);
-
-    private static BeansWrapper wrapper = new BeansWrapperBuilder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS).build();     //BeansWrapper.getDefaultInstance();
-
-    public static TemplateHashModel generateStaticModel(String packageName) {
-        try {
-            TemplateHashModel staticModels = wrapper.getStaticModels();
-            TemplateHashModel fileStatics = (TemplateHashModel) staticModels.get(packageName);
-            return fileStatics;
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-        }
-        return null;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
deleted file mode 100644
index 0eb0cb7..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.EncodedResource;
-import org.springframework.core.io.support.PropertiesLoaderUtils;
-
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * i18n util
- *
- * @author xuxueli 2018-01-17 20:39:06
- */
-public class I18nUtil {
-    private static Logger logger = LoggerFactory.getLogger(I18nUtil.class);
-
-    private static Properties prop = null;
-    public static Properties loadI18nProp(){
-        if (prop != null) {
-            return prop;
-        }
-        try {
-            // build i18n prop
-            String i18n = XxlJobAdminConfig.getAdminConfig().getI18n();
-            i18n = (i18n!=null && i18n.trim().length()>0)?("_"+i18n):i18n;
-            String i18nFile = MessageFormat.format("i18n/message{0}.properties", i18n);
-
-            // load prop
-            Resource Resource = new ClassPathResource(i18nFile);
-            EncodedResource encodedResource = new EncodedResource(Resource,"UTF-8");
-            prop = PropertiesLoaderUtils.loadProperties(encodedResource);
-        } catch (IOException e) {
-            logger.error(e.getMessage(), e);
-        }
-        return prop;
-    }
-
-    /**
-     * get val of i18n key
-     *
-     * @param key
-     * @return
-     */
-    public static String getString(String key) {
-        return loadI18nProp().getProperty(key);
-    }
-
-    /**
-     * get mult val of i18n mult key, as json
-     *
-     * @param keys
-     * @return
-     */
-    public static String getMultString(String... keys) {
-        Map<String, String> map = new HashMap<String, String>();
-
-        Properties prop = loadI18nProp();
-        if (keys!=null && keys.length>0) {
-            for (String key: keys) {
-                map.put(key, prop.getProperty(key));
-            }
-        } else {
-            for (String key: prop.stringPropertyNames()) {
-                map.put(key, prop.getProperty(key));
-            }
-        }
-
-        String json = JacksonUtil.writeValueAsString(map);
-        return json;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
deleted file mode 100644
index 4f4ea3c..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-
-/**
- * Jackson util
- * 
- * 1銆乷bj need private and set/get锛�
- * 2銆乨o not support inner class锛�
- * 
- * @author xuxueli 2015-9-25 18:02:56
- */
-public class JacksonUtil {
-	private static Logger logger = LoggerFactory.getLogger(JacksonUtil.class);
-
-    private final static ObjectMapper objectMapper = new ObjectMapper();
-    public static ObjectMapper getInstance() {
-        return objectMapper;
-    }
-
-    /**
-     * bean銆乤rray銆丩ist銆丮ap --> json
-     * 
-     * @param obj
-     * @return json string
-     * @throws Exception
-     */
-    public static String writeValueAsString(Object obj) {
-    	try {
-			return getInstance().writeValueAsString(obj);
-		} catch (JsonGenerationException e) {
-			logger.error(e.getMessage(), e);
-		} catch (JsonMappingException e) {
-			logger.error(e.getMessage(), e);
-		} catch (IOException e) {
-			logger.error(e.getMessage(), e);
-		}
-        return null;
-    }
-
-    /**
-     * string --> bean銆丮ap銆丩ist(array)
-     * 
-     * @param jsonStr
-     * @param clazz
-     * @return obj
-     * @throws Exception
-     */
-    public static <T> T readValue(String jsonStr, Class<T> clazz) {
-    	try {
-			return getInstance().readValue(jsonStr, clazz);
-		} catch (JsonParseException e) {
-			logger.error(e.getMessage(), e);
-		} catch (JsonMappingException e) {
-			logger.error(e.getMessage(), e);
-		} catch (IOException e) {
-			logger.error(e.getMessage(), e);
-		}
-    	return null;
-    }
-
-	/**
-	 * string --> List<Bean>...
-	 *
-	 * @param jsonStr
-	 * @param parametrized
-	 * @param parameterClasses
-	 * @param <T>
-	 * @return
-	 */
-	public static <T> T readValue(String jsonStr, Class<?> parametrized, Class<?>... parameterClasses) {
-		try {
-			JavaType javaType = getInstance().getTypeFactory().constructParametricType(parametrized, parameterClasses);
-			return getInstance().readValue(jsonStr, javaType);
-		} catch (JsonParseException e) {
-			logger.error(e.getMessage(), e);
-		} catch (JsonMappingException e) {
-			logger.error(e.getMessage(), e);
-		} catch (IOException e) {
-			logger.error(e.getMessage(), e);
-		}
-		return null;
-	}
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
deleted file mode 100644
index fbab061..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * local cache tool
- *
- * @author xuxueli 2018-01-22 21:37:34
- */
-public class LocalCacheUtil {
-
-    private static ConcurrentMap<String, LocalCacheData> cacheRepository = new ConcurrentHashMap<String, LocalCacheData>();   // 绫诲瀷寤鸿鐢ㄦ娊璞$埗绫伙紝鍏煎鎬ф洿濂斤紱
-    private static class LocalCacheData{
-        private String key;
-        private Object val;
-        private long timeoutTime;
-
-        public LocalCacheData() {
-        }
-
-        public LocalCacheData(String key, Object val, long timeoutTime) {
-            this.key = key;
-            this.val = val;
-            this.timeoutTime = timeoutTime;
-        }
-
-        public String getKey() {
-            return key;
-        }
-
-        public void setKey(String key) {
-            this.key = key;
-        }
-
-        public Object getVal() {
-            return val;
-        }
-
-        public void setVal(Object val) {
-            this.val = val;
-        }
-
-        public long getTimeoutTime() {
-            return timeoutTime;
-        }
-
-        public void setTimeoutTime(long timeoutTime) {
-            this.timeoutTime = timeoutTime;
-        }
-    }
-
-
-    /**
-     * set cache
-     *
-     * @param key
-     * @param val
-     * @param cacheTime
-     * @return
-     */
-    public static boolean set(String key, Object val, long cacheTime){
-
-        // clean timeout cache, before set new cache (avoid cache too much)
-        cleanTimeoutCache();
-
-        // set new cache
-        if (key==null || key.trim().length()==0) {
-            return false;
-        }
-        if (val == null) {
-            remove(key);
-        }
-        if (cacheTime <= 0) {
-            remove(key);
-        }
-        long timeoutTime = System.currentTimeMillis() + cacheTime;
-        LocalCacheData localCacheData = new LocalCacheData(key, val, timeoutTime);
-        cacheRepository.put(localCacheData.getKey(), localCacheData);
-        return true;
-    }
-
-    /**
-     * remove cache
-     *
-     * @param key
-     * @return
-     */
-    public static boolean remove(String key){
-        if (key==null || key.trim().length()==0) {
-            return false;
-        }
-        cacheRepository.remove(key);
-        return true;
-    }
-
-    /**
-     * get cache
-     *
-     * @param key
-     * @return
-     */
-    public static Object get(String key){
-        if (key==null || key.trim().length()==0) {
-            return null;
-        }
-        LocalCacheData localCacheData = cacheRepository.get(key);
-        if (localCacheData!=null && System.currentTimeMillis()<localCacheData.getTimeoutTime()) {
-            return localCacheData.getVal();
-        } else {
-            remove(key);
-            return null;
-        }
-    }
-
-    /**
-     * clean timeout cache
-     *
-     * @return
-     */
-    public static boolean cleanTimeoutCache(){
-        if (!cacheRepository.keySet().isEmpty()) {
-            for (String key: cacheRepository.keySet()) {
-                LocalCacheData localCacheData = cacheRepository.get(key);
-                if (localCacheData!=null && System.currentTimeMillis()>=localCacheData.getTimeoutTime()) {
-                    cacheRepository.remove(key);
-                }
-            }
-        }
-        return true;
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
deleted file mode 100644
index 35f3cd3..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-@Mapper
-public interface XxlJobGroupDao {
-
-    public List<XxlJobGroup> findAll();
-
-    public List<XxlJobGroup> findByAddressType(@Param("addressType") int addressType);
-
-    public int save(XxlJobGroup xxlJobGroup);
-
-    public int update(XxlJobGroup xxlJobGroup);
-
-    public int remove(@Param("id") int id);
-
-    public XxlJobGroup load(@Param("id") int id);
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
deleted file mode 100644
index d640eff..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-
-/**
- * job info
- * @author xuxueli 2016-1-12 18:03:45
- */
-@Mapper
-public interface XxlJobInfoDao {
-
-	public List<XxlJobInfo> pageList(@Param("offset") int offset,
-									 @Param("pagesize") int pagesize,
-									 @Param("jobGroup") int jobGroup,
-									 @Param("triggerStatus") int triggerStatus,
-									 @Param("jobDesc") String jobDesc,
-									 @Param("executorHandler") String executorHandler,
-									 @Param("author") String author);
-	public int pageListCount(@Param("offset") int offset,
-							 @Param("pagesize") int pagesize,
-							 @Param("jobGroup") int jobGroup,
-							 @Param("triggerStatus") int triggerStatus,
-							 @Param("jobDesc") String jobDesc,
-							 @Param("executorHandler") String executorHandler,
-							 @Param("author") String author);
-	
-	public int save(XxlJobInfo info);
-
-	public XxlJobInfo loadById(@Param("id") int id);
-	
-	public int update(XxlJobInfo xxlJobInfo);
-	
-	public int delete(@Param("id") long id);
-
-	public List<XxlJobInfo> getJobsByGroup(@Param("jobGroup") int jobGroup);
-
-	public int findAllCount();
-
-	public List<XxlJobInfo> scheduleJobQuery(@Param("maxNextTime") long maxNextTime, @Param("pagesize") int pagesize );
-
-	public int scheduleUpdate(XxlJobInfo xxlJobInfo);
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
deleted file mode 100644
index e66f926..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobLog;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * job log
- * @author xuxueli 2016-1-12 18:03:06
- */
-@Mapper
-public interface XxlJobLogDao {
-
-	// exist jobId not use jobGroup, not exist use jobGroup
-	public List<XxlJobLog> pageList(@Param("offset") int offset,
-									@Param("pagesize") int pagesize,
-									@Param("jobGroup") int jobGroup,
-									@Param("jobId") int jobId,
-									@Param("triggerTimeStart") Date triggerTimeStart,
-									@Param("triggerTimeEnd") Date triggerTimeEnd,
-									@Param("logStatus") int logStatus);
-	public int pageListCount(@Param("offset") int offset,
-							 @Param("pagesize") int pagesize,
-							 @Param("jobGroup") int jobGroup,
-							 @Param("jobId") int jobId,
-							 @Param("triggerTimeStart") Date triggerTimeStart,
-							 @Param("triggerTimeEnd") Date triggerTimeEnd,
-							 @Param("logStatus") int logStatus);
-	
-	public XxlJobLog load(@Param("id") long id);
-
-	public long save(XxlJobLog xxlJobLog);
-
-	public int updateTriggerInfo(XxlJobLog xxlJobLog);
-
-	public int updateHandleInfo(XxlJobLog xxlJobLog);
-	
-	public int delete(@Param("jobId") int jobId);
-
-	public Map<String, Object> findLogReport(@Param("from") Date from,
-											 @Param("to") Date to);
-
-	public List<Long> findClearLogIds(@Param("jobGroup") int jobGroup,
-									  @Param("jobId") int jobId,
-									  @Param("clearBeforeTime") Date clearBeforeTime,
-									  @Param("clearBeforeNum") int clearBeforeNum,
-									  @Param("pagesize") int pagesize);
-	public int clearLog(@Param("logIds") List<Long> logIds);
-
-	public List<Long> findFailJobLogIds(@Param("pagesize") int pagesize);
-
-	public int updateAlarmStatus(@Param("logId") long logId,
-								 @Param("oldAlarmStatus") int oldAlarmStatus,
-								 @Param("newAlarmStatus") int newAlarmStatus);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
deleted file mode 100644
index 3028aed..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobLogGlue;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * job log for glue
- * @author xuxueli 2016-5-19 18:04:56
- */
-@Mapper
-public interface XxlJobLogGlueDao {
-	
-	public int save(XxlJobLogGlue xxlJobLogGlue);
-	
-	public List<XxlJobLogGlue> findByJobId(@Param("jobId") int jobId);
-
-	public int removeOld(@Param("jobId") int jobId, @Param("limit") int limit);
-
-	public int deleteByJobId(@Param("jobId") int jobId);
-	
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
deleted file mode 100644
index f4b3dc8..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobLogReport;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * job log
- * @author xuxueli 2019-11-22
- */
-@Mapper
-public interface XxlJobLogReportDao {
-
-	public int save(XxlJobLogReport xxlJobLogReport);
-
-	public int update(XxlJobLogReport xxlJobLogReport);
-
-	public List<XxlJobLogReport> queryLogReport(@Param("triggerDayFrom") Date triggerDayFrom,
-												@Param("triggerDayTo") Date triggerDayTo);
-
-	public XxlJobLogReport queryLogReportTotal();
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
deleted file mode 100644
index 1005c46..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobRegistry;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-@Mapper
-public interface XxlJobRegistryDao {
-
-    public List<Integer> findDead(@Param("timeout") int timeout,
-                                  @Param("nowTime") Date nowTime);
-
-    public int removeDead(@Param("ids") List<Integer> ids);
-
-    public List<XxlJobRegistry> findAll(@Param("timeout") int timeout,
-                                        @Param("nowTime") Date nowTime);
-
-    public int registryUpdate(@Param("registryGroup") String registryGroup,
-                              @Param("registryKey") String registryKey,
-                              @Param("registryValue") String registryValue,
-                              @Param("updateTime") Date updateTime);
-
-    public int registrySave(@Param("registryGroup") String registryGroup,
-                            @Param("registryKey") String registryKey,
-                            @Param("registryValue") String registryValue,
-                            @Param("updateTime") Date updateTime);
-
-    public int registryDelete(@Param("registryGroup") String registryGroup,
-                          @Param("registryKey") String registryKey,
-                          @Param("registryValue") String registryValue);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
deleted file mode 100644
index e840494..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobUser;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import java.util.List;
-
-/**
- * @author xuxueli 2019-05-04 16:44:59
- */
-@Mapper
-public interface XxlJobUserDao {
-
-	public List<XxlJobUser> pageList(@Param("offset") int offset,
-                                     @Param("pagesize") int pagesize,
-                                     @Param("username") String username,
-									 @Param("role") int role);
-	public int pageListCount(@Param("offset") int offset,
-							 @Param("pagesize") int pagesize,
-							 @Param("username") String username,
-							 @Param("role") int role);
-
-	public XxlJobUser loadByUserName(@Param("username") String username);
-
-	public int save(XxlJobUser xxlJobUser);
-
-	public int update(XxlJobUser xxlJobUser);
-	
-	public int delete(@Param("id") int id);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/LoginService.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/LoginService.java
deleted file mode 100644
index 5ba02ee..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/LoginService.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.xxl.job.admin.service;
-
-import com.xxl.job.admin.core.model.XxlJobUser;
-import com.xxl.job.admin.core.util.CookieUtil;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.core.util.JacksonUtil;
-import com.xxl.job.admin.dao.XxlJobUserDao;
-import com.xxl.job.core.biz.model.ReturnT;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.util.DigestUtils;
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.math.BigInteger;
-
-/**
- * @author xuxueli 2019-05-04 22:13:264
- */
-@Configuration(proxyBeanMethods = false)
-public class LoginService {
-
-    public static final String LOGIN_IDENTITY_KEY = "XXL_JOB_LOGIN_IDENTITY";
-
-    @Resource
-    private XxlJobUserDao xxlJobUserDao;
-
-
-    private String makeToken(XxlJobUser xxlJobUser){
-        String tokenJson = JacksonUtil.writeValueAsString(xxlJobUser);
-        String tokenHex = new BigInteger(tokenJson.getBytes()).toString(16);
-        return tokenHex;
-    }
-    private XxlJobUser parseToken(String tokenHex){
-        XxlJobUser xxlJobUser = null;
-        if (tokenHex != null) {
-            String tokenJson = new String(new BigInteger(tokenHex, 16).toByteArray());      // username_password(md5)
-            xxlJobUser = JacksonUtil.readValue(tokenJson, XxlJobUser.class);
-        }
-        return xxlJobUser;
-    }
-
-
-    public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember){
-
-        // param
-        if (username==null || username.trim().length()==0 || password==null || password.trim().length()==0){
-            return new ReturnT<String>(500, I18nUtil.getString("login_param_empty"));
-        }
-
-        // valid passowrd
-        XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
-        if (xxlJobUser == null) {
-            return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
-        }
-        String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
-        if (!passwordMd5.equals(xxlJobUser.getPassword())) {
-            return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
-        }
-
-        String loginToken = makeToken(xxlJobUser);
-
-        // do login
-        CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember);
-        return ReturnT.SUCCESS;
-    }
-
-    /**
-     * logout
-     *
-     * @param request
-     * @param response
-     */
-    public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response){
-        CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY);
-        return ReturnT.SUCCESS;
-    }
-
-    /**
-     * logout
-     *
-     * @param request
-     * @return
-     */
-    public XxlJobUser ifLogin(HttpServletRequest request, HttpServletResponse response){
-        String cookieToken = CookieUtil.getValue(request, LOGIN_IDENTITY_KEY);
-        if (cookieToken != null) {
-            XxlJobUser cookieUser = null;
-            try {
-                cookieUser = parseToken(cookieToken);
-            } catch (Exception e) {
-                logout(request, response);
-            }
-            if (cookieUser != null) {
-                XxlJobUser dbUser = xxlJobUserDao.loadByUserName(cookieUser.getUsername());
-                if (dbUser != null) {
-                    if (cookieUser.getPassword().equals(dbUser.getPassword())) {
-                        return dbUser;
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java
deleted file mode 100644
index 61da3a2..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.xxl.job.admin.service;
-
-
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.core.biz.model.ReturnT;
-
-import java.util.Date;
-import java.util.Map;
-
-/**
- * core job action for xxl-job
- * 
- * @author xuxueli 2016-5-28 15:30:33
- */
-public interface XxlJobService {
-
-	/**
-	 * page list
-	 *
-	 * @param start
-	 * @param length
-	 * @param jobGroup
-	 * @param jobDesc
-	 * @param executorHandler
-	 * @param author
-	 * @return
-	 */
-	public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author);
-
-	/**
-	 * add job
-	 *
-	 * @param jobInfo
-	 * @return
-	 */
-	public ReturnT<String> add(XxlJobInfo jobInfo);
-
-	/**
-	 * update job
-	 *
-	 * @param jobInfo
-	 * @return
-	 */
-	public ReturnT<String> update(XxlJobInfo jobInfo);
-
-	/**
-	 * remove job
-	 * 	 *
-	 * @param id
-	 * @return
-	 */
-	public ReturnT<String> remove(int id);
-
-	/**
-	 * start job
-	 *
-	 * @param id
-	 * @return
-	 */
-	public ReturnT<String> start(int id);
-
-	/**
-	 * stop job
-	 *
-	 * @param id
-	 * @return
-	 */
-	public ReturnT<String> stop(int id);
-
-	/**
-	 * dashboard info
-	 *
-	 * @return
-	 */
-	public Map<String,Object> dashboardInfo();
-
-	/**
-	 * chart info
-	 *
-	 * @param startDate
-	 * @param endDate
-	 * @return
-	 */
-	public ReturnT<Map<String,Object>> chartInfo(Date startDate, Date endDate);
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
deleted file mode 100644
index 1cdeac8..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package com.xxl.job.admin.service.impl;
-
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
-import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.XxlJobGroupDao;
-import com.xxl.job.admin.dao.XxlJobInfoDao;
-import com.xxl.job.admin.dao.XxlJobLogDao;
-import com.xxl.job.admin.dao.XxlJobRegistryDao;
-import com.xxl.job.core.biz.AdminBiz;
-import com.xxl.job.core.biz.model.HandleCallbackParam;
-import com.xxl.job.core.biz.model.RegistryParam;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.handler.IJobHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-
-import javax.annotation.Resource;
-import java.text.MessageFormat;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @author xuxueli 2017-07-27 21:54:20
- */
-@Service
-public class AdminBizImpl implements AdminBiz {
-    private static Logger logger = LoggerFactory.getLogger(AdminBizImpl.class);
-
-    @Resource
-    public XxlJobLogDao xxlJobLogDao;
-    @Resource
-    private XxlJobInfoDao xxlJobInfoDao;
-    @Resource
-    private XxlJobRegistryDao xxlJobRegistryDao;
-    @Resource
-    private XxlJobGroupDao xxlJobGroupDao;
-
-
-    @Override
-    public ReturnT<String> callback(List<HandleCallbackParam> callbackParamList) {
-        for (HandleCallbackParam handleCallbackParam: callbackParamList) {
-            ReturnT<String> callbackResult = callback(handleCallbackParam);
-            logger.debug(">>>>>>>>> JobApiController.callback {}, handleCallbackParam={}, callbackResult={}",
-                    (callbackResult.getCode()==IJobHandler.SUCCESS.getCode()?"success":"fail"), handleCallbackParam, callbackResult);
-        }
-
-        return ReturnT.SUCCESS;
-    }
-
-    private ReturnT<String> callback(HandleCallbackParam handleCallbackParam) {
-        // valid log item
-        XxlJobLog log = xxlJobLogDao.load(handleCallbackParam.getLogId());
-        if (log == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, "log item not found.");
-        }
-        if (log.getHandleCode() > 0) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, "log repeate callback.");     // avoid repeat callback, trigger child job etc
-        }
-
-        // trigger success, to trigger child job
-        String callbackMsg = null;
-        if (IJobHandler.SUCCESS.getCode() == handleCallbackParam.getExecuteResult().getCode()) {
-            XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(log.getJobId());
-            if (xxlJobInfo!=null && xxlJobInfo.getChildJobId()!=null && xxlJobInfo.getChildJobId().trim().length()>0) {
-                callbackMsg = "<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_child_run") +"<<<<<<<<<<< </span><br>";
-
-                String[] childJobIds = xxlJobInfo.getChildJobId().split(",");
-                for (int i = 0; i < childJobIds.length; i++) {
-                    int childJobId = (childJobIds[i]!=null && childJobIds[i].trim().length()>0 && isNumeric(childJobIds[i]))?Integer.valueOf(childJobIds[i]):-1;
-                    if (childJobId > 0) {
-
-                        JobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, -1, null, null);
-                        ReturnT<String> triggerChildResult = ReturnT.SUCCESS;
-
-                        // add msg
-                        callbackMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg1"),
-                                (i+1),
-                                childJobIds.length,
-                                childJobIds[i],
-                                (triggerChildResult.getCode()==ReturnT.SUCCESS_CODE?I18nUtil.getString("system_success"):I18nUtil.getString("system_fail")),
-                                triggerChildResult.getMsg());
-                    } else {
-                        callbackMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg2"),
-                                (i+1),
-                                childJobIds.length,
-                                childJobIds[i]);
-                    }
-                }
-
-            }
-        }
-
-        // handle msg
-        StringBuffer handleMsg = new StringBuffer();
-        if (log.getHandleMsg()!=null) {
-            handleMsg.append(log.getHandleMsg()).append("<br>");
-        }
-        if (handleCallbackParam.getExecuteResult().getMsg() != null) {
-            handleMsg.append(handleCallbackParam.getExecuteResult().getMsg());
-        }
-        if (callbackMsg != null) {
-            handleMsg.append(callbackMsg);
-        }
-
-        // success, save log
-        log.setHandleTime(new Date());
-        log.setHandleCode(handleCallbackParam.getExecuteResult().getCode());
-        log.setHandleMsg(handleMsg.toString());
-        xxlJobLogDao.updateHandleInfo(log);
-
-        return ReturnT.SUCCESS;
-    }
-
-    private boolean isNumeric(String str){
-        try {
-            int result = Integer.valueOf(str);
-            return true;
-        } catch (NumberFormatException e) {
-            return false;
-        }
-    }
-
-    @Override
-    public ReturnT<String> registry(RegistryParam registryParam) {
-
-        // valid
-        if (!StringUtils.hasText(registryParam.getRegistryGroup())
-                || !StringUtils.hasText(registryParam.getRegistryKey())
-                || !StringUtils.hasText(registryParam.getRegistryValue())) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, "Illegal Argument.");
-        }
-
-        int ret = xxlJobRegistryDao.registryUpdate(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date());
-        if (ret < 1) {
-            xxlJobRegistryDao.registrySave(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date());
-
-            // fresh
-            freshGroupRegistryInfo(registryParam);
-        }
-        return ReturnT.SUCCESS;
-    }
-
-    @Override
-    public ReturnT<String> registryRemove(RegistryParam registryParam) {
-
-        // valid
-        if (!StringUtils.hasText(registryParam.getRegistryGroup())
-                || !StringUtils.hasText(registryParam.getRegistryKey())
-                || !StringUtils.hasText(registryParam.getRegistryValue())) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, "Illegal Argument.");
-        }
-
-        int ret = xxlJobRegistryDao.registryDelete(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue());
-        if (ret > 0) {
-
-            // fresh
-            freshGroupRegistryInfo(registryParam);
-        }
-        return ReturnT.SUCCESS;
-    }
-
-    private void freshGroupRegistryInfo(RegistryParam registryParam){
-        // Under consideration, prevent affecting core tables
-    }
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
deleted file mode 100644
index 211f351..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+++ /dev/null
@@ -1,372 +0,0 @@
-package com.xxl.job.admin.service.impl;
-
-import com.xxl.job.admin.core.cron.CronExpression;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLogReport;
-import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
-import com.xxl.job.admin.core.thread.JobScheduleHelper;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.*;
-import com.xxl.job.admin.service.XxlJobService;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-import com.xxl.job.core.glue.GlueTypeEnum;
-import com.xxl.job.core.util.DateUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.text.MessageFormat;
-import java.text.ParseException;
-import java.util.*;
-
-/**
- * core job action for xxl-job
- * @author xuxueli 2016-5-28 15:30:33
- */
-@Service
-public class XxlJobServiceImpl implements XxlJobService {
-	private static Logger logger = LoggerFactory.getLogger(XxlJobServiceImpl.class);
-
-	@Resource
-	private XxlJobGroupDao xxlJobGroupDao;
-	@Resource
-	private XxlJobInfoDao xxlJobInfoDao;
-	@Resource
-	public XxlJobLogDao xxlJobLogDao;
-	@Resource
-	private XxlJobLogGlueDao xxlJobLogGlueDao;
-	@Resource
-	private XxlJobLogReportDao xxlJobLogReportDao;
-
-	@Override
-	public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
-
-		// page list
-		List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
-		int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
-
-		// package result
-		Map<String, Object> maps = new HashMap<String, Object>();
-	    maps.put("recordsTotal", list_count);		// 鎬昏褰曟暟
-	    maps.put("recordsFiltered", list_count);	// 杩囨护鍚庣殑鎬昏褰曟暟
-	    maps.put("data", list);  					// 鍒嗛〉鍒楄〃
-		return maps;
-	}
-
-	@Override
-	public ReturnT<String> add(XxlJobInfo jobInfo) {
-		// valid
-		XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup());
-		if (group == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")) );
-		}
-		if (!CronExpression.isValidExpression(jobInfo.getJobCron())) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid") );
-		}
-		if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );
-		}
-		if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );
-		}
-		if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );
-		}
-		if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
-		}
-		if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) );
-		}
-		if (GlueTypeEnum.BEAN==GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler()==null || jobInfo.getExecutorHandler().trim().length()==0) ) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+"JobHandler") );
-		}
-
-		// fix "\r" in shell
-		if (GlueTypeEnum.GLUE_SHELL==GlueTypeEnum.match(jobInfo.getGlueType()) && jobInfo.getGlueSource()!=null) {
-			jobInfo.setGlueSource(jobInfo.getGlueSource().replaceAll("\r", ""));
-		}
-
-		// ChildJobId valid
-        if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {
-			String[] childJobIds = jobInfo.getChildJobId().split(",");
-			for (String childJobIdItem: childJobIds) {
-				if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {
-					XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
-					if (childJobInfo==null) {
-						return new ReturnT<String>(ReturnT.FAIL_CODE,
-								MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));
-					}
-				} else {
-					return new ReturnT<String>(ReturnT.FAIL_CODE,
-							MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));
-				}
-			}
-
-			// join , avoid "xxx,,"
-			String temp = "";
-			for (String item:childJobIds) {
-				temp += item + ",";
-			}
-			temp = temp.substring(0, temp.length()-1);
-
-			jobInfo.setChildJobId(temp);
-		}
-
-		// add in db
-		jobInfo.setAddTime(new Date());
-		jobInfo.setUpdateTime(new Date());
-		jobInfo.setGlueUpdatetime(new Date());
-		xxlJobInfoDao.save(jobInfo);
-		if (jobInfo.getId() < 1) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) );
-		}
-
-		return new ReturnT<String>(String.valueOf(jobInfo.getId()));
-	}
-
-	private boolean isNumeric(String str){
-		try {
-			int result = Integer.valueOf(str);
-			return true;
-		} catch (NumberFormatException e) {
-			return false;
-		}
-	}
-
-	@Override
-	public ReturnT<String> update(XxlJobInfo jobInfo) {
-
-		// valid
-		if (!CronExpression.isValidExpression(jobInfo.getJobCron())) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid") );
-		}
-		if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );
-		}
-		if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );
-		}
-		if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );
-		}
-		if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
-		}
-
-		// ChildJobId valid
-        if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {
-			String[] childJobIds = jobInfo.getChildJobId().split(",");
-			for (String childJobIdItem: childJobIds) {
-				if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {
-					XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
-					if (childJobInfo==null) {
-						return new ReturnT<String>(ReturnT.FAIL_CODE,
-								MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));
-					}
-				} else {
-					return new ReturnT<String>(ReturnT.FAIL_CODE,
-							MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));
-				}
-			}
-
-			// join , avoid "xxx,,"
-			String temp = "";
-			for (String item:childJobIds) {
-				temp += item + ",";
-			}
-			temp = temp.substring(0, temp.length()-1);
-
-			jobInfo.setChildJobId(temp);
-		}
-
-		// group valid
-		XxlJobGroup jobGroup = xxlJobGroupDao.load(jobInfo.getJobGroup());
-		if (jobGroup == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_jobgroup")+I18nUtil.getString("system_unvalid")) );
-		}
-
-		// stage job info
-		XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(jobInfo.getId());
-		if (exists_jobInfo == null) {
-			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_id")+I18nUtil.getString("system_not_found")) );
-		}
-
-		// next trigger time (5s鍚庣敓鏁堬紝閬垮紑棰勮鍛ㄦ湡)
-		long nextTriggerTime = exists_jobInfo.getTriggerNextTime();
-		if (exists_jobInfo.getTriggerStatus() == 1 && !jobInfo.getJobCron().equals(exists_jobInfo.getJobCron()) ) {
-			try {
-				Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
-				if (nextValidTime == null) {
-					return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_never_fire"));
-				}
-				nextTriggerTime = nextValidTime.getTime();
-			} catch (ParseException e) {
-				logger.error(e.getMessage(), e);
-				return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")+" | "+ e.getMessage());
-			}
-		}
-
-		exists_jobInfo.setJobGroup(jobInfo.getJobGroup());
-		exists_jobInfo.setJobCron(jobInfo.getJobCron());
-		exists_jobInfo.setJobDesc(jobInfo.getJobDesc());
-		exists_jobInfo.setAuthor(jobInfo.getAuthor());
-		exists_jobInfo.setAlarmEmail(jobInfo.getAlarmEmail());
-		exists_jobInfo.setExecutorRouteStrategy(jobInfo.getExecutorRouteStrategy());
-		exists_jobInfo.setExecutorHandler(jobInfo.getExecutorHandler());
-		exists_jobInfo.setExecutorParam(jobInfo.getExecutorParam());
-		exists_jobInfo.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
-		exists_jobInfo.setExecutorTimeout(jobInfo.getExecutorTimeout());
-		exists_jobInfo.setExecutorFailRetryCount(jobInfo.getExecutorFailRetryCount());
-		exists_jobInfo.setChildJobId(jobInfo.getChildJobId());
-		exists_jobInfo.setTriggerNextTime(nextTriggerTime);
-
-		exists_jobInfo.setUpdateTime(new Date());
-        xxlJobInfoDao.update(exists_jobInfo);
-
-
-		return ReturnT.SUCCESS;
-	}
-
-	@Override
-	public ReturnT<String> remove(int id) {
-		XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
-		if (xxlJobInfo == null) {
-			return ReturnT.SUCCESS;
-		}
-
-		xxlJobInfoDao.delete(id);
-		xxlJobLogDao.delete(id);
-		xxlJobLogGlueDao.deleteByJobId(id);
-		return ReturnT.SUCCESS;
-	}
-
-	@Override
-	public ReturnT<String> start(int id) {
-		XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
-
-		// next trigger time (5s鍚庣敓鏁堬紝閬垮紑棰勮鍛ㄦ湡)
-		long nextTriggerTime = 0;
-		try {
-			Date nextValidTime = new CronExpression(xxlJobInfo.getJobCron()).getNextValidTimeAfter(new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
-			if (nextValidTime == null) {
-				return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_never_fire"));
-			}
-			nextTriggerTime = nextValidTime.getTime();
-		} catch (ParseException e) {
-			logger.error(e.getMessage(), e);
-			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")+" | "+ e.getMessage());
-		}
-
-		xxlJobInfo.setTriggerStatus(1);
-		xxlJobInfo.setTriggerLastTime(0);
-		xxlJobInfo.setTriggerNextTime(nextTriggerTime);
-
-		xxlJobInfo.setUpdateTime(new Date());
-		xxlJobInfoDao.update(xxlJobInfo);
-		return ReturnT.SUCCESS;
-	}
-
-	@Override
-	public ReturnT<String> stop(int id) {
-        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
-
-		xxlJobInfo.setTriggerStatus(0);
-		xxlJobInfo.setTriggerLastTime(0);
-		xxlJobInfo.setTriggerNextTime(0);
-
-		xxlJobInfo.setUpdateTime(new Date());
-		xxlJobInfoDao.update(xxlJobInfo);
-		return ReturnT.SUCCESS;
-	}
-
-	@Override
-	public Map<String, Object> dashboardInfo() {
-
-		int jobInfoCount = xxlJobInfoDao.findAllCount();
-		int jobLogCount = 0;
-		int jobLogSuccessCount = 0;
-		XxlJobLogReport xxlJobLogReport = xxlJobLogReportDao.queryLogReportTotal();
-		if (xxlJobLogReport != null) {
-			jobLogCount = xxlJobLogReport.getRunningCount() + xxlJobLogReport.getSucCount() + xxlJobLogReport.getFailCount();
-			jobLogSuccessCount = xxlJobLogReport.getSucCount();
-		}
-
-		// executor count
-		Set<String> executorAddressSet = new HashSet<String>();
-		List<XxlJobGroup> groupList = xxlJobGroupDao.findAll();
-
-		if (groupList!=null && !groupList.isEmpty()) {
-			for (XxlJobGroup group: groupList) {
-				if (group.getRegistryList()!=null && !group.getRegistryList().isEmpty()) {
-					executorAddressSet.addAll(group.getRegistryList());
-				}
-			}
-		}
-
-		int executorCount = executorAddressSet.size();
-
-		Map<String, Object> dashboardMap = new HashMap<String, Object>();
-		dashboardMap.put("jobInfoCount", jobInfoCount);
-		dashboardMap.put("jobLogCount", jobLogCount);
-		dashboardMap.put("jobLogSuccessCount", jobLogSuccessCount);
-		dashboardMap.put("executorCount", executorCount);
-		return dashboardMap;
-	}
-
-	@Override
-	public ReturnT<Map<String, Object>> chartInfo(Date startDate, Date endDate) {
-
-		// process
-		List<String> triggerDayList = new ArrayList<String>();
-		List<Integer> triggerDayCountRunningList = new ArrayList<Integer>();
-		List<Integer> triggerDayCountSucList = new ArrayList<Integer>();
-		List<Integer> triggerDayCountFailList = new ArrayList<Integer>();
-		int triggerCountRunningTotal = 0;
-		int triggerCountSucTotal = 0;
-		int triggerCountFailTotal = 0;
-
-		List<XxlJobLogReport> logReportList = xxlJobLogReportDao.queryLogReport(startDate, endDate);
-
-		if (logReportList!=null && logReportList.size()>0) {
-			for (XxlJobLogReport item: logReportList) {
-				String day = DateUtil.formatDate(item.getTriggerDay());
-				int triggerDayCountRunning = item.getRunningCount();
-				int triggerDayCountSuc = item.getSucCount();
-				int triggerDayCountFail = item.getFailCount();
-
-				triggerDayList.add(day);
-				triggerDayCountRunningList.add(triggerDayCountRunning);
-				triggerDayCountSucList.add(triggerDayCountSuc);
-				triggerDayCountFailList.add(triggerDayCountFail);
-
-				triggerCountRunningTotal += triggerDayCountRunning;
-				triggerCountSucTotal += triggerDayCountSuc;
-				triggerCountFailTotal += triggerDayCountFail;
-			}
-		} else {
-			for (int i = -6; i <= 0; i++) {
-				triggerDayList.add(DateUtil.formatDate(DateUtil.addDays(new Date(), i)));
-				triggerDayCountRunningList.add(0);
-				triggerDayCountSucList.add(0);
-				triggerDayCountFailList.add(0);
-			}
-		}
-
-		Map<String, Object> result = new HashMap<String, Object>();
-		result.put("triggerDayList", triggerDayList);
-		result.put("triggerDayCountRunningList", triggerDayCountRunningList);
-		result.put("triggerDayCountSucList", triggerDayCountSucList);
-		result.put("triggerDayCountFailList", triggerDayCountFailList);
-
-		result.put("triggerCountRunningTotal", triggerCountRunningTotal);
-		result.put("triggerCountSucTotal", triggerCountSucTotal);
-		result.put("triggerCountFailTotal", triggerCountFailTotal);
-
-		return new ReturnT<Map<String, Object>>(result);
-	}
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml
deleted file mode 100644
index 19846ac..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-server:
-  port: 36013
-  servlet:
-    context-path: /xxl-job-admin
-
-spring:
-  cloud:
-    nacos:
-      discovery:
-        metadata:
-          management:
-            context-path: ${server.servlet.context-path}/actuator
-  freemarker:
-    charset: UTF-8
-    request-context-attribute: request
-    settings:
-      number_format: 0.##########
-    suffix: .ftl
-    templateLoaderPath: classpath:/templates/
-  mail:
-    host: smtp.qq.com
-    password: xxx
-    port: 25
-    properties:
-      mail:
-        smtp:
-          auth: true
-          socketFactory:
-            class: javax.net.ssl.SSLSocketFactory
-          starttls:
-            enable: true
-            required: true
-    username: xxx@qq.com
-  mvc:
-    servlet:
-      load-on-startup: 0
-    static-path-pattern: /static/**
-  Autowireds:
-    static-locations: classpath:/static/
-
-management:
-  health:
-    mail:
-      enabled: false
-  server:
-    servlet:
-      context-path: /actuator
-mybatis:
-  mapper-locations: classpath:/mybatis-mapper/*Mapper.xml
-
-xxl:
-  job:
-    accessToken: ''
-    i18n: ''
-    logretentiondays: 30
-    triggerpool:
-      fast:
-        max: 200
-      slow:
-        max: 100
-
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/i18n/message_en.properties b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/i18n/message_en.properties
deleted file mode 100644
index 534c2a6..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/i18n/message_en.properties
+++ /dev/null
@@ -1,262 +0,0 @@
-admin_name=Scheduling Center
-admin_name_full=Distributed Task Scheduling Platform XXL-JOB
-admin_version=2.1.2
-admin_i18n=en
-
-## system
-system_tips=System message
-system_ok=Confirm
-system_close=Close
-system_save=Save
-system_cancel=Cancel
-system_search=Search
-system_status=Status
-system_opt=Operate
-system_please_input=please input
-system_please_choose=please choose
-system_success=success
-system_fail=fail
-system_add_suc=add success
-system_add_fail=add fail
-system_update_suc=update success
-system_update_fail=update fail
-system_all=All
-system_api_error=net error
-system_show=Show
-system_empty=Empty
-system_opt_suc=operate success
-system_opt_fail=operate fail
-system_opt_edit=Edit
-system_opt_del=Delete
-system_unvalid=illegal
-system_not_found=not exist
-system_nav=Navigation
-system_digits=digits
-system_lengh_limit=Length limit
-system_permission_limit=Permission limit
-system_welcome=Welcome
-
-## daterangepicker
-daterangepicker_ranges_recent_hour=recent one hour
-daterangepicker_ranges_today=today
-daterangepicker_ranges_yesterday=yesterday
-daterangepicker_ranges_this_month=this month
-daterangepicker_ranges_last_month=last month
-daterangepicker_ranges_recent_week=recent one week
-daterangepicker_ranges_recent_month=recent one month
-daterangepicker_custom_name=custom
-daterangepicker_custom_starttime=start time
-daterangepicker_custom_endtime=end time
-daterangepicker_custom_daysofweek=Sun,Mon,Tue,Wed,Thu,Fri,Sat
-daterangepicker_custom_monthnames=Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
-
-## dataTable
-dataTable_sProcessing=processing...
-dataTable_sLengthMenu= _MENU_ records per page
-dataTable_sZeroRecords=No matching results
-dataTable_sInfo=page _PAGE_  ( Total _PAGES_ pages锛宊TOTAL_ records )
-dataTable_sInfoEmpty=No Record
-dataTable_sInfoFiltered=(Filtered by _MAX_ results)
-dataTable_sSearch=Search
-dataTable_sEmptyTable=Table data is empty
-dataTable_sLoadingRecords=Loading...
-dataTable_sFirst=FIRST PAGE
-dataTable_sPrevious=Previous Page
-dataTable_sNext=Next Page
-dataTable_sLast=LAST PAGE
-dataTable_sSortAscending=: Rank this column in ascending order
-dataTable_sSortDescending=: Rank this column in descending order
-
-## login
-login_btn=Login
-login_remember_me=Remember Me
-login_username_placeholder=Please enter username
-login_password_placeholder=Please enter password
-login_username_empty=Please enter username
-login_username_lt_4=Username length should not be less than 4
-login_password_empty=Please enter password
-login_password_lt_4=Password length should not be less than 4
-login_success=Login success
-login_fail=Login fail
-login_param_empty=Username or password is empty
-login_param_unvalid=Username or password error
-
-## logout
-logout_btn=Logout
-logout_confirm=Confirm logout?
-logout_success=Logout success
-logout_fail=Logout fail
-
-## change pwd
-change_pwd=Change password
-change_pwd_suc_to_logout=Change password successful, about to log out login
-change_pwd_field_newpwd=new password
-
-## dashboard
-job_dashboard_name=Run report
-job_dashboard_job_num=Job number
-job_dashboard_job_num_tip=The number of tasks running in the scheduling center
-job_dashboard_trigger_num=trigger number
-job_dashboard_trigger_num_tip=The number of trigger record scheduled by the scheduling center
-job_dashboard_jobgroup_num=Executor number
-job_dashboard_jobgroup_num_tip=The number of online executor machines perceived by the scheduling center
-job_dashboard_report=Scheduling report
-job_dashboard_report_loaddata_fail=Scheduling report load data error
-job_dashboard_date_report=Date distribution
-job_dashboard_rate_report=Percentage distribution
-
-## job info
-jobinfo_name=Job Manage
-jobinfo_job=Job
-jobinfo_field_add=Add Job
-jobinfo_field_update=Edit Job
-jobinfo_field_id=Job ID
-jobinfo_field_jobgroup=Executor
-jobinfo_field_jobdesc=Job description
-jobinfo_field_timeout=Job timeout period
-jobinfo_field_gluetype=GLUE Type
-jobinfo_field_executorparam=Param
-jobinfo_field_cron_unvalid=The Cron is illegal
-jobinfo_field_cron_never_fire=The Cron will never fire
-jobinfo_field_author=Author
-jobinfo_field_alarmemail=Alarm email
-jobinfo_field_alarmemail_placeholder=Please enter alarm mail, if there are more than one comma separated
-jobinfo_field_executorRouteStrategy=Route Strategy
-jobinfo_field_childJobId=Child Job ID
-jobinfo_field_childJobId_placeholder=Please enter the Child job ID, if there are more than one comma separated
-jobinfo_field_executorBlockStrategy=Block Strategy
-jobinfo_field_executorFailRetryCount=Fail Retry Count
-jobinfo_field_executorFailRetryCount_placeholder=Fail Retry Count. effect if greater than zero
-jobinfo_script_location=Script location
-jobinfo_shard_index=Shard index
-jobinfo_shard_total=Shard total
-jobinfo_opt_stop=Stop
-jobinfo_opt_start=Start
-jobinfo_opt_log=Query Log
-jobinfo_opt_run=Run Once
-jobinfo_opt_registryinfo=Registry Info
-jobinfo_opt_next_time=Next trigger time
-jobinfo_glue_remark=Autowired Remark
-jobinfo_glue_remark_limit=Autowired Remark length is limited to 4~100
-jobinfo_glue_rollback=Version Backtrack
-jobinfo_glue_jobid_unvalid=Job ID is illegal
-jobinfo_glue_gluetype_unvalid=The job is not GLUE Type
-jobinfo_field_executorTimeout_placeholder=Job Timeout period锛宨n seconds. effect if greater than zero
-
-## job log
-joblog_name=Trigger Log
-joblog_status=Status
-joblog_status_all=All
-joblog_status_suc=Success
-joblog_status_fail=Fail
-joblog_status_running=Running
-joblog_field_triggerTime=Trigger Time
-joblog_field_triggerCode=Trigger Result
-joblog_field_triggerMsg=Trigger Msg
-joblog_field_handleTime=Handle Time
-joblog_field_handleCode=Handle Result
-joblog_field_handleMsg=Trigger Msg
-joblog_field_executorAddress=Executor Address
-joblog_clean=Clean
-joblog_clean_log=Clean Log
-joblog_clean_type=Clean Type
-joblog_clean_type_1=Clean up log data a month ago
-joblog_clean_type_2=Clean up log data three month ago
-joblog_clean_type_3=Clean up log data six month ago
-joblog_clean_type_4=Clean up log data a year ago
-joblog_clean_type_5=Clean up log data a thousand record ago
-joblog_clean_type_6=Clean up log data ten thousand record ago
-joblog_clean_type_7=Clean up log data thirty thousand record ago
-joblog_clean_type_8=Clean up log data hundred thousand record ago
-joblog_clean_type_9=Clean up all log data
-joblog_clean_type_unvalid=Clean type is illegal
-joblog_handleCode_200=Success
-joblog_handleCode_500=Fail
-joblog_handleCode_502=Timeout
-joblog_kill_log=Kill Job
-joblog_kill_log_limit=Trigger Fail, can not kill job
-joblog_kill_log_byman=Manual operation to active kill job
-joblog_rolling_log=Rolling log
-joblog_rolling_log_refresh=Refresh
-joblog_rolling_log_triggerfail=The job trigger fail, can not view the rolling log
-joblog_rolling_log_failoften=The request for the Rolling log is terminated, the number of failed requests exceeds the limit, Reload the log on the refresh page
-joblog_logid_unvalid=Log ID is illegal
-
-## job group
-jobgroup_name=Executor Manage
-jobgroup_list=Executor List
-jobgroup_add=Add Executor
-jobgroup_edit=Edit Executor
-jobgroup_del=Delete Executor
-jobgroup_field_order=Order
-jobgroup_field_title=Title
-jobgroup_field_addressType=Registry Type
-jobgroup_field_addressType_0=Automatic registration
-jobgroup_field_addressType_1=Manual registration
-jobgroup_field_addressType_limit=Manually registration type, the machine address must not be empty
-jobgroup_field_registryList=machine address
-jobgroup_field_registryList_unvalid=registry machine address is illegal
-jobgroup_field_registryList_placeholder=Please enter the machine address, if there are more than one comma separated
-jobgroup_field_appName_limit=Limit the beginning of a lowercase letter, consists of lowercase letters銆乶umber and hyphen.
-jobgroup_field_appName_length=AppName length is limited to 4~64
-jobgroup_field_title_length=Title length is limited to 4~12
-jobgroup_field_order_digits=Please enter a positive integer
-jobgroup_field_orderrange=Order is limited to 1~1000
-jobgroup_del_limit_0=Refuse to delete, the executor is being used
-jobgroup_del_limit_1=Refuses to delete, the system retains at least one executor
-jobgroup_empty=There is no valid executor. Please contact the administrator
-
-## job conf
-jobconf_block_SERIAL_EXECUTION=Serial execution
-jobconf_block_DISCARD_LATER=Discard Later
-jobconf_block_COVER_EARLY=Cover Early
-jobconf_route_first=First
-jobconf_route_last=Last
-jobconf_route_round=Round
-jobconf_route_random=Random
-jobconf_route_consistenthash=Consistent Hash
-jobconf_route_lfu=Least Frequently Used
-jobconf_route_lru=Least Recently Used
-jobconf_route_failover=Failover
-jobconf_route_busyover=Busyover
-jobconf_route_shard=Sharding Broadcast
-jobconf_idleBeat=Idle check
-jobconf_beat=Heartbeats
-jobconf_monitor=Task Scheduling Center monitor alarm
-jobconf_monitor_detail=monitor alarm details
-jobconf_monitor_alarm_title=Alarm Type
-jobconf_monitor_alarm_type=Trigger Fail
-jobconf_monitor_alarm_content=Alarm Content
-jobconf_trigger_admin_adress=Trigger machine address
-jobconf_trigger_exe_regtype=Execotor-Registry Type
-jobconf_trigger_exe_regaddress=Execotor-Registry Address
-jobconf_trigger_address_empty=Trigger Fail锛歳egistry address is empty
-jobconf_trigger_run=Trigger Job
-jobconf_trigger_child_run=Trigger child job
-jobconf_callback_child_msg1={0}/{1} [Job ID={2}], Trigger {3}, Trigger msg: {4} <br>
-jobconf_callback_child_msg2={0}/{1} [Job ID={2}], Trigger Fail, Trigger msg: Job ID is illegal <br>
-jobconf_trigger_type=Job trigger type
-jobconf_trigger_type_cron=Cron trigger
-jobconf_trigger_type_manual=Manual trigger
-jobconf_trigger_type_parent=Parent job trigger
-jobconf_trigger_type_api=Api trigger
-jobconf_trigger_type_retry=Fail retry trigger
-
-## user
-user_manage=User Manage
-user_username=Username
-user_password=Password
-user_role=Role
-user_role_admin=Admin User
-user_role_normal=Normal User
-user_permission=Permission
-user_add=Add User
-user_update=Edit User
-user_username_repeat=Username Repeat
-user_username_valid=Restrictions start with a lowercase letter and consist of lowercase letters and Numbers
-user_password_update_placeholder=Please input password, empty means not update
-user_update_loginuser_limit=Operation of current login account is not allowed
-
-## help
-job_help=Tutorial
-job_help_document=Official Document
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
deleted file mode 100644
index 561c661..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xxl.job.admin.dao.XxlJobGroupDao">
-	
-	<resultMap id="XxlJobGroup" type="com.xxl.job.admin.core.model.XxlJobGroup" >
-		<result column="id" property="id" />
-	    <result column="app_name" property="appName" />
-	    <result column="title" property="title" />
-	    <result column="order" property="order" />
-		<result column="address_type" property="addressType" />
-		<result column="address_list" property="addressList" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		t.id,
-		t.app_name,
-		t.title,
-		t.`order`,
-		t.address_type,
-		t.address_list
-	</sql>
-
-	<select id="findAll" resultMap="XxlJobGroup">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_group AS t
-		ORDER BY t.order ASC
-	</select>
-
-	<select id="findByAddressType" parameterType="java.lang.Integer" resultMap="XxlJobGroup">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_group AS t
-		WHERE t.address_type = #{addressType}
-		ORDER BY t.order ASC
-	</select>
-
-	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobGroup" useGeneratedKeys="true" keyProperty="id" >
-		INSERT INTO xxl_job_group ( `app_name`, `title`, `order`, `address_type`, `address_list`)
-		values ( #{appName}, #{title}, #{order}, #{addressType}, #{addressList});
-	</insert>
-
-	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobGroup" >
-		UPDATE xxl_job_group
-		SET `app_name` = #{appName},
-			`title` = #{title},
-			`order` = #{order},
-			`address_type` = #{addressType},
-			`address_list` = #{addressList}
-		WHERE id = #{id}
-	</update>
-
-	<delete id="remove" parameterType="java.lang.Integer" >
-		DELETE FROM xxl_job_group
-		WHERE id = #{id}
-	</delete>
-
-	<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobGroup">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_group AS t
-		WHERE t.id = #{id}
-	</select>
-
-</mapper>
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
deleted file mode 100644
index cb9048d..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xxl.job.admin.dao.XxlJobInfoDao">
-
-	<resultMap id="XxlJobInfo" type="com.xxl.job.admin.core.model.XxlJobInfo" >
-		<result column="id" property="id" />
-
-		<result column="job_group" property="jobGroup" />
-	    <result column="job_cron" property="jobCron" />
-	    <result column="job_desc" property="jobDesc" />
-
-	    <result column="add_time" property="addTime" />
-	    <result column="update_time" property="updateTime" />
-
-	    <result column="author" property="author" />
-	    <result column="alarm_email" property="alarmEmail" />
-
-		<result column="executor_route_strategy" property="executorRouteStrategy" />
-		<result column="executor_handler" property="executorHandler" />
-	    <result column="executor_param" property="executorParam" />
-		<result column="executor_block_strategy" property="executorBlockStrategy" />
-		<result column="executor_timeout" property="executorTimeout" />
-		<result column="executor_fail_retry_count" property="executorFailRetryCount" />
-
-	    <result column="glue_type" property="glueType" />
-	    <result column="glue_source" property="glueSource" />
-	    <result column="glue_remark" property="glueRemark" />
-		<result column="glue_updatetime" property="glueUpdatetime" />
-
-		<result column="child_jobid" property="childJobId" />
-
-		<result column="trigger_status" property="triggerStatus" />
-		<result column="trigger_last_time" property="triggerLastTime" />
-		<result column="trigger_next_time" property="triggerNextTime" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		t.id,
-		t.job_group,
-		t.job_cron,
-		t.job_desc,
-		t.add_time,
-		t.update_time,
-		t.author,
-		t.alarm_email,
-		t.executor_route_strategy,
-		t.executor_handler,
-		t.executor_param,
-		t.executor_block_strategy,
-		t.executor_timeout,
-		t.executor_fail_retry_count,
-		t.glue_type,
-		t.glue_source,
-		t.glue_remark,
-		t.glue_updatetime,
-		t.child_jobid,
-		t.trigger_status,
-		t.trigger_last_time,
-		t.trigger_next_time
-	</sql>
-
-	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_info AS t
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
-			<if test="jobGroup gt 0">
-				AND t.job_group = #{jobGroup}
-			</if>
-            <if test="triggerStatus gte 0">
-                AND t.trigger_status = #{triggerStatus}
-            </if>
-			<if test="jobDesc != null and jobDesc != ''">
-				AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
-			</if>
-			<if test="executorHandler != null and executorHandler != ''">
-				AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%')
-			</if>
-			<if test="author != null and author != ''">
-				AND t.author like CONCAT(CONCAT('%', #{author}), '%')
-			</if>
-		</trim>
-		ORDER BY id DESC
-		LIMIT #{offset}, #{pagesize}
-	</select>
-
-	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
-		SELECT count(1)
-		FROM xxl_job_info AS t
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
-			<if test="jobGroup gt 0">
-				AND t.job_group = #{jobGroup}
-			</if>
-            <if test="triggerStatus gte 0">
-                AND t.trigger_status = #{triggerStatus}
-            </if>
-			<if test="jobDesc != null and jobDesc != ''">
-				AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
-			</if>
-			<if test="executorHandler != null and executorHandler != ''">
-				AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%')
-			</if>
-			<if test="author != null and author != ''">
-				AND t.author like CONCAT(CONCAT('%', #{author}), '%')
-			</if>
-		</trim>
-	</select>
-
-	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
-		INSERT INTO xxl_job_info (
-			job_group,
-			job_cron,
-			job_desc,
-			add_time,
-			update_time,
-			author,
-			alarm_email,
-            executor_route_strategy,
-			executor_handler,
-			executor_param,
-			executor_block_strategy,
-			executor_timeout,
-			executor_fail_retry_count,
-			glue_type,
-			glue_source,
-			glue_remark,
-			glue_updatetime,
-			child_jobid,
-			trigger_status,
-			trigger_last_time,
-			trigger_next_time
-		) VALUES (
-			#{jobGroup},
-			#{jobCron},
-			#{jobDesc},
-			#{addTime},
-			#{updateTime},
-			#{author},
-			#{alarmEmail},
-			#{executorRouteStrategy},
-			#{executorHandler},
-			#{executorParam},
-			#{executorBlockStrategy},
-			#{executorTimeout},
-			#{executorFailRetryCount},
-			#{glueType},
-			#{glueSource},
-			#{glueRemark},
-			#{glueUpdatetime},
-			#{childJobId},
-			#{triggerStatus},
-			#{triggerLastTime},
-			#{triggerNextTime}
-		);
-		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
-			SELECT LAST_INSERT_ID()
-			/*SELECT @@IDENTITY AS id*/
-		</selectKey>-->
-	</insert>
-
-	<select id="loadById" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_info AS t
-		WHERE t.id = #{id}
-	</select>
-
-	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" >
-		UPDATE xxl_job_info
-		SET
-			job_group = #{jobGroup},
-			job_cron = #{jobCron},
-			job_desc = #{jobDesc},
-			update_time = #{updateTime},
-			author = #{author},
-			alarm_email = #{alarmEmail},
-			executor_route_strategy = #{executorRouteStrategy},
-			executor_handler = #{executorHandler},
-			executor_param = #{executorParam},
-			executor_block_strategy = #{executorBlockStrategy},
-			executor_timeout = ${executorTimeout},
-			executor_fail_retry_count = ${executorFailRetryCount},
-			glue_type = #{glueType},
-			glue_source = #{glueSource},
-			glue_remark = #{glueRemark},
-			glue_updatetime = #{glueUpdatetime},
-			child_jobid = #{childJobId},
-			trigger_status = #{triggerStatus},
-			trigger_last_time = #{triggerLastTime},
-			trigger_next_time = #{triggerNextTime}
-		WHERE id = #{id}
-	</update>
-
-	<delete id="delete" parameterType="java.util.HashMap">
-		DELETE
-		FROM xxl_job_info
-		WHERE id = #{id}
-	</delete>
-
-	<select id="getJobsByGroup" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_info AS t
-		WHERE t.job_group = #{jobGroup}
-	</select>
-
-	<select id="findAllCount" resultType="int">
-		SELECT count(1)
-		FROM xxl_job_info
-	</select>
-
-
-	<select id="scheduleJobQuery" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_info AS t
-		WHERE t.trigger_status = 1
-			and t.trigger_next_time <![CDATA[ <= ]]> #{maxNextTime}
-		ORDER BY id ASC
-		LIMIT #{pagesize}
-	</select>
-
-	<update id="scheduleUpdate" parameterType="com.xxl.job.admin.core.model.XxlJobInfo"  >
-		UPDATE xxl_job_info
-		SET
-			trigger_last_time = #{triggerLastTime},
-			trigger_next_time = #{triggerNextTime},
-			trigger_status = #{triggerStatus}
-		WHERE id = #{id}
-	</update>
-
-</mapper>
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
deleted file mode 100644
index 699277c..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xxl.job.admin.dao.XxlJobLogGlueDao">
-	
-	<resultMap id="XxlJobLogGlue" type="com.xxl.job.admin.core.model.XxlJobLogGlue" >
-		<result column="id" property="id" />
-	    <result column="job_id" property="jobId" />
-		<result column="glue_type" property="glueType" />
-	    <result column="glue_source" property="glueSource" />
-	    <result column="glue_remark" property="glueRemark" />
-	    <result column="add_time" property="addTime" />
-	    <result column="update_time" property="updateTime" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		t.id,
-		t.job_id,
-		t.glue_type,
-		t.glue_source,
-		t.glue_remark,
-		t.add_time,
-		t.update_time
-	</sql>
-	
-	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogGlue" useGeneratedKeys="true" keyProperty="id" >
-		INSERT INTO xxl_job_logglue (
-			`job_id`,
-			`glue_type`,
-			`glue_source`,
-			`glue_remark`,
-			`add_time`, 
-			`update_time`
-		) VALUES (
-			#{jobId},
-			#{glueType},
-			#{glueSource},
-			#{glueRemark},
-			#{addTime},
-			#{updateTime}
-		);
-		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
-			SELECT LAST_INSERT_ID() 
-		</selectKey>-->
-	</insert>
-	
-	<select id="findByJobId" parameterType="java.lang.Integer" resultMap="XxlJobLogGlue">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_logglue AS t
-		WHERE t.job_id = #{jobId}
-		ORDER BY id DESC
-	</select>
-	
-	<delete id="removeOld" >
-		DELETE FROM xxl_job_logglue
-		WHERE id NOT in(
-			SELECT id FROM(
-				SELECT id FROM xxl_job_logglue
-				WHERE `job_id` = #{jobId}
-				ORDER BY update_time desc
-				LIMIT 0, #{limit}
-			) t1
-		) AND `job_id` = #{jobId}
-	</delete>
-	
-	<delete id="deleteByJobId" parameterType="java.lang.Integer" >
-		DELETE FROM xxl_job_logglue
-		WHERE `job_id` = #{jobId}
-	</delete>
-	
-</mapper>
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
deleted file mode 100644
index e8129e2..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
+++ /dev/null
@@ -1,249 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xxl.job.admin.dao.XxlJobLogDao">
-	
-	<resultMap id="XxlJobLog" type="com.xxl.job.admin.core.model.XxlJobLog" >
-		<result column="id" property="id" />
-
-		<result column="job_group" property="jobGroup" />
-		<result column="job_id" property="jobId" />
-
-		<result column="executor_address" property="executorAddress" />
-		<result column="executor_handler" property="executorHandler" />
-	    <result column="executor_param" property="executorParam" />
-		<result column="executor_sharding_param" property="executorShardingParam" />
-		<result column="executor_fail_retry_count" property="executorFailRetryCount" />
-	    
-	    <result column="trigger_time" property="triggerTime" />
-	    <result column="trigger_code" property="triggerCode" />
-	    <result column="trigger_msg" property="triggerMsg" />
-	    
-	    <result column="handle_time" property="handleTime" />
-	    <result column="handle_code" property="handleCode" />
-	    <result column="handle_msg" property="handleMsg" />
-
-		<result column="alarm_status" property="alarmStatus" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		t.id,
-		t.job_group,
-		t.job_id,
-		t.executor_address,
-		t.executor_handler,
-		t.executor_param,
-		t.executor_sharding_param,
-		t.executor_fail_retry_count,
-		t.trigger_time,
-		t.trigger_code,
-		t.trigger_msg,
-		t.handle_time,
-		t.handle_code,
-		t.handle_msg,
-		t.alarm_status
-	</sql>
-	
-	<select id="pageList" resultMap="XxlJobLog">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_log AS t
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
-			<if test="jobId==0 and jobGroup gt 0">
-				AND t.job_group = #{jobGroup}
-			</if>
-			<if test="jobId gt 0">
-				AND t.job_id = #{jobId}
-			</if>
-			<if test="triggerTimeStart != null">
-				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
-			</if>
-			<if test="triggerTimeEnd != null">
-				AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
-			</if>
-			<if test="logStatus == 1" >
-				AND t.handle_code = 200
-			</if>
-			<if test="logStatus == 2" >
-				AND (
-					t.trigger_code NOT IN (0, 200) OR
-					t.handle_code NOT IN (0, 200)
-				)
-			</if>
-			<if test="logStatus == 3" >
-				AND t.trigger_code = 200
-				AND t.handle_code = 0
-			</if>
-		</trim>
-		ORDER BY t.trigger_time DESC
-		LIMIT #{offset}, #{pagesize}
-	</select>
-	
-	<select id="pageListCount" resultType="int">
-		SELECT count(1)
-		FROM xxl_job_log AS t
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
-			<if test="jobId==0 and jobGroup gt 0">
-				AND t.job_group = #{jobGroup}
-			</if>
-			<if test="jobId gt 0">
-				AND t.job_id = #{jobId}
-			</if>
-			<if test="triggerTimeStart != null">
-				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
-			</if>
-			<if test="triggerTimeEnd != null">
-				AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
-			</if>
-			<if test="logStatus == 1" >
-				AND t.handle_code = 200
-			</if>
-			<if test="logStatus == 2" >
-				AND (
-					t.trigger_code NOT IN (0, 200) OR
-					t.handle_code NOT IN (0, 200)
-				)
-			</if>
-			<if test="logStatus == 3" >
-				AND t.trigger_code = 200
-				AND t.handle_code = 0
-			</if>
-		</trim>
-	</select>
-	
-	<select id="load" parameterType="java.lang.Long" resultMap="XxlJobLog">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_log AS t
-		WHERE t.id = #{id}
-	</select>
-
-	
-	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
-		INSERT INTO xxl_job_log (
-			`job_group`,
-			`job_id`,
-			`trigger_time`,
-			`trigger_code`,
-			`handle_code`
-		) VALUES (
-			#{jobGroup},
-			#{jobId},
-			#{triggerTime},
-			#{triggerCode},
-			#{handleCode}
-		);
-		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
-			SELECT LAST_INSERT_ID() 
-		</selectKey>-->
-	</insert>
-
-	<update id="updateTriggerInfo" >
-		UPDATE xxl_job_log
-		SET
-			`trigger_time`= #{triggerTime},
-			`trigger_code`= #{triggerCode},
-			`trigger_msg`= #{triggerMsg},
-			`executor_address`= #{executorAddress},
-			`executor_handler`=#{executorHandler},
-			`executor_param`= #{executorParam},
-			`executor_sharding_param`= #{executorShardingParam},
-			`executor_fail_retry_count`= #{executorFailRetryCount}
-		WHERE `id`= #{id}
-	</update>
-
-	<update id="updateHandleInfo">
-		UPDATE xxl_job_log
-		SET 
-			`handle_time`= #{handleTime}, 
-			`handle_code`= #{handleCode},
-			`handle_msg`= #{handleMsg} 
-		WHERE `id`= #{id}
-	</update>
-	
-	<delete id="delete" >
-		delete from xxl_job_log
-		WHERE job_id = #{jobId}
-	</delete>
-
-    <!--<select id="triggerCountByDay" resultType="java.util.Map" >
-		SELECT
-			DATE_FORMAT(trigger_time,'%Y-%m-%d') triggerDay,
-			COUNT(handle_code) triggerDayCount,
-			SUM(CASE WHEN (trigger_code in (0, 200) and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning,
-			SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
-		FROM xxl_job_log
-		WHERE trigger_time BETWEEN #{from} and #{to}
-		GROUP BY triggerDay
-		ORDER BY triggerDay
-    </select>-->
-
-    <select id="findLogReport" resultType="java.util.Map" >
-		SELECT
-			COUNT(handle_code) triggerDayCount,
-			SUM(CASE WHEN (trigger_code in (0, 200) and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning,
-			SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
-		FROM xxl_job_log
-		WHERE trigger_time BETWEEN #{from} and #{to}
-    </select>
-
-	<select id="findClearLogIds" resultType="long" >
-		SELECT id FROM xxl_job_log
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
-			<if test="jobGroup gt 0">
-				AND job_group = #{jobGroup}
-			</if>
-			<if test="jobId gt 0">
-				AND job_id = #{jobId}
-			</if>
-			<if test="clearBeforeTime != null">
-				AND trigger_time <![CDATA[ <= ]]> #{clearBeforeTime}
-			</if>
-			<if test="clearBeforeNum gt 0">
-				AND id NOT in(
-				SELECT id FROM(
-				SELECT id FROM xxl_job_log AS t
-				<trim prefix="WHERE" prefixOverrides="AND | OR" >
-					<if test="jobGroup gt 0">
-						AND t.job_group = #{jobGroup}
-					</if>
-					<if test="jobId gt 0">
-						AND t.job_id = #{jobId}
-					</if>
-				</trim>
-				ORDER BY t.trigger_time desc
-				LIMIT 0, #{clearBeforeNum}
-				) t1
-				)
-			</if>
-		</trim>
-		order by id asc
-		LIMIT #{pagesize}
-	</select>
-
-	<delete id="clearLog" >
-		delete from xxl_job_log
-		WHERE id in
-		<foreach collection="logIds" item="item" open="(" close=")" separator="," >
-			#{item}
-		</foreach>
-	</delete>
-
-	<select id="findFailJobLogIds" resultType="long" >
-		SELECT id FROM `xxl_job_log`
-		WHERE !(
-			(trigger_code in (0, 200) and handle_code = 0)
-			OR
-			(handle_code = 200)
-		)
-		AND `alarm_status` = 0
-		ORDER BY id ASC
-		LIMIT #{pagesize}
-	</select>
-
-	<update id="updateAlarmStatus" >
-		UPDATE xxl_job_log
-		SET
-			`alarm_status` = #{newAlarmStatus}
-		WHERE `id`= #{logId} AND `alarm_status` = #{oldAlarmStatus}
-	</update>
-	
-</mapper>
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
deleted file mode 100644
index 579d5f3..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xxl.job.admin.dao.XxlJobLogReportDao">
-	
-	<resultMap id="XxlJobLogReport" type="com.xxl.job.admin.core.model.XxlJobLogReport" >
-		<result column="id" property="id" />
-	    <result column="trigger_day" property="triggerDay" />
-		<result column="running_count" property="runningCount" />
-	    <result column="suc_count" property="sucCount" />
-	    <result column="fail_count" property="failCount" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		t.id,
-		t.trigger_day,
-		t.running_count,
-		t.suc_count,
-		t.fail_count
-	</sql>
-	
-	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
-		INSERT INTO xxl_job_log_report (
-			`trigger_day`,
-			`running_count`,
-			`suc_count`,
-			`fail_count`
-		) VALUES (
-			#{triggerDay},
-			#{runningCount},
-			#{sucCount},
-			#{failCount}
-		);
-		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
-			SELECT LAST_INSERT_ID() 
-		</selectKey>-->
-	</insert>
-
-	<update id="update" >
-        UPDATE xxl_job_log_report
-        SET `running_count` = #{runningCount},
-        	`suc_count` = #{sucCount},
-        	`fail_count` = #{failCount}
-        WHERE `trigger_day` = #{triggerDay}
-    </update>
-
-	<select id="queryLogReport" resultMap="XxlJobLogReport">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_log_report AS t
-		WHERE t.trigger_day between #{triggerDayFrom} and #{triggerDayTo}
-		ORDER BY t.trigger_day ASC
-	</select>
-
-	<select id="queryLogReportTotal" resultMap="XxlJobLogReport">
-		SELECT
-			SUM(running_count) running_count,
-			SUM(suc_count) suc_count,
-			SUM(fail_count) fail_count
-		FROM xxl_job_log_report AS t
-	</select>
-
-</mapper>
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
deleted file mode 100644
index 4393819..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xxl.job.admin.dao.XxlJobRegistryDao">
-
-	<resultMap id="XxlJobRegistry" type="com.xxl.job.admin.core..XxlJobRegistry" >
-		<result column="id" property="id" />
-	    <result column="registry_group" property="registryGroup" />
-	    <result column="registry_key" property="registryKey" />
-	    <result column="registry_value" property="registryValue" />
-		<result column="update_time" property="updateTime" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		t.id,
-		t.registry_group,
-		t.registry_key,
-		t.registry_value,
-		t.update_time
-	</sql>
-
-	<select id="findDead" parameterType="java.util.HashMap" resultType="java.lang.Integer" >
-		SELECT t.id
-		FROM xxl_job_registry AS t
-		WHERE t.update_time <![CDATA[ < ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)
-	</select>
-
-	<delete id="removeDead" parameterType="java.lang.Integer" >
-		DELETE FROM xxl_job_registry
-		WHERE id in
-		<foreach collection="ids" item="item" open="(" close=")" separator="," >
-			#{item}
-		</foreach>
-	</delete>
-
-	<select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_registry AS t
-		WHERE t.update_time <![CDATA[ > ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)
-	</select>
-
-    <update id="registryUpdate" >
-        UPDATE xxl_job_registry
-        SET `update_time` = #{updateTime}
-        WHERE `registry_group` = #{registryGroup}
-          AND `registry_key` = #{registryKey}
-          AND `registry_value` = #{registryValue}
-    </update>
-
-    <insert id="registrySave" >
-        INSERT INTO xxl_job_registry( `registry_group` , `registry_key` , `registry_value`, `update_time`)
-        VALUES( #{registryGroup}  , #{registryKey} , #{registryValue}, #{updateTime})
-    </insert>
-
-	<delete id="registryDelete" >
-		DELETE FROM xxl_job_registry
-		WHERE registry_group = #{registryGroup}
-			AND registry_key = #{registryKey}
-			AND registry_value = #{registryValue}
-	</delete>
-
-</mapper>
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
deleted file mode 100644
index 9e09b4a..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.xxl.job.admin.dao.XxlJobUserDao">
-
-	<resultMap id="XxlJobUser" type="com.xxl.job.admin.core.model.XxlJobUser" >
-		<result column="id" property="id" />
-		<result column="username" property="username" />
-	    <result column="password" property="password" />
-	    <result column="role" property="role" />
-	    <result column="permission" property="permission" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		t.id,
-		t.username,
-		t.password,
-		t.role,
-		t.permission
-	</sql>
-
-	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobUser">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_user AS t
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
-			<if test="username != null and username != ''">
-				AND t.username like CONCAT(CONCAT('%', #{username}), '%')
-			</if>
-			<if test="role gt -1">
-				AND t.role = #{role}
-			</if>
-		</trim>
-		ORDER BY username ASC
-		LIMIT #{offset}, #{pagesize}
-	</select>
-
-	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
-		SELECT count(1)
-		FROM xxl_job_user AS t
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
-			<if test="username != null and username != ''">
-				AND t.username like CONCAT(CONCAT('%', #{username}), '%')
-			</if>
-			<if test="role gt -1">
-				AND t.role = #{role}
-			</if>
-		</trim>
-	</select>
-
-	<select id="loadByUserName" parameterType="java.util.HashMap" resultMap="XxlJobUser">
-		SELECT <include refid="Base_Column_List" />
-		FROM xxl_job_user AS t
-		WHERE t.username = #{username}
-	</select>
-
-	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobUser" useGeneratedKeys="true" keyProperty="id" >
-		INSERT INTO xxl_job_user (
-			username,
-			password,
-			role,
-			permission
-		) VALUES (
-			#{username},
-			#{password},
-			#{role},
-			#{permission}
-		);
-	</insert>
-
-	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobUser" >
-		UPDATE xxl_job_user
-		SET
-			<if test="password != null and password != ''">
-				password = #{password},
-			</if>
-			role = #{role},
-			permission = #{permission}
-		WHERE id = #{id}
-	</update>
-
-	<delete id="delete" parameterType="java.util.HashMap">
-		DELETE
-		FROM xxl_job_user
-		WHERE id = #{id}
-	</delete>
-
-</mapper>
\ No newline at end of file
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js
deleted file mode 100644
index 14231c5..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js
+++ /dev/null
@@ -1,234 +0,0 @@
-// CodeMirror, copyright (c) by Marijn Haverbeke and others
-// Distributed under an MIT license: https://codemirror.net/LICENSE
-
-(function(mod) {
-  if (typeof exports == "object" && typeof module == "object") // CommonJS
-    mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike"));
-  else if (typeof define == "function" && define.amd) // AMD
-    define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod);
-  else // Plain browser env
-    mod(CodeMirror);
-})(function(CodeMirror) {
-  "use strict";
-
-  function keywords(str) {
-    var obj = {}, words = str.split(" ");
-    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
-    return obj;
-  }
-
-  // Helper for phpString
-  function matchSequence(list, end, escapes) {
-    if (list.length == 0) return phpString(end);
-    return function (stream, state) {
-      var patterns = list[0];
-      for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) {
-        state.tokenize = matchSequence(list.slice(1), end);
-        return patterns[i][1];
-      }
-      state.tokenize = phpString(end, escapes);
-      return "string";
-    };
-  }
-  function phpString(closing, escapes) {
-    return function(stream, state) { return phpString_(stream, state, closing, escapes); };
-  }
-  function phpString_(stream, state, closing, escapes) {
-    // "Complex" syntax
-    if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) {
-      state.tokenize = null;
-      return "string";
-    }
-
-    // Simple syntax
-    if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) {
-      // After the variable name there may appear array or object operator.
-      if (stream.match("[", false)) {
-        // Match array operator
-        state.tokenize = matchSequence([
-          [["[", null]],
-          [[/\d[\w\.]*/, "number"],
-           [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"],
-           [/[\w\$]+/, "variable"]],
-          [["]", null]]
-        ], closing, escapes);
-      }
-      if (stream.match(/\-\>\w/, false)) {
-        // Match object operator
-        state.tokenize = matchSequence([
-          [["->", null]],
-          [[/[\w]+/, "variable"]]
-        ], closing, escapes);
-      }
-      return "variable-2";
-    }
-
-    var escaped = false;
-    // Normal string
-    while (!stream.eol() &&
-           (escaped || escapes === false ||
-            (!stream.match("{$", false) &&
-             !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) {
-      if (!escaped && stream.match(closing)) {
-        state.tokenize = null;
-        state.tokStack.pop(); state.tokStack.pop();
-        break;
-      }
-      escaped = stream.next() == "\\" && !escaped;
-    }
-    return "string";
-  }
-
-  var phpKeywords = "abstract and array as break case catch class clone const continue declare default " +
-    "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " +
-    "for foreach function global goto if implements interface instanceof namespace " +
-    "new or private protected public static switch throw trait try use var while xor " +
-    "die echo empty exit eval include include_once isset list require require_once return " +
-    "print unset __halt_compiler self static parent yield insteadof finally";
-  var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__";
-  var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_Autowired is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count";
-  CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" "));
-  CodeMirror.registerHelper("wordChars", "php", /[\w$]/);
-
-  var phpConfig = {
-    name: "clike",
-    helperType: "php",
-    keywords: keywords(phpKeywords),
-    blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"),
-    defKeywords: keywords("class function interface namespace trait"),
-    atoms: keywords(phpAtoms),
-    builtin: keywords(phpBuiltin),
-    multiLineStrings: true,
-    hooks: {
-      "$": function(stream) {
-        stream.eatWhile(/[\w\$_]/);
-        return "variable-2";
-      },
-      "<": function(stream, state) {
-        var before;
-        if (before = stream.match(/<<\s*/)) {
-          var quoted = stream.eat(/['"]/);
-          stream.eatWhile(/[\w\.]/);
-          var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1));
-          if (quoted) stream.eat(quoted);
-          if (delim) {
-            (state.tokStack || (state.tokStack = [])).push(delim, 0);
-            state.tokenize = phpString(delim, quoted != "'");
-            return "string";
-          }
-        }
-        return false;
-      },
-      "#": function(stream) {
-        while (!stream.eol() && !stream.match("?>", false)) stream.next();
-        return "comment";
-      },
-      "/": function(stream) {
-        if (stream.eat("/")) {
-          while (!stream.eol() && !stream.match("?>", false)) stream.next();
-          return "comment";
-        }
-        return false;
-      },
-      '"': function(_stream, state) {
-        (state.tokStack || (state.tokStack = [])).push('"', 0);
-        state.tokenize = phpString('"');
-        return "string";
-      },
-      "{": function(_stream, state) {
-        if (state.tokStack && state.tokStack.length)
-          state.tokStack[state.tokStack.length - 1]++;
-        return false;
-      },
-      "}": function(_stream, state) {
-        if (state.tokStack && state.tokStack.length > 0 &&
-            !--state.tokStack[state.tokStack.length - 1]) {
-          state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]);
-        }
-        return false;
-      }
-    }
-  };
-
-  CodeMirror.defineMode("php", function(config, parserConfig) {
-    var htmlMode = CodeMirror.getMode(config, (parserConfig && parserConfig.htmlMode) || "text/html");
-    var phpMode = CodeMirror.getMode(config, phpConfig);
-
-    function dispatch(stream, state) {
-      var isPHP = state.curMode == phpMode;
-      if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null;
-      if (!isPHP) {
-        if (stream.match(/^<\?\w*/)) {
-          state.curMode = phpMode;
-          if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, ""))
-          state.curState = state.php;
-          return "meta";
-        }
-        if (state.pending == '"' || state.pending == "'") {
-          while (!stream.eol() && stream.next() != state.pending) {}
-          var style = "string";
-        } else if (state.pending && stream.pos < state.pending.end) {
-          stream.pos = state.pending.end;
-          var style = state.pending.style;
-        } else {
-          var style = htmlMode.token(stream, state.curState);
-        }
-        if (state.pending) state.pending = null;
-        var cur = stream.current(), openPHP = cur.search(/<\?/), m;
-        if (openPHP != -1) {
-          if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0];
-          else state.pending = {end: stream.pos, style: style};
-          stream.backUp(cur.length - openPHP);
-        }
-        return style;
-      } else if (isPHP && state.php.tokenize == null && stream.match("?>")) {
-        state.curMode = htmlMode;
-        state.curState = state.html;
-        if (!state.php.context.prev) state.php = null;
-        return "meta";
-      } else {
-        return phpMode.token(stream, state.curState);
-      }
-    }
-
-    return {
-      startState: function() {
-        var html = CodeMirror.startState(htmlMode)
-        var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null
-        return {html: html,
-                php: php,
-                curMode: parserConfig.startOpen ? phpMode : htmlMode,
-                curState: parserConfig.startOpen ? php : html,
-                pending: null};
-      },
-
-      copyState: function(state) {
-        var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html),
-            php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur;
-        if (state.curMode == htmlMode) cur = htmlNew;
-        else cur = phpNew;
-        return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur,
-                pending: state.pending};
-      },
-
-      token: dispatch,
-
-      indent: function(state, textAfter) {
-        if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) ||
-            (state.curMode == phpMode && /^\?>/.test(textAfter)))
-          return htmlMode.indent(state.html, textAfter);
-        return state.curMode.indent(state.curState, textAfter);
-      },
-
-      blockCommentStart: "/*",
-      blockCommentEnd: "*/",
-      lineComment: "//",
-
-      innerMode: function(state) { return {state: state.curState, mode: state.curMode}; }
-    };
-  }, "htmlmixed", "clike");
-
-  CodeMirror.defineMIME("application/x-httpd-php", "php");
-  CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true});
-  CodeMirror.defineMIME("text/x-php", phpConfig);
-});
diff --git a/Source/BladeX/blade-ops/blade-xxljob/pom.xml b/Source/BladeX/blade-ops/blade-xxljob/pom.xml
deleted file mode 100644
index d256a8c..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-ops</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>blade-xxljob</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!--Blade-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-cloud</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-launch</artifactId>
-        </dependency>
-        <!--Job-->
-        <dependency>
-            <groupId>com.xuxueli</groupId>
-            <artifactId>xxl-job-core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-
-</project>
diff --git a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/JobApplication.java b/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/JobApplication.java
deleted file mode 100644
index b59cebb..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/JobApplication.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.job.executor;
-
-import org.springblade.common.constant.LauncherConstant;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-
-/**
- * Job鍚姩鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class JobApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(LauncherConstant.APPLICATION_XXLJOB_NAME, JobApplication.class, args);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/config/XxlJobConfig.java b/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/config/XxlJobConfig.java
deleted file mode 100644
index 41697ae..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/config/XxlJobConfig.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.springblade.job.executor.config;
-
-import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * xxl-job config
- *
- * @author xuxueli 2017-04-28
- */
-@Configuration(proxyBeanMethods = false)
-public class XxlJobConfig {
-	private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
-
-	@Value("${xxl.job.admin.addresses}")
-	private String adminAddresses;
-
-	@Value("${xxl.job.executor.appname}")
-	private String appName;
-
-	@Value("${xxl.job.executor.ip}")
-	private String ip;
-
-	@Value("${xxl.job.executor.port}")
-	private int port;
-
-	@Value("${xxl.job.accessToken}")
-	private String accessToken;
-
-	@Value("${xxl.job.executor.logpath}")
-	private String logPath;
-
-	@Value("${xxl.job.executor.logretentiondays}")
-	private int logRetentionDays;
-
-
-	@Bean
-	public XxlJobSpringExecutor xxlJobExecutor() {
-		logger.info(">>>>>>>>>>> xxl-job config init.");
-		XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
-		xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
-		xxlJobSpringExecutor.setAppName(appName);
-		xxlJobSpringExecutor.setIp(ip);
-		xxlJobSpringExecutor.setPort(port);
-		xxlJobSpringExecutor.setAccessToken(accessToken);
-		xxlJobSpringExecutor.setLogPath(logPath);
-		xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
-
-		return xxlJobSpringExecutor;
-	}
-
-	/**
-	 * 閽堝澶氱綉鍗°�佸鍣ㄥ唴閮ㄧ讲绛夋儏鍐碉紝鍙�熷姪 "spring-cloud-commons" 鎻愪緵鐨� "InetUtils" 缁勪欢鐏垫椿瀹氬埗娉ㄥ唽IP锛�
-	 *
-	 *      1銆佸紩鍏ヤ緷璧栵細
-	 *          <dependency>
-	 *             <groupId>org.springframework.cloud</groupId>
-	 *             <artifactId>spring-cloud-commons</artifactId>
-	 *             <version>${version}</version>
-	 *         </dependency>
-	 *
-	 *      2銆侀厤缃枃浠讹紝鎴栬�呭鍣ㄥ惎鍔ㄥ彉閲�
-	 *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
-	 *
-	 *      3銆佽幏鍙朓P
-	 *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
-	 */
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/controller/TestController.java b/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/controller/TestController.java
deleted file mode 100644
index 9a8dd10..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/controller/TestController.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.springblade.job.executor.controller;
-
-import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 娴嬭瘯瀹氭椂璇锋眰
- *
- * @author job
- */
-@RestController
-@RequestMapping("/test")
-public class TestController {
-
-	@GetMapping("testRequest")
-	public R testRequest(String name) {
-		return R.data("鎴戞槸娴嬭瘯璇锋眰" + name);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/jobhandler/SampleXxlJob.java b/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/jobhandler/SampleXxlJob.java
deleted file mode 100644
index bb089e7..0000000
--- a/Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/jobhandler/SampleXxlJob.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package org.springblade.job.executor.jobhandler;
-
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.handler.IJobHandler;
-import com.xxl.job.core.handler.annotation.XxlJob;
-import com.xxl.job.core.log.XxlJobLogger;
-import com.xxl.job.core.util.ShardingUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.concurrent.TimeUnit;
-
-/**
- * XxlJob寮�鍙戠ず渚嬶紙Bean妯″紡锛�
- * <p>
- * 寮�鍙戞楠わ細
- * 1銆佸湪Spring Bean瀹炰緥涓紝寮�鍙慗ob鏂规硶锛屾柟寮忔牸寮忚姹備负 "public ReturnT<String> execute(String param)"
- * 2銆佷负Job鏂规硶娣诲姞娉ㄨВ "@XxlJob(value="鑷畾涔塲obhandler鍚嶇О", init = "JobHandler鍒濆鍖栨柟娉�", destroy = "JobHandler閿�姣佹柟娉�")"锛屾敞瑙alue鍊煎搴旂殑鏄皟搴︿腑蹇冩柊寤轰换鍔$殑JobHandler灞炴�х殑鍊笺��
- * 3銆佹墽琛屾棩蹇楋細闇�瑕侀�氳繃 "XxlJobLogger.log" 鎵撳嵃鎵ц鏃ュ織锛�
- *
- * @author xuxueli
- */
-@Component
-public class SampleXxlJob {
-	private static final Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
-
-
-	/**
-	 * 1銆佺畝鍗曚换鍔$ず渚嬶紙Bean妯″紡锛�
-	 */
-	@XxlJob("demoJobHandler")
-	public ReturnT<String> demoJobHandler(String param) throws Exception {
-		XxlJobLogger.log("XXL-JOB, Hello World.");
-
-		for (int i = 0; i < 5; i++) {
-			XxlJobLogger.log("beat at:" + i);
-			TimeUnit.SECONDS.sleep(2);
-		}
-		return ReturnT.SUCCESS;
-	}
-
-
-	/**
-	 * 2銆佸垎鐗囧箍鎾换鍔�
-	 */
-	@XxlJob("shardingJobHandler")
-	public ReturnT<String> shardingJobHandler(String param) throws Exception {
-
-		// 鍒嗙墖鍙傛暟
-		ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
-		XxlJobLogger.log("鍒嗙墖鍙傛暟锛氬綋鍓嶅垎鐗囧簭鍙� = {}, 鎬诲垎鐗囨暟 = {}", shardingVO.getIndex(), shardingVO.getTotal());
-
-		// 涓氬姟閫昏緫
-		for (int i = 0; i < shardingVO.getTotal(); i++) {
-			if (i == shardingVO.getIndex()) {
-				XxlJobLogger.log("绗� {} 鐗�, 鍛戒腑鍒嗙墖寮�濮嬪鐞�", i);
-			} else {
-				XxlJobLogger.log("绗� {} 鐗�, 蹇界暐", i);
-			}
-		}
-
-		return ReturnT.SUCCESS;
-	}
-
-
-	/**
-	 * 3銆佸懡浠よ浠诲姟
-	 */
-	@XxlJob("commandJobHandler")
-	public ReturnT<String> commandJobHandler(String param) throws Exception {
-		String command = param;
-		int exitValue = -1;
-
-		BufferedReader bufferedReader = null;
-		try {
-			// command process
-			Process process = Runtime.getRuntime().exec(command);
-			BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream());
-			bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));
-
-			// command log
-			String line;
-			while ((line = bufferedReader.readLine()) != null) {
-				XxlJobLogger.log(line);
-			}
-
-			// command exit
-			process.waitFor();
-			exitValue = process.exitValue();
-		} catch (Exception e) {
-			XxlJobLogger.log(e);
-		} finally {
-			if (bufferedReader != null) {
-				bufferedReader.close();
-			}
-		}
-
-		if (exitValue == 0) {
-			return IJobHandler.SUCCESS;
-		} else {
-			return new ReturnT<String>(IJobHandler.FAIL.getCode(), "command exit value(" + exitValue + ") is failed");
-		}
-	}
-
-
-	/**
-	 * 4銆佽法骞冲彴Http浠诲姟
-	 */
-	@XxlJob("httpJobHandler")
-	public ReturnT<String> httpJobHandler(String param) throws Exception {
-
-		// request
-		HttpURLConnection connection = null;
-		BufferedReader bufferedReader = null;
-		try {
-			// connection
-			URL realUrl = new URL(param);
-			connection = (HttpURLConnection) realUrl.openConnection();
-
-			// connection setting
-			connection.setRequestMethod("GET");
-			connection.setDoOutput(true);
-			connection.setDoInput(true);
-			connection.setUseCaches(false);
-			connection.setReadTimeout(5 * 1000);
-			connection.setConnectTimeout(3 * 1000);
-			connection.setRequestProperty("connection", "Keep-Alive");
-			connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
-			connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8");
-
-			// do connection
-			connection.connect();
-
-			//Map<String, List<String>> map = connection.getHeaderFields();
-
-			// valid StatusCode
-			int statusCode = connection.getResponseCode();
-			if (statusCode != 200) {
-				throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid.");
-			}
-
-			// result
-			bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
-			StringBuilder result = new StringBuilder();
-			String line;
-			while ((line = bufferedReader.readLine()) != null) {
-				result.append(line);
-			}
-			String responseMsg = result.toString();
-
-			XxlJobLogger.log(responseMsg);
-			return ReturnT.SUCCESS;
-		} catch (Exception e) {
-			XxlJobLogger.log(e);
-			return ReturnT.FAIL;
-		} finally {
-			try {
-				if (bufferedReader != null) {
-					bufferedReader.close();
-				}
-				if (connection != null) {
-					connection.disconnect();
-				}
-			} catch (Exception e2) {
-				XxlJobLogger.log(e2);
-			}
-		}
-
-	}
-
-	/**
-	 * 5銆佺敓鍛藉懆鏈熶换鍔$ず渚嬶細浠诲姟鍒濆鍖栦笌閿�姣佹椂锛屾敮鎸佽嚜瀹氫箟鐩稿叧閫昏緫锛�
-	 */
-	@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")
-	public ReturnT<String> demoJobHandler2(String param) throws Exception {
-		XxlJobLogger.log("XXL-JOB, Hello World.");
-		return ReturnT.SUCCESS;
-	}
-
-	public void init() {
-		logger.info("init");
-	}
-
-	public void destroy() {
-		logger.info("destory");
-	}
-
-
-}
diff --git a/Source/BladeX/blade-ops/pom.xml b/Source/BladeX/blade-ops/pom.xml
deleted file mode 100644
index f6d94c9..0000000
--- a/Source/BladeX/blade-ops/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>UBCS</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-ops</artifactId>
-    <name>${project.artifactId}</name>
-    <version>3.0.1.RELEASE</version>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>blade-admin</module>
-        <module>blade-develop</module>
-        <module>blade-flow</module>
-        <module>blade-log</module>
-        <module>blade-report</module>
-        <module>blade-resource</module>
-        <module>blade-swagger</module>
-        <module>blade-xxljob</module>
-        <module>blade-xxljob-admin</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-metrics</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-code-api/pom.xml b/Source/BladeX/blade-service-api/blade-code-api/pom.xml
deleted file mode 100644
index 40bedd7..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/pom.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <groupId>org.springblade</groupId>
-        <artifactId>blade-service-api</artifactId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <artifactId>blade-code-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <dependencies>
-        <dependency>
-            <groupId>com.vci</groupId>
-            <artifactId>vci-starter-web</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.thoughtworks.xstream</groupId>
-            <artifactId>xstream</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.vci</groupId>
-            <artifactId>vci-starter-poi</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.vci</groupId>
-            <artifactId>vci-platform-web</artifactId>
-            <version>2022.1-SNAPSHOT</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.vci</groupId>
-            <artifactId>vci-platform-webservice</artifactId>
-            <version>2022.1-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.vci.mdm</groupId>
-            <artifactId>vci-mdm-wrj-webducking</artifactId>
-            <version>2022.1-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>de.odysseus.staxon</groupId>
-            <artifactId>staxon</artifactId>
-            <version>1.3</version>
-        </dependency>
-    </dependencies>
-    <packaging>jar</packaging>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <properties>
-        <maven.compiler.source>8</maven.compiler.source>
-        <maven.compiler.target>8</maven.compiler.target>
-    </properties>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java
deleted file mode 100644
index 8f20b14..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.springblade.code.bo;
-
-import org.springblade.code.vo.pagemodel.CodeClassifyVO;
-
-import java.util.List;
-
-/**
- * 涓婚搴撳垎绫荤浉鍏崇殑鍏ㄩ儴淇℃伅
- * @author weidy
- * @date 2022-2-25
- */
-public class CodeClassifyFullInfoBO implements java.io.Serializable{
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 7416865011120729907L;
-    /**
-     * 涓婄骇鐨勫垎绫�
-     */
-    private List<CodeClassifyVO> parentClassifyVOs;
-
-    /**
-     * 椤跺眰鍒嗙被
-     */
-    private CodeClassifyVO topClassifyVO;
-
-    /**
-     * 褰撳墠鍒嗙被鐨勪俊鎭�
-     */
-    private CodeClassifyVO currentClassifyVO;
-
-
-    public List<CodeClassifyVO> getParentClassifyVOs() {
-        return parentClassifyVOs;
-    }
-
-    public void setParentClassifyVOs(List<CodeClassifyVO> parentClassifyVOs) {
-        this.parentClassifyVOs = parentClassifyVOs;
-    }
-
-    public CodeClassifyVO getTopClassifyVO() {
-        return topClassifyVO;
-    }
-
-    public void setTopClassifyVO(CodeClassifyVO topClassifyVO) {
-        this.topClassifyVO = topClassifyVO;
-    }
-
-    public CodeClassifyVO getCurrentClassifyVO() {
-        return currentClassifyVO;
-    }
-
-    public void setCurrentClassifyVO(CodeClassifyVO currentClassifyVO) {
-        this.currentClassifyVO = currentClassifyVO;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyFullInfo{" +
-                "parentClassifyVOs=" + parentClassifyVOs +
-                ", topClassifyVO=" + topClassifyVO +
-                ", currentClassifyVO=" + currentClassifyVO +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java
deleted file mode 100644
index 5c26424..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.springblade.code.bo;
-
-import com.vci.starter.web.pagemodel.PageHelper;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 妯℃澘灞炴�х殑Sql
- * @author weidy
- * @date 2022-04-11
- */
-public class CodeTemplateAttrSqlBO implements java.io.Serializable{
-
-    /**
-     * 琛ㄥ悕
-     */
-    private String tableName;
-
-    /**
-     * 鏄电О
-     */
-    private String nickName;
-
-    /**
-     * 鍏宠仈鐨勮〃
-     */
-    private Map<String/**灞炴�у瓧娈�**/,String> joinTable;
-
-    /**
-     * 鍒嗛〉瀵硅薄
-     */
-    private PageHelper pageHelper;
-
-    /**
-     * 鍖呭惈鍒嗛〉鐨剆ql璇彞
-     */
-    private String sqlHasPage;
-
-    /**
-     * 涓嶅寘鍚垎椤电殑sql璇彞
-     */
-    private String sqlUnPage;
-
-    /**
-     * 鏌ヨ鎬绘暟鐨凷ql璇彞
-     */
-    private String sqlCount;
-
-    /**
-     * 鏈鏌ヨ鐨勫瓧娈�
-     */
-    private  List<String> selectFieldList;
-
-    public String getTableName() {
-        return tableName;
-    }
-
-    public void setTableName(String tableName) {
-        this.tableName = tableName;
-    }
-
-    public String getNickName() {
-        return nickName;
-    }
-
-    public void setNickName(String nickName) {
-        this.nickName = nickName;
-    }
-
-    public Map<String, String> getJoinTable() {
-        return joinTable;
-    }
-
-    public void setJoinTable(Map<String, String> joinTable) {
-        this.joinTable = joinTable;
-    }
-
-    public PageHelper getPageHelper() {
-        return pageHelper;
-    }
-
-    public void setPageHelper(PageHelper pageHelper) {
-        this.pageHelper = pageHelper;
-    }
-
-    public String getSqlHasPage() {
-        return sqlHasPage;
-    }
-
-    public void setSqlHasPage(String sqlHasPage) {
-        this.sqlHasPage = sqlHasPage;
-    }
-
-    public String getSqlUnPage() {
-        return sqlUnPage;
-    }
-
-    public void setSqlUnPage(String sqlUnPage) {
-        this.sqlUnPage = sqlUnPage;
-    }
-
-    public String getSqlCount() {
-        return sqlCount;
-    }
-
-    public void setSqlCount(String sqlCount) {
-        this.sqlCount = sqlCount;
-    }
-
-    public List<String> getSelectFieldList() {
-        return selectFieldList;
-    }
-
-    public void setSelectFieldList(List<String> selectFieldList) {
-        this.selectFieldList = selectFieldList;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeTemplateAttrSqlBO{" +
-                "tableName='" + tableName + '\'' +
-                ", nickName='" + nickName + '\'' +
-                ", joinTable=" + joinTable +
-                ", pageHelper=" + pageHelper +
-                ", sqlHasPage='" + sqlHasPage + '\'' +
-                ", sqlUnPage='" + sqlUnPage + '\'' +
-                ", sqlCount='" + sqlCount + '\'' +
-                ", selectFieldList=" + selectFieldList +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java
deleted file mode 100644
index d968aca..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java
+++ /dev/null
@@ -1,669 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeBasicSecDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117949969514L;
-
-	/**
-	 * 鐮佹绫诲瀷
-	 */
-	private String sectype;
-
-	/**
-	 * 鐮佹绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String sectypeText;
-
-	/**
-	 * 缂栫爜瑙勫垯涓婚敭
-	 */
-	private String pkCodeRule;
-
-	/**
-	 * 鐮佹鎺掑簭鍙�
-	 */
-	private Integer orderNum;
-
-	/**
-	 * 寮曠敤鐨勪笟鍔$被鍨�
-	 */
-	private String referBtmId;
-
-	/**
-	 * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
-	 */
-	private String referBtmName;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬х殑鏂囨湰
-	 */
-	private String referAttributeName;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	private String referAttributeId;
-
-	/**
-	 * 鍙栧�艰鍒�
-	 */
-	private String getValueClass ;
-
-	//鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
-	/**
-	 * 鏃ユ湡鏍煎紡
-	 */
-	private String codeDateFormatStr;
-
-	/**
-	 * 鐮佹闀垮害绫诲瀷
-	 */
-	private String codeSecLengthType;
-
-	/**
-	 * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String codeSecLengthTypeText;
-
-	/**
-	 * 鐮佹闀垮害
-	 */
-	private String codeSecLength;
-
-
-	/**
-	 * 灞傜骇绫诲瀷
-	 */
-	private String codeLevelType;
-
-	/**
-	 * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String codeLevelTypeText;
-
-	/**
-	 * 灞傜骇鐨勫��
-	 */
-	private Integer codeLevelValue;
-
-	/**
-	 * 鍊兼埅鍙栭暱搴�
-	 */
-	private Integer valueCutLength;
-
-	/**
-	 * 瀛楃鎴彇绫诲瀷
-	 */
-	private String valueCutType;
-
-	/**
-	 * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
-	 */
-	private String valueCutTypeText;
-
-	/**
-	 * 鍙栧�肩被鍨�
-	 */
-	private String codeGetValueType;
-
-	/**
-	 * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
-	 */
-	private String codeGetValueTypeText;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
-	 */
-	private String referCodeClassifyOid;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鍚嶇О
-	 */
-	private String referCodeClassifyOidName;
-
-	/**
-	 * 鍙傜収鐨勭獥鍙i厤缃�
-	 */
-	private String referConfig;
-
-	/**
-	 * 鏄剧ず淇℃伅
-	 */
-	private String referValueInfo;
-
-	/**
-	 * 杩囨护鐨剆ql鍐呭
-	 */
-	private String filterSql ;
-
-
-	/**
-	 * 娴佹按鍙疯捣濮嬪��
-	 */
-	private String serialStart;
-
-	/**
-	 * 娴佹按鐨勬闀�
-	 */
-	private Integer serialStep;
-
-
-	/**
-	 * 缂栫爜琛ヤ綅鏂瑰紡
-	 */
-	private String codeFillType;
-
-	/**
-	 * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	private String codeFillTypeText;
-
-	/**
-	 * 琛ヤ綅鏃剁殑瀛楃
-	 */
-	private String codeFillSeparator;
-
-	/**
-	 * 濉厖闀垮害
-	 */
-	private String codeFillLength;
-
-	/**
-	 * 涓婇檺
-	 */
-	private Integer codeFillLimit;
-
-	/**
-	 * 娴佹按鏄惁琛ョ爜
-	 */
-	private String codeFillFlag;
-
-	/**
-	 * 鑷畾涔夌殑娴佹按绠楁硶绫�
-	 */
-	private String customCodeSerialClass;
-
-	/**
-	 * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
-	 */
-	private String matchClassifyValueFlag;
-
-	/**
-	 * 鐖跺垎绫荤爜娈典富閿�
-	 */
-	private String parentClassifySecOid;
-
-	/**
-	 * 鐖跺垎绫荤爜娈靛悕绉�
-	 */
-	private String parentClassifySecText;
-
-
-	/**
-	 * 鏄惁鍙互涓虹┖
-	 */
-	private String nullableFlag;
-
-	/**
-	 * 鏄惁鍙備笌缂栫爜
-	 */
-	private String componentCodeFlag;
-
-	/**
-	 * 鏄惁娴佹按渚濊禆
-	 */
-	private String serialDependFlag;
-
-	/**
-	 * 鏄惁鏄剧ず
-	 */
-	private String displayFlag;
-
-	/**
-	 * 娴佹按渚濊禆椤哄簭
-	 */
-	private Integer serialDependOrder;
-
-	/**
-	 * 閫夋嫨鐮佹淇℃伅鐨勪富閿泦鍚�
-	 */
-	private String oidArr;
-	/**
-	 * 鑾峰彇 鐮佹绫诲瀷
-	 */
-	public String getSectype (){
-		return sectype;
-	}
-
-	/**
-	 * 璁剧疆 鐮佹绫诲瀷
-	 */
-	public void setSectype (String sectype){
-		this.sectype = sectype;
-	}
-
-	public String getSectypeText() {
-		return sectypeText;
-	}
-
-	public void setSectypeText(String sectypeText) {
-		this.sectypeText = sectypeText;
-	}
-
-	/**
-	 * 鑾峰彇缂栫爜瑙勫垯涓婚敭
-	 */
-	public String getPkCodeRule() {
-		return pkCodeRule;
-	}
-
-	/**
-	 * 璁剧疆缂栫爜瑙勫垯涓婚敭
-	 */
-	public void setPkCodeRule(String pkCodeRule) {
-		this.pkCodeRule = pkCodeRule;
-	}
-
-	/**
-	 * 鑾峰彇鐮佹闀垮害绫诲瀷
-	 */
-	public String getCodeSecLengthType() {
-		return codeSecLengthType;
-	}
-
-	/**
-	 * 璁剧疆鐮佹闀垮害绫诲瀷
-	 */
-	public void setCodeSecLengthType(String codeSecLengthType) {
-		this.codeSecLengthType = codeSecLengthType;
-	}
-
-	/**
-	 * 鑾峰彇鐮佹闀垮害
-	 */
-	public String getCodeSecLength() {
-		return codeSecLength;
-	}
-
-	/**
-	 * 璁剧疆鐮佹闀垮害
-	 */
-	public void setCodeSecLength(String codeSecLength) {
-		this.codeSecLength = codeSecLength;
-	}
-
-	public String getReferAttributeName() {
-		return referAttributeName;
-	}
-
-	public void setReferAttributeName(String referAttributeName) {
-		this.referAttributeName = referAttributeName;
-	}
-
-	public String getReferAttributeId() {
-		return referAttributeId;
-	}
-
-	public void setReferAttributeId(String referAttributeId) {
-		this.referAttributeId = referAttributeId;
-	}
-
-	public String getGetValueClass() {
-		return getValueClass;
-	}
-
-	public void setGetValueClass(String getValueClass) {
-		this.getValueClass = getValueClass;
-	}
-
-	public String getCodeDateFormatStr() {
-		return codeDateFormatStr;
-	}
-
-	public void setCodeDateFormatStr(String codeDateFormatStr) {
-		this.codeDateFormatStr = codeDateFormatStr;
-	}
-
-
-	public String getCodeLevelType() {
-		return codeLevelType;
-	}
-
-	public void setCodeLevelType(String codeLevelType) {
-		this.codeLevelType = codeLevelType;
-	}
-
-	public String getCodeLevelTypeText() {
-		return codeLevelTypeText;
-	}
-
-	public void setCodeLevelTypeText(String codeLevelTypeText) {
-		this.codeLevelTypeText = codeLevelTypeText;
-	}
-
-	public Integer getCodeLevelValue() {
-		return codeLevelValue;
-	}
-
-	public void setCodeLevelValue(Integer codeLevelValue) {
-		this.codeLevelValue = codeLevelValue;
-	}
-
-	public Integer getValueCutLength() {
-		return valueCutLength;
-	}
-
-	public void setValueCutLength(Integer valueCutLength) {
-		this.valueCutLength = valueCutLength;
-	}
-
-	public String getValueCutType() {
-		return valueCutType;
-	}
-
-	public void setValueCutType(String valueCutType) {
-		this.valueCutType = valueCutType;
-	}
-
-	public String getValueCutTypeText() {
-		return valueCutTypeText;
-	}
-
-	public void setValueCutTypeText(String valueCutTypeText) {
-		this.valueCutTypeText = valueCutTypeText;
-	}
-
-	public String getCodeGetValueType() {
-		return codeGetValueType;
-	}
-
-	public void setCodeGetValueType(String codeGetValueType) {
-		this.codeGetValueType = codeGetValueType;
-	}
-
-	public String getCodeGetValueTypeText() {
-		return codeGetValueTypeText;
-	}
-
-	public void setCodeGetValueTypeText(String codeGetValueTypeText) {
-		this.codeGetValueTypeText = codeGetValueTypeText;
-	}
-
-	public String getReferCodeClassifyOid() {
-		return referCodeClassifyOid;
-	}
-
-	public void setReferCodeClassifyOid(String referCodeClassifyOid) {
-		this.referCodeClassifyOid = referCodeClassifyOid;
-	}
-
-	public String getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(String referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	public String getReferValueInfo() {
-		return referValueInfo;
-	}
-
-	public void setReferValueInfo(String referValueInfo) {
-		this.referValueInfo = referValueInfo;
-	}
-
-	public String getFilterSql() {
-		return filterSql;
-	}
-
-	public void setFilterSql(String filterSql) {
-		this.filterSql = filterSql;
-	}
-
-	public String getSerialStart() {
-		return serialStart;
-	}
-
-	public void setSerialStart(String serialStart) {
-		this.serialStart = serialStart;
-	}
-
-	public Integer getSerialStep() {
-		return serialStep;
-	}
-
-	public void setSerialStep(Integer serialStep) {
-		this.serialStep = serialStep;
-	}
-
-	public String getCodeFillType() {
-		return codeFillType;
-	}
-
-	public void setCodeFillType(String codeFillType) {
-		this.codeFillType = codeFillType;
-	}
-
-	public String getCodeFillTypeText() {
-		return codeFillTypeText;
-	}
-
-	public void setCodeFillTypeText(String codeFillTypeText) {
-		this.codeFillTypeText = codeFillTypeText;
-	}
-
-	public String getCodeFillSeparator() {
-		return codeFillSeparator;
-	}
-
-	public void setCodeFillSeparator(String codeFillSeparator) {
-		this.codeFillSeparator = codeFillSeparator;
-	}
-
-	public String getCodeFillLength() {
-		return codeFillLength;
-	}
-
-	public void setCodeFillLength(String codeFillLength) {
-		this.codeFillLength = codeFillLength;
-	}
-
-	public Integer getCodeFillLimit() {
-		return codeFillLimit;
-	}
-
-	public void setCodeFillLimit(Integer codeFillLimit) {
-		this.codeFillLimit = codeFillLimit;
-	}
-
-	public String getCodeFillFlag() {
-		return codeFillFlag;
-	}
-
-	public void setCodeFillFlag(String codeFillFlag) {
-		this.codeFillFlag = codeFillFlag;
-	}
-
-	public String getCustomCodeSerialClass() {
-		return customCodeSerialClass;
-	}
-
-	public void setCustomCodeSerialClass(String customCodeSerialClass) {
-		this.customCodeSerialClass = customCodeSerialClass;
-	}
-
-	public String getOidArr() {
-		return oidArr;
-	}
-
-	public void setOidArr(String oidArr) {
-		this.oidArr = oidArr;
-	}
-
-	public Integer getOrderNum() {
-		return orderNum;
-	}
-
-	public void setOrderNum(Integer orderNum) {
-		this.orderNum = orderNum;
-	}
-
-	public String getCodeSecLengthTypeText() {
-		return codeSecLengthTypeText;
-	}
-
-	public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
-		this.codeSecLengthTypeText = codeSecLengthTypeText;
-	}
-
-	public String getMatchClassifyValueFlag() {
-		return matchClassifyValueFlag;
-	}
-
-	public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
-		this.matchClassifyValueFlag = matchClassifyValueFlag;
-	}
-
-	public String getParentClassifySecOid() {
-		return parentClassifySecOid;
-	}
-
-	public void setParentClassifySecOid(String parentClassifySecOid) {
-		this.parentClassifySecOid = parentClassifySecOid;
-	}
-
-	public String getParentClassifySecText() {
-		return parentClassifySecText;
-	}
-
-	public void setParentClassifySecText(String parentClassifySecText) {
-		this.parentClassifySecText = parentClassifySecText;
-	}
-
-	public String getNullableFlag() {
-		return nullableFlag;
-	}
-
-	public void setNullableFlag(String nullableFlag) {
-		this.nullableFlag = nullableFlag;
-	}
-
-	public String getComponentCodeFlag() {
-		return componentCodeFlag;
-	}
-
-	public void setComponentCodeFlag(String componentCodeFlag) {
-		this.componentCodeFlag = componentCodeFlag;
-	}
-
-	public String getSerialDependFlag() {
-		return serialDependFlag;
-	}
-
-	public void setSerialDependFlag(String serialDependFlag) {
-		this.serialDependFlag = serialDependFlag;
-	}
-
-	public String getDisplayFlag() {
-		return displayFlag;
-	}
-
-	public void setDisplayFlag(String displayFlag) {
-		this.displayFlag = displayFlag;
-	}
-
-	public Integer getSerialDependOrder() {
-		return serialDependOrder;
-	}
-
-	public void setSerialDependOrder(Integer serialDependOrder) {
-		this.serialDependOrder = serialDependOrder;
-	}
-
-	public String getReferBtmId() {
-		return referBtmId;
-	}
-
-	public void setReferBtmId(String referBtmId) {
-		this.referBtmId = referBtmId;
-	}
-
-	public String getReferBtmName() {
-		return referBtmName;
-	}
-
-	public void setReferBtmName(String referBtmName) {
-		this.referBtmName = referBtmName;
-	}
-
-	public String getReferCodeClassifyOidName() {
-		return referCodeClassifyOidName;
-	}
-
-	public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
-		this.referCodeClassifyOidName = referCodeClassifyOidName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeBasicSecDTO{" +
-				"sectype='" + sectype + '\'' +
-				", sectypeText='" + sectypeText + '\'' +
-				", pkCodeRule='" + pkCodeRule + '\'' +
-				", orderNum=" + orderNum +
-				", referBtmId='" + referBtmId + '\'' +
-				", referBtmName='" + referBtmName + '\'' +
-				", referAttributeName='" + referAttributeName + '\'' +
-				", referAttributeId='" + referAttributeId + '\'' +
-				", getValueClass='" + getValueClass + '\'' +
-				", codeDateFormatStr='" + codeDateFormatStr + '\'' +
-				", codeSecLengthType='" + codeSecLengthType + '\'' +
-				", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
-				", codeSecLength='" + codeSecLength + '\'' +
-				", codeLevelType='" + codeLevelType + '\'' +
-				", codeLevelTypeText='" + codeLevelTypeText + '\'' +
-				", codeLevelValue=" + codeLevelValue +
-				", valueCutLength=" + valueCutLength +
-				", valueCutType='" + valueCutType + '\'' +
-				", valueCutTypeText='" + valueCutTypeText + '\'' +
-				", codeGetValueType='" + codeGetValueType + '\'' +
-				", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
-				", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
-				", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
-				", referConfig='" + referConfig + '\'' +
-				", referValueInfo='" + referValueInfo + '\'' +
-				", filterSql='" + filterSql + '\'' +
-				", serialStart='" + serialStart + '\'' +
-				", serialStep=" + serialStep +
-				", codeFillType='" + codeFillType + '\'' +
-				", codeFillTypeText='" + codeFillTypeText + '\'' +
-				", codeFillSeparator='" + codeFillSeparator + '\'' +
-				", codeFillLength='" + codeFillLength + '\'' +
-				", codeFillLimit=" + codeFillLimit +
-				", codeFillFlag='" + codeFillFlag + '\'' +
-				", customCodeSerialClass='" + customCodeSerialClass + '\'' +
-				", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
-				", parentClassifySecOid='" + parentClassifySecOid + '\'' +
-				", parentClassifySecText='" + parentClassifySecText + '\'' +
-				", nullableFlag='" + nullableFlag + '\'' +
-				", componentCodeFlag='" + componentCodeFlag + '\'' +
-				", serialDependFlag='" + serialDependFlag + '\'' +
-				", displayFlag='" + displayFlag + '\'' +
-				", serialDependOrder=" + serialDependOrder +
-				", oidArr='" + oidArr + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java
deleted file mode 100644
index cc173b7..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeButtonDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118494102363L;
-
-	/**
-	 * 鎸夐挳鐨勫浘鏍囨牱寮�
-	 */
-	private String iconcls;
-
-	/**
-	 * 鎵ц鐨刯s鍐呭
-	 */
-	private String executejs;
-
-	/**
-	 * 鎸夐挳鐨勪綅缃�
-	 */
-	private String usedpositiontype;
-
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勫浘鏍囨牱寮�
-	 */
-	public String getIconcls (){
-		return iconcls;
-	}
-
-	/**
-	 * 璁剧疆 鎸夐挳鐨勫浘鏍囨牱寮�
-	 */
-	public void setIconcls (String iconcls){
-		this.iconcls = iconcls;
-	}
-
-	/**
-	 * 鑾峰彇 鎵ц鐨刯s鍐呭
-	 */
-	public String getExecutejs (){
-		return executejs;
-	}
-
-	/**
-	 * 璁剧疆 鎵ц鐨刯s鍐呭
-	 */
-	public void setExecutejs (String executejs){
-		this.executejs = executejs;
-	}
-
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勪綅缃�
-	 */
-	public String getUsedpositiontype (){
-		return usedpositiontype;
-	}
-
-	/**
-	 * 璁剧疆 鎸夐挳鐨勪綅缃�
-	 */
-	public void setUsedpositiontype (String usedpositiontype){
-		this.usedpositiontype = usedpositiontype;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeButtonDTO{" +
-		"iconcls='" + iconcls +"',"+
-		"executejs='" + executejs +"',"+
-		"usedpositiontype='" + usedpositiontype +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java
deleted file mode 100644
index 86dc156..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-20
- */
-public class CodeClassifyDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118655590281L;
-
-	/**
-	 * 灞炴�ф帓搴忓彿
-	 */
-	private Integer ordernum;
-
-	/**
-	 * 鎵�灞炰笟鍔$被鍨�
-	 */
-	private String btmtypeid;
-
-	/**
-	 * 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	 */
-	private String btmtypename;
-
-	/**
-	 * 缂栫爜瑙勫垯鐨勪富閿�
-	 */
-	private String coderuleoid;
-
-	/**
-	 * 缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
-	 */
-	private String coderuleoidName;
-	/**
-	 * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
-	 */
-	private String codekeyattrrepeatoid;
-
-	/**
-	 * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
-	 */
-	private String codekeyattrrepeatoidName;
-	/**
-	 * 涓婄骇鏁版嵁鐨勪富閿�
-	 */
-	private String parentcodeclassifyoid;
-
-	/**
-	 * 鏄惁鍚敤涓嬬骇
-	 */
-	private boolean ablechildren;
-
-	/**
-	 * 鐩镐技鏌ヨ瑙勫垯涓婚敭
-	 */
-	private String codeResembleRuleOid;
-
-	/**
-	 * 鐩镐技鏌ヨ瑙勫垯鍚嶇О
-	 */
-	private String codeResembleRuleOidName;
-
-	public boolean getAblechildren() {
-		return ablechildren;
-	}
-
-	public void setAblechildren(boolean ablechildren) {
-		this.ablechildren = ablechildren;
-	}
-
-	/**
-	 * 鑾峰彇 灞炴�ф帓搴忓彿
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�ф帓搴忓彿
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
-	 */
-	public String getBtmtypeid (){
-		return btmtypeid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炰笟鍔$被鍨�
-	 */
-	public void setBtmtypeid (String btmtypeid){
-		this.btmtypeid = btmtypeid;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	 */
-	public String getBtmtypename (){
-		return btmtypename;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	 */
-	public void setBtmtypename (String btmtypename){
-		this.btmtypename = btmtypename;
-	}
-
-	/**
-	 * 鑾峰彇 缂栫爜瑙勫垯鐨勪富閿�
-	 */
-	public String getCoderuleoid (){
-		return coderuleoid;
-	}
-
-	/**
-	 * 璁剧疆 缂栫爜瑙勫垯鐨勪富閿�
-	 */
-	public void setCoderuleoid (String coderuleoid){
-		this.coderuleoid = coderuleoid;
-	}
-
-	/**
-	 * 鑾峰彇缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
-	 */
-	public String getCoderuleoidName (){
-		return coderuleoidName;
-	}
-
-	/**
-	 * 璁剧疆缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
-	 */
-	public void setCoderuleoidName (String coderuleoidName){
-		this.coderuleoidName = coderuleoidName;
-	}
-	/**
-	 * 鑾峰彇 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
-	 */
-	public String getCodekeyattrrepeatoid (){
-		return codekeyattrrepeatoid;
-	}
-
-	/**
-	 * 璁剧疆 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
-	 */
-	public void setCodekeyattrrepeatoid (String codekeyattrrepeatoid){
-		this.codekeyattrrepeatoid = codekeyattrrepeatoid;
-	}
-
-	/**
-	 * 鑾峰彇鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
-	 */
-	public String getCodekeyattrrepeatoidName (){
-		return codekeyattrrepeatoidName;
-	}
-
-	/**
-	 * 璁剧疆鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
-	 */
-	public void setCodekeyattrrepeatoidName (String codekeyattrrepeatoidName){
-		this.codekeyattrrepeatoidName = codekeyattrrepeatoidName;
-	}
-	/**
-	 * 鑾峰彇 涓婄骇鏁版嵁鐨勪富閿�
-	 */
-	public String getParentcodeclassifyoid (){
-		return parentcodeclassifyoid;
-	}
-
-	/**
-	 * 璁剧疆 涓婄骇鏁版嵁鐨勪富閿�
-	 */
-	public void setParentcodeclassifyoid (String parentcodeclassifyoid){
-		this.parentcodeclassifyoid = parentcodeclassifyoid;
-	}
-
-	public boolean isAblechildren() {
-		return ablechildren;
-	}
-
-	public String getCodeResembleRuleOid() {
-		return codeResembleRuleOid;
-	}
-
-	public void setCodeResembleRuleOid(String codeResembleRuleOid) {
-		this.codeResembleRuleOid = codeResembleRuleOid;
-	}
-
-	public String getCodeResembleRuleOidName() {
-		return codeResembleRuleOidName;
-	}
-
-	public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
-		this.codeResembleRuleOidName = codeResembleRuleOidName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyDTO{" +
-				"ordernum=" + ordernum +
-				", btmtypeid='" + btmtypeid + '\'' +
-				", btmtypename='" + btmtypename + '\'' +
-				", coderuleoid='" + coderuleoid + '\'' +
-				", coderuleoidName='" + coderuleoidName + '\'' +
-				", codekeyattrrepeatoid='" + codekeyattrrepeatoid + '\'' +
-				", codekeyattrrepeatoidName='" + codekeyattrrepeatoidName + '\'' +
-				", parentcodeclassifyoid='" + parentcodeclassifyoid + '\'' +
-				", ablechildren=" + ablechildren +
-				", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
-				", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java
deleted file mode 100644
index d3ffbbd..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyProcessTempDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117374292084L;
-
-	/**
-	 * 涓婚搴撳垎绫讳富閿�
-	 */
-	private String codeclassifyoid;
-
-	/**
-	 * 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	private String codeclassifyoidName;
-
-	/**
-	 * 鎵�灞炴ā鏉�
-	 */
-	private String classifyTemplateOid;
-	/**
-	 * 娴佺▼妯℃澘鐢ㄩ��
-	 */
-	private String codeprocessuse;
-
-	/**
-	 * 娴佺▼妯℃澘鐢ㄩ�旀樉绀烘枃鏈�
-	 */
-	private String codeprocessuseText;
-
-	/**
-	 * 娴佺▼妯℃澘鐨勭増鏈�
-	 */
-	private String processVersion;
-
-	/**
-	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬т富閿�
-	 */
-	private String codeTempAttrOidArr;
-
-	/**
-	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
-	 */
-	private String codeTempAttrOidArrName;
-
-	/**
-	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
-	 */
-	public String getCodeclassifyoid (){
-		return codeclassifyoid;
-	}
-
-	/**
-	 * 璁剧疆 涓婚搴撳垎绫讳富閿�
-	 */
-	public void setCodeclassifyoid (String codeclassifyoid){
-		this.codeclassifyoid = codeclassifyoid;
-	}
-
-	/**
-	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	public String getCodeclassifyoidName (){
-		return codeclassifyoidName;
-	}
-
-	/**
-	 * 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	public void setCodeclassifyoidName (String codeclassifyoidName){
-		this.codeclassifyoidName = codeclassifyoidName;
-	}
-	/**
-	 * 鑾峰彇 娴佺▼妯℃澘鐢ㄩ��
-	 */
-	public String getCodeprocessuse (){
-		return codeprocessuse;
-	}
-
-	/**
-	 * 璁剧疆 娴佺▼妯℃澘鐢ㄩ��
-	 */
-	public void setCodeprocessuse (String codeprocessuse){
-		this.codeprocessuse = codeprocessuse;
-	}
-
-	public String getCodeprocessuseText() {
-		return codeprocessuseText;
-	}
-
-	public void setCodeprocessuseText(String codeprocessuseText) {
-		this.codeprocessuseText = codeprocessuseText;
-	}
-
-	public String getProcessVersion() {
-		return processVersion;
-	}
-
-	public void setProcessVersion(String processVersion) {
-		this.processVersion = processVersion;
-	}
-
-	public String getClassifyTemplateOid() {
-		return classifyTemplateOid;
-	}
-
-	public void setClassifyTemplateOid(String classifyTemplateOid) {
-		this.classifyTemplateOid = classifyTemplateOid;
-	}
-
-	public String getCodeTempAttrOidArr() {
-		return codeTempAttrOidArr;
-	}
-
-	public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
-		this.codeTempAttrOidArr = codeTempAttrOidArr;
-	}
-
-	public String getCodeTempAttrOidArrName() {
-		return codeTempAttrOidArrName;
-	}
-
-	public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
-		this.codeTempAttrOidArrName = codeTempAttrOidArrName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyProcessTempDTO{" +
-				"codeclassifyoid='" + codeclassifyoid + '\'' +
-				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
-				", classifyTemplateOid='" + classifyTemplateOid + '\'' +
-				", codeprocessuse='" + codeprocessuse + '\'' +
-				", codeprocessuseText='" + codeprocessuseText + '\'' +
-				", processVersion='" + processVersion + '\'' +
-				", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
-				", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java
deleted file mode 100644
index 416dc6d..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-03-10
- */
-public class CodeClassifyTempMapItemDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118229256252L;
-
-	/**
-	 * 鍒嗙被妯℃澘灞炴�т富閿�
-	 */
-	private String classifytemplateattroid;
-
-	/**
-	 * 鏄犲皠瑙勫垯涓婚敭
-	 */
-	private String classifytemplatemapoid;
-
-	/**
-	 * 鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
-	 */
-	private String classifytemplatemapoidName;
-	/**
-	 * 闆嗗洟鐮佸睘鎬ey
-	 */
-	private String groupcodeattrid;
-
-	/**
-	 * 闆嗗洟鐮佸睘鎬у悕绉�
-	 */
-	private String groupcodeattrname;
-
-	/**
-	 * 杞崲鐨勮嚜瀹氫箟绫�
-	 */
-	private String switchclassname;
-
-	/**
-	 * 杞崲鍏紡
-	 */
-	private String switcheval;
-
-	/**
-	 * 鐩爣绔殑鏃堕棿鏍煎紡
-	 */
-	private String targetdateformat;
-
-
-	/**
-	 * 鑾峰彇 鍒嗙被妯℃澘灞炴�т富閿�
-	 */
-	public String getClassifytemplateattroid (){
-		return classifytemplateattroid;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被妯℃澘灞炴�т富閿�
-	 */
-	public void setClassifytemplateattroid (String classifytemplateattroid){
-		this.classifytemplateattroid = classifytemplateattroid;
-	}
-
-	/**
-	 * 鑾峰彇 鏄犲皠瑙勫垯涓婚敭
-	 */
-	public String getClassifytemplatemapoid (){
-		return classifytemplatemapoid;
-	}
-
-	/**
-	 * 璁剧疆 鏄犲皠瑙勫垯涓婚敭
-	 */
-	public void setClassifytemplatemapoid (String classifytemplatemapoid){
-		this.classifytemplatemapoid = classifytemplatemapoid;
-	}
-
-	/**
-	 * 鑾峰彇鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getClassifytemplatemapoidName (){
-		return classifytemplatemapoidName;
-	}
-
-	/**
-	 * 璁剧疆鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
-	 */
-	public void setClassifytemplatemapoidName (String classifytemplatemapoidName){
-		this.classifytemplatemapoidName = classifytemplatemapoidName;
-	}
-	/**
-	 * 鑾峰彇 闆嗗洟鐮佸睘鎬ey
-	 */
-	public String getGroupcodeattrid (){
-		return groupcodeattrid;
-	}
-
-	/**
-	 * 璁剧疆 闆嗗洟鐮佸睘鎬ey
-	 */
-	public void setGroupcodeattrid (String groupcodeattrid){
-		this.groupcodeattrid = groupcodeattrid;
-	}
-
-	/**
-	 * 鑾峰彇 闆嗗洟鐮佸睘鎬у悕绉�
-	 */
-	public String getGroupcodeattrname (){
-		return groupcodeattrname;
-	}
-
-	/**
-	 * 璁剧疆 闆嗗洟鐮佸睘鎬у悕绉�
-	 */
-	public void setGroupcodeattrname (String groupcodeattrname){
-		this.groupcodeattrname = groupcodeattrname;
-	}
-
-	/**
-	 * 鑾峰彇 杞崲鐨勮嚜瀹氫箟绫�
-	 */
-	public String getSwitchclassname (){
-		return switchclassname;
-	}
-
-	/**
-	 * 璁剧疆 杞崲鐨勮嚜瀹氫箟绫�
-	 */
-	public void setSwitchclassname (String switchclassname){
-		this.switchclassname = switchclassname;
-	}
-
-	/**
-	 * 鑾峰彇 杞崲鍏紡
-	 */
-	public String getSwitcheval (){
-		return switcheval;
-	}
-
-	/**
-	 * 璁剧疆 杞崲鍏紡
-	 */
-	public void setSwitcheval (String switcheval){
-		this.switcheval = switcheval;
-	}
-
-	/**
-	 * 鑾峰彇 鐩爣绔殑鏃堕棿鏍煎紡
-	 */
-	public String getTargetdateformat (){
-		return targetdateformat;
-	}
-
-	/**
-	 * 璁剧疆 鐩爣绔殑鏃堕棿鏍煎紡
-	 */
-	public void setTargetdateformat (String targetdateformat){
-		this.targetdateformat = targetdateformat;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTempMapItemDTO{" +
-		"classifytemplateattroid='" + classifytemplateattroid +"',"+
-		"classifytemplatemapoid='" + classifytemplatemapoid +"',"+
-		"classifytemplatemapoidName='" + classifytemplatemapoidName +"'," +
-		"groupcodeattrid='" + groupcodeattrid +"',"+
-		"groupcodeattrname='" + groupcodeattrname +"',"+
-		"switchclassname='" + switchclassname +"',"+
-		"switcheval='" + switcheval +"',"+
-		"targetdateformat='" + targetdateformat +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java
deleted file mode 100644
index 90f908e..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java
+++ /dev/null
@@ -1,1053 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateAttrDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118652601470L;
-
-	/**
-	 * 鎵�灞炴ā鏉�
-	 */
-	private String classifytemplateoid;
-
-	/**
-	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	private String classifytemplateoidName;
-	/**
-	 * 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	 */
-	private String classifyattributeoid;
-
-	/**
-	 * 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	 */
-	private String classifyattributeoidName;
-	/**
-	 * 灞炴�х殑绫诲瀷
-	 */
-	private String attributedatatype;
-
-	/**
-	 * 鏄惁鍏抽敭灞炴��
-	 */
-	private String keyattrflag;
-
-	/**
-	 * 鏄惁蹇�熸煡璇㈠睘鎬�
-	 */
-	private String queryattrflag;
-
-	/**
-	 * 鏄惁楂樼骇鏌ヨ灞炴��
-	 */
-	private String seniorqueryattrflag;
-
-	/**
-	 * 鐩镐技鏌ラ噸灞炴��
-	 */
-	private String samerepeatattrflag;
-
-	/**
-	 * 鏄惁鎺掑簭
-	 */
-	private String sortattrflag;
-
-	/**
-	 * 鏄惁鐢熸垚浜岀淮鐮�
-	 */
-	private String qrcodeflag;
-
-	/**
-	 * 鏄惁鐢熸垚涓�缁寸爜
-	 */
-	private String barcodeflag;
-
-	/**
-	 * 缁勫悎瑙勫垯
-	 */
-	private String componentrule;
-
-	/**
-	 * 楠岃瘉瑙勫垯
-	 */
-	private String verifyrule;
-
-	/**
-	 * 鍒嗙被娉ㄥ叆灞傜骇
-	 */
-	private String classifyinvokelevel;
-
-	/**
-	 * 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	private String classifyinvokeattr;
-
-	/**
-	 * 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	 */
-	private String classifyinvokeattrname;
-
-	/**
-	 * 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	 */
-	private String classifyinvokeeditflag;
-
-	/**
-	 * 鐮佸�煎簭鍙�
-	 */
-	private Integer ordernum;
-
-	/**
-	 * 琛ㄥ崟閲屾槸鍚︽樉绀�
-	 */
-	private String formdisplayflag;
-
-	/**
-	 * 鍒楄〃閲屾槸鍚︽樉绀�
-	 */
-	private String tabledisplayflag;
-
-	/**
-	 * 鎵�灞炲睘鎬у垎缁�
-	 */
-	private String attributegroup;
-
-	/**
-	 * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
-	 */
-	private String enumString;
-
-	/**
-	 * 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	 */
-	private String enumid;
-
-	/**
-	 * 浣跨敤鏋氫妇涓枃鍚嶇О
-	 */
-	private String enumname;
-
-	/**
-	 * 鏋氫妇鏄惁鍙互缂栬緫
-	 */
-	private String enumeditflag;
-
-	/**
-	 * 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	 */
-	private String referbtmid;
-
-	/**
-	 * 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	private String referbtmname;
-
-	/**
-	 * 鍙傜収绐楀彛閰嶇疆
-	 */
-	private String referConfig;
-
-	/**
-	 * 鏄惁蹇呰緭
-	 */
-	private String requireflag;
-
-	/**
-	 * 鏄惁鍙
-	 */
-	private String readonlyflag;
-
-	/**
-	 * 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	 */
-	private Integer controllength;
-
-	/**
-	 * 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	 */
-	private String formdisplaystyle;
-
-	/**
-	 * 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	 */
-	private String tabledisplaystyle;
-
-	/**
-	 * 琛ㄥ崟涓秴閾炬帴鍐呭
-	 */
-	private String formhref;
-
-	/**
-	 * 琛ㄦ牸涓秴閾炬帴鍐呭
-	 */
-	private String tablehref;
-
-	/**
-	 * 灏忔暟绮惧害
-	 */
-	private Integer precisionlength;
-
-	/**
-	 * 灏忔暟鍒诲害
-	 */
-	private Integer scalelength;
-
-	/**
-	 * 鍙栧�艰寖鍥�
-	 */
-	private String valuearea;
-
-	/**
-	 * 鏃堕棿鏍煎紡
-	 */
-	private String codedateformat;
-
-	/**
-	 * 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	 */
-	private String tabledisplayjs;
-
-	/**
-	 * 鏄惁鏄剧ず澶氳鏂囨湰
-	 */
-	private String textareaflag;
-
-	/**
-	 * 棰勮鍥�
-	 */
-	private String imageflag;
-
-	/**
-	 * 榛樿鍊�
-	 */
-	private String defaultvalue;
-
-	/**
-	 * 鍓嶇紑
-	 */
-	private String prefixvalue;
-
-	/**
-	 * 鍚庣紑
-	 */
-	private String suffixvalue;
-
-	/**
-	 * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	 */
-	private String filtersourceattr;
-
-	/**
-	 * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	 */
-	private String filtersourceattrname;
-
-	/**
-	 * 灞炴�у垪琛ㄤ腑鐨勫搴�
-	 */
-	private Integer attrTableWidth;
-	/**
-	 * 璇存槑
-	 */
-	@Column(columnDefinition = "璇存槑")
-	private String explain;
-
-	/**
-	 * 閫夋嫨搴撴爣璇�
-	 */
-	@Column(columnDefinition = "閫夋嫨搴撴爣璇�")
-	private String libraryIdentification;
-
-	/**
-	 * 绾ц仈灞炴�х紪鍙�
-	 */
-	@Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
-	private String parentCode;
-
-	/**
-	 * 绾ц仈灞炴�у悕绉�
-	 */
-	@Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
-	private String parentName;
-
-	/**
-	 * 绾ц仈鏌ヨ灞炴��
-	 */
-	@Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
-	private String parentQueryAttr;
-
-	public String getExplain() {
-		return explain;
-	}
-
-	public void setExplain(String explain) {
-		this.explain = explain;
-	}
-
-	public String getLibraryIdentification() {
-		return libraryIdentification;
-	}
-
-	public void setLibraryIdentification(String libraryIdentification) {
-		this.libraryIdentification = libraryIdentification;
-	}
-
-	public String getParentCode() {
-		return parentCode;
-	}
-
-	public void setParentCode(String parentCode) {
-		this.parentCode = parentCode;
-	}
-
-	public String getParentName() {
-		return parentName;
-	}
-
-	public void setParentName(String parentName) {
-		this.parentName = parentName;
-	}
-
-	public String getParentQueryAttr() {
-		return parentQueryAttr;
-	}
-
-	public void setParentQueryAttr(String parentQueryAttr) {
-		this.parentQueryAttr = parentQueryAttr;
-	}
-
-	public String getEnumString() {
-		return enumString;
-	}
-
-	public void setEnumString(String enumString) {
-		this.enumString = enumString;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炴ā鏉�
-	 */
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	 */
-	public String getClassifyattributeoid (){
-		return classifyattributeoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	 */
-	public void setClassifyattributeoid (String classifyattributeoid){
-		this.classifyattributeoid = classifyattributeoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	 */
-	public String getClassifyattributeoidName (){
-		return classifyattributeoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	 */
-	public void setClassifyattributeoidName (String classifyattributeoidName){
-		this.classifyattributeoidName = classifyattributeoidName;
-	}
-	/**
-	 * 鑾峰彇 灞炴�х殑绫诲瀷
-	 */
-	public String getAttributedatatype (){
-		return attributedatatype;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�х殑绫诲瀷
-	 */
-	public void setAttributedatatype (String attributedatatype){
-		this.attributedatatype = attributedatatype;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
-	 */
-	public String getKeyattrflag (){
-		return keyattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鍏抽敭灞炴��
-	 */
-	public void setKeyattrflag (String keyattrflag){
-		this.keyattrflag = keyattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
-	 */
-	public String getQueryattrflag (){
-		return queryattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
-	 */
-	public void setQueryattrflag (String queryattrflag){
-		this.queryattrflag = queryattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
-	 */
-	public String getSeniorqueryattrflag (){
-		return seniorqueryattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
-	 */
-	public void setSeniorqueryattrflag (String seniorqueryattrflag){
-		this.seniorqueryattrflag = seniorqueryattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
-	 */
-	public String getSamerepeatattrflag (){
-		return samerepeatattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鐩镐技鏌ラ噸灞炴��
-	 */
-	public void setSamerepeatattrflag (String samerepeatattrflag){
-		this.samerepeatattrflag = samerepeatattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鎺掑簭
-	 */
-	public String getSortattrflag (){
-		return sortattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鎺掑簭
-	 */
-	public void setSortattrflag (String sortattrflag){
-		this.sortattrflag = sortattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
-	 */
-	public String getQrcodeflag (){
-		return qrcodeflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
-	 */
-	public void setQrcodeflag (String qrcodeflag){
-		this.qrcodeflag = qrcodeflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
-	 */
-	public String getBarcodeflag (){
-		return barcodeflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
-	 */
-	public void setBarcodeflag (String barcodeflag){
-		this.barcodeflag = barcodeflag;
-	}
-
-	/**
-	 * 鑾峰彇 缁勫悎瑙勫垯
-	 */
-	public String getComponentrule (){
-		return componentrule;
-	}
-
-	/**
-	 * 璁剧疆 缁勫悎瑙勫垯
-	 */
-	public void setComponentrule (String componentrule){
-		this.componentrule = componentrule;
-	}
-
-	/**
-	 * 鑾峰彇 楠岃瘉瑙勫垯
-	 */
-	public String getVerifyrule (){
-		return verifyrule;
-	}
-
-	/**
-	 * 璁剧疆 楠岃瘉瑙勫垯
-	 */
-	public void setVerifyrule (String verifyrule){
-		this.verifyrule = verifyrule;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
-	 */
-	public String getClassifyinvokelevel (){
-		return classifyinvokelevel;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
-	 */
-	public void setClassifyinvokelevel (String classifyinvokelevel){
-		this.classifyinvokelevel = classifyinvokelevel;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattr (){
-		return classifyinvokeattr;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	public void setClassifyinvokeattr (String classifyinvokeattr){
-		this.classifyinvokeattr = classifyinvokeattr;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattrname (){
-		return classifyinvokeattrname;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	 */
-	public void setClassifyinvokeattrname (String classifyinvokeattrname){
-		this.classifyinvokeattrname = classifyinvokeattrname;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	 */
-	public String getClassifyinvokeeditflag (){
-		return classifyinvokeeditflag;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	 */
-	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
-		this.classifyinvokeeditflag = classifyinvokeeditflag;
-	}
-
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 鐮佸�煎簭鍙�
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
-	 */
-	public String getFormdisplayflag (){
-		return formdisplayflag;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
-	 */
-	public void setFormdisplayflag (String formdisplayflag){
-		this.formdisplayflag = formdisplayflag;
-	}
-
-	/**
-	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
-	 */
-	public String getTabledisplayflag (){
-		return tabledisplayflag;
-	}
-
-	/**
-	 * 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
-	 */
-	public void setTabledisplayflag (String tabledisplayflag){
-		this.tabledisplayflag = tabledisplayflag;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
-	 */
-	public String getAttributegroup (){
-		return attributegroup;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炲睘鎬у垎缁�
-	 */
-	public void setAttributegroup (String attributegroup){
-		this.attributegroup = attributegroup;
-	}
-
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	 */
-	public String getEnumid (){
-		return enumid;
-	}
-
-	/**
-	 * 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	 */
-	public void setEnumid (String enumid){
-		this.enumid = enumid;
-	}
-
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
-	 */
-	public String getEnumname (){
-		return enumname;
-	}
-
-	/**
-	 * 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
-	 */
-	public void setEnumname (String enumname){
-		this.enumname = enumname;
-	}
-
-	/**
-	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
-	 */
-	public String getEnumeditflag (){
-		return enumeditflag;
-	}
-
-	/**
-	 * 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
-	 */
-	public void setEnumeditflag (String enumeditflag){
-		this.enumeditflag = enumeditflag;
-	}
-
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	 */
-	public String getReferbtmid (){
-		return referbtmid;
-	}
-
-	/**
-	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	 */
-	public void setReferbtmid (String referbtmid){
-		this.referbtmid = referbtmid;
-	}
-
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	public String getReferbtmname (){
-		return referbtmname;
-	}
-
-	/**
-	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	public void setReferbtmname (String referbtmname){
-		this.referbtmname = referbtmname;
-	}
-
-
-	/**
-	 * 鑾峰彇 鏄惁蹇呰緭
-	 */
-	public String getRequireflag (){
-		return requireflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇呰緭
-	 */
-	public void setRequireflag (String requireflag){
-		this.requireflag = requireflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鍙
-	 */
-	public String getReadonlyflag (){
-		return readonlyflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鍙
-	 */
-	public void setReadonlyflag (String readonlyflag){
-		this.readonlyflag = readonlyflag;
-	}
-
-	/**
-	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	 */
-	public Integer getControllength (){
-		return controllength;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	 */
-	public void setControllength (Integer controllength){
-		this.controllength = controllength;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getFormdisplaystyle (){
-		return formdisplaystyle;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	 */
-	public void setFormdisplaystyle (String formdisplaystyle){
-		this.formdisplaystyle = formdisplaystyle;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getTabledisplaystyle (){
-		return tabledisplaystyle;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	 */
-	public void setTabledisplaystyle (String tabledisplaystyle){
-		this.tabledisplaystyle = tabledisplaystyle;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
-	 */
-	public String getFormhref (){
-		return formhref;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
-	 */
-	public void setFormhref (String formhref){
-		this.formhref = formhref;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
-	 */
-	public String getTablehref (){
-		return tablehref;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
-	 */
-	public void setTablehref (String tablehref){
-		this.tablehref = tablehref;
-	}
-
-	/**
-	 * 鑾峰彇 灏忔暟绮惧害
-	 */
-	public Integer getPrecisionlength (){
-		return precisionlength;
-	}
-
-	/**
-	 * 璁剧疆 灏忔暟绮惧害
-	 */
-	public void setPrecisionlength (Integer precisionlength){
-		this.precisionlength = precisionlength;
-	}
-
-	/**
-	 * 鑾峰彇 灏忔暟鍒诲害
-	 */
-	public Integer getScalelength (){
-		return scalelength;
-	}
-
-	/**
-	 * 璁剧疆 灏忔暟鍒诲害
-	 */
-	public void setScalelength (Integer scalelength){
-		this.scalelength = scalelength;
-	}
-
-	/**
-	 * 鑾峰彇 鍙栧�艰寖鍥�
-	 */
-	public String getValuearea (){
-		return valuearea;
-	}
-
-	/**
-	 * 璁剧疆 鍙栧�艰寖鍥�
-	 */
-	public void setValuearea (String valuearea){
-		this.valuearea = valuearea;
-	}
-
-	/**
-	 * 鑾峰彇 鏃堕棿鏍煎紡
-	 */
-	public String getCodedateformat (){
-		return codedateformat;
-	}
-
-	/**
-	 * 璁剧疆 鏃堕棿鏍煎紡
-	 */
-	public void setCodedateformat (String codedateformat){
-		this.codedateformat = codedateformat;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	 */
-	public String getTabledisplayjs (){
-		return tabledisplayjs;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	 */
-	public void setTabledisplayjs (String tabledisplayjs){
-		this.tabledisplayjs = tabledisplayjs;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
-	 */
-	public String getTextareaflag (){
-		return textareaflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
-	 */
-	public void setTextareaflag (String textareaflag){
-		this.textareaflag = textareaflag;
-	}
-
-	/**
-	 * 鑾峰彇 棰勮鍥�
-	 */
-	public String getImageflag (){
-		return imageflag;
-	}
-
-	/**
-	 * 璁剧疆 棰勮鍥�
-	 */
-	public void setImageflag (String imageflag){
-		this.imageflag = imageflag;
-	}
-
-	/**
-	 * 鑾峰彇 榛樿鍊�
-	 */
-	public String getDefaultvalue (){
-		return defaultvalue;
-	}
-
-	/**
-	 * 璁剧疆 榛樿鍊�
-	 */
-	public void setDefaultvalue (String defaultvalue){
-		this.defaultvalue = defaultvalue;
-	}
-
-	/**
-	 * 鑾峰彇 鍓嶇紑
-	 */
-	public String getPrefixvalue (){
-		return prefixvalue;
-	}
-
-	/**
-	 * 璁剧疆 鍓嶇紑
-	 */
-	public void setPrefixvalue (String prefixvalue){
-		this.prefixvalue = prefixvalue;
-	}
-
-	/**
-	 * 鑾峰彇 鍚庣紑
-	 */
-	public String getSuffixvalue (){
-		return suffixvalue;
-	}
-
-	/**
-	 * 璁剧疆 鍚庣紑
-	 */
-	public void setSuffixvalue (String suffixvalue){
-		this.suffixvalue = suffixvalue;
-	}
-
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	 */
-	public String getFiltersourceattr (){
-		return filtersourceattr;
-	}
-
-	/**
-	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	 */
-	public void setFiltersourceattr (String filtersourceattr){
-		this.filtersourceattr = filtersourceattr;
-	}
-
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	 */
-	public String getFiltersourceattrname (){
-		return filtersourceattrname;
-	}
-
-	/**
-	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	 */
-	public void setFiltersourceattrname (String filtersourceattrname){
-		this.filtersourceattrname = filtersourceattrname;
-	}
-
-	public Integer getAttrTableWidth() {
-		return attrTableWidth;
-	}
-
-	public void setAttrTableWidth(Integer attrTableWidth) {
-		this.attrTableWidth = attrTableWidth;
-	}
-
-	public String getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(String referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateAttrDTO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifyattributeoid='" + classifyattributeoid + '\'' +
-				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
-				", attributedatatype='" + attributedatatype + '\'' +
-				", keyattrflag='" + keyattrflag + '\'' +
-				", queryattrflag='" + queryattrflag + '\'' +
-				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
-				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
-				", sortattrflag='" + sortattrflag + '\'' +
-				", qrcodeflag='" + qrcodeflag + '\'' +
-				", barcodeflag='" + barcodeflag + '\'' +
-				", componentrule='" + componentrule + '\'' +
-				", verifyrule='" + verifyrule + '\'' +
-				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
-				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
-				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
-				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
-				", ordernum=" + ordernum +
-				", formdisplayflag='" + formdisplayflag + '\'' +
-				", tabledisplayflag='" + tabledisplayflag + '\'' +
-				", attributegroup='" + attributegroup + '\'' +
-				", enumString='" + enumString + '\'' +
-				", enumid='" + enumid + '\'' +
-				", enumname='" + enumname + '\'' +
-				", enumeditflag='" + enumeditflag + '\'' +
-				", referbtmid='" + referbtmid + '\'' +
-				", referbtmname='" + referbtmname + '\'' +
-				", referConfig='" + referConfig + '\'' +
-				", requireflag='" + requireflag + '\'' +
-				", readonlyflag='" + readonlyflag + '\'' +
-				", controllength=" + controllength +
-				", formdisplaystyle='" + formdisplaystyle + '\'' +
-				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
-				", formhref='" + formhref + '\'' +
-				", tablehref='" + tablehref + '\'' +
-				", precisionlength=" + precisionlength +
-				", scalelength=" + scalelength +
-				", valuearea='" + valuearea + '\'' +
-				", codedateformat='" + codedateformat + '\'' +
-				", tabledisplayjs='" + tabledisplayjs + '\'' +
-				", textareaflag='" + textareaflag + '\'' +
-				", imageflag='" + imageflag + '\'' +
-				", defaultvalue='" + defaultvalue + '\'' +
-				", prefixvalue='" + prefixvalue + '\'' +
-				", suffixvalue='" + suffixvalue + '\'' +
-				", filtersourceattr='" + filtersourceattr + '\'' +
-				", filtersourceattrname='" + filtersourceattrname + '\'' +
-				", attrTableWidth=" + attrTableWidth +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java
deleted file mode 100644
index 37269b4..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateButtonDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707119032349661L;
-
-	/**
-	 * 鎵�灞炴ā鏉�
-	 */
-	private String classifytemplateoid;
-
-	/**
-	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	private String classifytemplateoidName;
-	/**
-	 * 鎸夐挳鐨勪富閿�
-	 */
-	private String classifybuttonoid;
-
-	/**
-	 * 鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	 */
-	private String classifybuttonoidName;
-	/**
-	 * 鎸夐挳鐢ㄩ��
-	 */
-	private String buttonuse;
-
-	/**
-	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
-	 */
-	private String buttonUseText;
-
-	/**
-	 * 鐮佸�煎簭鍙�
-	 */
-	private Integer ordernum;
-
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炴ā鏉�
-	 */
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勪富閿�
-	 */
-	public String getClassifybuttonoid (){
-		return classifybuttonoid;
-	}
-
-	/**
-	 * 璁剧疆 鎸夐挳鐨勪富閿�
-	 */
-	public void setClassifybuttonoid (String classifybuttonoid){
-		this.classifybuttonoid = classifybuttonoid;
-	}
-
-	/**
-	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	 */
-	public String getClassifybuttonoidName (){
-		return classifybuttonoidName;
-	}
-
-	/**
-	 * 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	 */
-	public void setClassifybuttonoidName (String classifybuttonoidName){
-		this.classifybuttonoidName = classifybuttonoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐢ㄩ��
-	 */
-	public String getButtonuse (){
-		return buttonuse;
-	}
-
-	/**
-	 * 璁剧疆 鎸夐挳鐢ㄩ��
-	 */
-	public void setButtonuse (String buttonuse){
-		this.buttonuse = buttonuse;
-	}
-
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 鐮佸�煎簭鍙�
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	public String getButtonUseText() {
-		return buttonUseText;
-	}
-
-	public void setButtonUseText(String buttonUseText) {
-		this.buttonUseText = buttonUseText;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateButtonDTO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifybuttonoid='" + classifybuttonoid + '\'' +
-				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
-				", buttonuse='" + buttonuse + '\'' +
-				", buttonUseText='" + buttonUseText + '\'' +
-				", ordernum=" + ordernum +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java
deleted file mode 100644
index 883a256..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707120463849391L;
-
-	/**
-	 * 涓婚搴撳垎绫讳富閿�
-	 */
-	private String codeclassifyoid;
-
-	/**
-	 * 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	private String codeclassifyoidName;
-
-	/**
-	 * 鎵�灞炰笟鍔$被鍨�
-	 */
-	private String btmtypeid;
-
-	/**
-	 * 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	 */
-	private String btmtypename;
-
-	/**
-	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
-	 */
-	public String getBtmtypeid (){
-		return btmtypeid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炰笟鍔$被鍨�
-	 */
-	public void setBtmtypeid (String btmtypeid){
-		this.btmtypeid = btmtypeid;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	 */
-	public String getBtmtypename (){
-		return btmtypename;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	 */
-	public void setBtmtypename (String btmtypename){
-		this.btmtypename = btmtypename;
-	}
-
-	/**
-	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
-	 */
-	public String getCodeclassifyoid (){
-		return codeclassifyoid;
-	}
-
-	/**
-	 * 璁剧疆 涓婚搴撳垎绫讳富閿�
-	 */
-	public void setCodeclassifyoid (String codeclassifyoid){
-		this.codeclassifyoid = codeclassifyoid;
-	}
-
-	/**
-	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	public String getCodeclassifyoidName (){
-		return codeclassifyoidName;
-	}
-
-	/**
-	 * 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	public void setCodeclassifyoidName (String codeclassifyoidName){
-		this.codeclassifyoidName = codeclassifyoidName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateDTO{" +
-		"codeclassifyoid='" + codeclassifyoid +"',"+
-		"codeclassifyoidName='" + codeclassifyoidName +"'," +
-		"btmtypeid='" + btmtypeid +"',"+
-		"btmtypename='" + btmtypename +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java
deleted file mode 100644
index 24e1c6c..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateMapDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117068736629L;
-
-	/**
-	 * 鎵�灞炴ā鏉�
-	 */
-	private String classifyTemplateOid;
-
-	/**
-	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	private String classifyTemplateName;
-	/**
-	 * 鏄犲皠瑙勫垯绫诲瀷
-	 */
-	private String codemapruletype;
-
-	/**
-	 * 鏄犲皠瑙勫垯绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String codemapruletypeText;
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifyTemplateOid (){
-		return classifyTemplateOid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炴ā鏉�
-	 */
-	public void setClassifyTemplateOid (String classifyTemplateOid){
-		this.classifyTemplateOid = classifyTemplateOid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifyTemplateName (){
-		return classifyTemplateName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public void setClassifyTemplateName (String classifyTemplateName){
-		this.classifyTemplateName = classifyTemplateOid;
-	}
-	/**
-	 * 鑾峰彇 鏄犲皠瑙勫垯绫诲瀷
-	 */
-	public String getCodemapruletype (){
-		return codemapruletype;
-	}
-
-	/**
-	 * 璁剧疆 鏄犲皠瑙勫垯绫诲瀷
-	 */
-	public void setCodemapruletype (String codemapruletype){
-		this.codemapruletype = codemapruletype;
-	}
-
-	public String getCodemapruletypeText() {
-		return codemapruletypeText;
-	}
-
-	public void setCodemapruletypeText(String codemapruletypeText) {
-		this.codemapruletypeText = codemapruletypeText;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateMapDTO{" +
-				"classifytemplateoid='" + classifyTemplateOid + '\'' +
-				", classifytemplateoidName='" + classifyTemplateName + '\'' +
-				", codemapruletype='" + codemapruletype + '\'' +
-				", codemapruletypeText='" + codemapruletypeText + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java
deleted file mode 100644
index e94f6f2..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyValueDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117098778726L;
-
-	/**
-	 * 鍒嗙被鐮佹涓婚敭
-	 */
-	private String codeclassifysecoid;
-
-	/**
-	 * 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	private String codeclassifysecoidName;
-	/**
-	 * 鐮佸�煎簭鍙�
-	 */
-	private Integer ordernum;
-
-	/**
-	 * 涓婄骇鍒嗙被鐮佸�间富閿�
-	 */
-	private String parentclassifyvalueoid;
-
-
-	/**
-	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
-	 */
-	public String getCodeclassifysecoid (){
-		return codeclassifysecoid;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被鐮佹涓婚敭
-	 */
-	public void setCodeclassifysecoid (String codeclassifysecoid){
-		this.codeclassifysecoid = codeclassifysecoid;
-	}
-
-	/**
-	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getCodeclassifysecoidName (){
-		return codeclassifysecoidName;
-	}
-
-	/**
-	 * 璁剧疆鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public void setCodeclassifysecoidName (String codeclassifysecoidName){
-		this.codeclassifysecoidName = codeclassifysecoidName;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 鐮佸�煎簭鍙�
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	/**
-	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
-	 */
-	public String getParentclassifyvalueoid (){
-		return parentclassifyvalueoid;
-	}
-
-	/**
-	 * 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
-	 */
-	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
-		this.parentclassifyvalueoid = parentclassifyvalueoid;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeClassifyValueDTO{" +
-		"codeclassifysecoid='" + codeclassifysecoid +"',"+
-		"codeclassifysecoidName='" + codeclassifysecoidName +"'," +
-		"ordernum='" + ordernum +"',"+
-		"parentclassifyvalueoid='" + parentclassifyvalueoid +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java
deleted file mode 100644
index 111c4c5..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.springblade.code.dto;
-
-import java.util.Map;
-
-/**
- * 缁勫悎瑙勫垯鐨勯瑙堟樉绀�
- * @author weidy
- * @date 2022-04-06
- */
-public class CodeCompPreviewDTO implements java.io.Serializable{
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 7023496831561755321L;
-    /**
-     * 妯℃澘鐨勪富閿�
-     */
-    private String codeClassifyTemplateOid;
-
-    /**
-     * 褰撳墠鐨勮〃鍗曢噷鐨勫睘鎬у唴瀹�
-     */
-    private Map<String,String> data;
-
-    public String getCodeClassifyTemplateOid() {
-        return codeClassifyTemplateOid;
-    }
-
-    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
-        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
-    }
-
-
-    public Map<String, String> getData() {
-        return data;
-    }
-
-    public void setData(Map<String, String> data) {
-        this.data = data;
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java
deleted file mode 100644
index c6f43ec..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.springblade.code.dto;
-
-import java.util.List;
-
-/**
- * 缂栫爜鍒犻櫎鐨勬暟鎹紶杈撳璞�
- * @author weidy
- * @date 2022-3-2
- */
-public class CodeDeleteBatchDTO implements java.io.Serializable{
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = -4153558541948865667L;
-    /**
-     * 鏁版嵁鐨勪富閿�
-     */
-    private List<String> oidList;
-
-    /**
-     * 涓婚搴撳垎绫讳富閿�
-     */
-    private String codeClassifyOid;
-
-    public List<String> getOidList() {
-        return oidList;
-    }
-
-    public void setOidList(List<String> oidList) {
-        this.oidList = oidList;
-    }
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeDeleteBatchDTO{" +
-                "oidList=" + oidList +
-                ", codeClassifyOid='" + codeClassifyOid + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java
deleted file mode 100644
index 148bab2..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package org.springblade.code.dto;
-
-import java.util.Map;
-
-/**
- * 缂栫爜瀵煎嚭閰嶇疆鐨勪俊鎭�
- * @author weidy
- * @date 2022-03-2
- */
-public class CodeExportAttrDTO implements java.io.Serializable{
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 2048221367839030718L;
-
-    /**
-     * 瑕佸鍑虹殑灞炴��,key鏄帓搴忥紝value鏄睘鎬х殑缂栧彿
-     */
-    private Map<Integer,String> attrIdIndexMap ;
-
-    /**
-     * 褰撳墠绗嚑椤�
-     */
-    private Integer page;
-
-    /**
-     * 姣忛〉鏄剧ず鏈�澶ф暟
-     */
-    private Integer limit;
-
-    /**
-     * 鎴鍒扮鍑犻〉
-     */
-    private Integer endPage;
-
-    /**
-     * 鎺掑簭鐨勫瓧娈�
-     */
-    private String sort;
-
-    /**
-     * 鎺掑簭鐨勯『搴�
-     */
-    private String order;
-
-    /**
-     * 鏌ヨ鏉′欢
-     */
-    private Map<String,String> conditionMap;
-
-    /**
-     * 鍒嗙被鐨勪富閿�
-     */
-    private String codeClassifyOid;
-
-    public Integer getEndPage() {
-        return endPage;
-    }
-
-    public void setEndPage(Integer endPage) {
-        this.endPage = endPage;
-    }
-
-    public Map<Integer, String> getAttrIdIndexMap() {
-        return attrIdIndexMap;
-    }
-
-    public void setAttrIdIndexMap(Map<Integer, String> attrIdIndexMap) {
-        this.attrIdIndexMap = attrIdIndexMap;
-    }
-
-    public Integer getPage() {
-        return page;
-    }
-
-    public void setPage(Integer page) {
-        this.page = page;
-    }
-
-    public Integer getLimit() {
-        return limit;
-    }
-
-    public void setLimit(Integer limit) {
-        this.limit = limit;
-    }
-
-    public String getSort() {
-        return sort;
-    }
-
-    public void setSort(String sort) {
-        this.sort = sort;
-    }
-
-    public String getOrder() {
-        return order;
-    }
-
-    public void setOrder(String order) {
-        this.order = order;
-    }
-
-    public Map<String, String> getConditionMap() {
-        return conditionMap;
-    }
-
-    public void setConditionMap(Map<String, String> conditionMap) {
-        this.conditionMap = conditionMap;
-    }
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-
-
-    @Override
-    public String toString() {
-        return "CodeExportAttrDTO{" +
-                "attrIdIndexMap=" + attrIdIndexMap +
-                ", page=" + page +
-                ", limit=" + limit +
-                ", endPage=" + endPage +
-                ", sort='" + sort + '\'' +
-                ", order='" + order + '\'' +
-                ", conditionMap=" + conditionMap +
-                ", codeClassifyOid='" + codeClassifyOid + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java
deleted file mode 100644
index 4d897fb..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeFixedValueDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118504469968L;
-
-	/**
-	 * 鍥哄畾鐮佹涓婚敭
-	 */
-	private String codefixedsecoid;
-
-	/**
-	 * 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	private String codefixedsecoidName;
-	/**
-	 * 鐮佸�煎簭鍙�
-	 */
-	private Integer ordernum;
-
-
-	/**
-	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
-	 */
-	public String getCodefixedsecoid (){
-		return codefixedsecoid;
-	}
-
-	/**
-	 * 璁剧疆 鍥哄畾鐮佹涓婚敭
-	 */
-	public void setCodefixedsecoid (String codefixedsecoid){
-		this.codefixedsecoid = codefixedsecoid;
-	}
-
-	/**
-	 * 鑾峰彇鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getCodefixedsecoidName (){
-		return codefixedsecoidName;
-	}
-
-	/**
-	 * 璁剧疆鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public void setCodefixedsecoidName (String codefixedsecoidName){
-		this.codefixedsecoidName = codefixedsecoidName;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 鐮佸�煎簭鍙�
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeFixedValueDTO{" +
-		"codefixedsecoid='" + codefixedsecoid +"',"+
-		"codefixedsecoidName='" + codefixedsecoidName +"'," +
-		"ordernum='" + ordernum +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java
deleted file mode 100644
index 70c090f..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.springblade.code.dto;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class CodeImprotDataDTO implements java.io.Serializable{
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 1880155181507713248L;
-        /**
-         * 涓婚搴撳垎绫讳富閿�
-         */
-        private String codeClassifyOid;
-
-        /**
-         * 妯℃澘鐨勪富閿�
-         */
-        private String templateOid;
-        /**
-         * 缂栫爜瑙勫垯鐨勪富閿�
-         */
-        private String codeRuleOid;
-        /**
-         * 鏁版嵁
-         */
-        private List<Map<String,String>> datas = new ArrayList<>();
-
-        public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-        public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-        public String getTemplateOid() {
-        return templateOid;
-    }
-        public void setTemplateOid(String templateOid) {
-        this.templateOid = templateOid;
-    }
-        public String getCodeRuleOid() {
-        return codeRuleOid;
-    }
-        public void setCodeRuleOid(String codeRuleOid) {
-        this.codeRuleOid = codeRuleOid;
-    }
-        public List<Map<String, String>> getDatas() {
-        return datas;
-    }
-
-        public void setDatas(List<Map<String, String>> datas) {
-        this.datas = datas;
-    }
-
-        @Override
-        public String toString() {
-        return "CodeImprotDatasVO{" +
-                "codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", templateOid='" + templateOid + '\'' +
-                ", codeRuleOid='" + codeRuleOid + '\'' +
-                ", datas=" + datas +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java
deleted file mode 100644
index 01cc36a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeKeyAttrRepeatRuleDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118144488876L;
-
-	/**
-	 * 鏄惁蹇界暐澶у皬鍐�
-	 */
-	private String ignorecaseflag;
-
-	/**
-	 * 鏄惁蹇界暐绌烘牸
-	 */
-	private String ignorespaceflag;
-
-	/**
-	 * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	private String ignoreallspaceflag;
-
-	/**
-	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
-	 */
-	private String ignorewidthflag;
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
-	 */
-	public String getIgnorecaseflag (){
-		return ignorecaseflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇界暐澶у皬鍐�
-	 */
-	public void setIgnorecaseflag (String ignorecaseflag){
-		this.ignorecaseflag = ignorecaseflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
-	 */
-	public String getIgnorespaceflag (){
-		return ignorespaceflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇界暐绌烘牸
-	 */
-	public void setIgnorespaceflag (String ignorespaceflag){
-		this.ignorespaceflag = ignorespaceflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	public String getIgnoreallspaceflag (){
-		return ignoreallspaceflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	public void setIgnoreallspaceflag (String ignoreallspaceflag){
-		this.ignoreallspaceflag = ignoreallspaceflag;
-	}
-
-	public String getIgnorewidthflag() {
-		return ignorewidthflag;
-	}
-
-	public void setIgnorewidthflag(String ignorewidthflag) {
-		this.ignorewidthflag = ignorewidthflag;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeKeyAttrRepeatRuleDTO{" +
-				"ignorecaseflag='" + ignorecaseflag + '\'' +
-				", ignorespaceflag='" + ignorespaceflag + '\'' +
-				", ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
-				", ignorewidthflag='" + ignorewidthflag + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java
deleted file mode 100644
index 95a90f5..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.springblade.code.dto;
-
-import com.vci.web.dto.BaseModelDTO;
-
-import java.util.List;
-
-/**
- * 缂栫爜鐢宠鐨勪俊鎭�
- * @author weidy
- * @date 2022-2-28
- */
-public class CodeOrderDTO extends BaseModelDTO {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 1880155181507713245L;
-    /**
-     * 涓婚搴撳垎绫讳富閿�
-     */
-    private String codeClassifyOid;
-
-    /**
-     * 妯℃澘鐨勪富閿�
-     */
-    private String templateOid;
-    /**
-     * 缂栫爜瑙勫垯鐨勪富閿�
-     */
-    private String codeRuleOid;
-
-    /**
-     * 鏄惁鍦ㄦ祦绋嬩腑涓慨鏀�
-     */
-    private boolean editInProcess;
-
-    /**
-     * 鐮佹閫夋嫨鐨勪俊鎭�
-     */
-    private List<CodeOrderSecDTO> secDTOList;
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-
-    public String getTemplateOid() {
-        return templateOid;
-    }
-
-    public void setTemplateOid(String templateOid) {
-        this.templateOid = templateOid;
-    }
-
-    public String getCodeRuleOid() {
-        return codeRuleOid;
-    }
-
-    public void setCodeRuleOid(String codeRuleOid) {
-        this.codeRuleOid = codeRuleOid;
-    }
-
-    public List<CodeOrderSecDTO> getSecDTOList() {
-        return secDTOList;
-    }
-
-    public void setSecDTOList(List<CodeOrderSecDTO> secDTOList) {
-        this.secDTOList = secDTOList;
-    }
-
-    public boolean isEditInProcess() {
-        return editInProcess;
-    }
-
-    public void setEditInProcess(boolean editInProcess) {
-        this.editInProcess = editInProcess;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeOrderDTO{" +
-                "codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", templateOid='" + templateOid + '\'' +
-                ", codeRuleOid='" + codeRuleOid + '\'' +
-                ", editInProcess=" + editInProcess +
-                ", secDTOList=" + secDTOList +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java
deleted file mode 100644
index fdafd21..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.springblade.code.dto;
-
-/**
- * 缂栫爜鐢宠鐨勭爜娈电浉鍏充俊鎭�
- * @author weidy
- * @date 2022-02-28
- */
-public class CodeOrderSecDTO implements java.io.Serializable{
-
-    /**
-     * 鐮佹鐨勪富閿�
-     */
-    private String secOid;
-
-    /**
-     * 鐮佹鍦ㄥ墠绔緭鍏ョ殑鍐呭
-     */
-    private String secValue;
-
-    public String getSecOid() {
-        return secOid;
-    }
-
-    public void setSecOid(String secOid) {
-        this.secOid = secOid;
-    }
-
-    public String getSecValue() {
-        return secValue;
-    }
-
-    public void setSecValue(String secValue) {
-        this.secValue = secValue;
-    }
-
-
-    @Override
-    public String toString() {
-        return "CodeOrderSecDTO{" +
-                "secOid='" + secOid + '\'' +
-                ", secValue='" + secValue + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java
deleted file mode 100644
index 8757fd7..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodePhaseAttrDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118720105671L;
-
-	/**
-	 * 鎵�灞炴ā鏉块樁娈�
-	 */
-	private String codephaseoid;
-
-	/**
-	 * 鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
-	 */
-	private String codephaseoidName;
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉块樁娈�
-	 */
-	public String getCodephaseoid (){
-		return codephaseoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炴ā鏉块樁娈�
-	 */
-	public void setCodephaseoid (String codephaseoid){
-		this.codephaseoid = codephaseoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
-	 */
-	public String getCodephaseoidName (){
-		return codephaseoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
-	 */
-	public void setCodephaseoidName (String codephaseoidName){
-		this.codephaseoidName = codephaseoidName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodePhaseAttrDTO{" +
-		"codephaseoid='" + codephaseoid +"',"+
-		"codephaseoidName='" + codephaseoidName +"'," +
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java
deleted file mode 100644
index 5ee214b..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
- *
- * @author weidy
- * @date 2022-04-10
- */
-public class CodeResembleRuleDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118908699390L;
-
-	/**
-	 * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	private String ignoreallspaceflag;
-
-	/**
-	 * 鏄惁蹇界暐澶у皬鍐�
-	 */
-	private String ignorecaseflag;
-
-	/**
-	 * 鏄惁蹇界暐绌烘牸
-	 */
-	private String ignorespaceflag;
-
-	/**
-	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
-	 */
-	private String ignorewidthflag;
-
-	/**
-	 * 杩炴帴瀛楃
-	 */
-	private String linkCharacter;
-
-	public String getLinkCharacter() {
-		return linkCharacter;
-	}
-
-	public void setLinkCharacter(String linkCharacter) {
-		this.linkCharacter = linkCharacter;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	public String getIgnoreallspaceflag (){
-		return ignoreallspaceflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	public void setIgnoreallspaceflag (String ignoreallspaceflag){
-		this.ignoreallspaceflag = ignoreallspaceflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
-	 */
-	public String getIgnorecaseflag (){
-		return ignorecaseflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇界暐澶у皬鍐�
-	 */
-	public void setIgnorecaseflag (String ignorecaseflag){
-		this.ignorecaseflag = ignorecaseflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
-	 */
-	public String getIgnorespaceflag (){
-		return ignorespaceflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇界暐绌烘牸
-	 */
-	public void setIgnorespaceflag (String ignorespaceflag){
-		this.ignorespaceflag = ignorespaceflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐鍏ㄥ崐瑙�
-	 */
-	public String getIgnorewidthflag (){
-		return ignorewidthflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇界暐鍏ㄥ崐瑙�
-	 */
-	public void setIgnorewidthflag (String ignorewidthflag){
-		this.ignorewidthflag = ignorewidthflag;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeResembleRuleDTO{" +
-				"ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
-				", ignorecaseflag='" + ignorecaseflag + '\'' +
-				", ignorespaceflag='" + ignorespaceflag + '\'' +
-				", ignorewidthflag='" + ignorewidthflag + '\'' +
-				", linkCharacter='" + linkCharacter + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java
deleted file mode 100644
index 3dd7f99..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeRuleDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117067738769L;
-
-	/**
-	 * 鐮佹闆嗗悎
-	 */
-	private List<CodeBasicSecDTO> elements;
-
-	public List<CodeBasicSecDTO> getElements() {
-		return elements;
-	}
-
-	public void setElements(List<CodeBasicSecDTO> elements) {
-		this.elements = elements;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeRuleDTO{" +
-				"elements=" + elements +
-				'}'+ super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java
deleted file mode 100644
index e313bff..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-02-17
- */
-public class CodeSynonymDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117393017144L;
-
-	/**
-	 * 鎵�灞炵紪鐮佽鍒�
-	 */
-	private String codeclassifytemplateoid;
-
-	/**
-	 * 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	private String codeclassifytemplateoidName;
-	/**
-	 * 婧愬��
-	 */
-	private String sourcevalue;
-
-	/**
-	 * 鍚屼箟璇�
-	 */
-	private String synonymvalue;
-
-
-	/**
-	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
-	 */
-	public String getCodeclassifytemplateoid (){
-		return codeclassifytemplateoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炵紪鐮佽鍒�
-	 */
-	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
-		this.codeclassifytemplateoid = codeclassifytemplateoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public String getCodeclassifytemplateoidName (){
-		return codeclassifytemplateoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
-		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 婧愬��
-	 */
-	public String getSourcevalue (){
-		return sourcevalue;
-	}
-
-	/**
-	 * 璁剧疆 婧愬��
-	 */
-	public void setSourcevalue (String sourcevalue){
-		this.sourcevalue = sourcevalue;
-	}
-
-	/**
-	 * 鑾峰彇 鍚屼箟璇�
-	 */
-	public String getSynonymvalue (){
-		return synonymvalue;
-	}
-
-	/**
-	 * 璁剧疆 鍚屼箟璇�
-	 */
-	public void setSynonymvalue (String synonymvalue){
-		this.synonymvalue = synonymvalue;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeSynonymDTO{" +
-		"codeclassifytemplateoid='" + codeclassifytemplateoid +"',"+
-		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
-		"sourcevalue='" + sourcevalue +"',"+
-		"synonymvalue='" + synonymvalue +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java
deleted file mode 100644
index 8c89f38..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeTemplatePhaseDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117809299474L;
-
-	/**
-	 * 鎵�灞炵紪鐮佽鍒�
-	 */
-	private String codeclassifytemplateoid;
-
-	/**
-	 * 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	private String codeclassifytemplateoidName;
-
-	/**
-	 * 鍖呭惈鐨勫睘鎬�
-	 */
-	private List<CodePhaseAttrDTO> attributes;
-
-	/**
-	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
-	 */
-	public String getCodeclassifytemplateoid (){
-		return codeclassifytemplateoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炵紪鐮佽鍒�
-	 */
-	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
-		this.codeclassifytemplateoid = codeclassifytemplateoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public String getCodeclassifytemplateoidName (){
-		return codeclassifytemplateoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
-		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
-	}
-
-	public List<CodePhaseAttrDTO> getAttributes() {
-		return attributes;
-	}
-
-	public void setAttributes(List<CodePhaseAttrDTO> attributes) {
-		this.attributes = attributes;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeTemplatePhaseDTO{" +
-				"codeclassifytemplateoid='" + codeclassifytemplateoid + '\'' +
-				", codeclassifytemplateoidName='" + codeclassifytemplateoidName + '\'' +
-				", attributes=" + attributes +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java
deleted file mode 100644
index a229780..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.springblade.code.dto;
-
-import com.vci.starter.web.model.BaseModel;
-
-/**
- * 瑕佹帹閫佸緱鏁版嵁
- * @author wangyi
- * @date 2022-10-7
- */
-public class DockingDataDTO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 5020487634341415429L;
-
-    /**
-     * 绯荤粺鎺ュ彛oid
-     */
-    private String classifyoid;
-
-    /**
-     * 绯荤粺id
-     */
-    private String btmoid;
-
-    /**
-     * 绯荤粺id
-     */
-    private String btmid;
-
-    /**
-     * 绯荤粺id
-     */
-    private String sendtype;
-
-    /**
-     * 鏄惁鍒嗚В浠诲姟
-     */
-    private String sendflag;
-
-    /**
-     * 绯荤粺id
-     */
-    private String classifyid;
-
-    /**
-     * 绯荤粺id
-     */
-    private String classifyname;
-
-    public String getClassifyoid() {
-        return classifyoid;
-    }
-
-    public void setClassifyoid(String classifyoid) {
-        this.classifyoid = classifyoid;
-    }
-
-    public String getBtmoid() {
-        return btmoid;
-    }
-
-    public void setBtmoid(String btmoid) {
-        this.btmoid = btmoid;
-    }
-
-    public String getBtmid() {
-        return btmid;
-    }
-
-    public void setBtmid(String btmid) {
-        this.btmid = btmid;
-    }
-
-    public String getSendtype() {
-        return sendtype;
-    }
-
-    public void setSendtype(String sendtype) {
-        this.sendtype = sendtype;
-    }
-
-    public String getSendflag() {
-        return sendflag;
-    }
-
-    public void setSendflag(String sendflag) {
-        this.sendflag = sendflag;
-    }
-
-    public String getClassifyid() {
-        return classifyid;
-    }
-
-    public void setClassifyid(String classifyid) {
-        this.classifyid = classifyid;
-    }
-
-    public String getClassifyname() {
-        return classifyname;
-    }
-
-    public void setClassifyname(String classifyname) {
-        this.classifyname = classifyname;
-    }
-
-    @Override
-    public String toString() {
-        return "DockingDataDO{" +
-                "classifyoid='" + classifyoid + '\'' +
-                ", btmoid='" + btmoid + '\'' +
-                ", btmid='" + btmid + '\'' +
-                ", sendtype='" + sendtype + '\'' +
-                ", sendflag='" + sendflag + '\'' +
-                ", classifyid='" + classifyid + '\'' +
-                ", classifyname='" + classifyname + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java
deleted file mode 100644
index 0b6f872..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-03-28
- */
-public class DockingLogeDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707120475192779L;
-
-	/**
-	 * 鎺ュ彛鐘舵��
-	 */
-	private String interfacestatus;
-
-	/**
-	 * 鍙傛暟
-	 */
-	private String paramstring;
-
-	/**
-	 * 杩斿洖
-	 */
-	private String returnstring;
-
-	/**
-	 * 绯荤粺缂栧彿
-	 */
-	private String systemcode;
-
-	/**
-	 * 绯荤粺鍚嶇О
-	 */
-	private String systemname;
-
-	/**
-	 * 绯荤粺id
-	 */
-	private String systemoid;
-
-	/**
-	 * 鎺ュ彛绫诲瀷
-	 */
-	private String type;
-
-	/**
-	 * 杩旇繕鎻愮ず
-	 */
-	private String msg;
-
-	public String getMsg() {
-		return msg;
-	}
-
-	public void setMsg(String msg) {
-		this.msg = msg;
-	}
-
-	/**
-	 * 鑾峰彇 鎺ュ彛鐘舵��
-	 */
-	public String getInterfacestatus (){
-		return interfacestatus;
-	}
-
-	/**
-	 * 璁剧疆 鎺ュ彛鐘舵��
-	 */
-	public void setInterfacestatus (String interfacestatus){
-		this.interfacestatus = interfacestatus;
-	}
-
-	/**
-	 * 鑾峰彇 鍙傛暟
-	 */
-	public String getParamstring (){
-		return paramstring;
-	}
-
-	/**
-	 * 璁剧疆 鍙傛暟
-	 */
-	public void setParamstring (String paramstring){
-		this.paramstring = paramstring;
-	}
-
-	/**
-	 * 鑾峰彇 杩斿洖
-	 */
-	public String getReturnstring (){
-		return returnstring;
-	}
-
-	/**
-	 * 璁剧疆 杩斿洖
-	 */
-	public void setReturnstring (String returnstring){
-		this.returnstring = returnstring;
-	}
-
-	/**
-	 * 鑾峰彇 绯荤粺缂栧彿
-	 */
-	public String getSystemcode (){
-		return systemcode;
-	}
-
-	/**
-	 * 璁剧疆 绯荤粺缂栧彿
-	 */
-	public void setSystemcode (String systemcode){
-		this.systemcode = systemcode;
-	}
-
-	/**
-	 * 鑾峰彇 绯荤粺鍚嶇О
-	 */
-	public String getSystemname (){
-		return systemname;
-	}
-
-	/**
-	 * 璁剧疆 绯荤粺鍚嶇О
-	 */
-	public void setSystemname (String systemname){
-		this.systemname = systemname;
-	}
-
-	/**
-	 * 鑾峰彇 绯荤粺id
-	 */
-	public String getSystemoid (){
-		return systemoid;
-	}
-
-	/**
-	 * 璁剧疆 绯荤粺id
-	 */
-	public void setSystemoid (String systemoid){
-		this.systemoid = systemoid;
-	}
-
-	/**
-	 * 鑾峰彇 鎺ュ彛绫诲瀷
-	 */
-	public String getType (){
-		return type;
-	}
-
-	/**
-	 * 璁剧疆 鎺ュ彛绫诲瀷
-	 */
-	public void setType (String type){
-		this.type = type;
-	}
-
-
-	@Override
-	public String toString() {
-		return "DockingLogeDTO{" +
-				"interfacestatus='" + interfacestatus + '\'' +
-				", paramstring='" + paramstring + '\'' +
-				", returnstring='" + returnstring + '\'' +
-				", systemcode='" + systemcode + '\'' +
-				", systemname='" + systemname + '\'' +
-				", systemoid='" + systemoid + '\'' +
-				", type='" + type + '\'' +
-				", msg='" + msg + '\'' +
-				'}';
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java
deleted file mode 100644
index b7809c8..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
- *
- * @author weidy
- * @date 2022-04-05
- */
-public class DockingPreApplyDataDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707119386802588L;
-
-	/**
-	 * 鐢宠oid
-	 */
-	private String preapplyoid;
-
-	/**
-	 * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
-	 */
-	private String uniquecode;
-
-	/**
-	 * 涓婚搴撶紪鍙�
-	 */
-	private String type;
-
-	/**
-	 * 绯荤粺缂栧彿
-	 */
-	private String systemid;
-
-	/**
-	 * 姝e湪浣跨敤鏍囧織
-	 */
-	private String useddflag;
-
-	/**
-	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被oid
-	 */
-	private String classifyoid;
-
-	/**
-	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被鍚嶇О
-	 */
-	private String classifyname;
-
-	/**
-	 * 鐢宠鎴愬姛鍚庣殑缂栫爜,鎴栬�呭凡缁忓瓨鍦ㄧ殑缂栫爜
-	 */
-	private String num;
-	/**
-	 * 瑙勬牸鍨嬪彿
-	 */
-	private String model;
-	/**
-	 * 闆朵欢绫诲瀷
-	 */
-	private String parttype;
-	/**
-	 * 璁¢噺鍗曚綅
-	 */
-	private String unit;
-
-	/**
-	 * 鍗曢噸
-	 */
-	private String weight;
-
-	/**
-	 * 鏄惁閲嶈浠�
-	 */
-	private String importantPart;
-
-	/**
-	 * 鏄惁鍏抽敭浠�
-	 */
-	private String keyPart;
-	/**
-	 * 鏁版嵁澶勭悊杩斿洖鐘舵�佺爜
-	 */
-	private String datacode;
-
-	/**
-	 * 鏁版嵁澶勭悊杩斿洖淇℃伅
-	 */
-	private String datamsg;
-
-	public String getPreapplyoid() {
-		return preapplyoid;
-	}
-
-	public void setPreapplyoid(String preapplyoid) {
-		this.preapplyoid = preapplyoid;
-	}
-
-	public String getUniquecode() {
-		return uniquecode;
-	}
-
-	public void setUniquecode(String uniquecode) {
-		this.uniquecode = uniquecode;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public String getSystemid() {
-		return systemid;
-	}
-
-	public void setSystemid(String systemid) {
-		this.systemid = systemid;
-	}
-
-	public String getUseddflag() {
-		return useddflag;
-	}
-
-	public void setUseddflag(String useddflag) {
-		this.useddflag = useddflag;
-	}
-
-	public String getClassifyoid() {
-		return classifyoid;
-	}
-
-	public void setClassifyoid(String classifyoid) {
-		this.classifyoid = classifyoid;
-	}
-
-	public String getClassifyname() {
-		return classifyname;
-	}
-
-	public void setClassifyname(String classifyname) {
-		this.classifyname = classifyname;
-	}
-
-	public String getNum() {
-		return num;
-	}
-
-	public void setNum(String num) {
-		this.num = num;
-	}
-
-	public String getDatacode() {
-		return datacode;
-	}
-
-	public void setDatacode(String datacode) {
-		this.datacode = datacode;
-	}
-
-	public String getDatamsg() {
-		return datamsg;
-	}
-
-	public void setDatamsg(String datamsg) {
-		this.datamsg = datamsg;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	public String getParttype() {
-		return parttype;
-	}
-
-	public void setParttype(String parttype) {
-		this.parttype = parttype;
-	}
-
-	public String getUnit() {
-		return unit;
-	}
-
-	public void setUnit(String unit) {
-		this.unit = unit;
-	}
-
-	public String getWeight() {
-		return weight;
-	}
-
-	public void setWeight(String weight) {
-		this.weight = weight;
-	}
-
-	public String getImportantPart() {
-		return importantPart;
-	}
-
-	public void setImportantPart(String importantPart) {
-		this.importantPart = importantPart;
-	}
-
-	public String getKeyPart() {
-		return keyPart;
-	}
-
-	public void setKeyPart(String keyPart) {
-		this.keyPart = keyPart;
-	}
-
-	@Override
-	public String toString() {
-		return "DockingPreApplyDataDTO{" +
-				"preapplyoid='" + preapplyoid + '\'' +
-				", uniquecode='" + uniquecode + '\'' +
-				", type='" + type + '\'' +
-				", systemid='" + systemid + '\'' +
-				", useddflag='" + useddflag + '\'' +
-				", classifyoid='" + classifyoid + '\'' +
-				", classifyname='" + classifyname + '\'' +
-				", num='" + num + '\'' +
-				", model='" + model + '\'' +
-				", parttype='" + parttype + '\'' +
-				", unit='" + unit + '\'' +
-				", weight='" + weight + '\'' +
-				", importantPart='" + importantPart + '\'' +
-				", keyPart='" + keyPart + '\'' +
-				", datacode='" + datacode + '\'' +
-				", datamsg='" + datamsg + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java
deleted file mode 100644
index e9714d3..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
- *
- * @author weidy
- * @date 2022-04-05
- */
-public class DockingPreApplyDataInfoDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117408397326L;
-
-	/**
-	 * data鐨刼id
-	 */
-	private String dataoid;
-
-	/**
-	 * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
-	 */
-	private String uniquecode;
-
-	/**
-	 * 灞炴�ey
-	 */
-	private String key;
-
-	/**
-	 * 灞炴�ey鍚箟
-	 */
-	private String mean;
-
-	/**
-	 * 灞炴�alue
-	 */
-	private String value;
-
-
-	/**
-	 * 鑾峰彇 data鐨刼id
-	 */
-	public String getDataoid (){
-		return dataoid;
-	}
-
-	/**
-	 * 璁剧疆 data鐨刼id
-	 */
-	public void setDataoid (String dataoid){
-		this.dataoid = dataoid;
-	}
-
-	/**
-	 * 鑾峰彇 灞炴�ey
-	 */
-	public String getKey (){
-		return key;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�ey
-	 */
-	public void setKey (String key){
-		this.key = key;
-	}
-
-	/**
-	 * 鑾峰彇 灞炴�ey鍚箟
-	 */
-	public String getMean (){
-		return mean;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�ey鍚箟
-	 */
-	public void setMean (String mean){
-		this.mean = mean;
-	}
-
-	/**
-	 * 鑾峰彇 鍞竴鏍囪瘑
-	 */
-	public String getUniquecode (){
-		return uniquecode;
-	}
-
-	/**
-	 * 璁剧疆 鍞竴鏍囪瘑
-	 */
-	public void setUniquecode (String uniquecode){
-		this.uniquecode = uniquecode;
-	}
-
-	/**
-	 * 鑾峰彇 灞炴�alue
-	 */
-	public String getValue (){
-		return value;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�alue
-	 */
-	public void setValue (String value){
-		this.value = value;
-	}
-
-
-	@Override
-	public String toString() {
-		return "DockingPreApplyDataInfoDTO{" +
-		"dataoid='" + dataoid +"',"+
-		"key='" + key +"',"+
-		"mean='" + mean +"',"+
-		"uniquecode='" + uniquecode +"',"+
-		"value='" + value +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java
deleted file mode 100644
index 354f713..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 璁板綍闆嗘垚灞炴�т笌涓绘暟鎹睘鎬ф槧灏勫叧绯诲璞�
- * @author xiejun
- * @date 2023-01-06
- */
-public class DockingPreAttrMappingDTO extends BaseModelVO {
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 6020487634341415429L;
-    /***
-     * 榛樿鍊�
-     */
-    private String jdefaultValue;
-
-    /***
-     * 榛樿鍊�
-     */
-    private String jmetaListId;
-    /**
-     * 婧愬垎绫籭d
-     */
-    private  String jsourceClsfId;
-    /**
-     * 婧愬垎绫诲悕绉�
-     */
-    private String jsourceClsfName;
-    /**
-     * 婧愬睘鎬id
-     */
-    private String jtargetAttrId;
-
-    /**
-     * 鐩爣灞炴�id
-     */
-    private String jtargetClsfId;
-
-    /***
-     * 妯℃澘Id
-     */
-    private String jviewModeId;
-    /***
-     * 妯℃澘鍚嶇О
-     */
-    private String jviewModeName;
-
-    /***
-     * 鐩爣灞炴�у唴閮ㄥ悕绉�
-     */
-    private String jtargetAttrKey;
-
-    /***
-     * 鐩爣灞炴�у悕绉�
-     */
-    private String jtargetAttrName;
-
-    /***
-     * 鐩爣灞炴�у唴閮ㄥ悕绉�
-     */
-    private String jsourceAttrKey;
-
-    /***
-     * 鐩爣灞炴�у悕绉�
-     */
-    private String jsourceAttrName;
-    /**
-     * 灞炴�у彇鍊艰寖鍥�
-     */
-    private List<DockingPreAttrRangeDTO> dockingPreAttrRangeDTOS;
-
-    public String getJdefaultValue() {
-        return jdefaultValue;
-    }
-
-    public void setJdefaultValue(String jdefaultValue) {
-        this.jdefaultValue = jdefaultValue;
-    }
-
-    public String getJmetaListId() {
-        return jmetaListId;
-    }
-
-    public void setJmetaListId(String jmetaListId) {
-        this.jmetaListId = jmetaListId;
-    }
-
-    public String getJsourceClsfId() {
-        return jsourceClsfId;
-    }
-
-    public void setJsourceClsfId(String jsourceClsfId) {
-        this.jsourceClsfId = jsourceClsfId;
-    }
-
-    public String getJsourceClsfName() {
-        return jsourceClsfName;
-    }
-
-    public void setJsourceClsfName(String jsourceClsfName) {
-        this.jsourceClsfName = jsourceClsfName;
-    }
-
-    public String getJtargetAttrId() {
-        return jtargetAttrId;
-    }
-
-    public void setJtargetAttrId(String jtargetAttrId) {
-        this.jtargetAttrId = jtargetAttrId;
-    }
-
-    public String getJtargetClsfId() {
-        return jtargetClsfId;
-    }
-
-    public void setJtargetClsfId(String jtargetClsfId) {
-        this.jtargetClsfId = jtargetClsfId;
-    }
-
-    public String getJviewModeId() {
-        return jviewModeId;
-    }
-
-    public void setJviewModeId(String jviewModeId) {
-        this.jviewModeId = jviewModeId;
-    }
-
-    public String getJviewModeName() {
-        return jviewModeName;
-    }
-
-    public void setJviewModeName(String jviewModeName) {
-        this.jviewModeName = jviewModeName;
-    }
-
-    public String getJtargetAttrKey() {
-        return jtargetAttrKey;
-    }
-
-    public void setJtargetAttrKey(String jtargetAttrKey) {
-        this.jtargetAttrKey = jtargetAttrKey;
-    }
-
-    public String getJtargetAttrName() {
-        return jtargetAttrName;
-    }
-
-    public void setJtargetAttrName(String jtargetAttrName) {
-        this.jtargetAttrName = jtargetAttrName;
-    }
-
-    public String getJsourceAttrKey() {
-        return jsourceAttrKey;
-    }
-
-    public void setJsourceAttrKey(String jsourceAttrKey) {
-        this.jsourceAttrKey = jsourceAttrKey;
-    }
-
-    public String getJsourceAttrName() {
-        return jsourceAttrName;
-    }
-
-    public void setJsourceAttrName(String jsourceAttrName) {
-        this.jsourceAttrName = jsourceAttrName;
-    }
-
-    public List<DockingPreAttrRangeDTO> getDockingPreAttrRangeDTOS() {
-        return dockingPreAttrRangeDTOS;
-    }
-
-    public void setDockingPreAttrRangeDTOS(List<DockingPreAttrRangeDTO> dockingPreAttrRangeDTOS) {
-        this.dockingPreAttrRangeDTOS = dockingPreAttrRangeDTOS;
-    }
-
-    @Override
-    public String toString() {
-        return "DockingPreAttrMappingDTO{" +
-                "jdefaultValue='" + jdefaultValue + '\'' +
-                ", jmetaListId='" + jmetaListId + '\'' +
-                ", jsourceClsfId='" + jsourceClsfId + '\'' +
-                ", jsourceClsfName='" + jsourceClsfName + '\'' +
-                ", jtargetAttrId='" + jtargetAttrId + '\'' +
-                ", jtargetClsfId='" + jtargetClsfId + '\'' +
-                ", jviewModeId='" + jviewModeId + '\'' +
-                ", jviewModeName='" + jviewModeName + '\'' +
-                ", jtargetAttrKey='" + jtargetAttrKey + '\'' +
-                ", jtargetAttrName='" + jtargetAttrName + '\'' +
-                ", jsourceAttrKey='" + jsourceAttrKey + '\'' +
-                ", jsourceAttrName='" + jsourceAttrName + '\'' +
-                ", dockingPreAttrRangeDTOS=" + dockingPreAttrRangeDTOS +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java
deleted file mode 100644
index 9cf54ff..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.springblade.code.dto;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-public class DockingPreAttrRangeDTO extends BaseModelVO {
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 6020487634341415410L;
-    /***
-     *灞炴�d
-     */
-    private String jmetaListId;
-    /**
-     * 灞炴�ф灇涓炬樉绀哄悕绉�
-     */
-    private  String jnumText;
-    /**
-     * 灞炴�ф灇涓惧唴閮ㄥ悕绉�
-     */
-    private String jnumTextValue;
-
-    /**
-     * 婧愬睘鎬ф灇涓炬樉绀哄悕绉�
-     */
-    private  String jtargeNumText;
-    /**
-     * 婧愬睘鎬ф灇涓惧唴閮ㄥ悕绉�
-     */
-    private String jtargeNumTextValue;
-
-    public String getJnumText() {
-        return jnumText;
-    }
-
-    public void setJnumText(String jnumText) {
-        this.jnumText = jnumText;
-    }
-
-    public String getJnumTextValue() {
-        return jnumTextValue;
-    }
-
-    public void setJnumTextValue(String jnumTextValue) {
-        this.jnumTextValue = jnumTextValue;
-    }
-
-    public String getJtargeNumText() {
-        return jtargeNumText;
-    }
-
-    public void setJtargeNumText(String jtargeNumText) {
-        this.jtargeNumText = jtargeNumText;
-    }
-
-    public String getJtargeNumTextValue() {
-        return jtargeNumTextValue;
-    }
-
-    public void setJtargeNumTextValue(String jtargeNumTextValue) {
-        this.jtargeNumTextValue = jtargeNumTextValue;
-    }
-
-    public String getJmetaListId() {
-        return jmetaListId;
-    }
-
-    public void setJmetaListId(String jmetaListId) {
-        this.jmetaListId = jmetaListId;
-    }
-
-    @Override
-    public String toString() {
-        return "DockingPreAttrRangeDTO{" +
-                "jmetaListId='" + jmetaListId + '\'' +
-                ", jnumText='" + jnumText + '\'' +
-                ", jnumTextValue='" + jnumTextValue + '\'' +
-                ", jtargeNumText='" + jtargeNumText + '\'' +
-                ", jtargeNumTextValue='" + jtargeNumTextValue + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java
deleted file mode 100644
index e9a05ff..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-03-28
- */
-public class DockingTaskDTO extends BaseModelVO {
-
-	/**
-	 * 绂佹淇敼杩欎釜鍊�
-	 */
-	private static final long serialVersionUID = 4615707120806149100L;
-
-	/**
-	 * 绯荤粺鎺ュ彛oid
-	 */
-	private String sysinfooid;
-
-	/**
-	 * 绯荤粺id
-	 */
-	private String systemoid;
-
-	/**
-	 * 绯荤粺缂栧彿
-	 */
-	private String systemcode;
-
-	/**
-	 * 绯荤粺鍚嶇О
-	 */
-	private String systemname;
-
-	/**
-	 * 鍒嗙被oid
-	 */
-	private String classifyoid;
-
-	/**
-	 * 鍒嗙被id
-	 */
-	private String classifyid;
-
-	/**
-	 * 鍒嗙被鍚嶇О
-	 */
-	private String classifyname;
-
-	/**
-	 * 涓氬姟绫诲瀷鏁版嵁oid
-	 */
-	private String btmoid;
-
-	/**
-	 * 涓氬姟绫诲瀷鏁版嵁oid
-	 */
-	private String btmid;
-
-	/**
-	 * uniquecode
-	 */
-	private String uniquecode;
-
-	/**
-	 * 鏄惁鍙戦�佹垚鍔�
-	 */
-	private String sendflag;
-
-	private String sendtype;
-	/**
-	 * 鏄惁鍙戦�佹垚鍔�
-	 */
-	private String dataoid;
-
-	public String getDataoid() {
-		return dataoid;
-	}
-
-	public void setDataoid(String dataoid) {
-		this.dataoid = dataoid;
-	}
-	public String getSendtype() {
-		return sendtype;
-	}
-
-	public void setSendtype(String sendtype) {
-		this.sendtype = sendtype;
-	}
-	public String getSysinfooid() {
-		return sysinfooid;
-	}
-
-	public void setSysinfooid(String sysinfooid) {
-		this.sysinfooid = sysinfooid;
-	}
-
-	public String getSystemoid() {
-		return systemoid;
-	}
-
-	public void setSystemoid(String systemoid) {
-		this.systemoid = systemoid;
-	}
-
-	public String getSystemcode() {
-		return systemcode;
-	}
-
-	public void setSystemcode(String systemcode) {
-		this.systemcode = systemcode;
-	}
-
-	public String getSystemname() {
-		return systemname;
-	}
-
-	public void setSystemname(String systemname) {
-		this.systemname = systemname;
-	}
-
-	public String getClassifyoid() {
-		return classifyoid;
-	}
-
-	public void setClassifyoid(String classifyoid) {
-		this.classifyoid = classifyoid;
-	}
-	public String getClassifyid() {
-		return classifyid;
-	}
-
-	public void setClassifyid(String classifyid) {
-		this.classifyid = classifyid;
-	}
-	public String getClassifyname() {
-		return classifyname;
-	}
-
-	public void setClassifyname(String classifyname) {
-		this.classifyname = classifyname;
-	}
-
-	public String getBtmoid() {
-		return btmoid;
-	}
-
-	public void setBtmoid(String btmoid) {
-		this.btmoid = btmoid;
-	}
-	public String getBtmid() {
-		return btmid;
-	}
-
-	public void setBtmid(String btmid) {
-		this.btmid = btmid;
-	}
-
-	public String getSendflag() {
-		return sendflag;
-	}
-
-	public void setSendflag(String sendflag) {
-		this.sendflag = sendflag;
-	}
-
-	public String getUniquecode() {
-		return uniquecode;
-	}
-
-	public void setUniquecode(String uniquecode) {
-		this.uniquecode = uniquecode;
-	}
-
-	@Override
-	public String toString() {
-		return "DockingTaskDTO{" +
-				"sysinfooid='" + sysinfooid + '\'' +
-				", systemoid='" + systemoid + '\'' +
-				", systemcode='" + systemcode + '\'' +
-				", systemname='" + systemname + '\'' +
-				", classifyoid='" + classifyoid + '\'' +
-				", classifyid='" + classifyid + '\'' +
-				", classifyname='" + classifyname + '\'' +
-				", btmoid='" + btmoid + '\'' +
-				", btmo='" + btmid + '\'' +
-				", uniquecode='" + uniquecode + '\'' +
-				", sendflag='" + sendflag + '\'' +
-				", sendtype='" + sendtype + '\'' +
-				", dataoid='" + dataoid + '\'' +
-				'}';
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java
deleted file mode 100644
index 9ea3fdf..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.springblade.code.dto;
-
-import com.vci.web.dto.BaseModelDTO;
-
-import java.util.List;
-
-/**
- * 棰勭敵璇风紪鐮佺敵璇风殑淇℃伅
- * @author weidy
- * @date 2022-2-28
- */
-public class PreApplyCodeOrderDTO extends BaseModelDTO {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 1880155181507713245L;
-    /**
-     * 涓婚搴撳垎绫讳富閿�
-     */
-    private String codeClassifyOid;
-
-    /**
-     * 妯℃澘鐨勪富閿�
-     */
-    private String templateOid;
-    /**
-     * 缂栫爜瑙勫垯鐨勪富閿�
-     */
-    private String codeRuleOid;
-
-    /**
-     * 鏄惁鍦ㄦ祦绋嬩腑涓慨鏀�
-     */
-    private boolean editInProcess;
-
-    /**
-     * dockingpadata data鐨刼id
-     */
-    private String dataoid;
-
-    /**
-     * 鐮佹閫夋嫨鐨勪俊鎭�
-     */
-    private List<CodeOrderSecDTO> secDTOList;
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-
-    public String getTemplateOid() {
-        return templateOid;
-    }
-
-    public void setTemplateOid(String templateOid) {
-        this.templateOid = templateOid;
-    }
-
-    public String getCodeRuleOid() {
-        return codeRuleOid;
-    }
-
-    public void setCodeRuleOid(String codeRuleOid) {
-        this.codeRuleOid = codeRuleOid;
-    }
-
-    public List<CodeOrderSecDTO> getSecDTOList() {
-        return secDTOList;
-    }
-
-    public void setSecDTOList(List<CodeOrderSecDTO> secDTOList) {
-        this.secDTOList = secDTOList;
-    }
-
-    public boolean isEditInProcess() {
-        return editInProcess;
-    }
-
-    public void setEditInProcess(boolean editInProcess) {
-        this.editInProcess = editInProcess;
-    }
-
-    public String getDataoid() {
-        return dataoid;
-    }
-
-    public void setDataoid(String dataoid) {
-        this.dataoid = dataoid;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeOrderDTO{" +
-                "codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", templateOid='" + templateOid + '\'' +
-                ", codeRuleOid='" + codeRuleOid + '\'' +
-                ", editInProcess=" + editInProcess +
-                ", secDTOList=" + secDTOList +
-                ", dataoid=" + dataoid +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java
deleted file mode 100644
index b363829..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
- *
- * @author lihang
- * @date 2022-03-07
- */
-public class SysIntAuthorityDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707119813649189L;
-
-	/**
-	 * 楠岃瘉浠ょ墝
-	 */
-	private String token;
-
-	/**
-	 * 璁よ瘉鏂瑰紡
-	 */
-	private String type;
-
-	/**
-	 * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	private String typeText;
-	/**
-	 * 楠岃瘉鐢ㄦ埛
-	 */
-	private String useraccount;
-
-	/**
-	 * 楠岃瘉瀵嗙爜
-	 */
-	private String usercode;
-
-
-	/**
-	 * 鑾峰彇 楠岃瘉浠ょ墝
-	 */
-	public String getToken (){
-		return token;
-	}
-
-	/**
-	 * 璁剧疆 楠岃瘉浠ょ墝
-	 */
-	public void setToken (String token){
-		this.token = token;
-	}
-
-	/**
-	 * 鑾峰彇 璁よ瘉鏂瑰紡
-	 */
-	public String getType (){
-		return type;
-	}
-
-	/**
-	 * 璁剧疆 璁よ瘉鏂瑰紡
-	 */
-	public void setType (String type){
-		this.type = type;
-	}
-
-	/**
-	 * 鑾峰彇璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	public String getTypeText (){
-		return typeText;
-	}
-
-	/**
-	 * 璁剧疆璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	public void setTypeText (String typeText){
-		this.typeText = typeText;
-	}
-	/**
-	 * 鑾峰彇 楠岃瘉鐢ㄦ埛
-	 */
-	public String getUseraccount (){
-		return useraccount;
-	}
-
-	/**
-	 * 璁剧疆 楠岃瘉鐢ㄦ埛
-	 */
-	public void setUseraccount (String useraccount){
-		this.useraccount = useraccount;
-	}
-
-	/**
-	 * 鑾峰彇 楠岃瘉瀵嗙爜
-	 */
-	public String getUsercode (){
-		return usercode;
-	}
-
-	/**
-	 * 璁剧疆 楠岃瘉瀵嗙爜
-	 */
-	public void setUsercode (String usercode){
-		this.usercode = usercode;
-	}
-
-
-	@Override
-	public String toString() {
-		return "SysIntAuthorityDTO{" +
-		"token='" + token +"',"+
-		"type='" + type +"',"+
-		"typeText='" + typeText + "',"  +
-		"useraccount='" + useraccount +"',"+
-		"usercode='" + usercode +"',"+
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java
deleted file mode 100644
index 3cd36f9..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞�
- *
- * @author lihang
- * @date 2022-03-07
- */
-public class SysIntBaseDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117775925895L;
-
-
-
-	@Override
-	public String toString() {
-		return "SysIntBaseDTO{" +
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java
deleted file mode 100644
index af10f11..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-04-11
- */
-public class SysIntHeaderDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117695864945L;
-
-	/**
-	 * SysIntInfoDO 鐨刼id
-	 */
-	private String infoOid;
-
-	/**
-	 * 鍙傛暟key
-	 */
-	private String headerkey;
-
-	/**
-	 * 鍙傛暟value
-	 */
-	private String headeralue;
-
-	/**
-	 * 鏄惁浣跨敤
-	 */
-	private String usedflag;
-
-	public String getInfoOid() {
-		return infoOid;
-	}
-
-	public void setInfoOid(String infoOid) {
-		this.infoOid = infoOid;
-	}
-
-	public String getHeaderkey() {
-		return headerkey;
-	}
-
-	public void setHeaderkey(String headerkey) {
-		this.headerkey = headerkey;
-	}
-
-	public String getHeaderalue() {
-		return headeralue;
-	}
-
-	public void setHeaderalue(String headeralue) {
-		this.headeralue = headeralue;
-	}
-
-	public String getUsedflag() {
-		return usedflag;
-	}
-
-	public void setUsedflag(String usedflag) {
-		this.usedflag = usedflag;
-	}
-
-	@Override
-	public String toString() {
-		return "SysIntHeaderDO{" +
-				"infoOid='" + infoOid + '\'' +
-				", headerkey='" + headerkey + '\'' +
-				", headeralue='" + headeralue + '\'' +
-				", usedflag='" + usedflag + '\'' +
-				'}';
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java
deleted file mode 100644
index 1aeeb6b..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.springblade.code.dto;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-public class SysIntInfoBseDTO extends BaseModelVO {
-    private SysIntInfoDTO sysIntInfoDTO;
-
-    private List<SysIntParamDTO> sysIntParamDTO;
-
-    private List<SysIntHeaderDTO> sysIntHeaderDTOS;
-
-    public SysIntInfoDTO getSysIntInfoDTO() {
-        return sysIntInfoDTO;
-    }
-
-    public void setSysIntInfoDTO(SysIntInfoDTO sysIntInfoDTO) {
-        this.sysIntInfoDTO = sysIntInfoDTO;
-    }
-
-    public List<SysIntParamDTO> getSysIntParamDTO() {
-        return sysIntParamDTO;
-    }
-
-    public void setSysIntParamDTO(List<SysIntParamDTO> sysIntParamDTO) {
-        this.sysIntParamDTO = sysIntParamDTO;
-    }
-
-    public List<SysIntHeaderDTO> getSysIntHeaderDTOS() {
-        return sysIntHeaderDTOS;
-    }
-
-    public void setSysIntHeaderDTOS(List<SysIntHeaderDTO> sysIntHeaderDTOS) {
-        this.sysIntHeaderDTOS = sysIntHeaderDTOS;
-    }
-
-    @Override
-    public String toString() {
-        return "SysIntInfoBseDTO{" +
-                "sysIntInfoDTO=" + sysIntInfoDTO +
-                ", sysIntParamDTO=" + sysIntParamDTO +
-                ", sysIntHeaderDTOS=" + sysIntHeaderDTOS +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java
deleted file mode 100644
index 6c4b3e0..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java
+++ /dev/null
@@ -1,664 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
- *
- * @author lihang
- * @date 2022-03-07
- */
-public class SysIntInfoDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707120053955466L;
-
-	/**
-	 * 璁よ瘉鏂瑰紡
-	 */
-	private String authorityoid;
-
-	/**
-	 * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	private String authorityoidName;
-	/**
-	 * 鎺ュ彛鍑芥暟
-	 */
-	private String interfaceFunction;
-
-	/**
-	 * 鎺ュ彛绫诲瀷
-	 */
-	private String interfacetype;
-
-	/**
-	 * 鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String interfacetypeText;
-	/**
-	 * 鍙傛暟绫诲瀷
-	 */
-	private String paramtype;
-
-	/**
-	 * 鍙傛暟绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String paramtypeText;
-	/**
-	 * 璇锋眰鏂瑰紡
-	 */
-	private String requestmethod;
-
-	/**
-	 * 璇锋眰鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	private String requestmethodText;
-	/**
-	 * 鍒嗙被oid
-	 */
-	private String classifyoid;
-	/**
-	 * 鍚敤銆佸仠鐢╰rue/false锛屼笉鐢ㄥ钩鍙扮殑鏋氫妇锛屽噺灏戝骞冲彴鐨勮�﹀悎
-	 */
-	private String usedflag;
-	/**
-	 * 鎺ㄩ�佺郴缁無id
-	 */
-	private String sysbaseoid;
-	/**
-	 * 鎺ㄩ�佺郴缁熺紪鍙�
-	 */
-	private String sysbaseid;
-	/**
-	 * 鎺ㄩ�佺郴缁熷悕绉�
-	 */
-	private String sysbasename;
-	/**
-	 * 璇锋眰鍦板潃
-	 */
-	private String requesturl;
-
-	/**
-	 * 杩斿洖鍊肩被鍨�
-	 */
-	private String returntype;
-
-	/**
-	 * 杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
-	 */
-	private String returntypeText;
-	/**
-	 * 鏉ユ簮绯荤粺涓婚敭
-	 */
-	private String sourcesystemoid;
-
-	/**
-	 * 鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
-	 */
-	private String sourcesystemoidName;
-
-	/**
-	 * 鏉ユ簮绯荤粺鍚嶇О
-	 */
-	private String sourceSysName;
-
-	/**
-	 * 鏉ユ簮绯荤粺鏍囪瘑
-	 */
-	private String sourceSysId;
-
-	/**
-	 * 鐩爣绯荤粺涓婚敭
-	 */
-	private String targetsystemoid;
-
-	/**
-	 * 鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
-	 */
-	private String targetsystemoidName;
-
-	/**
-	 * 鐩爣绯荤粺鍚嶇О
-	 */
-	private String targetSysName;
-
-	/**
-	 * 鐩爣绯荤粺鏍囪瘑
-	 */
-	private String targetSysId;
-
-
-
-	/**
-	 * 鎺ュ彛鎻忚堪
-	 */
-	private String description;
-
-	/**
-	 * 绫昏矾寰�
-	 */
-	private String classPath;
-
-	/**
-	 * 鏁版嵁娴佸悜鏂瑰紡
-	 */
-	private String dataFlowType;
-
-	/**
-	 * 鏁版嵁娴佸悜鏂瑰紡鐨勬樉绀哄瓧娈�
-	 */
-	private String dataFlowTypeText;
-
-	/**
-	 * 瀛樺偍鐨勪笟鍔$被鍨�
-	 */
-	private String btmTypeId;
-
-	/**
-	 * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
-	 */
-	private String btmTypeName;
-
-	/**
-	 * 鍛藉悕绌洪棿
-	 */
-	private String namespace;
-
-	/**
-	 * soapAction
-	 */
-	private String soapaction;
-
-	/**
-	 * 鍙傛暟鍚嶇О
-	 */
-	private String targName;
-
-	/**
-	 * cxfaxis
-	 */
-	private String cxfaxis;
-
-	/**
-	 * 鍒嗙被id
-	 */
-	private String classifyid;
-
-	/**
-	 * 鍒嗙被鍚嶇О
-	 */
-	private String classifyname;
-	/***
-	 * 鍙傛暟淇℃伅瀵硅薄
-	 */
-	private List<SysIntParamDTO> sysIntParamDTOs;
-	/***
-	 * header淇℃伅瀵硅薄
-	 */
-	private List<SysIntHeaderDTO> sysIntHeaderDTOS;
-
-	public String pushType;
-
-	public String getClassifyid() {
-		return classifyid;
-	}
-
-	public void setClassifyid(String classifyid) {
-		this.classifyid = classifyid;
-	}
-
-	public String getClassifyname() {
-		return classifyname;
-	}
-
-	public void setClassifyname(String classifyname) {
-		this.classifyname = classifyname;
-	}
-
-	public String getTargName() {
-		return targName;
-	}
-
-	public void setTargName(String targName) {
-		this.targName = targName;
-	}
-
-	public String getSoapaction() {
-		return soapaction;
-	}
-
-	public void setSoapaction(String soapaction) {
-		this.soapaction = soapaction;
-	}
-
-	public String getCxfaxis() {
-		return cxfaxis;
-	}
-
-	public void setCxfaxis(String cxfaxis) {
-		this.cxfaxis = cxfaxis;
-	}
-
-	public String getNamespace() {
-		return namespace;
-	}
-
-	public void setNamespace(String namespace) {
-		this.namespace = namespace;
-	}
-
-	public String getBtmTypeId() {
-		return btmTypeId;
-	}
-
-	public void setBtmTypeId(String btmTypeId) {
-		this.btmTypeId = btmTypeId;
-	}
-
-	public String getBtmTypeName() {
-		return btmTypeName;
-	}
-
-	public void setBtmTypeName(String btmTypeName) {
-		this.btmTypeName = btmTypeName;
-	}
-	/**
-	 * 鑾峰彇 璁よ瘉鏂瑰紡
-	 */
-	public String getAuthorityoid (){
-		return authorityoid;
-	}
-
-	/**
-	 * 璁剧疆 璁よ瘉鏂瑰紡
-	 */
-	public void setAuthorityoid (String authorityoid){
-		this.authorityoid = authorityoid;
-	}
-
-	/**
-	 * 鑾峰彇璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	public String getAuthorityoidName (){
-		return authorityoidName;
-	}
-
-	/**
-	 * 璁剧疆璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	public void setAuthorityoidName (String authorityoidName){
-		this.authorityoidName = authorityoidName;
-	}
-	/**
-	 * 鑾峰彇 鎺ュ彛鍑芥暟
-	 */
-	public String getInterfaceFunction (){
-		return interfaceFunction;
-	}
-
-	/**
-	 * 璁剧疆 鎺ュ彛鍑芥暟
-	 */
-	public void setInterfaceFunction (String interfaceFunction){
-		this.interfaceFunction = interfaceFunction;
-	}
-
-	/**
-	 * 鑾峰彇 鎺ュ彛绫诲瀷
-	 */
-	public String getInterfacetype (){
-		return interfacetype;
-	}
-
-	/**
-	 * 璁剧疆 鎺ュ彛绫诲瀷
-	 */
-	public void setInterfacetype (String interfacetype){
-		this.interfacetype = interfacetype;
-	}
-
-	/**
-	 * 鑾峰彇鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
-	 */
-	public String getInterfacetypeText (){
-		return interfacetypeText;
-	}
-
-	/**
-	 * 璁剧疆鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
-	 */
-	public void setInterfacetypeText (String interfacetypeText){
-		this.interfacetypeText = interfacetypeText;
-	}
-	/**
-	 * 鑾峰彇 鍙傛暟绫诲瀷
-	 */
-	public String getParamtype (){
-		return paramtype;
-	}
-
-	/**
-	 * 璁剧疆 鍙傛暟绫诲瀷
-	 */
-	public void setParamtype (String paramtype){
-		this.paramtype = paramtype;
-	}
-
-	/**
-	 * 鑾峰彇鍙傛暟绫诲瀷鏄剧ず鏂囨湰
-	 */
-	public String getParamtypeText (){
-		return paramtypeText;
-	}
-
-	/**
-	 * 璁剧疆鍙傛暟绫诲瀷鏄剧ず鏂囨湰
-	 */
-	public void setParamtypeText (String paramtypeText){
-		this.paramtypeText = paramtypeText;
-	}
-	/**
-	 * 鑾峰彇 璇锋眰鏂瑰紡
-	 */
-	public String getRequestmethod (){
-		return requestmethod;
-	}
-
-	/**
-	 * 璁剧疆 璇锋眰鏂瑰紡
-	 */
-	public void setRequestmethod (String requestmethod){
-		this.requestmethod = requestmethod;
-	}
-
-	/**
-	 * 鑾峰彇璇锋眰鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	public String getRequestmethodText (){
-		return requestmethodText;
-	}
-
-	/**
-	 * 璁剧疆璇锋眰鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	public void setRequestmethodText (String requestmethodText){
-		this.requestmethodText = requestmethodText;
-	}
-	/**
-	 * 鑾峰彇 璇锋眰鍦板潃
-	 */
-	public String getRequesturl (){
-		return requesturl;
-	}
-
-	/**
-	 * 璁剧疆 璇锋眰鍦板潃
-	 */
-	public void setRequesturl (String requesturl){
-		this.requesturl = requesturl;
-	}
-
-	/**
-	 * 鑾峰彇 杩斿洖鍊肩被鍨�
-	 */
-	public String getReturntype (){
-		return returntype;
-	}
-
-	/**
-	 * 璁剧疆 杩斿洖鍊肩被鍨�
-	 */
-	public void setReturntype (String returntype){
-		this.returntype = returntype;
-	}
-
-	/**
-	 * 鑾峰彇杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
-	 */
-	public String getReturntypeText (){
-		return returntypeText;
-	}
-
-	/**
-	 * 璁剧疆杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
-	 */
-	public void setReturntypeText (String returntypeText){
-		this.returntypeText = returntypeText;
-	}
-	/**
-	 * 鑾峰彇 鏉ユ簮绯荤粺涓婚敭
-	 */
-	public String getSourcesystemoid (){
-		return sourcesystemoid;
-	}
-
-	/**
-	 * 璁剧疆 鏉ユ簮绯荤粺涓婚敭
-	 */
-	public void setSourcesystemoid (String sourcesystemoid){
-		this.sourcesystemoid = sourcesystemoid;
-	}
-
-	/**
-	 * 鑾峰彇鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getSourcesystemoidName (){
-		return sourcesystemoidName;
-	}
-
-	/**
-	 * 璁剧疆鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
-	 */
-	public void setSourcesystemoidName (String sourcesystemoidName){
-		this.sourcesystemoidName = sourcesystemoidName;
-	}
-	/**
-	 * 鑾峰彇 鐩爣绯荤粺涓婚敭
-	 */
-	public String getTargetsystemoid (){
-		return targetsystemoid;
-	}
-
-	/**
-	 * 璁剧疆 鐩爣绯荤粺涓婚敭
-	 */
-	public void setTargetsystemoid (String targetsystemoid){
-		this.targetsystemoid = targetsystemoid;
-	}
-
-	/**
-	 * 鑾峰彇鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getTargetsystemoidName (){
-		return targetsystemoidName;
-	}
-
-	/**
-	 * 璁剧疆鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
-	 */
-	public void setTargetsystemoidName (String targetsystemoidName){
-		this.targetsystemoidName = targetsystemoidName;
-	}
-
-	@Override
-	public String getDescription() {
-		return description;
-	}
-
-	@Override
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	public String getClassPath() {
-		return classPath;
-	}
-
-	public void setClassPath(String classPath) {
-		this.classPath = classPath;
-	}
-
-	public String getDataFlowType() {
-		return dataFlowType;
-	}
-
-	public void setDataFlowType(String dataFlowType) {
-		this.dataFlowType = dataFlowType;
-	}
-
-	public String getDataFlowTypeText() {
-		return dataFlowTypeText;
-	}
-
-	public void setDataFlowTypeText(String dataFlowTypeText) {
-		this.dataFlowTypeText = dataFlowTypeText;
-	}
-
-	public String getClassifyoid() {
-		return classifyoid;
-	}
-
-	public void setClassifyoid(String classifyoid) {
-		this.classifyoid = classifyoid;
-	}
-
-	public String getUsedflag() {
-		return usedflag;
-	}
-
-	public void setUsedflag(String usedflag) {
-		this.usedflag = usedflag;
-	}
-
-	public String getSysbaseoid() {
-		return sysbaseoid;
-	}
-
-	public void setSysbaseoid(String sysbaseoid) {
-		this.sysbaseoid = sysbaseoid;
-	}
-
-	public String getSysbasename() {
-		return sysbasename;
-	}
-
-	public void setSysbasename(String sysbasename) {
-		this.sysbasename = sysbasename;
-	}
-
-	public String getSysbaseid() {
-		return sysbaseid;
-	}
-
-	public void setSysbaseid(String sysbaseid) {
-		this.sysbaseid = sysbaseid;
-	}
-
-	public List<SysIntParamDTO> getSysIntParamDTOs() {
-		return sysIntParamDTOs;
-	}
-
-	public void setSysIntParamDTOs(List<SysIntParamDTO> sysIntParamDTOs) {
-		this.sysIntParamDTOs = sysIntParamDTOs;
-	}
-
-	public List<SysIntHeaderDTO> getSysIntHeaderDTOS() {
-		return sysIntHeaderDTOS;
-	}
-
-	public void setSysIntHeaderDTOS(List<SysIntHeaderDTO> sysIntHeaderDTOS) {
-		this.sysIntHeaderDTOS = sysIntHeaderDTOS;
-	}
-
-	public String getPushType() {
-		return pushType;
-	}
-
-	public void setPushType(String pushType) {
-		this.pushType = pushType;
-	}
-
-	public String getSourceSysName() {
-		return sourceSysName;
-	}
-
-	public void setSourceSysName(String sourceSysName) {
-		this.sourceSysName = sourceSysName;
-	}
-
-	public String getSourceSysId() {
-		return sourceSysId;
-	}
-
-	public void setSourceSysId(String sourceSysId) {
-		this.sourceSysId = sourceSysId;
-	}
-
-	public String getTargetSysName() {
-		return targetSysName;
-	}
-
-	public void setTargetSysName(String targetSysName) {
-		this.targetSysName = targetSysName;
-	}
-
-	public String getTargetSysId() {
-		return targetSysId;
-	}
-
-	public void setTargetSysId(String targetSysId) {
-		this.targetSysId = targetSysId;
-	}
-
-	@Override
-	public String toString() {
-		return "SysIntInfoDTO{" +
-				"authorityoid='" + authorityoid + '\'' +
-				", authorityoidName='" + authorityoidName + '\'' +
-				", interfaceFunction='" + interfaceFunction + '\'' +
-				", interfacetype='" + interfacetype + '\'' +
-				", interfacetypeText='" + interfacetypeText + '\'' +
-				", paramtype='" + paramtype + '\'' +
-				", paramtypeText='" + paramtypeText + '\'' +
-				", requestmethod='" + requestmethod + '\'' +
-				", requestmethodText='" + requestmethodText + '\'' +
-				", classifyoid='" + classifyoid + '\'' +
-				", usedflag='" + usedflag + '\'' +
-				", sysbaseoid='" + sysbaseoid + '\'' +
-				", sysbaseid='" + sysbaseid + '\'' +
-				", sysbasename='" + sysbasename + '\'' +
-				", requesturl='" + requesturl + '\'' +
-				", returntype='" + returntype + '\'' +
-				", returntypeText='" + returntypeText + '\'' +
-				", sourcesystemoid='" + sourcesystemoid + '\'' +
-				", sourcesystemoidName='" + sourcesystemoidName + '\'' +
-				", sourceSysName='" + sourceSysName + '\'' +
-				", sourceSysId='" + sourceSysId + '\'' +
-				", targetsystemoid='" + targetsystemoid + '\'' +
-				", targetsystemoidName='" + targetsystemoidName + '\'' +
-				", targetSysName='" + targetSysName + '\'' +
-				", targetSysId='" + targetSysId + '\'' +
-				", description='" + description + '\'' +
-				", classPath='" + classPath + '\'' +
-				", dataFlowType='" + dataFlowType + '\'' +
-				", dataFlowTypeText='" + dataFlowTypeText + '\'' +
-				", btmTypeId='" + btmTypeId + '\'' +
-				", btmTypeName='" + btmTypeName + '\'' +
-				", namespace='" + namespace + '\'' +
-				", soapaction='" + soapaction + '\'' +
-				", targName='" + targName + '\'' +
-				", cxfaxis='" + cxfaxis + '\'' +
-				", classifyid='" + classifyid + '\'' +
-				", classifyname='" + classifyname + '\'' +
-				", sysIntParamDTOs=" + sysIntParamDTOs +
-				", sysIntHeaderDTOS=" + sysIntHeaderDTOS +
-				", pushType='" + pushType + '\'' +
-				'}';
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java
deleted file mode 100644
index 9b13e88..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.springblade.code.dto;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
- *
- * @author weidy
- * @date 2022-04-11
- */
-public class SysIntParamDTO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707120661255093L;
-
-	/**
-	 * SysIntInfoDO 鐨刼id
-	 */
-	private String infoOid;
-
-	/**
-	 * 鍙傛暟key
-	 */
-	private String paramkey;
-
-	/**
-	 * 鍙傛暟value
-	 */
-	private String paramvalue;
-
-	/**
-	 * 鏄惁浣跨敤
-	 */
-	private String usedflag;
-
-
-	public String getInfoOid() {
-		return infoOid;
-	}
-
-	public void setInfoOid(String infoOid) {
-		this.infoOid = infoOid;
-	}
-
-	public String getParamkey() {
-		return paramkey;
-	}
-
-	public void setParamkey(String paramkey) {
-		this.paramkey = paramkey;
-	}
-
-	public String getParamvalue() {
-		return paramvalue;
-	}
-
-	public void setParamvalue(String paramvalue) {
-		this.paramvalue = paramvalue;
-	}
-
-	public String getUsedflag() {
-		return usedflag;
-	}
-
-	public void setUsedflag(String usedflag) {
-		this.usedflag = usedflag;
-	}
-
-	@Override
-	public String toString() {
-		return "SysIntParamDO{" +
-				"infoOid='" + infoOid + '\'' +
-				", paramkey='" + paramkey + '\'' +
-				", paramvalue='" + paramvalue + '\'' +
-				", usedflag='" + usedflag + '\'' +
-				'}';
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java
deleted file mode 100644
index 30c677a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.springblade.code.dto;
-
-public class UpdateSysInfoStatusDTO {
-    private String oid;
-    private String update;
-    private String ts;
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getUpdate() {
-        return update;
-    }
-
-    public void setUpdate(String update) {
-        this.update = update;
-    }
-
-    public String getTs() {
-        return ts;
-    }
-    public void setTs(String ts) {
-        this.ts = ts;
-    }
-    @Override
-    public String toString() {
-        return "SysInfoDTO{" +
-                "oid='" + oid + '\'' +
-                ", update='" + update + '\'' +
-                ", ts='" + ts + '\'' +
-                '}';
-    }
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java
deleted file mode 100644
index 612eafc..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springblade.code.dto.datapush.classify;
-
-
-public class JsonRootDataDTO {
-    private NodeDataDTO data;
-
-    public NodeDataDTO getData() {
-        return data;
-    }
-
-    public void setData(NodeDataDTO data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "JsonRootDataDTO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java
deleted file mode 100644
index a43f55f..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.springblade.code.dto.datapush.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("classify")
-public class NodeClassifyDTO {
-        /**
-         * 鍒嗙被id
-         */
-        @XStreamAsAttribute
-        private String id;
-        /***
-         * 鍒嗙被鍚嶇О
-         */
-        @XStreamAsAttribute
-        private String name;
-        /***
-         * 鐖惰妭鐐筰d
-         */
-        @XStreamAsAttribute
-        private String pid;
-        /***
-         * 鍒嗙被浠e彿
-         */
-        @XStreamAsAttribute
-        private String classCode;
-        /***
-         * 鎻忚堪
-         */
-        @XStreamAsAttribute
-        private  String description;
-        /***
-         * 鍒嗙被閾炬帴璺緞
-         */
-        @XStreamAsAttribute
-        private  String fullPathName;
-        /***
-         * 鍒嗙被鐘舵��
-         */
-        @XStreamAsAttribute
-        private String lcStatus;
-
-        public String getId() {
-        return id;
-    }
-
-        public void setId(String id) {
-        this.id = id;
-    }
-
-        public String getName() {
-        return name;
-    }
-
-        public void setName(String name) {
-        this.name = name;
-    }
-
-        public String getPid() {
-        return pid;
-    }
-
-        public void setPid(String pid) {
-        this.pid = pid;
-    }
-
-        public String getClassCode() {
-        return classCode;
-    }
-
-        public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-        public String getDescription() {
-        return description;
-    }
-
-        public void setDescription(String description) {
-        this.description = description;
-    }
-
-        public String getFullPathName() {
-        return fullPathName;
-    }
-
-        public void setFullPathName(String fullPathName) {
-        this.fullPathName = fullPathName;
-    }
-
-        public String getLcStatus() {
-        return lcStatus;
-    }
-
-        public void setLcStatus(String lcStatus) {
-        this.lcStatus = lcStatus;
-    }
-
-    @Override
-    public String toString() {
-        return "NodeClassifyDTO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", pid='" + pid + '\'' +
-                ", classCode='" + classCode + '\'' +
-                ", description='" + description + '\'' +
-                ", fullPathName='" + fullPathName + '\'' +
-                ", lcStatus='" + lcStatus + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java
deleted file mode 100644
index f715422..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.springblade.code.dto.datapush.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-
-@XStreamAlias("data")
-public class NodeDataDTO {
-
-    private NodeLibraryDTO library;
-
-    public NodeLibraryDTO getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(NodeLibraryDTO library) {
-        this.library = library;
-    }
-
-    @Override
-    public String toString() {
-        return "NodeDataDTO{" +
-                "library=" + library +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java
deleted file mode 100644
index c227328..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.springblade.code.dto.datapush.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("library")
-public class NodeLibraryDTO {
-    @XStreamAsAttribute
-    private String id;
-    @XStreamAsAttribute
-    private String name;
-    @XStreamImplicit
-    private List<NodeClassifyDTO> classify;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<NodeClassifyDTO> getClassify() {
-        return classify;
-    }
-
-    public void setClassify(List<NodeClassifyDTO> classify) {
-        this.classify = classify;
-    }
-
-    @Override
-    public String toString() {
-        return "NodeLibraryDTO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", classify=" + classify +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java
deleted file mode 100644
index 658aaf3..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springblade.code.dto.datapush.data;
-
-public class NodeJosnDTO {
-
-    private NodedataDTO data;
-
-    public NodedataDTO getData() {
-        return data;
-    }
-
-    public void setData(NodedataDTO data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "NodeJosnDTO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java
deleted file mode 100644
index c486a78..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.springblade.code.dto.datapush.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("object")
-public class NodeObjectDTO {
-    @XStreamAsAttribute
-   private String  code="" ;
-    @XStreamAsAttribute
-    private String status="" ;
-    @XStreamAsAttribute
-    private String library="";
-    @XStreamAsAttribute
-    private String classCode="";
-    @XStreamImplicit
-    private List<NodeProDTO> pro;
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(String library) {
-        this.library = library;
-    }
-
-    public String getClassCode() {
-        return classCode;
-    }
-
-    public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-    public List<NodeProDTO> getPro() {
-        return pro;
-    }
-
-    public void setPro(List<NodeProDTO> pro) {
-        this.pro = pro;
-    }
-
-    @Override
-    public String toString() {
-        return "NodeObjectDTO{" +
-                "code='" + code + '\'' +
-                ", status='" + status + '\'' +
-                ", library='" + library + '\'' +
-                ", classCode='" + classCode + '\'' +
-                ", pro=" + pro +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java
deleted file mode 100644
index 412313b..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.springblade.code.dto.datapush.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("pro")
-public class NodeProDTO {
-    @XStreamAsAttribute
-    private String filedName;
-    @XStreamAsAttribute
-    private String outname;
-    @XStreamAsAttribute
-    private String filedValue;
-
-    public String getFiledName() {
-        return filedName;
-    }
-
-    public void setFiledName(String filedName) {
-        this.filedName = filedName;
-    }
-
-    public String getOutname() {
-        return outname;
-    }
-
-    public void setOutname(String outname) {
-        this.outname = outname;
-    }
-
-    public String getFiledValue() {
-        return filedValue;
-    }
-
-    public void setFiledValue(String filedValue) {
-        this.filedValue = filedValue;
-    }
-
-    @Override
-    public String toString() {
-        return "NodeProDTO{" +
-                "filedName='" + filedName + '\'' +
-                ", outname='" + outname + '\'' +
-                ", filedValue='" + filedValue + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java
deleted file mode 100644
index df4149d..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.springblade.code.dto.datapush.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("data")
-public class NodedataDTO {
-    @XStreamImplicit
-    private List<NodeObjectDTO> object;
-
-    public List<NodeObjectDTO> getObject() {
-        return object;
-    }
-
-    public void setObject(List<NodeObjectDTO> object) {
-        this.object = object;
-    }
-
-    @Override
-    public String toString() {
-        return "NodedataDTO{" +
-                "object=" + object +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java
deleted file mode 100644
index 908b470..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springblade.code.dto.datapush.result;
-
-
-public class ResultJsonDTO {
-    private ResultNodeDataDTO data;
-
-    public ResultNodeDataDTO getData() {
-        return data;
-    }
-
-    public void setData(ResultNodeDataDTO data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultJsonDTO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java
deleted file mode 100644
index 896a094..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.springblade.code.dto.datapush.result;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("data")
-public class ResultNodeDataDTO {
-
-    @XStreamImplicit
-    private List<ResultNodeObjectDTO> object;
-
-    public List<ResultNodeObjectDTO> getObject() {
-        return object;
-    }
-
-    public void setObject(List<ResultNodeObjectDTO> object) {
-        this.object = object;
-    }
-
-    @Override
-    public String toString() {
-        return "NodeDataDTO{" +
-                "object=" + object +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java
deleted file mode 100644
index 279d642..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.springblade.code.dto.datapush.result;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("object")
-public class ResultNodeObjectDTO {
-    /***
-     * 鏁版嵁缂栫爜
-     */
-    @XStreamAsAttribute
-    private  String code;
-    /***
-     * 鏁版嵁oid
-     */
-    @XStreamAsAttribute
-    private  String oid;
-    /***
-     * 閿欒鏍囪瘑
-     */
-    @XStreamAsAttribute
-    private String erroid;
-    /***
-     * 閿欒淇℃伅
-     */
-    @XStreamAsAttribute
-    private String msg;
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getErroid() {
-        return erroid;
-    }
-
-    public void setErroid(String erroid) {
-        this.erroid = erroid;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultNodeObjectDTO{" +
-                "code='" + code + '\'' +
-                ", oid='" + oid + '\'' +
-                ", erroid='" + erroid + '\'' +
-                ", msg='" + msg + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java
deleted file mode 100644
index bdd0018..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.springblade.code.po;
-
-import com.vci.starter.poi.annotation.ExcelColumn;
-
-/**
- * 涓婚搴撳垎绫荤殑瀵煎叆瀵煎嚭瀵硅薄
- * @author weidy
- * @date 2022-04-01
- */
-public class CodeClassifyPO implements java.io.Serializable{
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 6101784029360306020L;
-    /**
-     * 鎵�鍦ㄦ暟鎹
-     */
-    @ExcelColumn(rowIndexColumn = true,value = "")
-    private String rowIndex;
-
-
-    /**
-     * 鍒嗙被缂栧彿
-     */
-    @ExcelColumn(value="鍒嗙被缂栧彿",nullable = false)
-    private String id;
-    /**
-     * 鍒嗙被鍚嶇О
-     */
-    @ExcelColumn(value="鍒嗙被鍚嶇О",nullable = false)
-    private String name;
-
-    /**
-     * 鎻忚堪
-     */
-    @ExcelColumn(value = "鎻忚堪")
-    private String description;
-
-    /**
-     * 缂栫爜瑙勫垯缂栧彿
-     */
-    @ExcelColumn(value = "缂栫爜瑙勫垯缂栧彿")
-    private String codeRuleId;
-
-    /**
-     * 涓氬姟绫诲瀷缂栧彿
-     */
-    @ExcelColumn(value = "涓氬姟绫诲瀷缂栧彿")
-    private String btmTypeId;
-
-    /**
-     * 鏌ラ噸瑙勫垯缂栧彿
-     */
-    @ExcelColumn(value = "鏌ラ噸瑙勫垯缂栧彿")
-    private String keyRepeatRuleId;
-
-    /**
-     * 鍒嗙被璺緞
-     */
-    @ExcelColumn(value = "鍒嗙被璺緞",nullable = false)
-    private String path;
-
-    /**
-     * 鐘舵�佹枃鏈�
-     */
-    @ExcelColumn(value = "鐘舵��")
-    private String lcStatusText;
-
-    /**
-     * 鐘舵��
-     */
-    private String lcStatus;
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getRowIndex() {
-        return rowIndex;
-    }
-
-    public void setRowIndex(String rowIndex) {
-        this.rowIndex = rowIndex;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCodeRuleId() {
-        return codeRuleId;
-    }
-
-    public void setCodeRuleId(String codeRuleId) {
-        this.codeRuleId = codeRuleId;
-    }
-
-    public String getBtmTypeId() {
-        return btmTypeId;
-    }
-
-    public void setBtmTypeId(String btmTypeId) {
-        this.btmTypeId = btmTypeId;
-    }
-
-    public String getKeyRepeatRuleId() {
-        return keyRepeatRuleId;
-    }
-
-    public void setKeyRepeatRuleId(String keyRepeatRuleId) {
-        this.keyRepeatRuleId = keyRepeatRuleId;
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    public String getLcStatusText() {
-        return lcStatusText;
-    }
-
-    public void setLcStatusText(String lcStatusText) {
-        this.lcStatusText = lcStatusText;
-    }
-
-    public String getLcStatus() {
-        return lcStatus;
-    }
-
-    public void setLcStatus(String lcStatus) {
-        this.lcStatus = lcStatus;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyPO{" +
-                "rowIndex='" + rowIndex + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", description='" + description + '\'' +
-                ", codeRuleId='" + codeRuleId + '\'' +
-                ", btmTypeId='" + btmTypeId + '\'' +
-                ", keyRepeatRuleId='" + keyRepeatRuleId + '\'' +
-                ", path='" + path + '\'' +
-                ", lcStatusText='" + lcStatusText + '\'' +
-                ", lcStatus='" + lcStatus + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java
deleted file mode 100644
index 8a938e9..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java
+++ /dev/null
@@ -1,651 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeBasicSecVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118400017877L;
-
-	/**
-	* 鐮佹绫诲瀷
-	*/
-	private String sectype;
-
-
-	/**
-	* 鐮佹绫诲瀷鏄剧ず鏂囨湰
-	*/
-	private String sectypeText;
-
-	/**
-	 * 鎵�灞炵紪鐮佽鍒�
-	 */
-	private String pkCodeRule;
-
-	/**
-	 * 鐮佹鎺掑簭鍙�
-	 */
-	private Integer orderNum;
-
-	/**
-	 * 鐮佹闀垮害绫诲瀷
-	 */
-	private String codeSecLengthType;
-	/**
-	 * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String codeSecLengthTypeText;
-
-	/**
-	 * 鐮佹闀垮害
-	 */
-	private String codeSecLength;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬х殑鏂囨湰
-	 */
-	private String referAttributeName;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	private String referAttributeId;
-
-	/**
-	 * 鍙栧�艰鍒�
-	 */
-	private String getValueClass ;
-
-	//鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
-	/**
-	 * 鏃ユ湡鏍煎紡
-	 */
-	private String codeDateFormatStr;
-
-	/**
-	 * 灞傜骇绫诲瀷
-	 */
-	private String codeLevelType;
-
-	/**
-	 * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
-	 */
-	private String codeLevelTypeText;
-
-	/**
-	 * 灞傜骇鐨勫��
-	 */
-	private Integer codeLevelValue;
-
-	/**
-	 * 鍊兼埅鍙栭暱搴�
-	 */
-	private Integer valueCutLength;
-
-	/**
-	 * 瀛楃鎴彇绫诲瀷
-	 */
-	private String valueCutType;
-
-	/**
-	 * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
-	 */
-	private String valueCutTypeText;
-
-	/**
-	 * 鍙栧�肩被鍨�
-	 */
-	private String codeGetValueType;
-
-	/**
-	 * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
-	 */
-	private String codeGetValueTypeText;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
-	 */
-	private String referCodeClassifyOid;
-
-	/**
-	 * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鍚嶇О
-	 */
-	private String referCodeClassifyOidName;
-
-	/**
-	 * 寮曠敤鐨勪笟鍔$被鍨�
-	 */
-	private String referBtmId;
-
-	/**
-	 * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
-	 */
-	private String referBtmName;
-
-	/**
-	 * 鍙傜収鐨勭獥鍙i厤缃�
-	 */
-	private String referConfig;
-
-	/**
-	 * 鏄剧ず淇℃伅
-	 */
-	private String referValueInfo;
-
-	/**
-	 * 杩囨护鐨剆ql鍐呭
-	 */
-	private String filterSql ;
-
-
-	/**
-	 * 娴佹按鍙疯捣濮嬪��
-	 */
-	private String serialStart;
-
-	/**
-	 * 娴佹按鐨勬闀�
-	 */
-	private Integer serialStep;
-
-
-	/**
-	 * 缂栫爜琛ヤ綅鏂瑰紡
-	 */
-	private String codeFillType;
-
-	/**
-	 * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
-	 */
-	private String codeFillTypeText;
-
-	/**
-	 * 琛ヤ綅鏃剁殑瀛楃
-	 */
-	private String codeFillSeparator;
-
-	/**
-	 * 濉厖闀垮害
-	 */
-	private String codeFillLength;
-
-	/**
-	 * 涓婇檺
-	 */
-	private Integer codeFillLimit;
-
-	/**
-	 * 娴佹按鏄惁琛ョ爜
-	 */
-	private String codeFillFlag;
-
-	/**
-	 * 鑷畾涔夌殑娴佹按绠楁硶绫�
-	 */
-	private String customCodeSerialClass;
-
-	/**
-	 * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
-	 */
-	private String matchClassifyValueFlag;
-
-	/**
-	 * 鐖跺垎绫荤爜娈典富閿�
-	 */
-	private String parentClassifySecOid;
-
-	/**
-	 * 鐖跺垎绫荤爜娈靛悕绉�
-	 */
-	private String parentClassifySecText;
-
-
-	/**
-	 * 鏄惁鍙互涓虹┖
-	 */
-	private String nullableFlag;
-
-	/**
-	 * 鏄惁鍙備笌缂栫爜
-	 */
-	private String componentCodeFlag;
-
-	/**
-	 * 鏄惁娴佹按渚濊禆
-	 */
-	private String serialDependFlag;
-
-	/**
-	 * 鏄惁鏄剧ず
-	 */
-	private String displayFlag;
-
-	/**
-	 * 娴佹按渚濊禆椤哄簭
-	 */
-	private Integer serialDependOrder;
-
-	/**
-	 * 鍥哄畾鐮佺殑鐮佸�煎唴瀹�
-	 */
-	private List<CodeFixedValueVO> fixedValueVOList;
-
-	public String getReferCodeClassifyOidName() {
-		return referCodeClassifyOidName;
-	}
-
-	public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
-		this.referCodeClassifyOidName = referCodeClassifyOidName;
-	}
-
-	public String getReferAttributeId() {
-		return referAttributeId;
-	}
-
-	public void setReferAttributeId(String referAttributeId) {
-		this.referAttributeId = referAttributeId;
-	}
-
-	//鍒嗙被鐨勫唴瀹逛笉鑳界洿鎺ユ斁锛屽洜涓哄彲鑳藉緢澶�
-
-	public String getPkCodeRule() {
-		return pkCodeRule;
-	}
-
-	public void setPkCodeRule(String pkCodeRule) {
-		this.pkCodeRule = pkCodeRule;
-	}
-
-	public Integer getOrderNum() {
-		return orderNum;
-	}
-
-	public void setOrderNum(Integer orderNum) {
-		this.orderNum = orderNum;
-	}
-
-	public String getCodeSecLengthTypeText() {
-		return codeSecLengthTypeText;
-	}
-
-	public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
-		this.codeSecLengthTypeText = codeSecLengthTypeText;
-	}
-
-	public String getMatchClassifyValueFlag() {
-		return matchClassifyValueFlag;
-	}
-
-	public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
-		this.matchClassifyValueFlag = matchClassifyValueFlag;
-	}
-
-	public String getParentClassifySecOid() {
-		return parentClassifySecOid;
-	}
-
-	public void setParentClassifySecOid(String parentClassifySecOid) {
-		this.parentClassifySecOid = parentClassifySecOid;
-	}
-
-	public String getParentClassifySecText() {
-		return parentClassifySecText;
-	}
-
-	public void setParentClassifySecText(String parentClassifySecText) {
-		this.parentClassifySecText = parentClassifySecText;
-	}
-
-	public String getNullableFlag() {
-		return nullableFlag;
-	}
-
-	public void setNullableFlag(String nullableFlag) {
-		this.nullableFlag = nullableFlag;
-	}
-
-	public String getComponentCodeFlag() {
-		return componentCodeFlag;
-	}
-
-	public void setComponentCodeFlag(String componentCodeFlag) {
-		this.componentCodeFlag = componentCodeFlag;
-	}
-
-	public String getSerialDependFlag() {
-		return serialDependFlag;
-	}
-
-	public void setSerialDependFlag(String serialDependFlag) {
-		this.serialDependFlag = serialDependFlag;
-	}
-
-	public String getDisplayFlag() {
-		return displayFlag;
-	}
-
-	public void setDisplayFlag(String displayFlag) {
-		this.displayFlag = displayFlag;
-	}
-
-	public Integer getSerialDependOrder() {
-		return serialDependOrder;
-	}
-
-	public void setSerialDependOrder(Integer serialDependOrder) {
-		this.serialDependOrder = serialDependOrder;
-	}
-
-	/**
-	* 璁剧疆 鐮佹绫诲瀷
-	*/
-	public void setSectype (String sectype){
-		this.sectype = sectype;
-	}
-
-	public String getSectypeText() {
-		return sectypeText;
-	}
-
-	public void setSectypeText(String sectypeText) {
-		this.sectypeText = sectypeText;
-	}
-
-	public String getSectype() {
-		return sectype;
-	}
-
-	public String getCodeSecLengthType() {
-		return codeSecLengthType;
-	}
-
-	public void setCodeSecLengthType(String codeSecLengthType) {
-		this.codeSecLengthType = codeSecLengthType;
-	}
-
-	public String getCodeSecLength() {
-		return codeSecLength;
-	}
-
-	public void setCodeSecLength(String codeSecLength) {
-		this.codeSecLength = codeSecLength;
-	}
-
-	public String getGetValueClass() {
-		return getValueClass;
-	}
-
-	public void setGetValueClass(String getValueClass) {
-		this.getValueClass = getValueClass;
-	}
-
-	public String getCodeDateFormatStr() {
-		return codeDateFormatStr;
-	}
-
-	public void setCodeDateFormatStr(String codeDateFormatStr) {
-		this.codeDateFormatStr = codeDateFormatStr;
-	}
-
-	public String getCodeLevelType() {
-		return codeLevelType;
-	}
-
-	public void setCodeLevelType(String codeLevelType) {
-		this.codeLevelType = codeLevelType;
-	}
-
-	public String getCodeLevelTypeText() {
-		return codeLevelTypeText;
-	}
-
-	public void setCodeLevelTypeText(String codeLevelTypeText) {
-		this.codeLevelTypeText = codeLevelTypeText;
-	}
-
-	public Integer getCodeLevelValue() {
-		return codeLevelValue;
-	}
-
-	public void setCodeLevelValue(Integer codeLevelValue) {
-		this.codeLevelValue = codeLevelValue;
-	}
-
-	public Integer getValueCutLength() {
-		return valueCutLength;
-	}
-
-	public void setValueCutLength(Integer valueCutLength) {
-		this.valueCutLength = valueCutLength;
-	}
-
-	public String getValueCutType() {
-		return valueCutType;
-	}
-
-	public void setValueCutType(String valueCutType) {
-		this.valueCutType = valueCutType;
-	}
-
-	public String getValueCutTypeText() {
-		return valueCutTypeText;
-	}
-
-	public void setValueCutTypeText(String valueCutTypeText) {
-		this.valueCutTypeText = valueCutTypeText;
-	}
-
-	public String getCodeGetValueType() {
-		return codeGetValueType;
-	}
-
-	public void setCodeGetValueType(String codeGetValueType) {
-		this.codeGetValueType = codeGetValueType;
-	}
-
-	public String getCodeGetValueTypeText() {
-		return codeGetValueTypeText;
-	}
-
-	public void setCodeGetValueTypeText(String codeGetValueTypeText) {
-		this.codeGetValueTypeText = codeGetValueTypeText;
-	}
-
-	public String getReferCodeClassifyOid() {
-		return referCodeClassifyOid;
-	}
-
-	public void setReferCodeClassifyOid(String referCodeClassifyOid) {
-		this.referCodeClassifyOid = referCodeClassifyOid;
-	}
-
-	public String getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(String referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	public String getReferValueInfo() {
-		return referValueInfo;
-	}
-
-	public void setReferValueInfo(String referValueInfo) {
-		this.referValueInfo = referValueInfo;
-	}
-
-	public String getFilterSql() {
-		return filterSql;
-	}
-
-	public void setFilterSql(String filterSql) {
-		this.filterSql = filterSql;
-	}
-
-	public String getSerialStart() {
-		return serialStart;
-	}
-
-	public void setSerialStart(String serialStart) {
-		this.serialStart = serialStart;
-	}
-
-	public Integer getSerialStep() {
-		return serialStep;
-	}
-
-	public void setSerialStep(Integer serialStep) {
-		this.serialStep = serialStep;
-	}
-
-	public String getCodeFillType() {
-		return codeFillType;
-	}
-
-	public void setCodeFillType(String codeFillType) {
-		this.codeFillType = codeFillType;
-	}
-
-	public String getCodeFillTypeText() {
-		return codeFillTypeText;
-	}
-
-	public void setCodeFillTypeText(String codeFillTypeText) {
-		this.codeFillTypeText = codeFillTypeText;
-	}
-
-	public String getCodeFillSeparator() {
-		return codeFillSeparator;
-	}
-
-	public void setCodeFillSeparator(String codeFillSeparator) {
-		this.codeFillSeparator = codeFillSeparator;
-	}
-
-	public String getCodeFillLength() {
-		return codeFillLength;
-	}
-
-	public void setCodeFillLength(String codeFillLength) {
-		this.codeFillLength = codeFillLength;
-	}
-
-	public Integer getCodeFillLimit() {
-		return codeFillLimit;
-	}
-
-	public void setCodeFillLimit(Integer codeFillLimit) {
-		this.codeFillLimit = codeFillLimit;
-	}
-
-	public String getCodeFillFlag() {
-		return codeFillFlag;
-	}
-
-	public void setCodeFillFlag(String codeFillFlag) {
-		this.codeFillFlag = codeFillFlag;
-	}
-
-	public String getCustomCodeSerialClass() {
-		return customCodeSerialClass;
-	}
-
-	public void setCustomCodeSerialClass(String customCodeSerialClass) {
-		this.customCodeSerialClass = customCodeSerialClass;
-	}
-
-
-	public List<CodeFixedValueVO> getFixedValueVOList() {
-		return fixedValueVOList;
-	}
-
-	public void setFixedValueVOList(List<CodeFixedValueVO> fixedValueVOList) {
-		this.fixedValueVOList = fixedValueVOList;
-	}
-
-	public String getReferAttributeName() {
-		return referAttributeName;
-	}
-
-	public void setReferAttributeName(String referAttributeName) {
-		this.referAttributeName = referAttributeName;
-	}
-
-	public String getReferBtmId() {
-		return referBtmId;
-	}
-
-	public void setReferBtmId(String referBtmId) {
-		this.referBtmId = referBtmId;
-	}
-
-	public String getReferBtmName() {
-		return referBtmName;
-	}
-
-	public void setReferBtmName(String referBtmName) {
-		this.referBtmName = referBtmName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeBasicSecVO{" +
-				"sectype='" + sectype + '\'' +
-				", sectypeText='" + sectypeText + '\'' +
-				", pkCodeRule='" + pkCodeRule + '\'' +
-				", orderNum=" + orderNum +
-				", codeSecLengthType='" + codeSecLengthType + '\'' +
-				", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
-				", codeSecLength='" + codeSecLength + '\'' +
-				", referAttributeName='" + referAttributeName + '\'' +
-				", referAttributeId='" + referAttributeId + '\'' +
-				", getValueClass='" + getValueClass + '\'' +
-				", codeDateFormatStr='" + codeDateFormatStr + '\'' +
-				", codeLevelType='" + codeLevelType + '\'' +
-				", codeLevelTypeText='" + codeLevelTypeText + '\'' +
-				", codeLevelValue=" + codeLevelValue +
-				", valueCutLength=" + valueCutLength +
-				", valueCutType='" + valueCutType + '\'' +
-				", valueCutTypeText='" + valueCutTypeText + '\'' +
-				", codeGetValueType='" + codeGetValueType + '\'' +
-				", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
-				", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
-				", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
-				", referBtmId='" + referBtmId + '\'' +
-				", referBtmName='" + referBtmName + '\'' +
-				", referConfig='" + referConfig + '\'' +
-				", referValueInfo='" + referValueInfo + '\'' +
-				", filterSql='" + filterSql + '\'' +
-				", serialStart='" + serialStart + '\'' +
-				", serialStep=" + serialStep +
-				", codeFillType='" + codeFillType + '\'' +
-				", codeFillTypeText='" + codeFillTypeText + '\'' +
-				", codeFillSeparator='" + codeFillSeparator + '\'' +
-				", codeFillLength='" + codeFillLength + '\'' +
-				", codeFillLimit=" + codeFillLimit +
-				", codeFillFlag='" + codeFillFlag + '\'' +
-				", customCodeSerialClass='" + customCodeSerialClass + '\'' +
-				", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
-				", parentClassifySecOid='" + parentClassifySecOid + '\'' +
-				", parentClassifySecText='" + parentClassifySecText + '\'' +
-				", nullableFlag='" + nullableFlag + '\'' +
-				", componentCodeFlag='" + componentCodeFlag + '\'' +
-				", serialDependFlag='" + serialDependFlag + '\'' +
-				", displayFlag='" + displayFlag + '\'' +
-				", serialDependOrder=" + serialDependOrder +
-				", fixedValueVOList=" + fixedValueVOList +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java
deleted file mode 100644
index 2aefd38..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeButtonVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118774202884L;
-
-	/**
-	* 鎸夐挳鐨勫浘鏍囨牱寮�
-	*/
-	private String iconcls;
-
-
-	/**
-	* 鎵ц鐨刯s鍐呭
-	*/
-	private String executejs;
-
-
-	/**
-	* 鎸夐挳鐨勪綅缃�
-	*/
-	private String usedpositiontype;
-
-
-	/**
-	* 鎸夐挳鐨勪綅缃樉绀烘枃鏈�
-	*/
-	private String usedpositiontypeText;
-
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勫浘鏍囨牱寮�
-	 */
-	public String getIconcls (){
-		return iconcls;
-	}
-
-	/**
-	* 璁剧疆 鎸夐挳鐨勫浘鏍囨牱寮�
-	*/
-	public void setIconcls (String iconcls){
-		this.iconcls = iconcls;
-	}
-	/**
-	 * 鑾峰彇 鎵ц鐨刯s鍐呭
-	 */
-	public String getExecutejs (){
-		return executejs;
-	}
-
-	/**
-	* 璁剧疆 鎵ц鐨刯s鍐呭
-	*/
-	public void setExecutejs (String executejs){
-		this.executejs = executejs;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勪綅缃�
-	 */
-	public String getUsedpositiontype (){
-		return usedpositiontype;
-	}
-
-	/**
-	* 璁剧疆 鎸夐挳鐨勪綅缃�
-	*/
-	public void setUsedpositiontype (String usedpositiontype){
-		this.usedpositiontype = usedpositiontype;
-	}
-
-	public String getUsedpositiontypeText() {
-		return usedpositiontypeText;
-	}
-
-	public void setUsedpositiontypeText(String usedpositiontypeText) {
-		this.usedpositiontypeText = usedpositiontypeText;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeButtonVO{" +
-				"iconcls='" + iconcls + '\'' +
-				", executejs='" + executejs + '\'' +
-				", usedpositiontype='" + usedpositiontype + '\'' +
-				", usedpositiontypeText='" + usedpositiontypeText + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java
deleted file mode 100644
index 499cdfb..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撳垎绫绘墍闇�灞炴�ч泦鏄剧ず瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyAttributeVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707120914631514L;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿�
-	*/
-	private String codeclassifyoid;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	*/
-	private String codeclassifyoidName;
-
-
-	/**
-	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
-	 */
-	public String getCodeclassifyoid (){
-		return codeclassifyoid;
-	}
-
-	/**
-	* 璁剧疆 涓婚搴撳垎绫讳富閿�
-	*/
-	public void setCodeclassifyoid (String codeclassifyoid){
-		this.codeclassifyoid = codeclassifyoid;
-	}
-	/**
-	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	public String getCodeclassifyoidName (){
-		return codeclassifyoidName;
-	}
-
-	/**
-	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	*/
-	public void setCodeclassifyoidName (String codeclassifyoidName){
-		this.codeclassifyoidName = codeclassifyoidName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyAttributeVO{" +
-		"codeclassifyoid='" + codeclassifyoid +"'," +
-		"codeclassifyoidName='" + codeclassifyoidName +"'," +
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java
deleted file mode 100644
index c7df7c5..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyProcessTempVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118047426785L;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿�
-	*/
-	private String codeclassifyoid;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	*/
-	private String codeclassifyoidName;
-
-	/**
-	 * 鎵�灞炴ā鏉�
-	 */
-	private String classifyTemplateOid;
-
-	/**
-	* 娴佺▼妯℃澘鐢ㄩ��
-	*/
-	private String codeprocessuse;
-
-	/**
-	 * 娴佺▼妯℃澘鐢ㄩ�斿悕绉�
-	 */
-	private String codeprocessuseText;
-
-	/**
-	 * 娴佺▼妯℃澘鐨勭増鏈�
-	 */
-	private String processVersion;
-
-	/**
-	 * 鍏宠仈鐨勬ā鏉垮睘鎬х殑涓婚敭闆嗗悎瀛楃涓�
-	 */
-	private String codeTempAttrOidArr;
-
-	/**
-	 * 鍏宠仈鐨勬ā鏉垮睘鎬х殑鍚嶇О闆嗗悎瀛楃涓�
-	 */
-	private String codeTempAttrOidArrName;
-
-	/**
-	 * 鍏宠仈鐨勬ā鏉垮睘鎬�
-	 */
-	private List<CodeClassifyTemplateAttrVO> attrList;
-
-	/**
-	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
-	 */
-	public String getCodeclassifyoid (){
-		return codeclassifyoid;
-	}
-
-	/**
-	* 璁剧疆 涓婚搴撳垎绫讳富閿�
-	*/
-	public void setCodeclassifyoid (String codeclassifyoid){
-		this.codeclassifyoid = codeclassifyoid;
-	}
-	/**
-	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	public String getCodeclassifyoidName (){
-		return codeclassifyoidName;
-	}
-
-	/**
-	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	*/
-	public void setCodeclassifyoidName (String codeclassifyoidName){
-		this.codeclassifyoidName = codeclassifyoidName;
-	}
-	/**
-	 * 鑾峰彇 娴佺▼妯℃澘鐢ㄩ��
-	 */
-	public String getCodeprocessuse (){
-		return codeprocessuse;
-	}
-
-	/**
-	* 璁剧疆 娴佺▼妯℃澘鐢ㄩ��
-	*/
-	public void setCodeprocessuse (String codeprocessuse){
-		this.codeprocessuse = codeprocessuse;
-	}
-
-	public String getCodeprocessuseText() {
-		return codeprocessuseText;
-	}
-
-	public void setCodeprocessuseText(String codeprocessuseText) {
-		this.codeprocessuseText = codeprocessuseText;
-	}
-
-	public String getClassifyTemplateOid() {
-		return classifyTemplateOid;
-	}
-
-	public void setClassifyTemplateOid(String classifyTemplateOid) {
-		this.classifyTemplateOid = classifyTemplateOid;
-	}
-
-	public String getProcessVersion() {
-		return processVersion;
-	}
-
-	public void setProcessVersion(String processVersion) {
-		this.processVersion = processVersion;
-	}
-
-	public List<CodeClassifyTemplateAttrVO> getAttrList() {
-		return attrList;
-	}
-
-	public void setAttrList(List<CodeClassifyTemplateAttrVO> attrList) {
-		this.attrList = attrList;
-	}
-
-	public String getCodeTempAttrOidArr() {
-		return codeTempAttrOidArr;
-	}
-
-	public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
-		this.codeTempAttrOidArr = codeTempAttrOidArr;
-	}
-
-	public String getCodeTempAttrOidArrName() {
-		return codeTempAttrOidArrName;
-	}
-
-	public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
-		this.codeTempAttrOidArrName = codeTempAttrOidArrName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyProcessTempVO{" +
-				"codeclassifyoid='" + codeclassifyoid + '\'' +
-				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
-				", classifyTemplateOid='" + classifyTemplateOid + '\'' +
-				", codeprocessuse='" + codeprocessuse + '\'' +
-				", codeprocessuseText='" + codeprocessuseText + '\'' +
-				", processVersion='" + processVersion + '\'' +
-				", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
-				", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
-				", attrList=" + attrList +
-				'}' + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java
deleted file mode 100644
index 1ffc7b4..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
- *
- * @author weidy
- * @date 2022-03-10
- */
-public class CodeClassifyTempMapItemVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707120984500249L;
-
-	/**
-	* 鍒嗙被妯℃澘灞炴�т富閿�
-	*/
-	private String classifytemplateattroid;
-
-	/**
-	 * 妯℃澘灞炴�ey
-	 */
-	private String classifyAttrId;
-
-	/**
-	 * 妯℃澘灞炴�у悕绉�
-	 */
-	private String classifyAttrName;
-
-	/**
-	* 鏄犲皠瑙勫垯涓婚敭
-	*/
-	private String classifytemplatemapoid;
-
-	/**
-	* 鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
-	*/
-	private String classifytemplatemapoidName;
-
-	/**
-	* 闆嗗洟鐮佸睘鎬ey
-	*/
-	private String groupcodeattrid;
-
-
-	/**
-	* 闆嗗洟鐮佸睘鎬у悕绉�
-	*/
-	private String groupcodeattrname;
-
-
-	/**
-	* 杞崲鐨勮嚜瀹氫箟绫�
-	*/
-	private String switchclassname;
-
-
-	/**
-	* 杞崲鍏紡
-	*/
-	private String switcheval;
-
-
-	/**
-	* 鐩爣绔殑鏃堕棿鏍煎紡
-	*/
-	private String targetdateformat;
-
-
-
-	/**
-	 * 鑾峰彇 鍒嗙被妯℃澘灞炴�т富閿�
-	 */
-	public String getClassifytemplateattroid (){
-		return classifytemplateattroid;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被妯℃澘灞炴�т富閿�
-	*/
-	public void setClassifytemplateattroid (String classifytemplateattroid){
-		this.classifytemplateattroid = classifytemplateattroid;
-	}
-	/**
-	 * 鑾峰彇 鏄犲皠瑙勫垯涓婚敭
-	 */
-	public String getClassifytemplatemapoid (){
-		return classifytemplatemapoid;
-	}
-
-	/**
-	* 璁剧疆 鏄犲皠瑙勫垯涓婚敭
-	*/
-	public void setClassifytemplatemapoid (String classifytemplatemapoid){
-		this.classifytemplatemapoid = classifytemplatemapoid;
-	}
-	/**
-	 * 鑾峰彇鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getClassifytemplatemapoidName (){
-		return classifytemplatemapoidName;
-	}
-
-	/**
-	* 璁剧疆鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
-	*/
-	public void setClassifytemplatemapoidName (String classifytemplatemapoidName){
-		this.classifytemplatemapoidName = classifytemplatemapoidName;
-	}
-	/**
-	 * 鑾峰彇 闆嗗洟鐮佸睘鎬ey
-	 */
-	public String getGroupcodeattrid (){
-		return groupcodeattrid;
-	}
-
-	/**
-	* 璁剧疆 闆嗗洟鐮佸睘鎬ey
-	*/
-	public void setGroupcodeattrid (String groupcodeattrid){
-		this.groupcodeattrid = groupcodeattrid;
-	}
-	/**
-	 * 鑾峰彇 闆嗗洟鐮佸睘鎬у悕绉�
-	 */
-	public String getGroupcodeattrname (){
-		return groupcodeattrname;
-	}
-
-	/**
-	* 璁剧疆 闆嗗洟鐮佸睘鎬у悕绉�
-	*/
-	public void setGroupcodeattrname (String groupcodeattrname){
-		this.groupcodeattrname = groupcodeattrname;
-	}
-	/**
-	 * 鑾峰彇 杞崲鐨勮嚜瀹氫箟绫�
-	 */
-	public String getSwitchclassname (){
-		return switchclassname;
-	}
-
-	/**
-	* 璁剧疆 杞崲鐨勮嚜瀹氫箟绫�
-	*/
-	public void setSwitchclassname (String switchclassname){
-		this.switchclassname = switchclassname;
-	}
-	/**
-	 * 鑾峰彇 杞崲鍏紡
-	 */
-	public String getSwitcheval (){
-		return switcheval;
-	}
-
-	/**
-	* 璁剧疆 杞崲鍏紡
-	*/
-	public void setSwitcheval (String switcheval){
-		this.switcheval = switcheval;
-	}
-	/**
-	 * 鑾峰彇 鐩爣绔殑鏃堕棿鏍煎紡
-	 */
-	public String getTargetdateformat (){
-		return targetdateformat;
-	}
-
-	/**
-	* 璁剧疆 鐩爣绔殑鏃堕棿鏍煎紡
-	*/
-	public void setTargetdateformat (String targetdateformat){
-		this.targetdateformat = targetdateformat;
-	}
-
-	public String getClassifyAttrId() {
-		return classifyAttrId;
-	}
-
-	public void setClassifyAttrId(String classifyAttrId) {
-		this.classifyAttrId = classifyAttrId;
-	}
-
-	public String getClassifyAttrName() {
-		return classifyAttrName;
-	}
-
-	public void setClassifyAttrName(String classifyAttrName) {
-		this.classifyAttrName = classifyAttrName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTempMapItemVO{" +
-				"classifytemplateattroid='" + classifytemplateattroid + '\'' +
-				", classifyAttrId='" + classifyAttrId + '\'' +
-				", classifyAttrName='" + classifyAttrName + '\'' +
-				", classifytemplatemapoid='" + classifytemplatemapoid + '\'' +
-				", classifytemplatemapoidName='" + classifytemplatemapoidName + '\'' +
-				", groupcodeattrid='" + groupcodeattrid + '\'' +
-				", groupcodeattrname='" + groupcodeattrname + '\'' +
-				", switchclassname='" + switchclassname + '\'' +
-				", switcheval='" + switcheval + '\'' +
-				", targetdateformat='" + targetdateformat + '\'' +
-				'}' + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
deleted file mode 100644
index 3e81f47..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
+++ /dev/null
@@ -1,1071 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateAttrVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707119806919617L;
-
-	/**
-	* 鎵�灞炴ā鏉�
-	*/
-	private String classifytemplateoid;
-
-	/**
-	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	private String classifytemplateoidName;
-
-	/**
-	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	*/
-	private String classifyattributeoid;
-
-	/**
-	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	*/
-	private String classifyattributeoidName;
-
-	/**
-	* 灞炴�х殑绫诲瀷
-	*/
-	private String attributedatatype;
-
-	/**
-	 * 灞炴�х被鍨嬫樉绀�
-	 */
-	private String attributeDataTypeText;
-
-
-	/**
-	* 鏄惁鍏抽敭灞炴��
-	*/
-	private String keyattrflag;
-
-
-	/**
-	* 鏄惁蹇�熸煡璇㈠睘鎬�
-	*/
-	private String queryattrflag;
-
-
-	/**
-	* 鏄惁楂樼骇鏌ヨ灞炴��
-	*/
-	private String seniorqueryattrflag;
-
-
-	/**
-	* 鐩镐技鏌ラ噸灞炴��
-	*/
-	private String samerepeatattrflag;
-
-
-	/**
-	* 鏄惁鎺掑簭
-	*/
-	private String sortattrflag;
-
-
-	/**
-	* 鏄惁鐢熸垚浜岀淮鐮�
-	*/
-	private String qrcodeflag;
-
-
-	/**
-	* 鏄惁鐢熸垚涓�缁寸爜
-	*/
-	private String barcodeflag;
-
-
-	/**
-	* 缁勫悎瑙勫垯
-	*/
-	private String componentrule;
-
-
-	/**
-	* 楠岃瘉瑙勫垯
-	*/
-	private String verifyrule;
-
-
-	/**
-	* 鍒嗙被娉ㄥ叆灞傜骇
-	*/
-	private String classifyinvokelevel;
-
-
-	/**
-	* 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	*/
-	private String classifyinvokeattr;
-
-
-	/**
-	* 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	*/
-	private String classifyinvokeattrname;
-
-
-	/**
-	* 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	*/
-	private String classifyinvokeeditflag;
-
-
-	/**
-	* 鐮佸�煎簭鍙�
-	*/
-	private Integer ordernum;
-
-
-	/**
-	* 琛ㄥ崟閲屾槸鍚︽樉绀�
-	*/
-	private String formdisplayflag;
-
-
-	/**
-	* 鍒楄〃閲屾槸鍚︽樉绀�
-	*/
-	private String tabledisplayflag;
-
-
-	/**
-	* 鎵�灞炲睘鎬у垎缁�
-	*/
-	private String attributegroup;
-
-
-	/**
-	* 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	*/
-	private String enumid;
-
-
-	/**
-	* 浣跨敤鏋氫妇涓枃鍚嶇О
-	*/
-	private String enumname;
-
-
-	/**
-	* 鏋氫妇鏄惁鍙互缂栬緫
-	*/
-	private String enumeditflag;
-
-
-	/**
-	* 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	*/
-	private String referbtmid;
-
-
-	/**
-	* 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	*/
-	private String referbtmname;
-
-
-	/**
-	* 鍙傜収绐楀彛閰嶇疆
-	*/
-	private String referConfig;
-
-
-	/**
-	* 鏄惁蹇呰緭
-	*/
-	private String requireflag;
-
-
-	/**
-	* 鏄惁鍙
-	*/
-	private String readonlyflag;
-
-
-	/**
-	* 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	*/
-	private Integer controllength;
-
-
-	/**
-	* 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	*/
-	private String formdisplaystyle;
-
-
-	/**
-	* 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	*/
-	private String tabledisplaystyle;
-
-
-	/**
-	* 琛ㄥ崟涓秴閾炬帴鍐呭
-	*/
-	private String formhref;
-
-
-	/**
-	* 琛ㄦ牸涓秴閾炬帴鍐呭
-	*/
-	private String tablehref;
-
-
-	/**
-	* 灏忔暟绮惧害
-	*/
-	private Integer precisionlength;
-
-
-	/**
-	* 灏忔暟鍒诲害
-	*/
-	private Integer scalelength;
-
-
-	/**
-	* 鍙栧�艰寖鍥�
-	*/
-	private String valuearea;
-
-
-	/**
-	* 鏃堕棿鏍煎紡
-	*/
-	private String codedateformat;
-
-
-	/**
-	* 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	*/
-	private String tabledisplayjs;
-
-
-	/**
-	* 鏄惁鏄剧ず澶氳鏂囨湰
-	*/
-	private String textareaflag;
-
-
-	/**
-	* 棰勮鍥�
-	*/
-	private String imageflag;
-
-
-	/**
-	* 榛樿鍊�
-	*/
-	private String defaultvalue;
-
-
-	/**
-	* 鍓嶇紑
-	*/
-	private String prefixvalue;
-
-
-	/**
-	* 鍚庣紑
-	*/
-	private String suffixvalue;
-
-
-	/**
-	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	*/
-	private String filtersourceattr;
-
-
-	/**
-	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	*/
-	private String filtersourceattrname;
-
-	/**
-	 * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
-	 */
-	private String enumString;
-
-	/**
-	 * 灞炴�у垪琛ㄤ腑鐨勫搴�
-	 */
-	private Integer attrTableWidth;
-
-	/**
-	 * 璇存槑
-	 */
-	@Column(columnDefinition = "璇存槑")
-	private String explain;
-
-	/**
-	 * 閫夋嫨搴撴爣璇�
-	 */
-	@Column(columnDefinition = "閫夋嫨搴撴爣璇�")
-	private String libraryIdentification;
-
-	/**
-	 * 绾ц仈灞炴�х紪鍙�
-	 */
-	@Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
-	private String parentCode;
-
-	/**
-	 * 绾ц仈灞炴�у悕绉�
-	 */
-	@Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
-	private String parentName;
-
-	/**
-	 * 绾ц仈鏌ヨ灞炴��
-	 */
-	@Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
-	private String parentQueryAttr;
-
-	public String getExplain() {
-		return explain;
-	}
-
-	public void setExplain(String explain) {
-		this.explain = explain;
-	}
-
-	public String getLibraryIdentification() {
-		return libraryIdentification;
-	}
-
-	public void setLibraryIdentification(String libraryIdentification) {
-		this.libraryIdentification = libraryIdentification;
-	}
-
-	public String getParentCode() {
-		return parentCode;
-	}
-
-	public void setParentCode(String parentCode) {
-		this.parentCode = parentCode;
-	}
-
-	public String getParentName() {
-		return parentName;
-	}
-
-	public void setParentName(String parentName) {
-		this.parentName = parentName;
-	}
-
-	public String getParentQueryAttr() {
-		return parentQueryAttr;
-	}
-
-	public void setParentQueryAttr(String parentQueryAttr) {
-		this.parentQueryAttr = parentQueryAttr;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炴ā鏉�
-	*/
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	 */
-	public String getClassifyattributeoid (){
-		return classifyattributeoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	*/
-	public void setClassifyattributeoid (String classifyattributeoid){
-		this.classifyattributeoid = classifyattributeoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	 */
-	public String getClassifyattributeoidName (){
-		return classifyattributeoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	*/
-	public void setClassifyattributeoidName (String classifyattributeoidName){
-		this.classifyattributeoidName = classifyattributeoidName;
-	}
-	/**
-	 * 鑾峰彇 灞炴�х殑绫诲瀷
-	 */
-	public String getAttributedatatype (){
-		return attributedatatype;
-	}
-
-	/**
-	* 璁剧疆 灞炴�х殑绫诲瀷
-	*/
-	public void setAttributedatatype (String attributedatatype){
-		this.attributedatatype = attributedatatype;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
-	 */
-	public String getKeyattrflag (){
-		return keyattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鍏抽敭灞炴��
-	*/
-	public void setKeyattrflag (String keyattrflag){
-		this.keyattrflag = keyattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
-	 */
-	public String getQueryattrflag (){
-		return queryattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
-	*/
-	public void setQueryattrflag (String queryattrflag){
-		this.queryattrflag = queryattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
-	 */
-	public String getSeniorqueryattrflag (){
-		return seniorqueryattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
-	*/
-	public void setSeniorqueryattrflag (String seniorqueryattrflag){
-		this.seniorqueryattrflag = seniorqueryattrflag;
-	}
-	/**
-	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
-	 */
-	public String getSamerepeatattrflag (){
-		return samerepeatattrflag;
-	}
-
-	/**
-	* 璁剧疆 鐩镐技鏌ラ噸灞炴��
-	*/
-	public void setSamerepeatattrflag (String samerepeatattrflag){
-		this.samerepeatattrflag = samerepeatattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鎺掑簭
-	 */
-	public String getSortattrflag (){
-		return sortattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鎺掑簭
-	*/
-	public void setSortattrflag (String sortattrflag){
-		this.sortattrflag = sortattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
-	 */
-	public String getQrcodeflag (){
-		return qrcodeflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
-	*/
-	public void setQrcodeflag (String qrcodeflag){
-		this.qrcodeflag = qrcodeflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
-	 */
-	public String getBarcodeflag (){
-		return barcodeflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
-	*/
-	public void setBarcodeflag (String barcodeflag){
-		this.barcodeflag = barcodeflag;
-	}
-	/**
-	 * 鑾峰彇 缁勫悎瑙勫垯
-	 */
-	public String getComponentrule (){
-		return componentrule;
-	}
-
-	/**
-	* 璁剧疆 缁勫悎瑙勫垯
-	*/
-	public void setComponentrule (String componentrule){
-		this.componentrule = componentrule;
-	}
-	/**
-	 * 鑾峰彇 楠岃瘉瑙勫垯
-	 */
-	public String getVerifyrule (){
-		return verifyrule;
-	}
-
-	/**
-	* 璁剧疆 楠岃瘉瑙勫垯
-	*/
-	public void setVerifyrule (String verifyrule){
-		this.verifyrule = verifyrule;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
-	 */
-	public String getClassifyinvokelevel (){
-		return classifyinvokelevel;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
-	*/
-	public void setClassifyinvokelevel (String classifyinvokelevel){
-		this.classifyinvokelevel = classifyinvokelevel;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattr (){
-		return classifyinvokeattr;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	*/
-	public void setClassifyinvokeattr (String classifyinvokeattr){
-		this.classifyinvokeattr = classifyinvokeattr;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattrname (){
-		return classifyinvokeattrname;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	*/
-	public void setClassifyinvokeattrname (String classifyinvokeattrname){
-		this.classifyinvokeattrname = classifyinvokeattrname;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	 */
-	public String getClassifyinvokeeditflag (){
-		return classifyinvokeeditflag;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	*/
-	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
-		this.classifyinvokeeditflag = classifyinvokeeditflag;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 鐮佸�煎簭鍙�
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
-	 */
-	public String getFormdisplayflag (){
-		return formdisplayflag;
-	}
-
-	/**
-	* 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
-	*/
-	public void setFormdisplayflag (String formdisplayflag){
-		this.formdisplayflag = formdisplayflag;
-	}
-	/**
-	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
-	 */
-	public String getTabledisplayflag (){
-		return tabledisplayflag;
-	}
-
-	/**
-	* 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
-	*/
-	public void setTabledisplayflag (String tabledisplayflag){
-		this.tabledisplayflag = tabledisplayflag;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
-	 */
-	public String getAttributegroup (){
-		return attributegroup;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炲睘鎬у垎缁�
-	*/
-	public void setAttributegroup (String attributegroup){
-		this.attributegroup = attributegroup;
-	}
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	 */
-	public String getEnumid (){
-		return enumid;
-	}
-
-	/**
-	* 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	*/
-	public void setEnumid (String enumid){
-		this.enumid = enumid;
-	}
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
-	 */
-	public String getEnumname (){
-		return enumname;
-	}
-
-	/**
-	* 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
-	*/
-	public void setEnumname (String enumname){
-		this.enumname = enumname;
-	}
-	/**
-	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
-	 */
-	public String getEnumeditflag (){
-		return enumeditflag;
-	}
-
-	/**
-	* 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
-	*/
-	public void setEnumeditflag (String enumeditflag){
-		this.enumeditflag = enumeditflag;
-	}
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	 */
-	public String getReferbtmid (){
-		return referbtmid;
-	}
-
-	/**
-	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	*/
-	public void setReferbtmid (String referbtmid){
-		this.referbtmid = referbtmid;
-	}
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	public String getReferbtmname (){
-		return referbtmname;
-	}
-
-	/**
-	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	*/
-	public void setReferbtmname (String referbtmname){
-		this.referbtmname = referbtmname;
-	}
-
-	public String getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(String referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	/**
-
-	/**
-	 * 鑾峰彇 鏄惁蹇呰緭
-	 */
-	public String getRequireflag (){
-		return requireflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇呰緭
-	*/
-	public void setRequireflag (String requireflag){
-		this.requireflag = requireflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鍙
-	 */
-	public String getReadonlyflag (){
-		return readonlyflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鍙
-	*/
-	public void setReadonlyflag (String readonlyflag){
-		this.readonlyflag = readonlyflag;
-	}
-	/**
-	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	 */
-	public Integer getControllength (){
-		return controllength;
-	}
-
-	/**
-	* 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	*/
-	public void setControllength (Integer controllength){
-		this.controllength = controllength;
-	}
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getFormdisplaystyle (){
-		return formdisplaystyle;
-	}
-
-	/**
-	* 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	*/
-	public void setFormdisplaystyle (String formdisplaystyle){
-		this.formdisplaystyle = formdisplaystyle;
-	}
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getTabledisplaystyle (){
-		return tabledisplaystyle;
-	}
-
-	/**
-	* 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	*/
-	public void setTabledisplaystyle (String tabledisplaystyle){
-		this.tabledisplaystyle = tabledisplaystyle;
-	}
-	/**
-	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
-	 */
-	public String getFormhref (){
-		return formhref;
-	}
-
-	/**
-	* 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
-	*/
-	public void setFormhref (String formhref){
-		this.formhref = formhref;
-	}
-	/**
-	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
-	 */
-	public String getTablehref (){
-		return tablehref;
-	}
-
-	/**
-	* 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
-	*/
-	public void setTablehref (String tablehref){
-		this.tablehref = tablehref;
-	}
-	/**
-	 * 鑾峰彇 灏忔暟绮惧害
-	 */
-	public Integer getPrecisionlength (){
-		return precisionlength;
-	}
-
-	/**
-	* 璁剧疆 灏忔暟绮惧害
-	*/
-	public void setPrecisionlength (Integer precisionlength){
-		this.precisionlength = precisionlength;
-	}
-	/**
-	 * 鑾峰彇 灏忔暟鍒诲害
-	 */
-	public Integer getScalelength (){
-		return scalelength;
-	}
-
-	/**
-	* 璁剧疆 灏忔暟鍒诲害
-	*/
-	public void setScalelength (Integer scalelength){
-		this.scalelength = scalelength;
-	}
-	/**
-	 * 鑾峰彇 鍙栧�艰寖鍥�
-	 */
-	public String getValuearea (){
-		return valuearea;
-	}
-
-	/**
-	* 璁剧疆 鍙栧�艰寖鍥�
-	*/
-	public void setValuearea (String valuearea){
-		this.valuearea = valuearea;
-	}
-	/**
-	 * 鑾峰彇 鏃堕棿鏍煎紡
-	 */
-	public String getCodedateformat (){
-		return codedateformat;
-	}
-
-	/**
-	* 璁剧疆 鏃堕棿鏍煎紡
-	*/
-	public void setCodedateformat (String codedateformat){
-		this.codedateformat = codedateformat;
-	}
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	 */
-	public String getTabledisplayjs (){
-		return tabledisplayjs;
-	}
-
-	/**
-	* 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	*/
-	public void setTabledisplayjs (String tabledisplayjs){
-		this.tabledisplayjs = tabledisplayjs;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
-	 */
-	public String getTextareaflag (){
-		return textareaflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
-	*/
-	public void setTextareaflag (String textareaflag){
-		this.textareaflag = textareaflag;
-	}
-	/**
-	 * 鑾峰彇 棰勮鍥�
-	 */
-	public String getImageflag (){
-		return imageflag;
-	}
-
-	/**
-	* 璁剧疆 棰勮鍥�
-	*/
-	public void setImageflag (String imageflag){
-		this.imageflag = imageflag;
-	}
-	/**
-	 * 鑾峰彇 榛樿鍊�
-	 */
-	public String getDefaultvalue (){
-		return defaultvalue;
-	}
-
-	/**
-	* 璁剧疆 榛樿鍊�
-	*/
-	public void setDefaultvalue (String defaultvalue){
-		this.defaultvalue = defaultvalue;
-	}
-	/**
-	 * 鑾峰彇 鍓嶇紑
-	 */
-	public String getPrefixvalue (){
-		return prefixvalue;
-	}
-
-	/**
-	* 璁剧疆 鍓嶇紑
-	*/
-	public void setPrefixvalue (String prefixvalue){
-		this.prefixvalue = prefixvalue;
-	}
-	/**
-	 * 鑾峰彇 鍚庣紑
-	 */
-	public String getSuffixvalue (){
-		return suffixvalue;
-	}
-
-	/**
-	* 璁剧疆 鍚庣紑
-	*/
-	public void setSuffixvalue (String suffixvalue){
-		this.suffixvalue = suffixvalue;
-	}
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	 */
-	public String getFiltersourceattr (){
-		return filtersourceattr;
-	}
-
-	public String getAttributeDataTypeText() {
-		return attributeDataTypeText;
-	}
-
-	public void setAttributeDataTypeText(String attributeDataTypeText) {
-		this.attributeDataTypeText = attributeDataTypeText;
-	}
-
-	/**
-	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	*/
-	public void setFiltersourceattr (String filtersourceattr){
-		this.filtersourceattr = filtersourceattr;
-	}
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	 */
-	public String getFiltersourceattrname (){
-		return filtersourceattrname;
-	}
-
-	/**
-	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	*/
-	public void setFiltersourceattrname (String filtersourceattrname){
-		this.filtersourceattrname = filtersourceattrname;
-	}
-
-	public String getEnumString() {
-		return enumString;
-	}
-
-	public void setEnumString(String enumString) {
-		this.enumString = enumString;
-	}
-
-
-	public Integer getAttrTableWidth() {
-		return attrTableWidth;
-	}
-
-	public void setAttrTableWidth(Integer attrTableWidth) {
-		this.attrTableWidth = attrTableWidth;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateAttrVO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifyattributeoid='" + classifyattributeoid + '\'' +
-				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
-				", attributedatatype='" + attributedatatype + '\'' +
-				", attributeDataTypeText='" + attributeDataTypeText + '\'' +
-				", keyattrflag='" + keyattrflag + '\'' +
-				", queryattrflag='" + queryattrflag + '\'' +
-				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
-				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
-				", sortattrflag='" + sortattrflag + '\'' +
-				", qrcodeflag='" + qrcodeflag + '\'' +
-				", barcodeflag='" + barcodeflag + '\'' +
-				", componentrule='" + componentrule + '\'' +
-				", verifyrule='" + verifyrule + '\'' +
-				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
-				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
-				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
-				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
-				", ordernum=" + ordernum +
-				", formdisplayflag='" + formdisplayflag + '\'' +
-				", tabledisplayflag='" + tabledisplayflag + '\'' +
-				", attributegroup='" + attributegroup + '\'' +
-				", enumid='" + enumid + '\'' +
-				", enumname='" + enumname + '\'' +
-				", enumeditflag='" + enumeditflag + '\'' +
-				", referbtmid='" + referbtmid + '\'' +
-				", referbtmname='" + referbtmname + '\'' +
-				", referConfig='" + referConfig + '\'' +
-				", requireflag='" + requireflag + '\'' +
-				", readonlyflag='" + readonlyflag + '\'' +
-				", controllength=" + controllength +
-				", formdisplaystyle='" + formdisplaystyle + '\'' +
-				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
-				", formhref='" + formhref + '\'' +
-				", tablehref='" + tablehref + '\'' +
-				", precisionlength=" + precisionlength +
-				", scalelength=" + scalelength +
-				", valuearea='" + valuearea + '\'' +
-				", codedateformat='" + codedateformat + '\'' +
-				", tabledisplayjs='" + tabledisplayjs + '\'' +
-				", textareaflag='" + textareaflag + '\'' +
-				", imageflag='" + imageflag + '\'' +
-				", defaultvalue='" + defaultvalue + '\'' +
-				", prefixvalue='" + prefixvalue + '\'' +
-				", suffixvalue='" + suffixvalue + '\'' +
-				", filtersourceattr='" + filtersourceattr + '\'' +
-				", filtersourceattrname='" + filtersourceattrname + '\'' +
-				", enumString='" + enumString + '\'' +
-				", attrTableWidth=" + attrTableWidth +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
deleted file mode 100644
index 13fe415..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateButtonVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118535405378L;
-
-	/**
-	* 鎵�灞炴ā鏉�
-	*/
-	private String classifytemplateoid;
-
-	/**
-	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	private String classifytemplateoidName;
-
-	/**
-	* 鎸夐挳鐨勪富閿�
-	*/
-	private String classifybuttonoid;
-
-	/**
-	* 鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	*/
-	private String classifybuttonoidName;
-
-	/**
-	* 鎸夐挳鐢ㄩ��
-	*/
-	private String buttonuse;
-
-	/**
-	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
-	 */
-	private String buttonUseText;
-
-
-	/**
-	* 鐮佸�煎簭鍙�
-	*/
-	private Integer ordernum;
-
-	/**
-	 * 鎸夐挳鐨勭浉鍏冲唴瀹�
-	 */
-	private CodeButtonVO buttonVO;
-
-
-
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炴ā鏉�
-	*/
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勪富閿�
-	 */
-	public String getClassifybuttonoid (){
-		return classifybuttonoid;
-	}
-
-	/**
-	* 璁剧疆 鎸夐挳鐨勪富閿�
-	*/
-	public void setClassifybuttonoid (String classifybuttonoid){
-		this.classifybuttonoid = classifybuttonoid;
-	}
-	/**
-	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	 */
-	public String getClassifybuttonoidName (){
-		return classifybuttonoidName;
-	}
-
-	/**
-	* 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	*/
-	public void setClassifybuttonoidName (String classifybuttonoidName){
-		this.classifybuttonoidName = classifybuttonoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐢ㄩ��
-	 */
-	public String getButtonuse (){
-		return buttonuse;
-	}
-
-	/**
-	* 璁剧疆 鎸夐挳鐢ㄩ��
-	*/
-	public void setButtonuse (String buttonuse){
-		this.buttonuse = buttonuse;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 鐮佸�煎簭鍙�
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	public String getButtonUseText() {
-		return buttonUseText;
-	}
-
-	public void setButtonUseText(String buttonUseText) {
-		this.buttonUseText = buttonUseText;
-	}
-
-	public CodeButtonVO getButtonVO() {
-		return buttonVO;
-	}
-
-	public void setButtonVO(CodeButtonVO buttonVO) {
-		this.buttonVO = buttonVO;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateButtonVO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifybuttonoid='" + classifybuttonoid + '\'' +
-				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
-				", buttonuse='" + buttonuse + '\'' +
-				", buttonUseText='" + buttonUseText + '\'' +
-				", ordernum=" + ordernum +
-				", buttonVO=" + buttonVO +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java
deleted file mode 100644
index 893fd17..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateMapVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707120808516800L;
-
-	/**
-	* 鎵�灞炴ā鏉�
-	*/
-	private String classifyTemplateOid;
-
-	/**
-	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	private String classifyTemplateName;
-
-	/**
-	* 鏄犲皠瑙勫垯绫诲瀷
-	*/
-	private String codemapruletype;
-
-
-	/**
-	* 鏄犲皠瑙勫垯绫诲瀷鏄剧ず鏂囨湰
-	*/
-	private String codemapruletypeText;
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifyTemplateOid (){
-		return classifyTemplateOid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炴ā鏉�
-	*/
-	public void setClassifyTemplateOid (String classifyTemplateOid){
-		this.classifyTemplateOid = classifyTemplateOid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifyTemplateName (){
-		return classifyTemplateName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	public void setClassifyTemplateName (String classifyTemplateName){
-		this.classifyTemplateName = classifyTemplateName;
-	}
-	/**
-	 * 鑾峰彇 鏄犲皠瑙勫垯绫诲瀷
-	 */
-	public String getCodemapruletype (){
-		return codemapruletype;
-	}
-
-	/**
-	* 璁剧疆 鏄犲皠瑙勫垯绫诲瀷
-	*/
-	public void setCodemapruletype (String codemapruletype){
-		this.codemapruletype = codemapruletype;
-	}
-
-	public String getCodemapruletypeText() {
-		return codemapruletypeText;
-	}
-
-	public void setCodemapruletypeText(String codemapruletypeText) {
-		this.codemapruletypeText = codemapruletypeText;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateMapVO{" +
-				"classifytemplateoid='" + classifyTemplateOid + '\'' +
-				", classifytemplateoidName='" + classifyTemplateName + '\'' +
-				", codemapruletype='" + codemapruletype + '\'' +
-				", codemapruletypeText='" + codemapruletypeText + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java
deleted file mode 100644
index 84e5c05..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyTemplateVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118684061936L;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿�
-	*/
-	private String codeclassifyoid;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	*/
-	private String codeclassifyoidName;
-
-	/**
-	 * 鍖呭惈鐨勫睘鎬у唴瀹�
-	 */
-	private List<CodeClassifyTemplateAttrVO> attributes;
-
-	/**
-	 * 瀛樺偍鐨勪笟鍔$被鍨�
-	 */
-	private String btmTypeId;
-
-	/**
-	 * 瀛樺偍鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	private String btmTypeName;
-
-	public String getBtmTypeId() {
-		return btmTypeId;
-	}
-
-	public void setBtmTypeId(String btmTypeId) {
-		this.btmTypeId = btmTypeId;
-	}
-
-	public String getBtmTypeName() {
-		return btmTypeName;
-	}
-
-	public void setBtmTypeName(String btmTypeName) {
-		this.btmTypeName = btmTypeName;
-	}
-
-	/**
-	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
-	 */
-	public String getCodeclassifyoid (){
-		return codeclassifyoid;
-	}
-
-	/**
-	* 璁剧疆 涓婚搴撳垎绫讳富閿�
-	*/
-	public void setCodeclassifyoid (String codeclassifyoid){
-		this.codeclassifyoid = codeclassifyoid;
-	}
-	/**
-	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	 */
-	public String getCodeclassifyoidName (){
-		return codeclassifyoidName;
-	}
-
-	/**
-	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	*/
-	public void setCodeclassifyoidName (String codeclassifyoidName){
-		this.codeclassifyoidName = codeclassifyoidName;
-	}
-
-	public List<CodeClassifyTemplateAttrVO> getAttributes() {
-		return attributes;
-	}
-
-	public void setAttributes(List<CodeClassifyTemplateAttrVO> attributes) {
-		this.attributes = attributes;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateVO{" +
-				"codeclassifyoid='" + codeclassifyoid + '\'' +
-				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
-				", attributes=" + attributes +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java
deleted file mode 100644
index 7679381..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 涓婚搴撳垎绫绘樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-20
- */
-public class CodeClassifyVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707119254063830L;
-
-	/**
-	* 灞炴�ф帓搴忓彿
-	*/
-	private Integer ordernum;
-
-
-	/**
-	* 鎵�灞炰笟鍔$被鍨�
-	*/
-	private String btmtypeid;
-
-
-	/**
-	* 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	*/
-	private String btmtypename;
-
-
-	/**
-	* 缂栫爜瑙勫垯鐨勪富閿�
-	*/
-	private String coderuleoid;
-
-	/**
-	* 缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
-	*/
-	private String coderuleoidName;
-
-	/**
-	* 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
-	*/
-	private String codekeyattrrepeatoid;
-
-	/**
-	* 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
-	*/
-	private String codekeyattrrepeatoidName;
-
-	/**
-	* 涓婄骇鏁版嵁鐨勪富閿�
-	*/
-	private String parentcodeclassifyoid;
-
-	/**
-	 * 鏁版嵁鎵�鍦ㄧ殑灞傜骇
-	 */
-	private Integer dataLevel;
-
-	/**
-	 * 灞傜骇鐨勮矾寰�
-	 */
-	private String path;
-
-	/***
-	 * 鍚嶇О璺緞
-	 */
-	private String namePath;
-	/***
-	 * 浠g爜璺緞
-	 */
-	private String idPath;
-
-	/**
-	 * 鐩镐技鏌ヨ瑙勫垯涓婚敭
-	 */
-	private String codeResembleRuleOid;
-
-	/**
-	 * 鐩镐技鏌ヨ瑙勫垯鍚嶇О
-	 */
-	private String codeResembleRuleOidName;
-
-	public String getCodeResembleRuleOid() {
-		return codeResembleRuleOid;
-	}
-
-	public void setCodeResembleRuleOid(String codeResembleRuleOid) {
-		this.codeResembleRuleOid = codeResembleRuleOid;
-	}
-
-	public String getCodeResembleRuleOidName() {
-		return codeResembleRuleOidName;
-	}
-
-	public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
-		this.codeResembleRuleOidName = codeResembleRuleOidName;
-	}
-
-	/**
-	 * 鑾峰彇 灞炴�ф帓搴忓彿
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 灞炴�ф帓搴忓彿
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
-	 */
-	public String getBtmtypeid (){
-		return btmtypeid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炰笟鍔$被鍨�
-	*/
-	public void setBtmtypeid (String btmtypeid){
-		this.btmtypeid = btmtypeid;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	 */
-	public String getBtmtypename (){
-		return btmtypename;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炰笟鍔$被鍨嬪悕绉�
-	*/
-	public void setBtmtypename (String btmtypename){
-		this.btmtypename = btmtypename;
-	}
-	/**
-	 * 鑾峰彇 缂栫爜瑙勫垯鐨勪富閿�
-	 */
-	public String getCoderuleoid (){
-		return coderuleoid;
-	}
-
-	/**
-	* 璁剧疆 缂栫爜瑙勫垯鐨勪富閿�
-	*/
-	public void setCoderuleoid (String coderuleoid){
-		this.coderuleoid = coderuleoid;
-	}
-	/**
-	 * 鑾峰彇缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
-	 */
-	public String getCoderuleoidName (){
-		return coderuleoidName;
-	}
-
-	/**
-	* 璁剧疆缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
-	*/
-	public void setCoderuleoidName (String coderuleoidName){
-		this.coderuleoidName = coderuleoidName;
-	}
-	/**
-	 * 鑾峰彇 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
-	 */
-	public String getCodekeyattrrepeatoid (){
-		return codekeyattrrepeatoid;
-	}
-
-	/**
-	* 璁剧疆 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
-	*/
-	public void setCodekeyattrrepeatoid (String codekeyattrrepeatoid){
-		this.codekeyattrrepeatoid = codekeyattrrepeatoid;
-	}
-	/**
-	 * 鑾峰彇鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
-	 */
-	public String getCodekeyattrrepeatoidName (){
-		return codekeyattrrepeatoidName;
-	}
-
-	/**
-	* 璁剧疆鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
-	*/
-	public void setCodekeyattrrepeatoidName (String codekeyattrrepeatoidName){
-		this.codekeyattrrepeatoidName = codekeyattrrepeatoidName;
-	}
-	/**
-	 * 鑾峰彇 涓婄骇鏁版嵁鐨勪富閿�
-	 */
-	public String getParentcodeclassifyoid (){
-		return parentcodeclassifyoid;
-	}
-
-	/**
-	* 璁剧疆 涓婄骇鏁版嵁鐨勪富閿�
-	*/
-	public void setParentcodeclassifyoid (String parentcodeclassifyoid){
-		this.parentcodeclassifyoid = parentcodeclassifyoid;
-	}
-
-	public Integer getDataLevel() {
-		return dataLevel;
-	}
-
-	public void setDataLevel(Integer dataLevel) {
-		this.dataLevel = dataLevel;
-	}
-
-	public String getPath() {
-		return path;
-	}
-
-	public void setPath(String path) {
-		this.path = path;
-	}
-
-	public String getNamePath() {
-		return namePath;
-	}
-
-	public void setNamePath(String namePath) {
-		this.namePath = namePath;
-	}
-
-	public String getIdPath() {
-		return idPath;
-	}
-
-	public void setIdPath(String idPath) {
-		this.idPath = idPath;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyVO{" +
-				"ordernum=" + ordernum +
-				", btmtypeid='" + btmtypeid + '\'' +
-				", btmtypename='" + btmtypename + '\'' +
-				", coderuleoid='" + coderuleoid + '\'' +
-				", coderuleoidName='" + coderuleoidName + '\'' +
-				", codekeyattrrepeatoid='" + codekeyattrrepeatoid + '\'' +
-				", codekeyattrrepeatoidName='" + codekeyattrrepeatoidName + '\'' +
-				", parentcodeclassifyoid='" + parentcodeclassifyoid + '\'' +
-				", dataLevel=" + dataLevel +
-				", path='" + path + '\'' +
-				", namePath='" + namePath + '\'' +
-				", idPath='" + idPath + '\'' +
-				", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
-				", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
-				'}';
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java
deleted file mode 100644
index 19cfe39..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeClassifyValueVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117941539567L;
-
-	/**
-	* 鍒嗙被鐮佹涓婚敭
-	*/
-	private String codeclassifysecoid;
-
-	/**
-	* 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	*/
-	private String codeclassifysecoidName;
-
-	/**
-	* 鐮佸�煎簭鍙�
-	*/
-	private Integer ordernum;
-
-	/**
-	* 涓婄骇鍒嗙被鐮佸�间富閿�
-	*/
-	private String parentclassifyvalueoid;
-
-	/**
-	 * 鍒嗙被鐮佸�间腑鐨勭紪鍙�
-	 */
-	private String id;
-
-	/**
-	 * 鍒嗙被鐮佸�间腑鐨勫悕绉�
-	 */
-	private String name;
-
-	/**
-	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
-	 */
-	public String getCodeclassifysecoid (){
-		return codeclassifysecoid;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被鐮佹涓婚敭
-	*/
-	public void setCodeclassifysecoid (String codeclassifysecoid){
-		this.codeclassifysecoid = codeclassifysecoid;
-	}
-	/**
-	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getCodeclassifysecoidName (){
-		return codeclassifysecoidName;
-	}
-
-	/**
-	* 璁剧疆鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	*/
-	public void setCodeclassifysecoidName (String codeclassifysecoidName){
-		this.codeclassifysecoidName = codeclassifysecoidName;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 鐮佸�煎簭鍙�
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-	/**
-	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
-	 */
-	public String getParentclassifyvalueoid (){
-		return parentclassifyvalueoid;
-	}
-
-	/**
-	* 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
-	*/
-	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
-		this.parentclassifyvalueoid = parentclassifyvalueoid;
-	}
-
-	@Override
-	public String getId() {
-		return id;
-	}
-
-	@Override
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	@Override
-	public String getName() {
-		return name;
-	}
-
-	@Override
-	public void setName(String name) {
-		this.name = name;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeClassifyValueVO{" +
-				"codeclassifysecoid='" + codeclassifysecoid + '\'' +
-				", codeclassifysecoidName='" + codeclassifysecoidName + '\'' +
-				", ordernum=" + ordernum +
-				", parentclassifyvalueoid='" + parentclassifyvalueoid + '\'' +
-				", id='" + id + '\'' +
-				", name='" + name + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java
deleted file mode 100644
index e68aefc..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeFixedValueVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117767594607L;
-
-	/**
-	* 鍥哄畾鐮佹涓婚敭
-	*/
-	private String codefixedsecoid;
-
-	/**
-	* 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
-	*/
-	private String codefixedsecoidName;
-
-	/**
-	* 鐮佸�煎簭鍙�
-	*/
-	private Integer ordernum;
-
-
-
-	/**
-	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
-	 */
-	public String getCodefixedsecoid (){
-		return codefixedsecoid;
-	}
-
-	/**
-	* 璁剧疆 鍥哄畾鐮佹涓婚敭
-	*/
-	public void setCodefixedsecoid (String codefixedsecoid){
-		this.codefixedsecoid = codefixedsecoid;
-	}
-	/**
-	 * 鑾峰彇鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getCodefixedsecoidName (){
-		return codefixedsecoidName;
-	}
-
-	/**
-	* 璁剧疆鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
-	*/
-	public void setCodefixedsecoidName (String codefixedsecoidName){
-		this.codefixedsecoidName = codefixedsecoidName;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 鐮佸�煎簭鍙�
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeFixedValueVO{" +
-		"codefixedsecoid='" + codefixedsecoid +"'," +
-		"codefixedsecoidName='" + codefixedsecoidName +"'," +
-		"ordernum='" + ordernum +"'," +
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java
deleted file mode 100644
index 9681415..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-public class CodeImProtRusultVO {
-
-    private String redisUuid;
-    private String fileOid="";
-    private String filePath;
-
-    public String getRedisUuid() {
-        return redisUuid;
-    }
-
-    public void setRedisUuid(String redisUuid) {
-        this.redisUuid = redisUuid;
-    }
-
-    public String getFileOid() {
-        return fileOid;
-    }
-
-    public void setFileOid(String fileOid) {
-        this.fileOid = fileOid;
-    }
-
-    public String getFilePath() {
-        return filePath;
-    }
-
-    public void setFilePath(String filePath) {
-        this.filePath = filePath;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeImProtRusultVO{" +
-                "redisUuid='" + redisUuid + '\'' +
-                ", fileOid='" + fileOid + '\'' +
-                ", filePath='" + filePath + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java
deleted file mode 100644
index a2d227d..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.*;
-
-/**
- * 瀵煎叆缂栫爜淇℃伅鐨勬墽琛岀粨鏋�
- * @author weidy
- * @date 2022-3-6
- */
-public class CodeImportResultVO implements java.io.Serializable{
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 6938911732592877094L;
-
-    /**
-     * 鏄惁鎴愬姛鐨�
-     */
-    private boolean success ;
-    /**
-     * 鍏抽敭灞炴�ф牎楠岃鍒欑殑淇℃伅
-     */
-    private String keyAttrRuleInfo;
-
-    /**
-     * 鍏抽敭灞炴�ф牎楠屽悗锛岄噸澶嶇殑琛屽彿
-     */
-    private Set<String> keyAttrRepeatRowIndexList  = new HashSet<>();
-
-    /***
-     * 鏍规嵁鍏抽敭鐔熸倝鏌ヨ鐨勯噸澶嶇殑鏁版嵁瀵硅薄
-     */
-    private Map<String,  List<ClientBusinessObject>> indexTODataMap=new HashMap<>();
-
-    /**
-     * excel鑷韩閲嶅鐨勮鍙�
-     */
-    private Set<String> selfRepeatRowIndexList = new HashSet<>();
-
-    /**
-     * 鏁版嵁鐨勫唴瀹规湁绌虹殑琛屽彿
-     */
-    private Set<String> nullRowIndexList = new HashSet<>();
-
-    /**
-     * 娌℃湁閫氳繃楠岃瘉鐨勮鍙�
-     */
-    private Set<String> unPassVerifyRowIndexSet = new HashSet<>();
-
-    public Set<String> getUnPassVerifyRowIndexSet() {
-        return unPassVerifyRowIndexSet;
-    }
-
-    public void setUnPassVerifyRowIndexSet(Set<String> unPassVerifyRowIndexSet) {
-        this.unPassVerifyRowIndexSet = unPassVerifyRowIndexSet;
-    }
-
-    public Set<String> getNullRowIndexList() {
-        return nullRowIndexList;
-    }
-
-    public void setNullRowIndexList(Set<String> nullRowIndexList) {
-        this.nullRowIndexList = nullRowIndexList;
-    }
-
-    public String getKeyAttrRuleInfo() {
-        return keyAttrRuleInfo;
-    }
-
-    public void setKeyAttrRuleInfo(String keyAttrRuleInfo) {
-        this.keyAttrRuleInfo = keyAttrRuleInfo;
-    }
-
-    public Set<String> getKeyAttrRepeatRowIndexList() {
-        return keyAttrRepeatRowIndexList;
-    }
-
-    public void setKeyAttrRepeatRowIndexList(Set<String> keyAttrRepeatRowIndexList) {
-        this.keyAttrRepeatRowIndexList = keyAttrRepeatRowIndexList;
-    }
-
-    public Set<String> getSelfRepeatRowIndexList() {
-        return selfRepeatRowIndexList;
-    }
-
-    public void setSelfRepeatRowIndexList(Set<String> selfRepeatRowIndexList) {
-        this.selfRepeatRowIndexList = selfRepeatRowIndexList;
-    }
-
-    public Map<String,List<ClientBusinessObject>> getIndexTODataMap() {
-        return indexTODataMap;
-    }
-
-    public void setIndexTODataMap(Map<String, List<ClientBusinessObject>> indexTODataMap) {
-        this.indexTODataMap = indexTODataMap;
-    }
-
-    public boolean isSuccess() {
-        return success;
-    }
-
-    public void setSuccess(boolean success) {
-        this.success = success;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeImportResultVO{" +
-                "success=" + success +
-                ", keyAttrRuleInfo='" + keyAttrRuleInfo + '\'' +
-                ", keyAttrRepeatRowIndexList=" + keyAttrRepeatRowIndexList +
-                ", indexTODataMap=" + indexTODataMap +
-                ", selfRepeatRowIndexList=" + selfRepeatRowIndexList +
-                ", nullRowIndexList=" + nullRowIndexList +
-                ", unPassVerifyRowIndexSet=" + unPassVerifyRowIndexSet +
-                '}';
-    }
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java
deleted file mode 100644
index 8194569..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class CodeImportTemplateVO {
-    private List<ColumnVO> cloNamesList=new ArrayList<>();
-    private CodeClassifyTemplateVO codeClassifyTemplateVO;
-    private CodeClassifyVO codeClassifyVO;
-    public List<ColumnVO> getCloNamesList() {
-        return cloNamesList;
-    }
-
-    public void setCloNamesList(List<ColumnVO> cloNamesList) {
-        this.cloNamesList = cloNamesList;
-    }
-
-    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
-        return codeClassifyTemplateVO;
-    }
-
-    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
-        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
-    }
-
-    public CodeClassifyVO getCodeClassifyVO() {
-        return codeClassifyVO;
-    }
-
-    public void setCodeClassifyVO(CodeClassifyVO codeClassifyVO) {
-        this.codeClassifyVO = codeClassifyVO;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeImportTemplateVO{" +
-                "cloNamesList=" + cloNamesList +
-                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
-                ", codeClassifyVO=" + codeClassifyVO +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java
deleted file mode 100644
index d669ea6..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/***
- *
- */
-public class CodeImprotDataVO implements Serializable {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 1880155181507713247L;
-    /***
-     * 鏁版嵁鍦╡xecl涓殑浣嶇疆
-     */
-    private  String rowIndex;
-    /**
-     * 涓婚搴撳垎绫讳富閿�
-     */
-    private String codeClassifyOid;
-
-    /**
-     * 妯℃澘鐨勪富閿�
-     */
-    private String templateOid;
-    /**
-     * 缂栫爜瑙勫垯鐨勪富閿�
-     */
-    private String codeRuleOid;
-
-    /***
-     * 鍐呴儴瀛楁
-     */
-
-    private List<String> fields = new ArrayList();
-
-    /**
-     * 鍒楀悕
-     */
-    private List<String> colNames = new ArrayList();
-    /**
-     * 鏁版嵁
-     */
-    private List<Map<String,String>> datas = new ArrayList<>();
-    private CodeClassifyTemplateVO codeClassifyTemplateVO;
-    private CodeClassifyVO codeClassifyVO;
-
-    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
-        return codeClassifyTemplateVO;
-    }
-
-    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
-        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
-    }
-
-    public CodeClassifyVO getCodeClassifyVO() {
-        return codeClassifyVO;
-    }
-
-    public void setCodeClassifyVO(CodeClassifyVO codeClassifyVO) {
-        this.codeClassifyVO = codeClassifyVO;
-    }
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-    public String getTemplateOid() {
-        return templateOid;
-    }
-    public void setTemplateOid(String templateOid) {
-        this.templateOid = templateOid;
-    }
-    public String getCodeRuleOid() {
-        return codeRuleOid;
-    }
-    public void setCodeRuleOid(String codeRuleOid) {
-        this.codeRuleOid = codeRuleOid;
-    }
-    public List<Map<String, String>> getDatas() {
-        return datas;
-    }
-
-    public void setDatas(List<Map<String, String>> datas) {
-        this.datas = datas;
-    }
-
-    public List<String> getColNames() {
-        return colNames;
-    }
-
-    public void setColNames(List<String> colNames) {
-        this.colNames = colNames;
-    }
-
-    public String getRowIndex() {
-        return rowIndex;
-    }
-
-    public void setRowIndex(String rowIndex) {
-        this.rowIndex = rowIndex;
-    }
-
-    public List<String> getFields() {
-        return fields;
-    }
-
-    public void setFields(List<String> fields) {
-        this.fields = fields;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeImprotDataVO{" +
-                "rowIndex='" + rowIndex + '\'' +
-                ", codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", templateOid='" + templateOid + '\'' +
-                ", codeRuleOid='" + codeRuleOid + '\'' +
-                ", fields=" + fields +
-                ", colNames=" + colNames +
-                ", datas=" + datas +
-                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
-                ", codeClassifyVO=" + codeClassifyVO +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java
deleted file mode 100644
index 8b9e211..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import java.util.List;
-
-public class CodeImprotParmaDatVO {
-    private List<CodeImprotSaveDatVO> codeImprotSaveDatVOList;
-    private String classifyAttr;
-    private Boolean isImprot;
-
-    public List<CodeImprotSaveDatVO> getCodeImprotSaveDatVOList() {
-        return codeImprotSaveDatVOList;
-    }
-
-    public void setCodeImprotSaveDatVOList(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList) {
-        this.codeImprotSaveDatVOList = codeImprotSaveDatVOList;
-    }
-
-    public String getClassifyAttr() {
-        return classifyAttr;
-    }
-
-    public void setClassifyAttr(String classifyAttr) {
-        this.classifyAttr = classifyAttr;
-    }
-
-    public Boolean getImprot() {
-        return isImprot;
-    }
-
-    public void setImprot(Boolean improt) {
-        isImprot = improt;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeImprotParmaDatVO{" +
-                "codeImprotSaveDatVOList=" + codeImprotSaveDatVOList +
-                ", isImprot=" + isImprot +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java
deleted file mode 100644
index e3b1d6a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class CodeImprotResembleVO {
-    private String path;
-    private List<String> fields=new ArrayList<>();
-    private Map<String, String> conditionMap = new HashMap<>();
-    private List<String> rownIndex=new ArrayList<>();
-    private List<Map<String,String>>dataList=new ArrayList<>();
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    public Map<String, String> getConditionMap() {
-        return conditionMap;
-    }
-
-    public void setConditionMap(Map<String, String> conditionMap) {
-        this.conditionMap = conditionMap;
-    }
-
-    public List<String> getRownIndex() {
-        return rownIndex;
-    }
-
-    public void setRownIndex(List<String> rownIndex) {
-        this.rownIndex = rownIndex;
-    }
-
-    public List<String> getFields() {
-        return fields;
-    }
-
-    public void setFields(List<String> fields) {
-        this.fields = fields;
-    }
-
-    public List<Map<String, String>> getDataList() {
-        return dataList;
-    }
-
-    public void setDataList(List<Map<String, String>> dataList) {
-        this.dataList = dataList;
-    }
-
-
-    @Override
-    public String toString() {
-        return "CodeImprotResembleVO{" +
-                "path='" + path + '\'' +
-                ", fields=" + fields +
-                ", conditionMap=" + conditionMap +
-                ", rownIndex=" + rownIndex +
-                ", dataList=" + dataList +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java
deleted file mode 100644
index 06350a2..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import org.springblade.code.dto.CodeOrderDTO;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class CodeImprotSaveDatVO {
-    /**
-     * 缂栫爜鐢宠瀵硅薄
-     */
-    private CodeOrderDTO orderDTO;
-    /**
-     * 鍒楀悕锛堟眽瀛楋級
-     */
-    private List<String> Clos=new ArrayList<>();
-    /***
-     * 鍒楄〃鏁版嵁
-     */
-    private List<Map<String,String>> dataList=new ArrayList<>();
-
-    public CodeOrderDTO getOrderDTO() {
-        return orderDTO;
-    }
-
-    public void setOrderDTO(CodeOrderDTO orderDTO) {
-        this.orderDTO = orderDTO;
-    }
-
-    public List<String> getClos() {
-        return Clos;
-    }
-
-    public void setClos(List<String> clos) {
-        Clos = clos;
-    }
-
-    public List<Map<String, String>> getDataList() {
-        return dataList;
-    }
-
-    public void setDataList(List<Map<String, String>> dataList) {
-        this.dataList = dataList;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeImprotSaveDatVO{" +
-                "orderDTO=" + orderDTO +
-                ", Clos=" + Clos +
-                ", dataList=" + dataList +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java
deleted file mode 100644
index 809a32e..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeKeyAttrRepeatRuleVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118009866089L;
-
-	/**
-	* 鏄惁蹇界暐澶у皬鍐�
-	*/
-	private String ignorecaseflag;
-
-
-	/**
-	* 鏄惁蹇界暐绌烘牸
-	*/
-	private String ignorespaceflag;
-
-
-	/**
-	* 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	*/
-	private String ignoreallspaceflag;
-
-	/**
-	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
-	 */
-	private String ignorewidthflag;
-
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
-	 */
-	public String getIgnorecaseflag (){
-		return ignorecaseflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇界暐澶у皬鍐�
-	*/
-	public void setIgnorecaseflag (String ignorecaseflag){
-		this.ignorecaseflag = ignorecaseflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
-	 */
-	public String getIgnorespaceflag (){
-		return ignorespaceflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇界暐绌烘牸
-	*/
-	public void setIgnorespaceflag (String ignorespaceflag){
-		this.ignorespaceflag = ignorespaceflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	public String getIgnoreallspaceflag (){
-		return ignoreallspaceflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	*/
-	public void setIgnoreallspaceflag (String ignoreallspaceflag){
-		this.ignoreallspaceflag = ignoreallspaceflag;
-	}
-
-	public String getIgnorewidthflag() {
-		return ignorewidthflag;
-	}
-
-	public void setIgnorewidthflag(String ignorewidthflag) {
-		this.ignorewidthflag = ignorewidthflag;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeKeyAttrRepeatRuleVO{" +
-				"ignorecaseflag='" + ignorecaseflag + '\'' +
-				", ignorespaceflag='" + ignorespaceflag + '\'' +
-				", ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
-				", ignorewidthflag='" + ignorewidthflag + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java
deleted file mode 100644
index 52b6e9e..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 闃舵鐨勫睘鎬ф樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodePhaseAttrVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117417389038L;
-
-	/**
-	* 鎵�灞炴ā鏉块樁娈�
-	*/
-	private String codephaseoid;
-
-	/**
-	* 鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
-	*/
-	private String codephaseoidName;
-
-	/**
-	 * 灞炴�х殑鍒嗙粍鍚嶇О
-	 */
-	private String attrGroupName;
-
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉块樁娈�
-	 */
-	public String getCodephaseoid (){
-		return codephaseoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炴ā鏉块樁娈�
-	*/
-	public void setCodephaseoid (String codephaseoid){
-		this.codephaseoid = codephaseoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
-	 */
-	public String getCodephaseoidName (){
-		return codephaseoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
-	*/
-	public void setCodephaseoidName (String codephaseoidName){
-		this.codephaseoidName = codephaseoidName;
-	}
-
-	public String getAttrGroupName() {
-		return attrGroupName;
-	}
-
-	public void setAttrGroupName(String attrGroupName) {
-		this.attrGroupName = attrGroupName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodePhaseAttrVO{" +
-				"codephaseoid='" + codephaseoid + '\'' +
-				", codephaseoidName='" + codephaseoidName + '\'' +
-				", attrGroupName='" + attrGroupName + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java
deleted file mode 100644
index 2b96e90..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
- *
- * @author weidy
- * @date 2022-04-10
- */
-public class CodeResembleRuleVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707119066298945L;
-
-	/**
-	* 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	*/
-	private String ignoreallspaceflag;
-
-
-	/**
-	* 鏄惁蹇界暐澶у皬鍐�
-	*/
-	private String ignorecaseflag;
-
-
-	/**
-	* 鏄惁蹇界暐绌烘牸
-	*/
-	private String ignorespaceflag;
-
-
-	/**
-	* 鏄惁蹇界暐鍏ㄥ崐瑙�
-	*/
-	private String ignorewidthflag;
-
-	/**
-	 * 杩炴帴瀛楃
-	 */
-	private String linkCharacter;
-
-
-
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	 */
-	public String getIgnoreallspaceflag (){
-		return ignoreallspaceflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-	*/
-	public void setIgnoreallspaceflag (String ignoreallspaceflag){
-		this.ignoreallspaceflag = ignoreallspaceflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
-	 */
-	public String getIgnorecaseflag (){
-		return ignorecaseflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇界暐澶у皬鍐�
-	*/
-	public void setIgnorecaseflag (String ignorecaseflag){
-		this.ignorecaseflag = ignorecaseflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
-	 */
-	public String getIgnorespaceflag (){
-		return ignorespaceflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇界暐绌烘牸
-	*/
-	public void setIgnorespaceflag (String ignorespaceflag){
-		this.ignorespaceflag = ignorespaceflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁蹇界暐鍏ㄥ崐瑙�
-	 */
-	public String getIgnorewidthflag (){
-		return ignorewidthflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇界暐鍏ㄥ崐瑙�
-	*/
-	public void setIgnorewidthflag (String ignorewidthflag){
-		this.ignorewidthflag = ignorewidthflag;
-	}
-
-	public String getLinkCharacter() {
-		return linkCharacter;
-	}
-
-	public void setLinkCharacter(String linkCharacter) {
-		this.linkCharacter = linkCharacter;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeResembleRuleVO{" +
-				"ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
-				", ignorecaseflag='" + ignorecaseflag + '\'' +
-				", ignorespaceflag='" + ignorespaceflag + '\'' +
-				", ignorewidthflag='" + ignorewidthflag + '\'' +
-				", linkCharacter='" + linkCharacter + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java
deleted file mode 100644
index 40bfe4f..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-import java.util.List;
-
-/**
- * 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeRuleVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117684483406L;
-
-	/**
-	 * 缂栫爜瑙勫垯鐨勭紪鍙�
-	 */
-	private String id;
-
-	/**
-	 * 缂栫爜瑙勫垯鐨勫悕绉�
-	 */
-	private String name;
-
-	/**
-	 * 缂栫爜鐨勭爜娈典俊鎭�
-	 */
-	private List<CodeBasicSecVO> secVOList;
-
-
-	@Override
-	public String getId() {
-		return id;
-	}
-
-	@Override
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	@Override
-	public String getName() {
-		return name;
-	}
-
-	@Override
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public List<CodeBasicSecVO> getSecVOList() {
-		return secVOList;
-	}
-
-	public void setSecVOList(List<CodeBasicSecVO> secVOList) {
-		this.secVOList = secVOList;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeRuleVO{" +
-				"id='" + id + '\'' +
-				", name='" + name + '\'' +
-				", secVOList=" + secVOList +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java
deleted file mode 100644
index e9b90c4..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-/**
- * 娴佹按绠楁硶绫荤殑鏄剧ず淇℃伅
- * @author weidy
- * @date 2022-2-17
- */
-public class CodeSerialAlgorithmVO implements java.io.Serializable{
-
-    /**
-     * 绠楁硶缂栧彿
-     */
-    private String id;
-
-    /**
-     * 绫荤殑鍏ㄨ矾寰�
-     */
-    private String classFullName;
-
-    /**
-     * 绫荤殑鍚嶇О
-     */
-    private String name;
-
-    /**
-     * 鎻忚堪
-     */
-    private String description;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getClassFullName() {
-        return classFullName;
-    }
-
-    public void setClassFullName(String classFullName) {
-        this.classFullName = classFullName;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-
-    @Override
-    public String toString() {
-        return "CodeSerialAlgorithmVO{" +
-                "id='" + id + '\'' +
-                ", classFullName='" + classFullName + '\'' +
-                ", name='" + name + '\'' +
-                ", description='" + description + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java
deleted file mode 100644
index 7adc609..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 鍚屼箟璇嶉厤缃樉绀哄璞�
- *
- * @author weidy
- * @date 2022-02-17
- */
-public class CodeSynonymVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707118039132189L;
-
-	/**
-	* 鎵�灞炵紪鐮佽鍒�
-	*/
-	private String codeclassifytemplateoid;
-
-	/**
-	* 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	*/
-	private String codeclassifytemplateoidName;
-
-	/**
-	* 婧愬��
-	*/
-	private String sourcevalue;
-
-
-	/**
-	* 鍚屼箟璇�
-	*/
-	private String synonymvalue;
-
-
-
-	/**
-	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
-	 */
-	public String getCodeclassifytemplateoid (){
-		return codeclassifytemplateoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炵紪鐮佽鍒�
-	*/
-	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
-		this.codeclassifytemplateoid = codeclassifytemplateoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public String getCodeclassifytemplateoidName (){
-		return codeclassifytemplateoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	*/
-	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
-		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 婧愬��
-	 */
-	public String getSourcevalue (){
-		return sourcevalue;
-	}
-
-	/**
-	* 璁剧疆 婧愬��
-	*/
-	public void setSourcevalue (String sourcevalue){
-		this.sourcevalue = sourcevalue;
-	}
-	/**
-	 * 鑾峰彇 鍚屼箟璇�
-	 */
-	public String getSynonymvalue (){
-		return synonymvalue;
-	}
-
-	/**
-	* 璁剧疆 鍚屼箟璇�
-	*/
-	public void setSynonymvalue (String synonymvalue){
-		this.synonymvalue = synonymvalue;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeSynonymVO{" +
-		"codeclassifytemplateoid='" + codeclassifytemplateoid +"'," +
-		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
-		"sourcevalue='" + sourcevalue +"'," +
-		"synonymvalue='" + synonymvalue +"'," +
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java
deleted file mode 100644
index c8efa6f..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.springblade.code.vo.pagemodel;
-
-import com.vci.starter.web.pagemodel.BaseModelVO;
-
-/**
- * 妯℃澘闃舵鏄剧ず瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-public class CodeTemplatePhaseVO extends BaseModelVO {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117825912259L;
-
-	/**
-	* 鎵�灞炵紪鐮佽鍒�
-	*/
-	private String codeclassifytemplateoid;
-
-	/**
-	* 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	*/
-	private String codeclassifytemplateoidName;
-
-	/**
-	* 鐮佸�煎簭鍙�
-	*/
-	private Integer ordernum;
-
-
-
-	/**
-	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
-	 */
-	public String getCodeclassifytemplateoid (){
-		return codeclassifytemplateoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炵紪鐮佽鍒�
-	*/
-	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
-		this.codeclassifytemplateoid = codeclassifytemplateoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public String getCodeclassifytemplateoidName (){
-		return codeclassifytemplateoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	*/
-	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
-		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 鐮佸�煎簭鍙�
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeTemplatePhaseVO{" +
-		"codeclassifytemplateoid='" + codeclassifytemplateoid +"'," +
-		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
-		"ordernum='" + ordernum +"'," +
-		"}" + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java
deleted file mode 100644
index dbe6cf7..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java
+++ /dev/null
@@ -1,51 +0,0 @@
-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
deleted file mode 100644
index b7ae130..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ConfigAttrMappingVO.java
+++ /dev/null
@@ -1,6 +0,0 @@
-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
deleted file mode 100644
index 4ca37e5..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DataResembleVO.java
+++ /dev/null
@@ -1,36 +0,0 @@
-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
deleted file mode 100644
index 9738f37..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingDataVO.java
+++ /dev/null
@@ -1,120 +0,0 @@
-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
deleted file mode 100644
index 4794b78..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingLogeVO.java
+++ /dev/null
@@ -1,177 +0,0 @@
-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
deleted file mode 100644
index a4fcf53..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataInfoVO.java
+++ /dev/null
@@ -1,121 +0,0 @@
-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
deleted file mode 100644
index 883d4b9..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataVO.java
+++ /dev/null
@@ -1,256 +0,0 @@
-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
deleted file mode 100644
index fb29711..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrMappingVO.java
+++ /dev/null
@@ -1,199 +0,0 @@
-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
deleted file mode 100644
index 18a6d95..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrRangeVO.java
+++ /dev/null
@@ -1,83 +0,0 @@
-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
deleted file mode 100644
index 6e40dbc..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingTaskVO.java
+++ /dev/null
@@ -1,200 +0,0 @@
-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
deleted file mode 100644
index e6b8f98..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/MdmUIInfoVO.java
+++ /dev/null
@@ -1,109 +0,0 @@
-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
deleted file mode 100644
index 68b8e5a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntAuthorityVO.java
+++ /dev/null
@@ -1,123 +0,0 @@
-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
deleted file mode 100644
index b7db254..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntBaseVO.java
+++ /dev/null
@@ -1,25 +0,0 @@
-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
deleted file mode 100644
index a8fcb3a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntHeaderVO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-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
deleted file mode 100644
index 774e657..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntInfoVO.java
+++ /dev/null
@@ -1,746 +0,0 @@
-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
deleted file mode 100644
index 1715eb8..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntParamVO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-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/apply/ApplyDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java
deleted file mode 100644
index 2be451f..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-/**
- * 鍒嗙被鏁版嵁淇℃伅
- */
-@XStreamAlias("object")
-public class ApplyDataVO {
-    /***
-     * 杈撳叆涓婚敭
-     */
-    @XStreamAsAttribute
-    private String id;
-    /**
-     * 缂栫爜
-     */
-    @XStreamAsAttribute
-    private String code;
-    /**
-     * 鐘舵��
-     */
-    @XStreamAsAttribute
-    private  String status;
-    /**
-     * 鏁版嵁鎿嶄綔绫诲瀷
-     */
-    @XStreamAsAttribute
-    private  String operate;
-    /***
-     * 鍒涘缓鑰�
-     */
-    @XStreamAsAttribute
-    private String creator;
-
-    /**
-     * 鏇存敼鑰�
-     */
-    @XStreamAsAttribute
-    private  String editor;
-    /***
-     * 鏁版嵁灞炴�у璞�
-     */
-    @XStreamImplicit
-    private List<ProppertyVO> prop;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getOperate() {
-        return operate;
-    }
-
-    public void setOperate(String operate) {
-        this.operate = operate;
-    }
-
-    public List<ProppertyVO> getProp() {
-        return prop;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public String getEditor() {
-        return editor;
-    }
-
-    public void setEditor(String editor) {
-        this.editor = editor;
-    }
-
-    public void setProp(List<ProppertyVO> prop) {
-        this.prop = prop;
-    }
-
-    @Override
-    public String toString() {
-        return "ApplyDataVO{" +
-                "id='" + id + '\'' +
-                ", code='" + code + '\'' +
-                ", status='" + status + '\'' +
-                ", operate='" + operate + '\'' +
-                ", creator='" + creator + '\'' +
-                ", editor='" + editor + '\'' +
-                ", prop=" + prop +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java
deleted file mode 100644
index 69eed5e..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("objects")
-public class ApplyDatasVO {
-    @XStreamImplicit
-    private List<ApplyDataVO> object;
-
-    public List<ApplyDataVO> getObject() {
-        return object;
-    }
-
-    public void setObject(List<ApplyDataVO> object) {
-        this.object = object;
-    }
-
-    @Override
-    public String toString() {
-        return "ApplyDatasVO{" +
-                "object=" + object +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java
deleted file mode 100644
index 8126bbf..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-/**
- * 鍒嗙被淇℃伅
- */
-@XStreamAlias("classify")
-public class ClassfyVO {
-    /**
-     * 鍒嗙被浠e彿
-     */
-    @XStreamAsAttribute
-    private String classCode;
-    /**
-     * 搴撲唬鍙�
-     */
-    @XStreamAsAttribute
-    private String library;
-    /**
-     * 绫昏矾寰�
-     */
-    @XStreamAsAttribute
-    private  String fullclsfNamePath;
-    /**
-     * 鐮佹淇℃伅
-     */
-    private SectionsVO sections;
-
-    private ApplyDatasVO objects;
-
-    public String getClassCode() {
-        return classCode;
-    }
-
-    public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-    public String getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(String library) {
-        this.library = library;
-    }
-
-    public String getFullclsfNamePath() {
-        return fullclsfNamePath;
-    }
-
-    public void setFullclsfNamePath(String fullclsfNamePath) {
-        this.fullclsfNamePath = fullclsfNamePath;
-    }
-
-    public SectionsVO getSections() {
-        return sections;
-    }
-
-    public void setSections(SectionsVO sections) {
-        this.sections = sections;
-    }
-
-    public ApplyDatasVO getObjects() {
-        return objects;
-    }
-
-    public void setObjects(ApplyDatasVO objects) {
-        this.objects = objects;
-    }
-
-    @Override
-    public String toString() {
-        return "ClassVO{" +
-                "classCode='" + classCode + '\'' +
-                ", library='" + library + '\'' +
-                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
-                ", sections=" + sections +
-                ", objects=" + objects +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java
deleted file mode 100644
index 628fb7c..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("classifys")
-public class ClassfysVO {
-    /**
-     *鍒嗙被淇℃伅
-     */
-    @XStreamImplicit
-    private List<ClassfyVO> classify;
-
-    public List<ClassfyVO> getClassify() {
-        return classify;
-    }
-
-    public void setClassify(List<ClassfyVO> classify) {
-        this.classify = classify;
-    }
-
-    @Override
-    public String toString() {
-        return "ClassfysVO{" +
-                "classify=" + classify +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java
deleted file mode 100644
index 57b8390..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-/***
- * 闆嗘垚鎺ュ彛鍙傛暟锛堢敵璇�/鏇存柊锛岀姸鎬侊級
- */
-public class InterParameterVO {
-    private RootDataVO data;
-    public RootDataVO getData() {
-        return data;
-    }
-    public void setData(RootDataVO data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "InterParameterVO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java
deleted file mode 100644
index 3fe730a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("prop")
-public class ProppertyVO {
-    /**
-     * 灞炴�у瓧娈�
-     */
-    @XStreamAsAttribute
-    private  String key;
-    /**
-     * 灞炴�ф樉绀哄悕绉�
-     */
-    @XStreamAsAttribute
-    private String text;
-    /**
-     * 灞炴�у��
-     */
-    @XStreamAsAttribute
-    private  String value;
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    public String getText() {
-        return text;
-    }
-
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    @Override
-    public String toString() {
-        return "ProppertyVO{" +
-                "key='" + key + '\'' +
-                ", text='" + text + '\'' +
-                ", value='" + value + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java
deleted file mode 100644
index ce185fd..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-/**
- *鏁版嵁淇℃伅
- */
-@XStreamAlias("data")
-public class RootDataVO {
-    /***
-     * 闆嗘垚绯荤粺鏍囪瘑
-     */
-    @XStreamAsAttribute
-    private String systemId;
-    /**
-     * 鎿嶄綔鐢ㄦ埛淇℃伅
-     */
-    private UserVO user;
-    /***
-     * 鏁版嵁淇℃伅
-     */
-    private ClassfysVO classifys;
-
-
-    public String getSystemId() {
-        return systemId;
-    }
-
-    public void setSystemId(String systemId) {
-        this.systemId = systemId;
-    }
-
-    public UserVO getUser() {
-        return user;
-    }
-
-    public void setUser(UserVO user) {
-        this.user = user;
-    }
-
-    public ClassfysVO getClassifys() {
-        return classifys;
-    }
-
-    public void setClassifys(ClassfysVO classifys) {
-        this.classifys = classifys;
-    }
-
-    @Override
-    public String toString() {
-        return "InterParameterVO{" +
-                "systemId='" + systemId + '\'' +
-                ", user=" + user +
-                ", classifys=" + classifys +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java
deleted file mode 100644
index 02abdef..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("section")
-public class SectionVO {
-    /**
-     * 鐮佹鍚嶇О
-     */
-    @XStreamAsAttribute
-    private  String name;
-    /***
-     * 鐮佹鍊�
-     */
-    @XStreamAsAttribute
-    private String value;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    @Override
-    public String toString() {
-        return "SectionVO{" +
-                "name='" + name + '\'' +
-                ", value='" + value + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java
deleted file mode 100644
index 21e537c..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("sections")
-public class SectionsVO {
-    @XStreamImplicit
-    private List<SectionVO> section;
-    public List<SectionVO> getSection() {
-        return section;
-    }
-
-    public void setSection(List<SectionVO> section) {
-        this.section = section;
-    }
-
-    @Override
-    public String toString() {
-        return "SectionsVO{" +
-                "section=" + section +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java
deleted file mode 100644
index 17a5bef..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.springblade.code.vo.universalInter.apply;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("user")
-public class UserVO {
-    /**
-     * 鍒涘缓/鏇存敼浜鸿处鍙�
-     */
-    @XStreamAsAttribute
-    private  String userName;
-     /**
-      * 鍒涘缓/鏇存敼浜烘樉绀哄悕绉�
-     */
-     @XStreamAsAttribute
-    private  String trueName;
-    /**
-     * 鍒涘缓/鏇存敼浜烘搷浣滄満鍣╥p
-     */
-    @XStreamAsAttribute
-    private  String ip;
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getTrueName() {
-        return trueName;
-    }
-
-    public void setTrueName(String trueName) {
-        this.trueName = trueName;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public void setIp(String ip) {
-        this.ip = ip;
-    }
-
-    @Override
-    public String toString() {
-        return "UserVO{" +
-                "userName='" + userName + '\'' +
-                ", trueName='" + trueName + '\'' +
-                ", ip='" + ip + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java
deleted file mode 100644
index b0fb889..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.springblade.code.vo.universalInter.attrmap;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-/**
- * 灞炴�ф槧灏�
- */
-@XStreamAlias("clsf")
-public class ClsfAttrMappingDO {
-    /***
-     * 鏁版嵁婧愮郴缁熷唴閮ㄥ瓧娈�
-     */
-    @XStreamAsAttribute
-    private String sourceKey="";
-    /***
-     * 鏁版嵁婧愮郴缁熷悕绉�
-     */
-    @XStreamAsAttribute
-    private String  sourceName="";
-    /***
-     * 鐩爣绯荤粺鍐呴儴瀛楁
-     */
-    @XStreamAsAttribute
-    private String targetKey="" ;
-    /***
-     * 鐩爣绯荤粺鍐呴儴鍚嶇О
-     */
-    @XStreamAsAttribute
-    private String targetName="";
-
-    public String getSourceKey() {
-        return sourceKey;
-    }
-
-    public void setSourceKey(String sourceKey) {
-        this.sourceKey = sourceKey;
-    }
-
-    public String getSourceName() {
-        return sourceName;
-    }
-
-    public void setSourceName(String sourceName) {
-        this.sourceName = sourceName;
-    }
-
-    public String getTargetKey() {
-        return targetKey;
-    }
-
-    public void setTargetKey(String targetKey) {
-        this.targetKey = targetKey;
-    }
-
-    public String getTargetName() {
-        return targetName;
-    }
-
-    public void setTargetName(String targetName) {
-        this.targetName = targetName;
-    }
-
-    @Override
-    public String toString() {
-        return "ClsfAttrMappingDO{" +
-                "sourceKey='" + sourceKey + '\'' +
-                ", sourceName='" + sourceName + '\'' +
-                ", targetKey='" + targetKey + '\'' +
-                ", targetName='" + targetName + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java
deleted file mode 100644
index b8b746b..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.springblade.code.vo.universalInter.attrmap;
-
-public class DataAttributeVO {
-    /**
-     * 瀛楁鍚�
-     */
-    private String field;
-    /***
-     * 灞炴�ф樉绀哄悕绉�
-     */
-    private String text;
-
-    /**
-     * 蹇呭~
-     */
-    private boolean required;
-
-    /**
-     * 鍏抽敭灞炴��
-     */
-    private boolean keyAttr;
-
-
-    /**
-     * 榛樿鍊�
-     */
-    private String defaultValue;
-
-    /**
-     * 鍊�
-     */
-    private String value;
-
-    /**
-     * 鍓嶇紑
-     */
-    private String prefix;
-
-    /**
-     * 鍓嶇紑
-     */
-    private String suffix;
-
-    public String getField() {
-        return field;
-    }
-
-    public void setField(String field) {
-        this.field = field;
-    }
-
-    public boolean isRequired() {
-        return required;
-    }
-
-    public void setRequired(boolean required) {
-        this.required = required;
-    }
-
-    public boolean isKeyAttr() {
-        return keyAttr;
-    }
-
-    public void setKeyAttr(boolean keyAttr) {
-        this.keyAttr = keyAttr;
-    }
-
-    public String getDefaultValue() {
-        return defaultValue;
-    }
-
-    public void setDefaultValue(String defaultValue) {
-        this.defaultValue = defaultValue;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getPrefix() {
-        return prefix;
-    }
-
-    public void setPrefix(String prefix) {
-        this.prefix = prefix;
-    }
-
-    public String getSuffix() {
-        return suffix;
-    }
-
-    public void setSuffix(String suffix) {
-        this.suffix = suffix;
-    }
-
-    @Override
-    public String toString() {
-        return "DataObjectVO{" +
-                "field='" + field + '\'' +
-                ", required=" + required +
-                ", keyAttr=" + keyAttr +
-                ", defaultValue='" + defaultValue + '\'' +
-                ", value='" + value + '\'' +
-                ", prefix='" + prefix + '\'' +
-                ", suffix='" + suffix + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java
deleted file mode 100644
index 6ae4a41..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.springblade.code.vo.universalInter.attrmap;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class DataObjectVO {
-    private List<String> colName = new ArrayList();
-    private List<RowDatas> rowData = new ArrayList();
-
-    public List<String> getColName() {
-        return colName;
-    }
-
-    public void setColName(List<String> colName) {
-        this.colName = colName;
-    }
-    public List<RowDatas> getRowData() {
-        return rowData;
-    }
-
-    public void setRowData(List<RowDatas> rowData) {
-        this.rowData = rowData;
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java
deleted file mode 100644
index 8d82fc7..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.springblade.code.vo.universalInter.attrmap;
-
-public class GeneralMappingUtil {
-
-    private static GeneralMappingUtil newInstance=null;
-    public static GeneralMappingUtil getNewInstance() {
-        if(newInstance==null){
-            newInstance=new GeneralMappingUtil();
-        }
-        return newInstance;
-    }
-
-    /***
-     * 閫氳繃绯荤粺鏍囪瘑鑾峰彇瀵瑰簲鐨勯泦鎴愬睘鎬ф槧灏�
-     * @param system
-     */
-    private void getLibraryClsfAttrMapping(String system){
-        try {
-           /** String fileNamePath=LocalFileUtil.getProjectFolder();
-            fileNamePath+=File.separator+"mdmInMapXml"+File.separator+"clsfAttrMap.xml";
-            String  clasAttrXml= LocalFileUtil.readContentForFile(fileNamePath);
-            XStream xStream = new XStream(new DomDriver());
-            xStream.processAnnotations(ApplyCodeDO.class);
-            xStream.autodetectAnnotations(true);
-            ApplyCodeDO applyCodeDO = (ApplyCodeDO) xStream.fromXML(clasAttrXml);**/
-        }catch (Throwable e){
-            new Throwable("璇诲彇灞炴�ф槧灏勬枃浠跺嚭閿�!");
-        }
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java
deleted file mode 100644
index 83e594c..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.springblade.code.vo.universalInter.attrmap;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-/***
- * 搴撹妭鐐�
- */
-@XStreamAlias("clsf")
-public class LibraryClsfDO {
-    @XStreamAsAttribute
-    private String library;
-    @XStreamImplicit(itemFieldName="prop")
-    private List<ClsfAttrMappingDO> prop;
-
-
-    public String getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(String library) {
-        this.library = library;
-    }
-    public List<ClsfAttrMappingDO> getProp() {
-        return prop;
-    }
-
-    public void setProp(List<ClsfAttrMappingDO> prop) {
-        this.prop = prop;
-    }
-
-    @Override
-    public String toString() {
-        return "LibraryClsfDO{" +
-                "library='" + library + '\'' +
-                ", prop=" + prop +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java
deleted file mode 100644
index 9649f7f..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.springblade.code.vo.universalInter.attrmap;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-/***
- * 搴撹妭鐐�
- */
-@XStreamAlias("clsfs")
-public class LibraryDO {
-    /***
-     * 搴撹妭鐐�
-     */
-    @XStreamImplicit(itemFieldName="clsf")
-    private List<LibraryClsfDO> clsf;
-
-    public List<LibraryClsfDO> getClsf() {
-        return clsf;
-    }
-
-    public void setClsf(List<LibraryClsfDO> clsf) {
-        this.clsf = clsf;
-    }
-
-    @Override
-    public String toString() {
-        return "LibraryDO{" +
-                "clsf=" + clsf +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java
deleted file mode 100644
index bcaeb27..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.springblade.code.vo.universalInter.attrmap;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class RowDatas {
-    /**
-     * 鏁版嵁id
-     */
-    private String oid;
-    /***
-     * 鍒涘缓鑰�
-     */
-    private String creator;
-    /***
-     * 鏇存敼鑰�
-     */
-    private  String editor;
-    /**
-     * 鏁版嵁浣嶇疆
-     */
-    private String rowIndex;
-    /***
-     * 鎿嶄綔绫诲瀷
-     */
-    private String operation;
-    /**
-     * 鏁版嵁鐘舵��
-     */
-    private String status;
-    /***
-     * 缂栫爜
-     */
-    private String code;
-
-    private Map<Integer, String> data = new HashMap();
-
-    private Map<String, String> filedValue = new HashMap();
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public String getEditor() {
-        return editor;
-    }
-
-    public void setEditor(String editor) {
-        this.editor = editor;
-    }
-
-    public String getOperation() {
-        return operation;
-    }
-
-    public void setOperation(String operation) {
-        this.operation = operation;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getRowIndex() {
-        return rowIndex;
-    }
-
-    public void setRowIndex(String rowIndex) {
-        this.rowIndex = rowIndex;
-    }
-
-    public Map<Integer, String> getData() {
-        return data;
-    }
-
-    public void setData(Map<Integer, String> data) {
-        this.data = data;
-    }
-
-    public Map<String, String> getFiledValue() {
-        return filedValue;
-    }
-
-    public void setFiledValue(Map<String, String> filedValue) {
-        this.filedValue = filedValue;
-    }
-
-    @Override
-    public String toString() {
-        return "RowDatas{" +
-                "oid='" + oid + '\'' +
-                ", creator='" + creator + '\'' +
-                ", editor='" + editor + '\'' +
-                ", rowIndex='" + rowIndex + '\'' +
-                ", operation='" + operation + '\'' +
-                ", status='" + status + '\'' +
-                ", code='" + code + '\'' +
-                ", data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java
deleted file mode 100644
index 289a3e8..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.springblade.code.vo.universalInter.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("classify")
-public class ClassifyVO {
-    /**
-     * 鍒嗙被id
-     */
-    @XStreamAsAttribute
-    private String id;
-    /***
-     * 鍒嗙被鍚嶇О
-     */
-    @XStreamAsAttribute
-    private String name;
-    /***
-     * 鐖惰妭鐐筰d
-     */
-    @XStreamAsAttribute
-    private String pid;
-    /***
-     * 鍒嗙被浠e彿
-     */
-    @XStreamAsAttribute
-    private String classCode;
-    /***
-     * 鎻忚堪
-     */
-    @XStreamAsAttribute
-    private  String description;
-    /***
-     * 鍒嗙被閾炬帴璺緞
-     */
-    @XStreamAsAttribute
-    private  String fullPathName;
-    /***
-     * 鍒嗙被鐘舵��
-     */
-    @XStreamAsAttribute
-    private String lcStatus;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getPid() {
-        return pid;
-    }
-
-    public void setPid(String pid) {
-        this.pid = pid;
-    }
-
-    public String getClassCode() {
-        return classCode;
-    }
-
-    public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getFullPathName() {
-        return fullPathName;
-    }
-
-    public void setFullPathName(String fullPathName) {
-        this.fullPathName = fullPathName;
-    }
-
-    public String getLcStatus() {
-        return lcStatus;
-    }
-
-    public void setLcStatus(String lcStatus) {
-        this.lcStatus = lcStatus;
-    }
-
-    @Override
-    public String toString() {
-        return "ClassifyVO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", pid='" + pid + '\'' +
-                ", classCode='" + classCode + '\'' +
-                ", description='" + description + '\'' +
-                ", fullPathName='" + fullPathName + '\'' +
-                ", lcStatus='" + lcStatus + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java
deleted file mode 100644
index 2451bb3..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.springblade.code.vo.universalInter.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-@XStreamAlias("library ")
-public class LibraryVO {
-    @XStreamAsAttribute
-    private String id;
-    @XStreamAsAttribute
-    private  String name;
-    @XStreamImplicit
-    private List<ClassifyVO>classify;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<ClassifyVO> getClassify() {
-        return classify;
-    }
-
-    public void setClassify(List<ClassifyVO> classify) {
-        this.classify = classify;
-    }
-
-    @Override
-    public String toString() {
-        return "LibraryVO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", classify=" + classify +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java
deleted file mode 100644
index 5e86abb..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.springblade.code.vo.universalInter.classify;
-
-public class QueryClassifyVO {
-    /***
-     *
-     */
-    private QueryData data;
-
-    public QueryData getData() {
-        return data;
-    }
-
-    public void setData(QueryData data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "QueryClassifyVO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java
deleted file mode 100644
index e6f4c9a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.springblade.code.vo.universalInter.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import org.springblade.code.vo.universalInter.apply.UserVO;
-
-@XStreamAlias("data")
-public class QueryData {
-    @XStreamAsAttribute
-    private String systemId;
-    private UserVO userVo;
-    private QueryLibraryVO library ;
-    public QueryLibraryVO getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(QueryLibraryVO library) {
-        this.library = library;
-    }
-
-    public String getSystemId() {
-        return systemId;
-    }
-
-    public void setSystemId(String systemId) {
-        this.systemId = systemId;
-    }
-
-    public UserVO getUserVo() {
-        return userVo;
-    }
-
-    public void setUserVo(UserVO userVo) {
-        this.userVo = userVo;
-    }
-
-    @Override
-    public String toString() {
-        return "QueryData{" +
-                "systemId='" + systemId + '\'' +
-                ", library=" + library +
-                '}';
-    }
-}
-
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java
deleted file mode 100644
index 8852d6d..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.springblade.code.vo.universalInter.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("library")
-public class QueryLibraryVO {
-    @XStreamAsAttribute
-    private String id;
-    @XStreamImplicit
-    private List<String> classifyid;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public List<String> getClassifyid() {
-        return classifyid;
-    }
-
-    public void setClassifyid(List<String> classifyid) {
-        this.classifyid = classifyid;
-    }
-
-    @Override
-    public String toString() {
-        return "LibraryVO{" +
-                "id='" + id + '\'' +
-                ", classifyid=" + classifyid +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java
deleted file mode 100644
index 550cbe1..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springblade.code.vo.universalInter.classify;
-
-public class ResultClassifyVO {
-
-   private   ResultData resultData;
-
-    public ResultData getResultData() {
-        return resultData;
-    }
-
-    public void setResultData(ResultData resultData) {
-        this.resultData = resultData;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultClassifyVO{" +
-                "resultData=" + resultData +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java
deleted file mode 100644
index 3970c1d..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.springblade.code.vo.universalInter.classify;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-
-@XStreamAlias("data")
-public class ResultData {
-    @XStreamAlias("errorid")
-    private  String errorid;
-    @XStreamAlias("msg")
-    private String msg;
-    private LibraryVO library ;
-
-    public LibraryVO getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(LibraryVO library) {
-        this.library = library;
-    }
-
-    public String getErrorid() {
-        return errorid;
-    }
-
-    public void setErrorid(String errorid) {
-        this.errorid = errorid;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultData{" +
-                "code='" + errorid + '\'' +
-                ", msg='" + msg + '\'' +
-                ", library=" + library +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java
deleted file mode 100644
index f05a681..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.springblade.code.vo.universalInter.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("condtion")
-public class CondtionVO {
-    @XStreamAsAttribute
-    private  String classCode;
-    @XStreamAsAttribute
-    private String library;
-    @XStreamAsAttribute
-    private String queryFileds;
-    @XStreamImplicit
-    private List<PropertyVO> pro;
-    public String getClassCode() {
-        return classCode;
-    }
-
-    public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-    public String getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(String library) {
-        this.library = library;
-    }
-
-    public String getQueryFileds() {
-        return queryFileds;
-    }
-
-    public void setQueryFileds(String queryFileds) {
-        this.queryFileds = queryFileds;
-    }
-
-    public List<PropertyVO> getPro() {
-        return pro;
-    }
-
-    public void setPro(List<PropertyVO> pro) {
-        this.pro = pro;
-    }
-
-    @Override
-    public String toString() {
-        return "CondtionVO{" +
-                "classCode='" + classCode + '\'' +
-                ", library='" + library + '\'' +
-                ", queryFileds='" + queryFileds + '\'' +
-                ", pro=" + pro +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java
deleted file mode 100644
index 2cc3505..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.springblade.code.vo.universalInter.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import org.springblade.code.vo.universalInter.apply.UserVO;
-
-@XStreamAlias("condtions")
-public class CondtionsVO {
-    @XStreamAsAttribute
-    private  String systemId;
-
-    private UserVO user;
-
-    private CondtionVO condtion;
-
-    public String getSystemId() {
-        return systemId;
-    }
-
-    public void setSystemId(String systemId) {
-        this.systemId = systemId;
-    }
-
-    public UserVO getUser() {
-        return user;
-    }
-
-    public void setUser(UserVO user) {
-        this.user = user;
-    }
-
-    public CondtionVO getCondtion() {
-        return condtion;
-    }
-
-    public void setCondtion(CondtionVO condtion) {
-        this.condtion = condtion;
-    }
-
-    @Override
-    public String toString() {
-        return "CondtionsVO{" +
-                "systemId='" + systemId + '\'' +
-                ", user=" + user +
-                ", condtion=" + condtion +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java
deleted file mode 100644
index 4a4795d..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.springblade.code.vo.universalInter.data;
-
-public class DataCondtionsVO {
-    private CondtionsVO condtions;
-
-    public CondtionsVO getCondtions() {
-        return condtions;
-    }
-
-    public void setCondtions(CondtionsVO condtions) {
-        this.condtions = condtions;
-    }
-
-    @Override
-    public String toString() {
-        return "DataCondtionsVO{" +
-                "condtions=" + condtions +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java
deleted file mode 100644
index 8e36472..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.springblade.code.vo.universalInter.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("object")
-public class DataObjectVO {
-    @XStreamAsAttribute
-    private String code;
-    @XStreamAsAttribute
-    private String  status;
-    @XStreamAsAttribute
-    private  String library;
-    @XStreamAsAttribute
-    private String classCode;
-    @XStreamImplicit
-    private List<PropertyVO> pro;
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(String library) {
-        this.library = library;
-    }
-
-    public String getClassCode() {
-        return classCode;
-    }
-
-    public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-    public List<PropertyVO> getPro() {
-        return pro;
-    }
-
-    public void setPro(List<PropertyVO> pro) {
-        this.pro = pro;
-    }
-
-    @Override
-    public String toString() {
-        return "DataObjectVO{" +
-                "code='" + code + '\'' +
-                ", status='" + status + '\'' +
-                ", library='" + library + '\'' +
-                ", classCode='" + classCode + '\'' +
-                ", pro=" + pro +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java
deleted file mode 100644
index 08c096a..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.springblade.code.vo.universalInter.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-@XStreamAlias("pro")
-public class PropertyVO {
-    @XStreamAsAttribute
-    private String filedName;
-    @XStreamAsAttribute
-    private String outname;
-
-    @XStreamAsAttribute
-    private String filedValue;
-
-    public String getFiledName() {
-        return filedName;
-    }
-
-    public void setFiledName(String filedName) {
-        this.filedName = filedName;
-    }
-
-    public String getFiledValue() {
-        return filedValue;
-    }
-
-    public void setFiledValue(String filedValue) {
-        this.filedValue = filedValue;
-    }
-
-    public String getOutname() {
-        return outname;
-    }
-
-    public void setOutname(String outname) {
-        this.outname = outname;
-    }
-
-    @Override
-    public String toString() {
-        return "PropertyVO{" +
-                "filedName='" + filedName + '\'' +
-                ", outname='" + outname + '\'' +
-                ", filedValue='" + filedValue + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java
deleted file mode 100644
index b6a91f7..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.springblade.code.vo.universalInter.data;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
-import java.util.List;
-
-@XStreamAlias("data")
-public class ResultDataVO {
-    private String errorid;
-    private String msg;
-    @XStreamImplicit
-    private List<DataObjectVO> object;
-
-    public List<DataObjectVO> getObject() {
-        return object;
-    }
-
-    public void setObject(List<DataObjectVO> object) {
-        this.object = object;
-    }
-
-    public String getErrorid() {
-        return errorid;
-    }
-
-    public void setErrorid(String errorid) {
-        this.errorid = errorid;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultDataVO{" +
-                "errorid='" + errorid + '\'' +
-                ", msg='" + msg + '\'' +
-                ", object=" + object +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java
deleted file mode 100644
index afd9528..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springblade.code.vo.universalInter.data;
-
-public class ResultVO {
-
-    private ResultDataVO data;
-
-    public ResultDataVO getData() {
-        return data;
-    }
-
-    public void setData(ResultDataVO data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultVO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java
deleted file mode 100644
index 0dc0365..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.springblade.code.vo.universalInter.result.json;
-
-public class JSONResultClassfyVO {
-    private  String classCode;
-    private  String library;
-    private  String fullclsfNamePath;
-    private JSONResultDataObjectDO  objects;
-    public String getClassCode() {
-        return classCode;
-    }
-
-    public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-    public String getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(String library) {
-        this.library = library;
-    }
-
-    public String getFullclsfNamePath() {
-        return fullclsfNamePath;
-    }
-
-    public void setFullclsfNamePath(String fullclsfNamePath) {
-        this.fullclsfNamePath = fullclsfNamePath;
-    }
-
-    public JSONResultDataObjectDO getObjects() {
-        return objects;
-    }
-
-    public void setObjects(JSONResultDataObjectDO objects) {
-        this.objects = objects;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultClassfyVO{" +
-                "classCode='" + classCode + '\'' +
-                ", library='" + library + '\'' +
-                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
-                ", objects=" + objects +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java
deleted file mode 100644
index da0269f..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springblade.code.vo.universalInter.result.json;
-
-import java.util.List;
-public class JSONResultClassfysVO {
-    private List<JSONResultClassfyVO> classify;
-
-    public List<JSONResultClassfyVO> getClassify() {
-        return classify;
-    }
-
-    public void setClassify(List<JSONResultClassfyVO> classify) {
-        this.classify = classify;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultClassfysVO{" +
-                "classfy=" + classify +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java
deleted file mode 100644
index 336fa55..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.springblade.code.vo.universalInter.result.json;
-
-import java.util.List;
-
-/***
- * objects鑺傜偣
- * @author xj
- */
-public class JSONResultDataObjectDO {
-    /***
-     * objects涓嬫暟鎹璞�
-     */
-    private List<JSONResultDataObjectDetailDO> object ;
-    public List<JSONResultDataObjectDetailDO> getObject() {
-        return object;
-    }
-    public void setObject(List<JSONResultDataObjectDetailDO> object) {
-        this.object = object;
-    }
-    @Override
-    public String toString() {
-        return "ResultDataObjectDO{" +
-                "object=" + object +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java
deleted file mode 100644
index af09a28..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.springblade.code.vo.universalInter.result.json;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-/***
- * object鑺傜偣
- * @author xj
- */
-@XStreamAlias("obect")
-public class JSONResultDataObjectDetailDO {
-    @XStreamAsAttribute
-    private String  id;
-    @XStreamAsAttribute
-    private  String errorid;
-    @XStreamAsAttribute
-    private String code;
-    @XStreamAlias("msg")
-    private String msg;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getErrorid() {
-        return errorid;
-    }
-
-    public void setErrorid(String errorid) {
-        this.errorid = errorid;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultDataObjectDetailDO{" +
-                "id='" + id + '\'' +
-                ", errorid='" + errorid + '\'' +
-                ", code='" + code + '\'' +
-                ", msg='" + msg + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java
deleted file mode 100644
index dd2584d..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.springblade.code.vo.universalInter.result.json;
-public class JSONResultDataVO {
-    private JSONResultSystemVO data;
-
-    public JSONResultSystemVO getData() {
-        return data;
-    }
-
-    public void setData(JSONResultSystemVO data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultDataVO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java
deleted file mode 100644
index 489f0bb..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.springblade.code.vo.universalInter.result.json;
-
-/***
- * 杩斿洖缁撴灉瀵硅薄
- */
-public class JSONResultSystemVO {
-    /***
-     * 閿欒鏍囪瘑
-     */
-    private String errorid;
-    /***
-     * 娑堟伅
-     */
-    private  String msg;
-    /**
-     * 杩斿洖缁撴灉瀵硅薄
-     */
-    private  JSONResultClassfysVO classifys;
-
-    public String getErrorid() {
-        return errorid;
-    }
-
-    public void setErrorid(String errorid) {
-        this.errorid = errorid;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public JSONResultClassfysVO getClassifys() {
-        return classifys;
-    }
-
-    public void setClassifys(JSONResultClassfysVO classifys) {
-        this.classifys = classifys;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultSystemVO{" +
-                "errorid='" + errorid + '\'' +
-                ", msg='" + msg + '\'' +
-                ", classifys=" + classifys +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java
deleted file mode 100644
index 93bd32b..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.springblade.code.vo.universalInter.result.xml;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-import java.util.List;
-
-@XStreamAlias("classfy")
-public class XMLResultClassfyVO {
-    @XStreamAsAttribute
-    private  String classCode;
-    @XStreamAsAttribute
-    private  String library;
-    @XStreamAsAttribute
-    private  String fullclsfNamePath;
-    @XStreamAlias("objects")
-    private List<XMLResultDataObjectDetailDO> objects;
-
-    public String getClassCode() {
-        return classCode;
-    }
-
-    public void setClassCode(String classCode) {
-        this.classCode = classCode;
-    }
-
-    public String getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(String library) {
-        this.library = library;
-    }
-
-    public String getFullclsfNamePath() {
-        return fullclsfNamePath;
-    }
-
-    public void setFullclsfNamePath(String fullclsfNamePath) {
-        this.fullclsfNamePath = fullclsfNamePath;
-    }
-
-    public List<XMLResultDataObjectDetailDO> getObjects() {
-        return objects;
-    }
-
-    public void setObjects(List<XMLResultDataObjectDetailDO> objects) {
-        this.objects = objects;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultClassfyVO{" +
-                "classCode='" + classCode + '\'' +
-                ", library='" + library + '\'' +
-                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
-                ", objects=" + objects +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java
deleted file mode 100644
index ccc44fc..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.springblade.code.vo.universalInter.result.xml;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-/***
- * object鑺傜偣
- * @author xj
- */
-@XStreamAlias("object")
-public class XMLResultDataObjectDetailDO {
-    @XStreamAsAttribute
-    private String  id;
-    @XStreamAsAttribute
-    private  String errorid;
-    @XStreamAsAttribute
-    private String code;
-    @XStreamAlias("msg")
-    private String msg;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getErrorid() {
-        return errorid;
-    }
-
-    public void setErrorid(String errorid) {
-        this.errorid = errorid;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultDataObjectDetailDO{" +
-                "id='" + id + '\'' +
-                ", errorid='" + errorid + '\'' +
-                ", code='" + code + '\'' +
-                ", msg='" + msg + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java
deleted file mode 100644
index 0bc8b18..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.springblade.code.vo.universalInter.result.xml;
-
-public class XMLResultDataVO {
-    private XMLResultSystemVO data;
-    public XMLResultSystemVO getData() {
-        return data;
-    }
-
-    public void setData(XMLResultSystemVO data) {
-        this.data = data;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultDataVO{" +
-                "data=" + data +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java
deleted file mode 100644
index a8129bb..0000000
--- a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.springblade.code.vo.universalInter.result.xml;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-import java.util.List;
-
-/***
- * 杩斿洖缁撴灉瀵硅薄
- */
-@XStreamAlias("data")
-public class XMLResultSystemVO {
-    /***
-     * 閿欒鏍囪瘑
-     */
-    @XStreamAsAttribute
-    private String errorid;
-    /***
-     * 娑堟伅
-     */
-    @XStreamAlias("msg")
-    private  String msg;
-    /**
-     * 杩斿洖缁撴灉瀵硅薄
-     */
-    @XStreamAlias("classifys")
-    private List<XMLResultClassfyVO> classifys;
-
-    public String getErrorid() {
-        return errorid;
-    }
-
-    public void setErrorid(String errorid) {
-        this.errorid = errorid;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public List<XMLResultClassfyVO> getClassifys() {
-        return classifys;
-    }
-
-    public void setClassifys(List<XMLResultClassfyVO> classifys) {
-        this.classifys = classifys;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultSystemVO{" +
-                "errorid='" + errorid + '\'' +
-                ", msg='" + msg + '\'' +
-                ", classifys=" + classifys +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service-api/blade-desk-api/pom.xml b/Source/BladeX/blade-service-api/blade-desk-api/pom.xml
deleted file mode 100644
index fdca91c..0000000
--- a/Source/BladeX/blade-service-api/blade-desk-api/pom.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-desk-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java b/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java
deleted file mode 100644
index c008791..0000000
--- a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-import java.util.Date;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_notice")
-@EqualsAndHashCode(callSuper = true)
-public class Notice extends TenantEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鏍囬
-	 */
-	@ApiModelProperty(value = "鏍囬")
-	private String title;
-
-	/**
-	 * 閫氱煡绫诲瀷
-	 */
-	@ApiModelProperty(value = "閫氱煡绫诲瀷")
-	private Integer category;
-
-	/**
-	 * 鍙戝竷鏃ユ湡
-	 */
-	@ApiModelProperty(value = "鍙戝竷鏃ユ湡")
-	private Date releaseTime;
-
-	/**
-	 * 鍐呭
-	 */
-	@ApiModelProperty(value = "鍐呭")
-	private String content;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/feign/INoticeClient.java b/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/feign/INoticeClient.java
deleted file mode 100644
index c189eb4..0000000
--- a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/feign/INoticeClient.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.feign;
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.BladePage;
-import org.springblade.desk.entity.Notice;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-/**
- * Notice Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_DESK_NAME
-)
-public interface INoticeClient {
-
-	String API_PREFIX = "/client";
-	String TOP = API_PREFIX + "/top";
-
-	/**
-	 * 鑾峰彇notice鍒楄〃
-	 *
-	 * @param current
-	 * @param size
-	 * @return
-	 */
-	@GetMapping(TOP)
-	BladePage<Notice> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/vo/NoticeVO.java b/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/vo/NoticeVO.java
deleted file mode 100644
index 5b09e17..0000000
--- a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/vo/NoticeVO.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.springblade.desk.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.desk.entity.Notice;
-
-/**
- * 閫氱煡鍏憡瑙嗗浘绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class NoticeVO extends Notice {
-
-	@ApiModelProperty(value = "閫氱煡绫诲瀷鍚�")
-	private String categoryName;
-
-	@ApiModelProperty(value = "绉熸埛缂栧彿")
-	private String tenantId;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/pom.xml b/Source/BladeX/blade-service-api/blade-dict-api/pom.xml
deleted file mode 100644
index 4cca987..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-dict-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-cache</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictBizCache.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictBizCache.java
deleted file mode 100644
index 9e1051a..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictBizCache.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.enums.DictBizEnum;
-import org.springblade.system.feign.IDictBizClient;
-
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 涓氬姟瀛楀吀缂撳瓨宸ュ叿绫�
- *
- * @author Chill
- */
-public class DictBizCache {
-
-	private static final String DICT_ID = "dictBiz:id";
-	private static final String DICT_VALUE = "dictBiz:value";
-	private static final String DICT_LIST = "dictBiz:list";
-
-	private static IDictBizClient dictClient;
-
-	private static IDictBizClient getDictClient() {
-		if (dictClient == null) {
-			dictClient = SpringUtil.getBean(IDictBizClient.class);
-		}
-		return dictClient;
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀瀹炰綋
-	 *
-	 * @param id 涓婚敭
-	 * @return DictBiz
-	 */
-	public static DictBiz getById(Long id) {
-		String keyPrefix = DICT_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix, id, () -> {
-			R<DictBiz> result = getDictClient().getById(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿鏋氫妇
-	 * @param dictKey Integer鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(DictBizEnum code, Integer dictKey) {
-		return getValue(code.getName(), dictKey);
-	}
-
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey Integer鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(String code, Integer dictKey) {
-		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, String.valueOf(dictKey), () -> {
-			R<String> result = getDictClient().getValue(code, String.valueOf(dictKey));
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿鏋氫妇
-	 * @param dictKey String鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(DictBizEnum code, String dictKey) {
-		return getValue(code.getName(), dictKey);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey String鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(String code, String dictKey) {
-		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, dictKey, () -> {
-			R<String> result = getDictClient().getValue(code, dictKey);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀闆嗗悎
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return List<DictBiz>
-	 */
-	public static List<DictBiz> getList(String code) {
-		String keyPrefix = DICT_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> {
-			R<List<DictBiz>> result = getDictClient().getList(code);
-			return result.getData();
-		});
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java
deleted file mode 100644
index 15a8367..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.entity.Dict;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.feign.IDictClient;
-
-import java.util.List;
-import java.util.Optional;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 瀛楀吀缂撳瓨宸ュ叿绫�
- *
- * @author Chill
- */
-public class DictCache {
-
-	private static final String DICT_ID = "dict:id:";
-	private static final String DICT_KEY = "dict:key:";
-	private static final String DICT_VALUE = "dict:value:";
-	private static final String DICT_LIST = "dict:list:";
-
-	private static final Boolean TENANT_MODE = Boolean.FALSE;
-
-	private static IDictClient dictClient;
-
-	private static IDictClient getDictClient() {
-		if (dictClient == null) {
-			dictClient = SpringUtil.getBean(IDictClient.class);
-		}
-		return dictClient;
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀瀹炰綋
-	 *
-	 * @param id 涓婚敭
-	 * @return Dict
-	 */
-	public static Dict getById(Long id) {
-		return CacheUtil.get(DICT_CACHE, DICT_ID, id, () -> {
-			R<Dict> result = getDictClient().getById(id);
-			return result.getData();
-		}, TENANT_MODE);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code      瀛楀吀缂栧彿鏋氫妇
-	 * @param dictValue 瀛楀吀鍊�
-	 * @return String
-	 */
-	public static String getKey(DictEnum code, String dictValue) {
-		return getKey(code.getName(), dictValue);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀閿�
-	 *
-	 * @param code      瀛楀吀缂栧彿
-	 * @param dictValue 瀛楀吀鍊�
-	 * @return String
-	 */
-	public static String getKey(String code, String dictValue) {
-		return CacheUtil.get(DICT_CACHE, DICT_KEY + code + StringPool.COLON, dictValue, () -> {
-			List<Dict> list = getList(code);
-			Optional<String> key = list.stream().filter(
-				dict -> dict.getDictValue().equalsIgnoreCase(dictValue)
-			).map(Dict::getDictKey).findFirst();
-			return key.orElse(StringPool.EMPTY);
-		}, TENANT_MODE);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿鏋氫妇
-	 * @param dictKey Integer鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(DictEnum code, Integer dictKey) {
-		return getValue(code.getName(), dictKey);
-	}
-
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey Integer鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(String code, Integer dictKey) {
-		return CacheUtil.get(DICT_CACHE, DICT_VALUE + code + StringPool.COLON, String.valueOf(dictKey), () -> {
-			R<String> result = getDictClient().getValue(code, String.valueOf(dictKey));
-			return result.getData();
-		}, TENANT_MODE);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿鏋氫妇
-	 * @param dictKey String鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(DictEnum code, String dictKey) {
-		return getValue(code.getName(), dictKey);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey String鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(String code, String dictKey) {
-		return CacheUtil.get(DICT_CACHE, DICT_VALUE + code + StringPool.COLON, dictKey, () -> {
-			R<String> result = getDictClient().getValue(code, dictKey);
-			return result.getData();
-		}, TENANT_MODE);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀闆嗗悎
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return List<Dict>
-	 */
-	public static List<Dict> getList(String code) {
-		return CacheUtil.get(DICT_CACHE, DICT_LIST, code, () -> {
-			R<List<Dict>> result = getDictClient().getList(code);
-			return result.getData();
-		}, TENANT_MODE);
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/constant/DictConstant.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/constant/DictConstant.java
deleted file mode 100644
index aabc187..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/constant/DictConstant.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.constant;
-
-/**
- * 瀛楀吀甯搁噺.
- *
- * @author zhuangqian
- */
-public interface DictConstant {
-
-	String SEX_CODE = "sex";
-
-	String NOTICE_CODE = "notice";
-
-	String MENU_CATEGORY_CODE = "menu_category";
-
-	String BUTTON_FUNC_CODE = "button_func";
-
-	String YES_NO_CODE = "yes_no";
-
-	String FLOW_CATEGORY_CODE = "flow_category";
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/dto/DictDTO.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/dto/DictDTO.java
deleted file mode 100644
index c2597e5..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/dto/DictDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Dict;
-
-/**
- * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class DictDTO extends Dict {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java
deleted file mode 100644
index 13903bb..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_sys_dict")
-@ApiModel(value = "Dict瀵硅薄", description = "Dict瀵硅薄")
-public class Dict implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鐖朵富閿�
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐖朵富閿�")
-	private Long parentId;
-
-	/**
-	 * 瀛楀吀鐮�
-	 */
-	@ApiModelProperty(value = "瀛楀吀鐮�")
-	private String code;
-
-	/**
-	 * 瀛楀吀鍊�
-	 */
-	@ApiModelProperty(value = "瀛楀吀鍊�")
-	private String dictKey;
-
-	/**
-	 * 瀛楀吀鍚嶇О
-	 */
-	@ApiModelProperty(value = "瀛楀吀鍚嶇О")
-	private String dictValue;
-
-	/**
-	 * 鎺掑簭
-	 */
-	@ApiModelProperty(value = "鎺掑簭")
-	private Integer sort;
-
-	/**
-	 * 瀛楀吀澶囨敞
-	 */
-	@ApiModelProperty(value = "瀛楀吀澶囨敞")
-	private String remark;
-
-	/**
-	 * 鏄惁宸插皝瀛�
-	 */
-	@ApiModelProperty(value = "鏄惁宸插皝瀛�")
-	private Integer isSealed;
-
-	/**
-	 * 鏄惁宸插垹闄�
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "鏄惁宸插垹闄�")
-	private Integer isDeleted;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java
deleted file mode 100644
index 46bea61..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_sys_dict_biz")
-@ApiModel(value = "DictBiz瀵硅薄", description = "DictBiz瀵硅薄")
-public class DictBiz implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 绉熸埛ID
-	 */
-	@ApiModelProperty(value = "绉熸埛ID")
-	private String tenantId;
-
-	/**
-	 * 鐖朵富閿�
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐖朵富閿�")
-	private Long parentId;
-
-	/**
-	 * 瀛楀吀鐮�
-	 */
-	@ApiModelProperty(value = "瀛楀吀鐮�")
-	private String code;
-
-	/**
-	 * 瀛楀吀鍊�
-	 */
-	@ApiModelProperty(value = "瀛楀吀鍊�")
-	private String dictKey;
-
-	/**
-	 * 瀛楀吀鍚嶇О
-	 */
-	@ApiModelProperty(value = "瀛楀吀鍚嶇О")
-	private String dictValue;
-
-	/**
-	 * 鎺掑簭
-	 */
-	@ApiModelProperty(value = "鎺掑簭")
-	private Integer sort;
-
-	/**
-	 * 瀛楀吀澶囨敞
-	 */
-	@ApiModelProperty(value = "瀛楀吀澶囨敞")
-	private String remark;
-
-	/**
-	 * 鏄惁宸插皝瀛�
-	 */
-	@ApiModelProperty(value = "鏄惁宸插皝瀛�")
-	private Integer isSealed;
-
-	/**
-	 * 鏄惁宸插垹闄�
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "鏄惁宸插垹闄�")
-	private Integer isDeleted;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java
deleted file mode 100644
index 999201a..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 涓氬姟瀛楀吀鏋氫妇绫�
- *
- * @author Chill
- */
-@Getter
-@AllArgsConstructor
-public enum DictBizEnum {
-
-	/**
-	 * 娴嬭瘯
-	 */
-	TEST("test"),
-	;
-
-	final String name;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictEnum.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictEnum.java
deleted file mode 100644
index 609b7cc..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictEnum.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 绯荤粺瀛楀吀鏋氫妇绫�
- *
- * @author Chill
- */
-@Getter
-@AllArgsConstructor
-public enum DictEnum {
-
-	/**
-	 * 鎬у埆
-	 */
-	SEX("sex"),
-	/**
-	 * 閫氱煡绫诲瀷
-	 */
-	NOTICE("notice"),
-	/**
-	 * 鑿滃崟绫诲瀷
-	 */
-	MENU_CATEGORY("menu_category"),
-	/**
-	 * 鎸夐挳鍔熻兘
-	 */
-	BUTTON_FUNC("button_func"),
-	/**
-	 * 鏄惁
-	 */
-	YES_NO("yes_no"),
-	/**
-	 * 娴佺▼绫诲瀷
-	 */
-	FLOW("flow"),
-	/**
-	 * 鏈烘瀯绫诲瀷
-	 */
-	ORG_CATEGORY("org_category"),
-	/**
-	 * 鏁版嵁鏉冮檺
-	 */
-	DATA_SCOPE_TYPE("data_scope_type"),
-	/**
-	 * 鎺ュ彛鏉冮檺
-	 */
-	API_SCOPE_TYPE("api_scope_type"),
-	/**
-	 * 鏉冮檺绫诲瀷
-	 */
-	SCOPE_CATEGORY("scope_category"),
-	/**
-	 * 瀵硅薄瀛樺偍绫诲瀷
-	 */
-	OSS("oss"),
-	/**
-	 * 鐭俊鏈嶅姟绫诲瀷
-	 */
-	SMS("sms"),
-	/**
-	 * 宀椾綅绫诲瀷
-	 */
-	POST_CATEGORY("post_category"),
-	/**
-	 * 琛屾斂鍖哄垝
-	 */
-	REGION("region"),
-	/**
-	 * 鐢ㄦ埛骞冲彴
-	 */
-	USER_TYPE("user_type"),
-	;
-
-	final String name;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClient.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClient.java
deleted file mode 100644
index 0944f39..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClient.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.DictBiz;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_SYSTEM_NAME,
-	fallback = IDictBizClientFallback.class
-)
-public interface IDictBizClient {
-
-	String API_PREFIX = "/client";
-	String GET_BY_ID = API_PREFIX + "/dict-biz/get-by-id";
-	String GET_VALUE = API_PREFIX + "/dict-biz/get-value";
-	String GET_LIST = API_PREFIX + "/dict-biz/get-list";
-
-	/**
-	 * 鑾峰彇瀛楀吀瀹炰綋
-	 *
-	 * @param id 涓婚敭
-	 * @return
-	 */
-	@GetMapping(GET_BY_ID)
-	R<DictBiz> getById(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斿��
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	@GetMapping(GET_VALUE)
-	R<String> getValue(@RequestParam("code") String code, @RequestParam("dictKey") String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	@GetMapping(GET_LIST)
-	R<List<DictBiz>> getList(@RequestParam("code") String code);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClientFallback.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClientFallback.java
deleted file mode 100644
index cde9af7..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClientFallback.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.DictBiz;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * Feign澶辫触閰嶇疆
- *
- * @author Chill
- */
-@Component
-public class IDictBizClientFallback implements IDictBizClient {
-	@Override
-	public R<DictBiz> getById(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getValue(String code, String dictKey) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<DictBiz>> getList(String code) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClient.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClient.java
deleted file mode 100644
index 52c3c43..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClient.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.Dict;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_SYSTEM_NAME,
-	fallback = IDictClientFallback.class
-)
-public interface IDictClient {
-
-	String API_PREFIX = "/client";
-	String GET_BY_ID = API_PREFIX + "/dict/get-by-id";
-	String GET_VALUE = API_PREFIX + "/dict/get-value";
-	String GET_LIST = API_PREFIX + "/dict/get-list";
-
-	/**
-	 * 鑾峰彇瀛楀吀瀹炰綋
-	 *
-	 * @param id 涓婚敭
-	 * @return
-	 */
-	@GetMapping(GET_BY_ID)
-	R<Dict> getById(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斿��
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	@GetMapping(GET_VALUE)
-	R<String> getValue(@RequestParam("code") String code, @RequestParam("dictKey") String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	@GetMapping(GET_LIST)
-	R<List<Dict>> getList(@RequestParam("code") String code);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClientFallback.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClientFallback.java
deleted file mode 100644
index d1b0c99..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClientFallback.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.Dict;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * Feign澶辫触閰嶇疆
- *
- * @author Chill
- */
-@Component
-public class IDictClientFallback implements IDictClient {
-	@Override
-	public R<Dict> getById(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getValue(String code, String dictKey) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<Dict>> getList(String code) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictBizVO.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictBizVO.java
deleted file mode 100644
index 177bb24..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictBizVO.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.node.INode;
-import org.springblade.system.entity.DictBiz;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "DictBizVO瀵硅薄", description = "DictBizVO瀵硅薄")
-public class DictBizVO extends DictBiz implements INode<DictBizVO> {
-	private static final long serialVersionUID = 1L;
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 鐖惰妭鐐笽D
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
-
-	/**
-	 * 瀛愬瓩鑺傜偣
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<DictBizVO> children;
-
-	@Override
-	public List<DictBizVO> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
-
-	/**
-	 * 涓婄骇瀛楀吀
-	 */
-	private String parentName;
-}
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictVO.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictVO.java
deleted file mode 100644
index cebf74c..0000000
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictVO.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.node.INode;
-import org.springblade.system.entity.Dict;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "DictVO瀵硅薄", description = "DictVO瀵硅薄")
-public class DictVO extends Dict implements INode<DictVO> {
-	private static final long serialVersionUID = 1L;
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 鐖惰妭鐐笽D
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
-
-	/**
-	 * 瀛愬瓩鑺傜偣
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<DictVO> children;
-
-	@Override
-	public List<DictVO> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
-
-	/**
-	 * 涓婄骇瀛楀吀
-	 */
-	private String parentName;
-}
diff --git a/Source/BladeX/blade-service-api/blade-omd-api/pom.xml b/Source/BladeX/blade-service-api/blade-omd-api/pom.xml
deleted file mode 100644
index 922d846..0000000
--- a/Source/BladeX/blade-service-api/blade-omd-api/pom.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-omd-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/cache/DictBizCache.java b/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/cache/DictBizCache.java
deleted file mode 100644
index 3846a05..0000000
--- a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/cache/DictBizCache.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.omd.entity.DictBizM;
-import org.springblade.omd.enums.DictBizEnum;
-import org.springblade.omd.feign.IDictBizClient;
-
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 涓氬姟瀛楀吀缂撳瓨宸ュ叿绫�
- *
- * @author Chill
- */
-public class DictBizCache {
-
-	private static final String DICT_ID = "dictBiz:id";
-	private static final String DICT_VALUE = "dictBiz:value";
-	private static final String DICT_LIST = "dictBiz:list";
-
-	private static IDictBizClient dictClient;
-
-	private static IDictBizClient getDictClient() {
-		if (dictClient == null) {
-			dictClient = SpringUtil.getBean(IDictBizClient.class);
-		}
-		return dictClient;
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀瀹炰綋
-	 *
-	 * @param id 涓婚敭
-	 * @return DictBiz
-	 */
-	public static DictBizM getById(Long id) {
-		String keyPrefix = DICT_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix, id, () -> {
-			R<DictBizM> result = getDictClient().getById(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿鏋氫妇
-	 * @param dictKey Integer鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(DictBizEnum code, Integer dictKey) {
-		return getValue(code.getName(), dictKey);
-	}
-
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey Integer鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(String code, Integer dictKey) {
-		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, String.valueOf(dictKey), () -> {
-			R<String> result = getDictClient().getValue(code, String.valueOf(dictKey));
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿鏋氫妇
-	 * @param dictKey String鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(DictBizEnum code, String dictKey) {
-		return getValue(code.getName(), dictKey);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鍊�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey String鍨嬪瓧鍏搁敭
-	 * @return String
-	 */
-	public static String getValue(String code, String dictKey) {
-		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, dictKey, () -> {
-			R<String> result = getDictClient().getValue(code, dictKey);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀闆嗗悎
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return List<DictBiz>
-	 */
-	public static List<DictBizM> getList(String code) {
-		String keyPrefix = DICT_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> {
-			R<List<DictBizM>> result = getDictClient().getList(code);
-			return result.getData();
-		});
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/entity/DictBizM.java b/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/entity/DictBizM.java
deleted file mode 100644
index f6fec5d..0000000
--- a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/entity/DictBizM.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_sys_dict_biz")
-@ApiModel(value = "DictBiz瀵硅薄", description = "DictBiz瀵硅薄")
-public class DictBizM implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 绉熸埛ID
-	 */
-	@ApiModelProperty(value = "绉熸埛ID")
-	private String tenantId;
-
-	/**
-	 * 鐖朵富閿�
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐖朵富閿�")
-	private Long parentId;
-
-	/**
-	 * 瀛楀吀鐮�
-	 */
-	@ApiModelProperty(value = "瀛楀吀鐮�")
-	private String code;
-
-	/**
-	 * 瀛楀吀鍊�
-	 */
-	@ApiModelProperty(value = "瀛楀吀鍊�")
-	private String dictKey;
-
-	/**
-	 * 瀛楀吀鍚嶇О
-	 */
-	@ApiModelProperty(value = "瀛楀吀鍚嶇О")
-	private String dictValue;
-
-	/**
-	 * 鎺掑簭
-	 */
-	@ApiModelProperty(value = "鎺掑簭")
-	private Integer sort;
-
-	/**
-	 * 瀛楀吀澶囨敞
-	 */
-	@ApiModelProperty(value = "瀛楀吀澶囨敞")
-	private String remark;
-
-	/**
-	 * 鏄惁宸插皝瀛�
-	 */
-	@ApiModelProperty(value = "鏄惁宸插皝瀛�")
-	private Integer isSealed;
-
-	/**
-	 * 鏄惁宸插垹闄�
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "鏄惁宸插垹闄�")
-	private Integer isDeleted;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/enums/DictBizEnum.java b/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/enums/DictBizEnum.java
deleted file mode 100644
index 1bec1e8..0000000
--- a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/enums/DictBizEnum.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 涓氬姟瀛楀吀鏋氫妇绫�
- *
- * @author Chill
- */
-@Getter
-@AllArgsConstructor
-public enum DictBizEnum {
-
-	/**
-	 * 娴嬭瘯
-	 */
-	TEST("test"),
-	;
-
-	final String name;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClient.java b/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClient.java
deleted file mode 100644
index 4add47b..0000000
--- a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClient.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.feign;
-
-
-import org.springblade.core.tool.api.R;
-import org.springblade.omd.entity.DictBizM;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import javax.validation.Valid;
-import java.util.List;
-
-/**
- * Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = "blade-omd",
-	fallback = IDictBizClientFallback.class
-)
-public interface IDictBizClient {
-
-	String API_PREFIX = "/client";
-	String GET_BY_ID = API_PREFIX + "/dict-biz/get-by-id";
-	String GET_VALUE = API_PREFIX + "/dict-biz/get-value";
-	String GET_LIST = API_PREFIX + "/dict-biz/get-list";
-	String CHECK_VALUE = API_PREFIX + "/dict-biz/check-value";
-
-	/**
-	 * 鑾峰彇瀛楀吀瀹炰綋
-	 *
-	 * @param id 涓婚敭
-	 * @return
-	 */
-	@GetMapping(GET_BY_ID)
-	R<DictBizM> getById(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斿��
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	@GetMapping(GET_VALUE)
-	R<String> getValue(@RequestParam("code") String code, @RequestParam("dictKey") String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	@GetMapping(GET_LIST)
-	R<List<DictBizM>> getList(@RequestParam("code") String code);
-
-	/**
-	 * 妫�鏌ュ瓧鍏告槸鍚﹀瓨鍦紝瀛樺湪鍗宠繑鍥烇紝涓嶅瓨鍦ㄦ柊澧�
-	 *
-	 * @param dict 瀛楀吀鏁版嵁
-	 * @return
-	 */
-	@GetMapping(CHECK_VALUE)
-	R getCheck(@Valid @RequestBody DictBizM dict);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClientFallback.java b/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClientFallback.java
deleted file mode 100644
index 59b2e31..0000000
--- a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClientFallback.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.feign;
-
-import org.springblade.core.tool.api.R;
-import org.springblade.omd.entity.DictBizM;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * Feign澶辫触閰嶇疆
- *
- * @author Chill
- */
-@Component
-public class IDictBizClientFallback implements IDictBizClient {
-	@Override
-	public R<DictBizM> getById(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getValue(String code, String dictKey) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<DictBizM>> getList(String code) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R getCheck(DictBizM dict) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/vo/DictBizMVO.java b/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/vo/DictBizMVO.java
deleted file mode 100644
index aafd6ba..0000000
--- a/Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/vo/DictBizMVO.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.node.INode;
-import org.springblade.omd.entity.DictBizM;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "DictBizVO瀵硅薄", description = "DictBizVO瀵硅薄")
-public class DictBizMVO extends DictBizM implements INode<DictBizM> {
-	private static final long serialVersionUID = 1L;
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 鐖惰妭鐐笽D
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
-
-	/**
-	 * 瀛愬瓩鑺傜偣
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<DictBizM> children;
-
-	@Override
-	public List<DictBizM> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
-
-	/**
-	 * 涓婄骇瀛楀吀
-	 */
-	private String parentName;
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/pom.xml b/Source/BladeX/blade-service-api/blade-scope-api/pom.xml
deleted file mode 100644
index 74f801c..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/pom.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-scope-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-secure</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-cache</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-datascope</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/ApiScopeCache.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/ApiScopeCache.java
deleted file mode 100644
index c0be7e0..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/ApiScopeCache.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.feign.IApiScopeClient;
-
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 鎺ュ彛鏉冮檺缂撳瓨
- *
- * @author Chill
- */
-public class ApiScopeCache {
-
-	private static final String SCOPE_CACHE_CODE = "apiScope:code:";
-
-	private static IApiScopeClient apiScopeClient;
-
-	private static IApiScopeClient getApiScopeClient() {
-		if (apiScopeClient == null) {
-			apiScopeClient = SpringUtil.getBean(IApiScopeClient.class);
-		}
-		return apiScopeClient;
-	}
-
-	/**
-	 * 鑾峰彇鎺ュ彛鏉冮檺鍦板潃
-	 *
-	 * @param roleId 瑙掕壊id
-	 * @return permissions
-	 */
-	public static List<String> permissionPath(String roleId) {
-		List<String> permissions = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CODE, roleId, List.class, Boolean.FALSE);
-		if (permissions == null) {
-			permissions = getApiScopeClient().permissionPath(roleId);
-			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CODE, roleId, permissions);
-		}
-		return permissions;
-	}
-
-	/**
-	 * 鑾峰彇鎺ュ彛鏉冮檺淇℃伅
-	 *
-	 * @param permission 鏉冮檺缂栧彿
-	 * @param roleId     瑙掕壊id
-	 * @return permissions
-	 */
-	public static List<String> permissionCode(String permission, String roleId) {
-		List<String> permissions = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CODE, permission + StringPool.COLON + roleId, List.class, Boolean.FALSE);
-		if (permissions == null) {
-			permissions = getApiScopeClient().permissionCode(permission, roleId);
-			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CODE, permission + StringPool.COLON + roleId, permissions);
-		}
-		return permissions;
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/DataScopeCache.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/DataScopeCache.java
deleted file mode 100644
index 666c6f2..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/DataScopeCache.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.datascope.model.DataScopeModel;
-import org.springblade.core.tool.utils.CollectionUtil;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.system.feign.IDataScopeClient;
-
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 鏁版嵁鏉冮檺缂撳瓨
- *
- * @author Chill
- */
-public class DataScopeCache {
-
-	private static final String SCOPE_CACHE_CODE = "dataScope:code:";
-	private static final String SCOPE_CACHE_CLASS = "dataScope:class:";
-	private static final String DEPT_CACHE_ANCESTORS = "dept:ancestors:";
-
-	private static IDataScopeClient dataScopeClient;
-
-	private static IDataScopeClient getDataScopeClient() {
-		if (dataScopeClient == null) {
-			dataScopeClient = SpringUtil.getBean(IDataScopeClient.class);
-		}
-		return dataScopeClient;
-	}
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param mapperId 鏁版嵁鏉冮檺mapperId
-	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
-	 * @return DataScopeModel
-	 */
-	public static DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
-		DataScopeModel dataScope = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CLASS, mapperId + StringPool.COLON + roleId, DataScopeModel.class, Boolean.FALSE);
-		if (dataScope == null || !dataScope.getSearched()) {
-			dataScope = getDataScopeClient().getDataScopeByMapper(mapperId, roleId);
-			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CLASS, mapperId + StringPool.COLON + roleId, dataScope);
-		}
-		return StringUtil.isNotBlank(dataScope.getResourceCode()) ? dataScope : null;
-	}
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
-	 * @return DataScopeModel
-	 */
-	public static DataScopeModel getDataScopeByCode(String code) {
-		DataScopeModel dataScope = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CODE, code, DataScopeModel.class, Boolean.FALSE);
-		if (dataScope == null || !dataScope.getSearched()) {
-			dataScope = getDataScopeClient().getDataScopeByCode(code);
-			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CODE, code, dataScope);
-		}
-		return StringUtil.isNotBlank(dataScope.getResourceCode()) ? dataScope : null;
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬瀛愮骇
-	 *
-	 * @param deptId 閮ㄩ棬id
-	 * @return deptIds
-	 */
-	public static List<Long> getDeptAncestors(Long deptId) {
-		List ancestors = CacheUtil.get(SYS_CACHE, DEPT_CACHE_ANCESTORS, deptId, List.class);
-		if (CollectionUtil.isEmpty(ancestors)) {
-			ancestors = getDataScopeClient().getDeptAncestors(deptId);
-			CacheUtil.put(SYS_CACHE, DEPT_CACHE_ANCESTORS, deptId, ancestors);
-		}
-		return ancestors;
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/config/ScopeConfiguration.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/config/ScopeConfiguration.java
deleted file mode 100644
index e1f6d83..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/config/ScopeConfiguration.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.config;
-
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.datascope.handler.ScopeModelHandler;
-import org.springblade.core.secure.config.RegistryConfiguration;
-import org.springblade.core.secure.handler.IPermissionHandler;
-import org.springblade.system.handler.ApiScopePermissionHandler;
-import org.springblade.system.handler.DataScopeModelHandler;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 鍏叡灏佽鍖呴厤缃被
- *
- * @author Chill
- */
-@Configuration(proxyBeanMethods = false)
-@AllArgsConstructor
-@AutoConfigureBefore(RegistryConfiguration.class)
-public class ScopeConfiguration {
-
-	@Bean
-	public ScopeModelHandler scopeModelHandler() {
-		return new DataScopeModelHandler();
-	}
-
-	@Bean
-	public IPermissionHandler permissionHandler() {
-		return new ApiScopePermissionHandler();
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClient.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClient.java
deleted file mode 100644
index d812e64..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClient.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * 鎺ュ彛鏉冮檺Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_SYSTEM_NAME,
-	fallback = IApiScopeClientFallback.class
-)
-public interface IApiScopeClient {
-
-	String API_PREFIX = "/client/api-scope";
-	String PERMISSION_PATH = API_PREFIX + "/permission-path";
-	String PERMISSION_CODE = API_PREFIX + "/permission-code";
-
-	/**
-	 * 鑾峰彇鎺ュ彛鏉冮檺鍦板潃
-	 *
-	 * @param roleId 瑙掕壊id
-	 * @return permissions
-	 */
-	@GetMapping(PERMISSION_PATH)
-	List<String> permissionPath(@RequestParam("roleId") String roleId);
-
-	/**
-	 * 鑾峰彇鎺ュ彛鏉冮檺淇℃伅
-	 *
-	 * @param permission 鏉冮檺缂栧彿
-	 * @param roleId     瑙掕壊id
-	 * @return permissions
-	 */
-	@GetMapping(PERMISSION_CODE)
-	List<String> permissionCode(@RequestParam("permission") String permission, @RequestParam("roleId") String roleId);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClientFallback.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClientFallback.java
deleted file mode 100644
index de7eea4..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClientFallback.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * IApiScopeClientFallback
- *
- * @author Chill
- */
-@Component
-public class IApiScopeClientFallback implements IApiScopeClient {
-	@Override
-	public List<String> permissionPath(String roleId) {
-		return null;
-	}
-
-	@Override
-	public List<String> permissionCode(String permission, String roleId) {
-		return null;
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClient.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClient.java
deleted file mode 100644
index cf82a7f..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClient.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springblade.core.datascope.model.DataScopeModel;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * 鏁版嵁鏉冮檺Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_SYSTEM_NAME,
-	fallback = IDataScopeClientFallback.class
-)
-public interface IDataScopeClient {
-
-	String API_PREFIX = "/client/data-scope";
-	String GET_DATA_SCOPE_BY_MAPPER = API_PREFIX + "/by-mapper";
-	String GET_DATA_SCOPE_BY_CODE = API_PREFIX + "/by-code";
-	String GET_DEPT_ANCESTORS = API_PREFIX + "/dept-ancestors";
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param mapperId 鏁版嵁鏉冮檺mapperId
-	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
-	 * @return DataScopeModel
-	 */
-	@GetMapping(GET_DATA_SCOPE_BY_MAPPER)
-	DataScopeModel getDataScopeByMapper(@RequestParam("mapperId") String mapperId, @RequestParam("roleId") String roleId);
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
-	 * @return DataScopeModel
-	 */
-	@GetMapping(GET_DATA_SCOPE_BY_CODE)
-	DataScopeModel getDataScopeByCode(@RequestParam("code") String code);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬瀛愮骇
-	 *
-	 * @param deptId 閮ㄩ棬id
-	 * @return deptIds
-	 */
-	@GetMapping(GET_DEPT_ANCESTORS)
-	List<Long> getDeptAncestors(@RequestParam("deptId") Long deptId);
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClientFallback.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClientFallback.java
deleted file mode 100644
index 33a65ef..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClientFallback.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springblade.core.datascope.model.DataScopeModel;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * IDataScopeClientFallback
- *
- * @author Chill
- */
-@Component
-public class IDataScopeClientFallback implements IDataScopeClient {
-	@Override
-	public DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
-		return null;
-	}
-
-	@Override
-	public DataScopeModel getDataScopeByCode(String code) {
-		return null;
-	}
-
-	@Override
-	public List<Long> getDeptAncestors(Long deptId) {
-		return null;
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/ApiScopePermissionHandler.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/ApiScopePermissionHandler.java
deleted file mode 100644
index 8af507d..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/ApiScopePermissionHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.handler;
-
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.handler.IPermissionHandler;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.WebUtil;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-import static org.springblade.system.cache.ApiScopeCache.permissionCode;
-import static org.springblade.system.cache.ApiScopeCache.permissionPath;
-
-/**
- * 鎺ュ彛鏉冮檺鏍¢獙绫�
- *
- * @author Chill
- */
-public class ApiScopePermissionHandler implements IPermissionHandler {
-
-	@Override
-	public boolean permissionAll() {
-		HttpServletRequest request = WebUtil.getRequest();
-		BladeUser user = AuthUtil.getUser();
-		if (request == null || user == null) {
-			return false;
-		}
-		String uri = request.getRequestURI();
-		List<String> paths = permissionPath(user.getRoleId());
-		if (paths == null || paths.size() == 0) {
-			return false;
-		}
-		return paths.stream().anyMatch(uri::contains);
-	}
-
-	@Override
-	public boolean hasPermission(String permission) {
-		HttpServletRequest request = WebUtil.getRequest();
-		BladeUser user = AuthUtil.getUser();
-		if (request == null || user == null) {
-			return false;
-		}
-		List<String> codes = permissionCode(permission, user.getRoleId());
-		return codes != null && codes.size() != 0;
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/DataScopeModelHandler.java b/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/DataScopeModelHandler.java
deleted file mode 100644
index c7f7ce1..0000000
--- a/Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/DataScopeModelHandler.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.handler;
-
-import org.springblade.core.datascope.handler.ScopeModelHandler;
-import org.springblade.core.datascope.model.DataScopeModel;
-import org.springblade.system.cache.DataScopeCache;
-
-import java.util.List;
-
-/**
- * 閫氱敤鏁版嵁鏉冮檺瑙勫垯
- *
- * @author Chill
- */
-public class DataScopeModelHandler implements ScopeModelHandler {
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param mapperId 鏁版嵁鏉冮檺mapperId
-	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
-	 * @return DataScopeModel
-	 */
-	@Override
-	public DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
-		return DataScopeCache.getDataScopeByMapper(mapperId, roleId);
-	}
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
-	 * @return DataScopeModel
-	 */
-	@Override
-	public DataScopeModel getDataScopeByCode(String code) {
-		return DataScopeCache.getDataScopeByCode(code);
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬瀛愮骇
-	 *
-	 * @param deptId 閮ㄩ棬id
-	 * @return deptIds
-	 */
-	@Override
-	public List<Long> getDeptAncestors(Long deptId) {
-		return DataScopeCache.getDeptAncestors(deptId);
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/pom.xml b/Source/BladeX/blade-service-api/blade-system-api/pom.xml
deleted file mode 100644
index b49f61b..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-system-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-cache</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/ParamCache.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/ParamCache.java
deleted file mode 100644
index 5806c01..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/ParamCache.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.system.entity.Param;
-import org.springblade.system.feign.ISysClient;
-
-import static org.springblade.core.cache.constant.CacheConstant.PARAM_CACHE;
-
-/**
- * 鍙傛暟缂撳瓨宸ュ叿绫�
- *
- * @author Chill
- */
-public class ParamCache {
-
-	private static final String PARAM_ID = "param:id:";
-	private static final String PARAM_VALUE = "param:value:";
-
-	private static ISysClient sysClient;
-
-	private static ISysClient getSysClient() {
-		if (sysClient == null) {
-			sysClient = SpringUtil.getBean(ISysClient.class);
-		}
-		return sysClient;
-	}
-
-	/**
-	 * 鑾峰彇鍙傛暟瀹炰綋
-	 *
-	 * @param id 涓婚敭
-	 * @return Param
-	 */
-	public static Param getById(Long id) {
-		return CacheUtil.get(PARAM_CACHE, PARAM_ID, id, () -> {
-			R<Param> result = getSysClient().getParam(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇鍙傛暟閰嶇疆
-	 *
-	 * @param paramKey 鍙傛暟鍊�
-	 * @return String
-	 */
-	public static String getValue(String paramKey) {
-		return CacheUtil.get(PARAM_CACHE, PARAM_VALUE, paramKey, () -> {
-			R<String> result = getSysClient().getParamValue(paramKey);
-			return result.getData();
-		});
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/RegionCache.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/RegionCache.java
deleted file mode 100644
index 5f0990f..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/RegionCache.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.system.entity.Region;
-import org.springblade.system.feign.ISysClient;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 琛屾斂鍖哄垝缂撳瓨宸ュ叿绫�
- *
- * @author Chill
- */
-public class RegionCache {
-	public static final int PROVINCE_LEVEL = 1;
-	public static final int CITY_LEVEL = 2;
-	public static final int DISTRICT_LEVEL = 3;
-	public static final int TOWN_LEVEL = 4;
-	public static final int VILLAGE_LEVEL = 5;
-
-	private static final String REGION_CODE = "region:code:";
-
-	private static ISysClient sysClient;
-
-	private static ISysClient getSysClient() {
-		if (sysClient == null) {
-			sysClient = SpringUtil.getBean(ISysClient.class);
-		}
-		return sysClient;
-	}
-
-	/**
-	 * 鑾峰彇琛屾斂鍖哄垝瀹炰綋
-	 *
-	 * @param code 鍖哄垝缂栧彿
-	 * @return Param
-	 */
-	public static Region getByCode(String code) {
-		return CacheUtil.get(SYS_CACHE, REGION_CODE, code, () -> {
-			R<Region> result = getSysClient().getRegion(code);
-			return result.getData();
-		});
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/SysCache.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/SysCache.java
deleted file mode 100644
index bf5b87a..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/SysCache.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.entity.*;
-import org.springblade.system.feign.ISysClient;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 绯荤粺缂撳瓨
- *
- * @author Chill
- */
-public class SysCache {
-	private static final String MENU_ID = "menu:id:";
-	private static final String DEPT_ID = "dept:id:";
-	private static final String DEPT_NAME = "dept:name:";
-	private static final String DEPT_NAME_FUZZY = "dept:nameFuzzy:";
-	private static final String DEPT_NAME_ID = "deptName:id:";
-	private static final String DEPT_NAMES_ID = "deptNames:id:";
-	private static final String DEPT_CHILD_ID = "deptChild:id:";
-	private static final String DEPT_CHILDIDS_ID = "deptChildIds:id:";
-	private static final String POST_ID = "post:id:";
-	private static final String POST_NAME = "post:name:";
-	private static final String POST_NAME_FUZZY = "post:nameFuzzy:";
-	private static final String POST_NAME_ID = "postName:id:";
-	private static final String POST_NAMES_ID = "postNames:id:";
-	private static final String ROLE_ID = "role:id:";
-	private static final String ROLE_NAME = "role:name:";
-	private static final String ROLE_NAME_ID = "roleName:id:";
-	private static final String ROLE_NAMES_ID = "roleNames:id:";
-	private static final String ROLE_ALIAS_ID = "roleAlias:id:";
-	private static final String ROLE_ALIASES_ID = "roleAliases:id:";
-	public static final String TENANT_ID = "tenant:id:";
-	public static final String TENANT_TENANT_ID = "tenant:tenantId:";
-	public static final String TENANT_PACKAGE_ID = "tenant:packageId:";
-
-	private static ISysClient sysClient;
-
-	private static ISysClient getSysClient() {
-		if (sysClient == null) {
-			sysClient = SpringUtil.getBean(ISysClient.class);
-		}
-		return sysClient;
-	}
-
-	/**
-	 * 鑾峰彇鑿滃崟
-	 *
-	 * @param id 涓婚敭
-	 * @return 鑿滃崟
-	 */
-	public static Menu getMenu(Long id) {
-		return CacheUtil.get(SYS_CACHE, MENU_ID, id, () -> {
-			R<Menu> result = getSysClient().getMenu(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬
-	 *
-	 * @param id 涓婚敭
-	 * @return 閮ㄩ棬
-	 */
-	public static Dept getDept(Long id) {
-		return CacheUtil.get(SYS_CACHE, DEPT_ID, id, () -> {
-			R<Dept> result = getSysClient().getDept(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param deptNames 閮ㄩ棬鍚�
-	 * @return 閮ㄩ棬id
-	 */
-	public static String getDeptIds(String tenantId, String deptNames) {
-		return CacheUtil.get(SYS_CACHE, DEPT_NAME, tenantId + StringPool.DASH + deptNames, () -> {
-			R<String> result = getSysClient().getDeptIds(tenantId, deptNames);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param deptNames 閮ㄩ棬鍚嶆ā绯婃煡璇�
-	 * @return 閮ㄩ棬id
-	 */
-	public static String getDeptIdsByFuzzy(String tenantId, String deptNames) {
-		return CacheUtil.get(SYS_CACHE, DEPT_NAME_FUZZY, tenantId + StringPool.DASH + deptNames, () -> {
-			R<String> result = getSysClient().getDeptIdsByFuzzy(tenantId, deptNames);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬鍚�
-	 *
-	 * @param id 涓婚敭
-	 * @return 閮ㄩ棬鍚�
-	 */
-	public static String getDeptName(Long id) {
-		return CacheUtil.get(SYS_CACHE, DEPT_NAME_ID, id, () -> {
-			R<String> result = getSysClient().getDeptName(id);
-			return result.getData();
-		});
-	}
-
-
-	/**
-	 * 鑾峰彇閮ㄩ棬鍚嶉泦鍚�
-	 *
-	 * @param deptIds 涓婚敭闆嗗悎
-	 * @return 閮ㄩ棬鍚�
-	 */
-	public static List<String> getDeptNames(String deptIds) {
-		return CacheUtil.get(SYS_CACHE, DEPT_NAMES_ID, deptIds, () -> {
-			R<List<String>> result = getSysClient().getDeptNames(deptIds);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛愰儴闂ㄩ泦鍚�
-	 *
-	 * @param deptId 涓婚敭
-	 * @return 瀛愰儴闂�
-	 */
-	public static List<Dept> getDeptChild(Long deptId) {
-		return CacheUtil.get(SYS_CACHE, DEPT_CHILD_ID, deptId, () -> {
-			R<List<Dept>> result = getSysClient().getDeptChild(deptId);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瀛愰儴闂↖D闆嗗悎
-	 *
-	 * @param deptId 涓婚敭
-	 * @return 瀛愰儴闂↖D
-	 */
-	public static List<Long> getDeptChildIds(Long deptId) {
-		if (deptId == null) {
-			return null;
-		}
-		List<Long> deptIdList = CacheUtil.get(SYS_CACHE, DEPT_CHILDIDS_ID, deptId, List.class);
-		if (deptIdList == null) {
-			deptIdList = new ArrayList<>();
-			List<Dept> deptChild = getDeptChild(deptId);
-			if (deptChild != null) {
-				List<Long> collect = deptChild.stream().map(Dept::getId).collect(Collectors.toList());
-				deptIdList.addAll(collect);
-			}
-			deptIdList.add(deptId);
-			CacheUtil.put(SYS_CACHE, DEPT_CHILDIDS_ID, deptId, deptIdList);
-		}
-		return deptIdList;
-	}
-
-	/**
-	 * 鑾峰彇宀椾綅
-	 *
-	 * @param id 涓婚敭
-	 * @return
-	 */
-	public static Post getPost(Long id) {
-		return CacheUtil.get(SYS_CACHE, POST_ID, id, () -> {
-			R<Post> result = getSysClient().getPost(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇宀椾綅id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param postNames 宀椾綅鍚�
-	 * @return
-	 */
-	public static String getPostIds(String tenantId, String postNames) {
-		return CacheUtil.get(SYS_CACHE, POST_NAME, tenantId + StringPool.DASH + postNames, () -> {
-			R<String> result = getSysClient().getPostIds(tenantId, postNames);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇宀椾綅id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param postNames 宀椾綅鍚嶆ā绯婃煡璇�
-	 * @return
-	 */
-	public static String getPostIdsByFuzzy(String tenantId, String postNames) {
-		return CacheUtil.get(SYS_CACHE, POST_NAME_FUZZY, tenantId + StringPool.DASH + postNames, () -> {
-			R<String> result = getSysClient().getPostIdsByFuzzy(tenantId, postNames);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇宀椾綅鍚�
-	 *
-	 * @param id 涓婚敭
-	 * @return 宀椾綅鍚�
-	 */
-	public static String getPostName(Long id) {
-		return CacheUtil.get(SYS_CACHE, POST_NAME_ID, id, () -> {
-			R<String> result = getSysClient().getPostName(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇宀椾綅鍚嶉泦鍚�
-	 *
-	 * @param postIds 涓婚敭闆嗗悎
-	 * @return 宀椾綅鍚�
-	 */
-	public static List<String> getPostNames(String postIds) {
-		return CacheUtil.get(SYS_CACHE, POST_NAMES_ID, postIds, () -> {
-			R<List<String>> result = getSysClient().getPostNames(postIds);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瑙掕壊
-	 *
-	 * @param id 涓婚敭
-	 * @return Role
-	 */
-	public static Role getRole(Long id) {
-		return CacheUtil.get(SYS_CACHE, ROLE_ID, id, () -> {
-			R<Role> result = getSysClient().getRole(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瑙掕壊id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param roleNames 瑙掕壊鍚�
-	 * @return
-	 */
-	public static String getRoleIds(String tenantId, String roleNames) {
-		return CacheUtil.get(SYS_CACHE, ROLE_NAME, tenantId + StringPool.DASH + roleNames, () -> {
-			R<String> result = getSysClient().getRoleIds(tenantId, roleNames);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚�
-	 *
-	 * @param id 涓婚敭
-	 * @return 瑙掕壊鍚�
-	 */
-	public static String getRoleName(Long id) {
-		return CacheUtil.get(SYS_CACHE, ROLE_NAME_ID, id, () -> {
-			R<String> result = getSysClient().getRoleName(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瑙掕壊鍒悕
-	 *
-	 * @param id 涓婚敭
-	 * @return 瑙掕壊鍒悕
-	 */
-	public static String getRoleAlias(Long id) {
-		return CacheUtil.get(SYS_CACHE, ROLE_ALIAS_ID, id, () -> {
-			R<String> result = getSysClient().getRoleAlias(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚嶉泦鍚�
-	 *
-	 * @param roleIds 涓婚敭闆嗗悎
-	 * @return 瑙掕壊鍚�
-	 */
-	public static List<String> getRoleNames(String roleIds) {
-		return CacheUtil.get(SYS_CACHE, ROLE_NAMES_ID, roleIds, () -> {
-			R<List<String>> result = getSysClient().getRoleNames(roleIds);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇瑙掕壊鍒悕闆嗗悎
-	 *
-	 * @param roleIds 涓婚敭闆嗗悎
-	 * @return 瑙掕壊鍒悕
-	 */
-	public static List<String> getRoleAliases(String roleIds) {
-		return CacheUtil.get(SYS_CACHE, ROLE_ALIASES_ID, roleIds, () -> {
-			R<List<String>> result = getSysClient().getRoleAliases(roleIds);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇绉熸埛
-	 *
-	 * @param id 涓婚敭
-	 * @return Tenant
-	 */
-	public static Tenant getTenant(Long id) {
-		return CacheUtil.get(SYS_CACHE, TENANT_ID, id, () -> {
-			R<Tenant> result = getSysClient().getTenant(id);
-			return result.getData();
-		}, Boolean.FALSE);
-	}
-
-	/**
-	 * 鑾峰彇绉熸埛
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @return Tenant
-	 */
-	public static Tenant getTenant(String tenantId) {
-		return CacheUtil.get(SYS_CACHE, TENANT_TENANT_ID, tenantId, () -> {
-			R<Tenant> result = getSysClient().getTenant(tenantId);
-			return result.getData();
-		}, Boolean.FALSE);
-	}
-
-	/**
-	 * 鑾峰彇绉熸埛浜у搧鍖�
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @return Tenant
-	 */
-	public static TenantPackage getTenantPackage(String tenantId) {
-		return CacheUtil.get(SYS_CACHE, TENANT_PACKAGE_ID, tenantId, () -> {
-			R<TenantPackage> result = getSysClient().getTenantPackage(tenantId);
-			return result.getData();
-		}, Boolean.FALSE);
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/DeptDTO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/DeptDTO.java
deleted file mode 100644
index 4b9009b..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/DeptDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Dept;
-
-/**
- * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class DeptDTO extends Dept {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/MenuDTO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/MenuDTO.java
deleted file mode 100644
index 64d17eb..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/MenuDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.dto;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-public class MenuDTO implements Serializable {
-	private static final long serialVersionUID = 1L;
-	private String alias;
-	private String path;
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/ParamDTO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/ParamDTO.java
deleted file mode 100644
index aa7e9ff..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/ParamDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Param;
-
-/**
- * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ParamDTO extends Param {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/PostDTO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/PostDTO.java
deleted file mode 100644
index 637900f..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/PostDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Post;
-
-/**
- * 宀椾綅琛ㄦ暟鎹紶杈撳璞″疄浣撶被
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class PostDTO extends Post {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleDTO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleDTO.java
deleted file mode 100644
index fdfbaa6..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Role;
-
-/**
- * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class RoleDTO extends Role {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleMenuDTO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleMenuDTO.java
deleted file mode 100644
index ba2b219..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleMenuDTO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.RoleMenu;
-
-/**
- * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class RoleMenuDTO extends RoleMenu {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java
deleted file mode 100644
index e996f5f..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 瀹炰綋绫�
- *
- * @author BladeX
- */
-@Data
-@TableName("pl_auth_scope_api")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "ApiScope瀵硅薄", description = "ApiScope瀵硅薄")
-public class ApiScope extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鑿滃崟涓婚敭
-	 */
-	@ApiModelProperty(value = "鑿滃崟涓婚敭")
-	private Long menuId;
-	/**
-	 * 璧勬簮缂栧彿
-	 */
-	@ApiModelProperty(value = "璧勬簮缂栧彿")
-	private String AutowiredCode;
-	/**
-	 * 鎺ュ彛鏉冮檺鍚嶇О
-	 */
-	@ApiModelProperty(value = "鎺ュ彛鏉冮檺鍚嶇О")
-	private String scopeName;
-	/**
-	 * 鎺ュ彛鏉冮檺瀛楁
-	 */
-	@ApiModelProperty(value = "鎺ュ彛鏉冮檺瀛楁")
-	private String scopePath;
-	/**
-	 * 鎺ュ彛鏉冮檺绫诲瀷
-	 */
-	@ApiModelProperty(value = "鎺ュ彛鏉冮檺绫诲瀷")
-	private Integer scopeType;
-	/**
-	 * 鎺ュ彛鏉冮檺澶囨敞
-	 */
-	@ApiModelProperty(value = "鎺ュ彛鏉冮檺澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java
deleted file mode 100644
index 1b6fa8f..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 瀹炰綋绫�
- *
- * @author BladeX
- */
-@Data
-@TableName("pl_sys_client")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Client瀵硅薄", description = "Client瀵硅薄")
-public class AuthClient extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 瀹㈡埛绔痠d
-	 */
-	@ApiModelProperty(value = "瀹㈡埛绔痠d")
-	private String clientId;
-	/**
-	 * 瀹㈡埛绔瘑閽�
-	 */
-	@ApiModelProperty(value = "瀹㈡埛绔瘑閽�")
-	private String clientSecret;
-	/**
-	 * 璧勬簮闆嗗悎
-	 */
-	@ApiModelProperty(value = "璧勬簮闆嗗悎")
-	private String AutowiredIds;
-	/**
-	 * 鎺堟潈鑼冨洿
-	 */
-	@ApiModelProperty(value = "鎺堟潈鑼冨洿")
-	private String scope;
-	/**
-	 * 鎺堟潈绫诲瀷
-	 */
-	@ApiModelProperty(value = "鎺堟潈绫诲瀷")
-	private String authorizedGrantTypes;
-	/**
-	 * 鍥炶皟鍦板潃
-	 */
-	@ApiModelProperty(value = "鍥炶皟鍦板潃")
-	private String webServerRedirectUri;
-	/**
-	 * 鏉冮檺
-	 */
-	@ApiModelProperty(value = "鏉冮檺")
-	private String authorities;
-	/**
-	 * 浠ょ墝杩囨湡绉掓暟
-	 */
-	@ApiModelProperty(value = "浠ょ墝杩囨湡绉掓暟")
-	private Integer accessTokenValidity;
-	/**
-	 * 鍒锋柊浠ょ墝杩囨湡绉掓暟
-	 */
-	@ApiModelProperty(value = "鍒锋柊浠ょ墝杩囨湡绉掓暟")
-	private Integer refreshTokenValidity;
-	/**
-	 * 闄勫姞璇存槑
-	 */
-	@JsonIgnore
-	@ApiModelProperty(value = "闄勫姞璇存槑")
-	private String additionalInformation;
-	/**
-	 * 鑷姩鎺堟潈
-	 */
-	@ApiModelProperty(value = "鑷姩鎺堟潈")
-	private String autoapprove;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Combination.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Combination.java
deleted file mode 100644
index 84a8acc..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Combination.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Objects;
-
-/**
- * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)瀹炰綋绫�
- *
- * @author ldc
- * @since 2023-03-20 14:56:26
- */
-@Data
-@TableName("pl_sys_combination")
-@ApiModel(value = "Combination瀵硅薄", description = "Combination瀵硅薄")
-public class Combination implements Serializable {
-	private static final long serialVersionUID = 905936175743821305L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 缁勫悎鍚嶇О
-	 */
-	@ApiModelProperty(value = "缁勫悎鍚嶇О")
-	private String name;
-
-	/**
-	 * 鎻忚堪
-	 */
-	@TableField("\"DESC\"")
-	@ApiModelProperty(value = "鎻忚堪")
-	private String desc;
-
-	/**
-	 * 鍒涘缓鏃堕棿
-	 */
-	@DateTimeFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@JsonFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@ApiModelProperty(value = "鍒涘缓鏃堕棿")
-	private Date createTime;
-
-	/**
-	 * 鍒涘缓浜�
-	 */
-	@ApiModelProperty(value = "鍒涘缓浜�")
-	private String createUser;
-
-	/**
-	 * 淇敼鏃堕棿
-	 */
-	@DateTimeFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@JsonFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@ApiModelProperty(value = "淇敼鏃堕棿")
-	private Date updateTime;
-
-	/**
-	 * 淇敼浜�
-	 */
-	@ApiModelProperty(value = "淇敼浜�")
-	private String updateUser;
-
-	/**
-	 * 鎺堟潈浜�
-	 */
-	@ApiModelProperty(value = "鎺堟潈浜�")
-	private String licensors;
-
-	@Override
-	public boolean equals(Object o) {
-		if (this == o) {
-			return true;
-		}
-		if (o == null || getClass() != o.getClass()) {
-			return false;
-		}
-		Combination that = (Combination) o;
-		return Objects.equals(id, that.id) && Objects.equals(name, that.name) && Objects.equals(desc, that.desc) && Objects.equals(createTime, that.createTime) && Objects.equals(createUser, that.createUser) && Objects.equals(updateTime, that.updateTime) && Objects.equals(updateUser, that.updateUser) && Objects.equals(licensors, that.licensors);
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(id, name, desc, createTime, createUser, updateTime, updateUser, licensors);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java
deleted file mode 100644
index c345f3a..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 瀹炰綋绫�
- *
- * @author BladeX
- */
-@Data
-@TableName("pl_auth_scope_data")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "DataScope瀵硅薄", description = "DataScope瀵硅薄")
-public class DataScope extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鑿滃崟涓婚敭
-	 */
-	@ApiModelProperty(value = "鑿滃崟涓婚敭")
-	private Long menuId;
-	/**
-	 * 璧勬簮缂栧彿
-	 */
-	@ApiModelProperty(value = "璧勬簮缂栧彿")
-	private String AutowiredCode;
-	/**
-	 * 鏁版嵁鏉冮檺鍚嶇О
-	 */
-	@ApiModelProperty(value = "鏁版嵁鏉冮檺鍚嶇О")
-	private String scopeName;
-	/**
-	 * 鏁版嵁鏉冮檺鍙瀛楁
-	 */
-	@ApiModelProperty(value = "鏁版嵁鏉冮檺鍙瀛楁")
-	private String scopeField;
-	/**
-	 * 鏁版嵁鏉冮檺绫诲悕
-	 */
-	@ApiModelProperty(value = "鏁版嵁鏉冮檺绫诲悕")
-	private String scopeClass;
-	/**
-	 * 鏁版嵁鏉冮檺瀛楁
-	 */
-	@ApiModelProperty(value = "鏁版嵁鏉冮檺瀛楁")
-	private String scopeColumn;
-	/**
-	 * 鏁版嵁鏉冮檺绫诲瀷
-	 */
-	@ApiModelProperty(value = "鏁版嵁鏉冮檺绫诲瀷")
-	private Integer scopeType;
-	/**
-	 * 鏁版嵁鏉冮檺鍊煎煙
-	 */
-	@ApiModelProperty(value = "鏁版嵁鏉冮檺鍊煎煙")
-	private String scopeValue;
-	/**
-	 * 鏁版嵁鏉冮檺澶囨敞
-	 */
-	@ApiModelProperty(value = "鏁版嵁鏉冮檺澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
deleted file mode 100644
index 62d728b..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_dept")
-@ApiModel(value = "Dept瀵硅薄", description = "Dept瀵硅薄")
-public class Dept implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 绉熸埛ID
-	 */
-	@ApiModelProperty(value = "绉熸埛ID")
-	private String tenantId;
-
-	/**
-	 * 鐖朵富閿�
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐖朵富閿�")
-	private Long parentId;
-
-	/**
-	 * 鏈烘瀯鍚�
-	 */
-	@ApiModelProperty(value = "鏈烘瀯鍚�")
-	private String deptName;
-
-	/**
-	 * 鏈烘瀯鍏ㄧО
-	 */
-	@ApiModelProperty(value = "閮ㄩ棬鍏ㄧО")
-	private String fullName;
-
-	/**
-	 * 绁栫骇鏈烘瀯涓婚敭
-	 */
-	@ApiModelProperty(value = "绁栫骇鏈烘瀯涓婚敭")
-	private String ancestors;
-
-	/**
-	 * 鏈烘瀯绫诲瀷
-	 */
-	@ApiModelProperty(value = "鏈烘瀯绫诲瀷")
-	private Integer deptCategory;
-
-	/**
-	 * 鎺掑簭
-	 */
-	@ApiModelProperty(value = "鎺掑簭")
-	private Integer sort;
-
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-	/**
-	 * 鏄惁宸插垹闄�
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "鏄惁宸插垹闄�")
-	private Integer isDeleted;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java
deleted file mode 100644
index b0565f5..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springblade.core.tool.utils.Func;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_sys_menu")
-@ApiModel(value = "Menu瀵硅薄", description = "Menu瀵硅薄")
-public class Menu implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鑿滃崟鐖朵富閿�
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鑿滃崟鐖朵富閿�")
-	private Long parentId;
-
-	/**
-	 * 鑿滃崟缂栧彿
-	 */
-	@ApiModelProperty(value = "鑿滃崟缂栧彿")
-	private String code;
-
-	/**
-	 * 鑿滃崟鍚嶇О
-	 */
-	@ApiModelProperty(value = "鑿滃崟鍚嶇О")
-	private String name;
-
-	/**
-	 * 鑿滃崟鍒悕
-	 */
-	@ApiModelProperty(value = "鑿滃崟鍒悕")
-	private String alias;
-
-	/**
-	 * 璇锋眰鍦板潃
-	 */
-	@ApiModelProperty(value = "璇锋眰鍦板潃")
-	private String path;
-
-	/**
-	 * 鑿滃崟璧勬簮
-	 */
-	@ApiModelProperty(value = "鑿滃崟璧勬簮")
-	private String source;
-
-	/**
-	 * 鎺掑簭
-	 */
-	@ApiModelProperty(value = "鎺掑簭")
-	private Integer sort;
-
-	/**
-	 * 鑿滃崟绫诲瀷
-	 */
-	@ApiModelProperty(value = "鑿滃崟绫诲瀷")
-	private Integer category;
-
-	/**
-	 * 鎿嶄綔鎸夐挳绫诲瀷
-	 */
-	@ApiModelProperty(value = "鎿嶄綔鎸夐挳绫诲瀷")
-	private Integer action;
-
-	/**
-	 * 鏄惁鎵撳紑鏂伴〉闈�
-	 */
-	@ApiModelProperty(value = "鏄惁鎵撳紑鏂伴〉闈�")
-	private Integer isOpen;
-
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-	/**
-	 * 鏄惁宸插垹闄�
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "鏄惁宸插垹闄�")
-	private Integer isDeleted;
-
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj) {
-			return true;
-		}
-		if (obj == null) {
-			return false;
-		}
-		Menu other = (Menu) obj;
-		if (Func.equals(this.getId(), other.getId())) {
-			return true;
-		}
-		return false;
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(id, parentId, code);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java
deleted file mode 100644
index c3474ea..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_oq_param")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Param瀵硅薄", description = "Param瀵硅薄")
-public class Param extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鍙傛暟鍚�
-	 */
-	@ApiModelProperty(value = "鍙傛暟鍚�")
-	private String paramName;
-
-	/**
-	 * 鍙傛暟閿�
-	 */
-	@ApiModelProperty(value = "鍙傛暟閿�")
-	private String paramKey;
-
-	/**
-	 * 鍙傛暟鍊�
-	 */
-	@ApiModelProperty(value = "鍙傛暟鍊�")
-	private String paramValue;
-
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java
deleted file mode 100644
index f7910f5..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 宀椾綅琛ㄥ疄浣撶被
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_post")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Post瀵硅薄", description = "宀椾綅琛�")
-public class Post extends TenantEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 绫诲瀷
-	 */
-	@ApiModelProperty(value = "绫诲瀷")
-	private Integer category;
-	/**
-	 * 宀椾綅缂栧彿
-	 */
-	@ApiModelProperty(value = "宀椾綅缂栧彿")
-	private String postCode;
-	/**
-	 * 宀椾綅鍚嶇О
-	 */
-	@ApiModelProperty(value = "宀椾綅鍚嶇О")
-	private String postName;
-	/**
-	 * 宀椾綅鎺掑簭
-	 */
-	@ApiModelProperty(value = "宀椾綅鎺掑簭")
-	private Integer sort;
-	/**
-	 * 宀椾綅鎻忚堪
-	 */
-	@ApiModelProperty(value = "宀椾綅鎻忚堪")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java
deleted file mode 100644
index 3ea3891..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 琛屾斂鍖哄垝琛ㄥ疄浣撶被
- *
- * @author Chill
- */
-@Data
-@TableName("pl_sys_region")
-@ApiModel(value = "Region瀵硅薄", description = "琛屾斂鍖哄垝琛�")
-public class Region implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鍖哄垝缂栧彿
-	 */
-	@TableId(value = "code", type = IdType.INPUT)
-	@ApiModelProperty(value = "鍖哄垝缂栧彿")
-	private String code;
-	/**
-	 * 鐖跺尯鍒掔紪鍙�
-	 */
-	@ApiModelProperty(value = "鐖跺尯鍒掔紪鍙�")
-	private String parentCode;
-	/**
-	 * 绁栧尯鍒掔紪鍙�
-	 */
-	@ApiModelProperty(value = "绁栧尯鍒掔紪鍙�")
-	private String ancestors;
-	/**
-	 * 鍖哄垝鍚嶇О
-	 */
-	@ApiModelProperty(value = "鍖哄垝鍚嶇О")
-	private String name;
-	/**
-	 * 鐪佺骇鍖哄垝缂栧彿
-	 */
-	@ApiModelProperty(value = "鐪佺骇鍖哄垝缂栧彿")
-	private String provinceCode;
-	/**
-	 * 鐪佺骇鍚嶇О
-	 */
-	@ApiModelProperty(value = "鐪佺骇鍚嶇О")
-	private String provinceName;
-	/**
-	 * 甯傜骇鍖哄垝缂栧彿
-	 */
-	@ApiModelProperty(value = "甯傜骇鍖哄垝缂栧彿")
-	private String cityCode;
-	/**
-	 * 甯傜骇鍚嶇О
-	 */
-	@ApiModelProperty(value = "甯傜骇鍚嶇О")
-	private String cityName;
-	/**
-	 * 鍖虹骇鍖哄垝缂栧彿
-	 */
-	@ApiModelProperty(value = "鍖虹骇鍖哄垝缂栧彿")
-	private String districtCode;
-	/**
-	 * 鍖虹骇鍚嶇О
-	 */
-	@ApiModelProperty(value = "鍖虹骇鍚嶇О")
-	private String districtName;
-	/**
-	 * 闀囩骇鍖哄垝缂栧彿
-	 */
-	@ApiModelProperty(value = "闀囩骇鍖哄垝缂栧彿")
-	private String townCode;
-	/**
-	 * 闀囩骇鍚嶇О
-	 */
-	@ApiModelProperty(value = "闀囩骇鍚嶇О")
-	private String townName;
-	/**
-	 * 鏉戠骇鍖哄垝缂栧彿
-	 */
-	@ApiModelProperty(value = "鏉戠骇鍖哄垝缂栧彿")
-	private String villageCode;
-	/**
-	 * 鏉戠骇鍚嶇О
-	 */
-	@ApiModelProperty(value = "鏉戠骇鍚嶇О")
-	private String villageName;
-	/**
-	 * 灞傜骇
-	 */
-	@ApiModelProperty(value = "灞傜骇")
-	private Integer regionLevel;
-	/**
-	 * 鎺掑簭
-	 */
-	@ApiModelProperty(value = "鎺掑簭")
-	private Integer sort;
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java
deleted file mode 100644
index 7e49879..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@NoArgsConstructor
-@TableName("pl_org_role")
-@ApiModel(value = "Role瀵硅薄", description = "Role瀵硅薄")
-public class Role implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 绉熸埛ID
-	 */
-	@ApiModelProperty(value = "绉熸埛ID")
-	private String tenantId;
-
-	/**
-	 * 鐖朵富閿�
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐖朵富閿�")
-	private Long parentId;
-
-	/**
-	 * 瑙掕壊鍚�
-	 */
-	@ApiModelProperty(value = "瑙掕壊鍚�")
-	private String roleName;
-
-	/**
-	 * 鎺掑簭
-	 */
-	@ApiModelProperty(value = "鎺掑簭")
-	private Integer sort;
-
-	/**
-	 * 瑙掕壊鍒悕
-	 */
-	@ApiModelProperty(value = "瑙掕壊鍒悕")
-	private String roleAlias;
-
-	/**
-	 * 鏄惁宸插垹闄�
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "鏄惁宸插垹闄�")
-	private Integer isDeleted;
-
-	public Role(String tenantId, Long parentId, String roleName, Integer sort, String roleAlias, Integer isDeleted) {
-		this.tenantId = tenantId;
-		this.parentId = parentId;
-		this.roleName = roleName;
-		this.sort = sort;
-		this.roleAlias = roleAlias;
-		this.isDeleted = isDeleted;
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java
deleted file mode 100644
index c985322..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@NoArgsConstructor
-@TableName("pl_org_role_menu")
-@ApiModel(value = "RoleMenu瀵硅薄", description = "RoleMenu瀵硅薄")
-public class RoleMenu implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鑿滃崟id
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鑿滃崟id")
-	private Long menuId;
-
-	/**
-	 * 瑙掕壊id
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "瑙掕壊id")
-	private Long roleId;
-
-	public RoleMenu(Long menuId, Long roleId) {
-		this.menuId = menuId;
-		this.roleId = roleId;
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java
deleted file mode 100644
index 9ff3f50..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_auth_role_scope")
-@ApiModel(value = "RoleScope瀵硅薄", description = "RoleScope瀵硅薄")
-public class RoleScope implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鏉冮檺绫诲瀷
-	 */
-	@ApiModelProperty(value = "鏉冮檺绫诲瀷")
-	private Integer scopeCategory;
-
-	/**
-	 * 鏉冮檺id
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鏉冮檺id")
-	private Long scopeId;
-
-	/**
-	 * 瑙掕壊id
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "瑙掕壊id")
-	private Long roleId;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Strategy.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Strategy.java
deleted file mode 100644
index 63aecd3..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Strategy.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Objects;
-
-/**
- * 瀵嗙爜绛栫暐(PlSysStrategy)瀹炰綋绫�
- *
- * @author ldc
- * @since 2023-03-20 15:00:22
- */
-@Data
-@TableName("pl_sys_strategy")
-@ApiModel(value = "Strategy瀵硅薄", description = "Strategy瀵硅薄")
-public class Strategy implements Serializable {
-	private static final long serialVersionUID = 420195522547332354L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 绛栫暐鍚嶇О
-	 */
-	@ApiModelProperty(value = "绛栫暐鍚嶇О")
-	private String strategyName;
-
-	/**
-	 * 瀵嗙爜鏈�灏忛暱搴�
-	 */
-	@ApiModelProperty(value = "瀵嗙爜鏈�灏忛暱搴�")
-	private Long minPwdLen;
-
-	/**
-	 * 瀵嗙爜鏈�澶ч暱搴�
-	 */
-	@ApiModelProperty(value = "瀵嗙爜鏈�澶ч暱搴�")
-	private Long maxPwdLen;
-
-	/**
-	 * 瀵嗙爜缁勫悎鏂瑰紡
-	 */
-	@ApiModelProperty(value = "瀵嗙爜缁勫悎鏂瑰紡")
-	private String combinationIds;
-
-	/**
-	 * 蹇呭~绉嶇被
-	 */
-	@ApiModelProperty(value = "蹇呭~绉嶇被")
-	private Long requiredType;
-
-	/**
-	 * 杩囨湡鏃堕棿
-	 */
-	@ApiModelProperty(value = "杩囨湡鏃堕棿")
-	private Long expirationTime;
-
-	/**
-	 * 鎻愰啋鏃堕棿
-	 */
-	@ApiModelProperty(value = "鎻愰啋鏃堕棿")
-	private Long reminderTime;
-
-	/**
-	 * 閿佸畾娆℃暟
-	 */
-	@ApiModelProperty(value = "閿佸畾娆℃暟")
-	private Long lockingNum;
-
-	/**
-	 * 閿佸畾鏃堕棿
-	 */
-	@ApiModelProperty(value = "閿佸畾鏃堕棿")
-	private Long lockingTime;
-
-	/**
-	 * 鎻忚堪
-	 */
-	@ApiModelProperty(value = "鎻忚堪")
-	@TableField("\"DESC\"")
-	private String desc;
-
-	/**
-	 * 鏄惁涓洪粯璁ょ瓥鐣�
-	 */
-	@ApiModelProperty(value = "鏄惁涓洪粯璁ょ瓥鐣�,鏄惁涓洪粯璁わ紝1浠h〃榛樿锛�0浠h〃闈為粯璁�")
-	private Long isDefault;
-
-	/**
-	 * 鍒涘缓鏃堕棿
-	 */
-	@DateTimeFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@JsonFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@ApiModelProperty(value = "鍒涘缓鏃堕棿")
-	private Date createTime;
-
-	/**
-	 * 鍒涘缓浜�
-	 */
-	@ApiModelProperty(value = "鍒涘缓浜�")
-	private String createUser;
-
-	/**
-	 * 淇敼鏃堕棿
-	 */
-	@DateTimeFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@JsonFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@ApiModelProperty(value = "淇敼鏃堕棿")
-	private Date updateTime;
-
-	/**
-	 * 淇敼浜�
-	 */
-	@ApiModelProperty(value = "淇敼浜�")
-	private String updateUser;
-
-	/**
-	 * 鎺堟潈浜�
-	 */
-	@ApiModelProperty(value = "鎺堟潈浜�")
-	private String licensors;
-
-	/**
-	 * 缁勫悎鍚嶇О
-	 */
-	@ApiModelProperty(value = "缁勫悎鍚嶇О")
-	@TableField(exist = false)
-	private String combinationNames;
-
-	@Override
-	public boolean equals(Object o) {
-		if (this == o) {
-			return true;
-		}
-		if (o == null || getClass() != o.getClass()) {
-			return false;
-		}
-		if (!super.equals(o)) {
-			return false;
-		}
-		Strategy strategy = (Strategy) o;
-		return Objects.equals(id, strategy.id) && Objects.equals(strategyName, strategy.strategyName) && Objects.equals(minPwdLen, strategy.minPwdLen) && Objects.equals(maxPwdLen, strategy.maxPwdLen) && Objects.equals(combinationIds, strategy.combinationIds) && Objects.equals(requiredType, strategy.requiredType) && Objects.equals(expirationTime, strategy.expirationTime) && Objects.equals(reminderTime, strategy.reminderTime) && Objects.equals(lockingNum, strategy.lockingNum) && Objects.equals(lockingTime, strategy.lockingTime) && Objects.equals(desc, strategy.desc) && Objects.equals(isDefault, strategy.isDefault);
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(super.hashCode(), id, strategyName, minPwdLen, maxPwdLen, combinationIds, requiredType, expirationTime, reminderTime, lockingNum, lockingTime, desc, isDefault);
-	}
-}
-
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java
deleted file mode 100644
index 2822469..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.NullSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_tenant")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "Tenant瀵硅薄", description = "Tenant瀵硅薄")
-public class Tenant extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 绉熸埛ID
-	 */
-	@ApiModelProperty(value = "绉熸埛ID")
-	private String tenantId;
-
-	/**
-	 * 绉熸埛鍏ㄧО
-	 */
-	@ApiModelProperty(value = "绉熸埛鍏ㄧО")
-	private String fullName;
-
-	/**
-	 * 绉熸埛鍚嶇О
-	 */
-	@ApiModelProperty(value = "绉熸埛鍚嶇О")
-	private String tenantName;
-	/**
-	 * 鍩熷悕鍦板潃
-	 */
-	@ApiModelProperty(value = "鍩熷悕鍦板潃")
-	private String domainUrl;
-	/**
-	 * 绯荤粺鑳屾櫙
-	 */
-	@ApiModelProperty(value = "绯荤粺鑳屾櫙")
-	private String backgroundUrl;
-	/**
-	 * 鑱旂郴浜�
-	 */
-	@ApiModelProperty(value = "鑱旂郴浜�")
-	private String linkman;
-	/**
-	 * 鑱旂郴鐢佃瘽
-	 */
-	@ApiModelProperty(value = "鑱旂郴鐢佃瘽")
-	private String contactNumber;
-	/**
-	 * 鑱旂郴鍦板潃
-	 */
-	@ApiModelProperty(value = "鑱旂郴鍦板潃")
-	private String address;
-
-	/**
-	 * 浜у搧鍖匢D
-	 */
-	@JsonSerialize(nullsUsing = NullSerializer.class)
-	@ApiModelProperty(value = "浜у搧鍖匢D")
-	private Long packageId;
-	/**
-	 * 鏁版嵁婧怚D
-	 */
-	@JsonSerialize(nullsUsing = NullSerializer.class)
-	@ApiModelProperty(value = "鏁版嵁婧怚D")
-	private Long datasourceId;
-	/**
-	 * 鎺堟潈鐮�
-	 */
-	@ApiModelProperty(value = "鎺堟潈鐮�")
-	private String licenseKey;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java
deleted file mode 100644
index 1164d5f..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-/**
- * 绉熸埛浜у搧琛ㄥ疄浣撶被
- *
- * @author BladeX
- */
-@Data
-@TableName("pl_org_tenant_package")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "TenantPackage瀵硅薄", description = "绉熸埛浜у搧琛�")
-public class TenantPackage extends BaseEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 浜у搧鍖呭悕绉�
-	 */
-	@ApiModelProperty(value = "浜у搧鍖呭悕绉�")
-	private String packageName;
-	/**
-	 * 鑿滃崟ID
-	 */
-	@ApiModelProperty(value = "鑿滃崟ID")
-	private String menuId;
-	/**
-	 * 澶囨敞
-	 */
-	@ApiModelProperty(value = "澶囨敞")
-	private String remark;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java
deleted file mode 100644
index 069ee45..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 椤堕儴鑿滃崟琛ㄥ疄浣撶被
- *
- * @author BladeX
- */
-@Data
-@TableName("pl_sys_top_menu")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "TopMenu瀵硅薄", description = "椤堕儴鑿滃崟琛�")
-public class TopMenu extends TenantEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 椤堕儴鑿滃崟缂栧彿
-	 */
-	@ApiModelProperty(value = "椤堕儴鑿滃崟缂栧彿")
-	private String code;
-	/**
-	 * 椤堕儴鑿滃崟鍚�
-	 */
-	@ApiModelProperty(value = "椤堕儴鑿滃崟鍚�")
-	private String name;
-	/**
-	 * 椤堕儴鑿滃崟璧勬簮
-	 */
-	@ApiModelProperty(value = "椤堕儴鑿滃崟璧勬簮")
-	private String source;
-	/**
-	 * 椤堕儴鑿滃崟鎺掑簭
-	 */
-	@ApiModelProperty(value = "椤堕儴鑿滃崟鎺掑簭")
-	private Integer sort;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java
deleted file mode 100644
index c8601d4..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import lombok.Data;
-
-/**
- * TopMenuSetting
- *
- * @author Chill
- */
-@Data
-@TableName("pl_sys_top_menu_setting")
-public class TopMenuSetting {
-
-	/**
-	 * 涓婚敭id
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 椤堕儴鑿滃崟id
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long topMenuId;
-
-	/**
-	 * 鑿滃崟id
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long menuId;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/UserPwdstrategy.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/UserPwdstrategy.java
deleted file mode 100644
index aefd34e..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/UserPwdstrategy.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * (UserPwdStrtategy)瀹炰綋绫�
- *
- * @author makejava
- * @since 2023-03-20 14:59:29
- */
-
-@Data
-@NoArgsConstructor
-@TableName("pl_sys_user_pwdstrategy")
-@ApiModel(value = "UserPwdStrtategy", description = "UserPwdStrtategy")
-public class UserPwdstrategy implements Serializable {
-
-	private static final long serialVersionUid = -556926788101426521L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "ID", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鐢ㄦ埛id
-	 */
-	@ApiModelProperty(value = "鐢ㄦ埛id")
-	private Long userId;
-
-	/**
-	 * 瀵嗙爜绛栫暐id
-	 */
-	@ApiModelProperty(value = "瀵嗙爜绛栫暐id")
-	@TableField(value = "PWDSTRATEGY_ID")
-	private Long pwdstrategyId;
-
-	public UserPwdstrategy(Long userId, Long pwdStrategyId) {
-		this.userId = userId;
-		this.pwdstrategyId = pwdStrategyId;
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		if (this == o) {
-			return true;
-		}
-		if (o == null || getClass() != o.getClass()) {
-			return false;
-		}
-		UserPwdstrategy that = (UserPwdstrategy) o;
-		return Objects.equals(id, that.id) && Objects.equals(userId, that.userId) && Objects.equals(pwdstrategyId, that.pwdstrategyId);
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(id, userId, pwdstrategyId);
-	}
-
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ValueRange.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ValueRange.java
deleted file mode 100644
index 5a9a3e9..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ValueRange.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.springblade.system.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Objects;
-
-/**
- * (ValueRange)瀹炰綋绫�
- *
- * @author makejava
- * @since 2023-03-20 14:59:29
- */
-@Data
-@TableName("pl_sys_value_range")
-@ApiModel(value = "ValueRange", description = "ValueRange")
-public class ValueRange implements Serializable {
-	private static final long serialVersionUID = -62275902377620042L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鍊�
-	 */
-	@ApiModelProperty(value = "鍊�")
-	private String value;
-
-	/**
-	 * 缁勫悎鏂瑰紡ID
-	 */
-	@ApiModelProperty(value = "缁勫悎鏂瑰紡ID")
-	private Long combinationId;
-
-	/**
-	 * 鍒涘缓鏃堕棿
-	 */
-	@DateTimeFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@JsonFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@ApiModelProperty(value = "鍒涘缓鏃堕棿")
-	private Date createTime;
-
-	/**
-	 * 鍒涘缓浜�
-	 */
-	@ApiModelProperty(value = "鍒涘缓浜�")
-	private String createUser;
-
-	/**
-	 * 淇敼鏃堕棿
-	 */
-	@DateTimeFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@JsonFormat(
-		pattern = "yyyy-MM-dd HH:mm:ss"
-	)
-	@ApiModelProperty(value = "淇敼鏃堕棿")
-	private Date updateTime;
-
-	/**
-	 * 淇敼浜�
-	 */
-	@ApiModelProperty(value = "淇敼浜�")
-	private String updateUser;
-
-	@Override
-	public boolean equals(Object o) {
-		if (this == o) {
-			return true;
-		}
-		if (o == null || getClass() != o.getClass()) {
-			return false;
-		}
-		if (!super.equals(o)) {
-			return false;
-		}
-		ValueRange that = (ValueRange) o;
-		return Objects.equals(id, that.id) && Objects.equals(value, that.value) && Objects.equals(combinationId, that.combinationId);
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(super.hashCode(), id, value, combinationId);
-	}
-}
-
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
deleted file mode 100644
index ce9daa5..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.*;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_SYSTEM_NAME,
-	fallback = ISysClientFallback.class
-)
-public interface ISysClient {
-
-	String API_PREFIX = "/client";
-	String MENU = API_PREFIX + "/menu";
-	String DEPT = API_PREFIX + "/dept";
-	String DEPT_IDS = API_PREFIX + "/dept-ids";
-	String DEPT_IDS_FUZZY = API_PREFIX + "/dept-ids-fuzzy";
-	String DEPT_NAME = API_PREFIX + "/dept-name";
-	String DEPT_NAMES = API_PREFIX + "/dept-names";
-	String DEPT_CHILD = API_PREFIX + "/dept-child";
-	String POST = API_PREFIX + "/post";
-	String POST_IDS = API_PREFIX + "/post-ids";
-	String POST_IDS_FUZZY = API_PREFIX + "/post-ids-fuzzy";
-	String POST_NAME = API_PREFIX + "/post-name";
-	String POST_NAMES = API_PREFIX + "/post-names";
-	String ROLE = API_PREFIX + "/role";
-	String ROLE_IDS = API_PREFIX + "/role-ids";
-	String ROLE_NAME = API_PREFIX + "/role-name";
-	String ROLE_NAMES = API_PREFIX + "/role-names";
-	String ROLE_ALIAS = API_PREFIX + "/role-alias";
-	String ROLE_ALIASES = API_PREFIX + "/role-aliases";
-	String TENANT = API_PREFIX + "/tenant";
-	String TENANT_ID = API_PREFIX + "/tenant-id";
-	//鏌ヨ瓒呯骇绠$悊鍛�
-	String TENANT_MGR_ID = API_PREFIX + "/tenant-mgr-id";
-	String TENANT_PACKAGE = API_PREFIX + "/tenant-package";
-	String PARAM = API_PREFIX + "/param";
-	String PARAM_VALUE = API_PREFIX + "/param-value";
-	String REGION = API_PREFIX + "/region";
-	String STRATEGY = API_PREFIX + "/query-tenantid-name";
-	String STRATEGYBYID = API_PREFIX + "/query-userid";
-	String REGEX = API_PREFIX + "/combination-regex";
-	String REGEXONE = API_PREFIX + "/combination-regex-one";
-	/**
-	 * 鑾峰彇鑿滃崟
-	 *
-	 * @param id 涓婚敭
-	 * @return Menu
-	 */
-	@GetMapping(MENU)
-	R<Menu> getMenu(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬
-	 *
-	 * @param id 涓婚敭
-	 * @return Dept
-	 */
-	@GetMapping(DEPT)
-	R<Dept> getDept(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param deptNames 閮ㄩ棬鍚�
-	 * @return 閮ㄩ棬id
-	 */
-	@GetMapping(DEPT_IDS)
-	R<String> getDeptIds(@RequestParam("tenantId") String tenantId, @RequestParam("deptNames") String deptNames);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param deptNames 閮ㄩ棬鍚�
-	 * @return 閮ㄩ棬id
-	 */
-	@GetMapping(DEPT_IDS_FUZZY)
-	R<String> getDeptIdsByFuzzy(@RequestParam("tenantId") String tenantId, @RequestParam("deptNames") String deptNames);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬鍚�
-	 *
-	 * @param id 涓婚敭
-	 * @return 閮ㄩ棬鍚�
-	 */
-	@GetMapping(DEPT_NAME)
-	R<String> getDeptName(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬鍚�
-	 *
-	 * @param deptIds 涓婚敭
-	 * @return
-	 */
-	@GetMapping(DEPT_NAMES)
-	R<List<String>> getDeptNames(@RequestParam("deptIds") String deptIds);
-
-	/**
-	 * 鑾峰彇瀛愰儴闂↖D
-	 *
-	 * @param deptId
-	 * @return
-	 */
-	@GetMapping(DEPT_CHILD)
-	R<List<Dept>> getDeptChild(@RequestParam("deptId") Long deptId);
-
-	/**
-	 * 鑾峰彇宀椾綅
-	 *
-	 * @param id 涓婚敭
-	 * @return Post
-	 */
-	@GetMapping(POST)
-	R<Post> getPost(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇宀椾綅id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param postNames 宀椾綅鍚�
-	 * @return 宀椾綅id
-	 */
-	@GetMapping(POST_IDS)
-	R<String> getPostIds(@RequestParam("tenantId") String tenantId, @RequestParam("postNames") String postNames);
-
-	/**
-	 * 鑾峰彇宀椾綅id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param postNames 宀椾綅鍚�
-	 * @return 宀椾綅id
-	 */
-	@GetMapping(POST_IDS_FUZZY)
-	R<String> getPostIdsByFuzzy(@RequestParam("tenantId") String tenantId, @RequestParam("postNames") String postNames);
-
-	/**
-	 * 鑾峰彇宀椾綅鍚�
-	 *
-	 * @param id 涓婚敭
-	 * @return 宀椾綅鍚�
-	 */
-	@GetMapping(POST_NAME)
-	R<String> getPostName(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇宀椾綅鍚�
-	 *
-	 * @param postIds 涓婚敭
-	 * @return
-	 */
-	@GetMapping(POST_NAMES)
-	R<List<String>> getPostNames(@RequestParam("postIds") String postIds);
-
-	/**
-	 * 鑾峰彇瑙掕壊
-	 *
-	 * @param id 涓婚敭
-	 * @return Role
-	 */
-	@GetMapping(ROLE)
-	R<Role> getRole(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇瑙掕壊id
-	 *
-	 * @param tenantId  绉熸埛id
-	 * @param roleNames 瑙掕壊鍚�
-	 * @return 瑙掕壊id
-	 */
-	@GetMapping(ROLE_IDS)
-	R<String> getRoleIds(@RequestParam("tenantId") String tenantId, @RequestParam("roleNames") String roleNames);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚�
-	 *
-	 * @param id 涓婚敭
-	 * @return 瑙掕壊鍚�
-	 */
-	@GetMapping(ROLE_NAME)
-	R<String> getRoleName(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍒悕
-	 *
-	 * @param id 涓婚敭
-	 * @return 瑙掕壊鍒悕
-	 */
-	@GetMapping(ROLE_ALIAS)
-	R<String> getRoleAlias(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚�
-	 *
-	 * @param roleIds 涓婚敭
-	 * @return
-	 */
-	@GetMapping(ROLE_NAMES)
-	R<List<String>> getRoleNames(@RequestParam("roleIds") String roleIds);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍒悕
-	 *
-	 * @param roleIds 涓婚敭
-	 * @return 瑙掕壊鍒悕
-	 */
-	@GetMapping(ROLE_ALIASES)
-	R<List<String>> getRoleAliases(@RequestParam("roleIds") String roleIds);
-
-	/**
-	 * 鑾峰彇绉熸埛
-	 *
-	 * @param id 涓婚敭
-	 * @return Tenant
-	 */
-	@GetMapping(TENANT)
-	R<Tenant> getTenant(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇绉熸埛
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @return Tenant
-	 */
-	@GetMapping(TENANT_ID)
-	R<Tenant> getTenant(@RequestParam("tenantId") String tenantId);
-
-	/**
-	 * 鑾峰彇绉熸埛浜у搧鍖�
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @return Tenant
-	 */
-	@GetMapping(TENANT_PACKAGE)
-	R<TenantPackage> getTenantPackage(@RequestParam("tenantId") String tenantId);
-
-	/**
-	 * 鑾峰彇鍙傛暟
-	 *
-	 * @param id 涓婚敭
-	 * @return Param
-	 */
-	@GetMapping(PARAM)
-	R<Param> getParam(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇鍙傛暟閰嶇疆
-	 *
-	 * @param paramKey 鍙傛暟key
-	 * @return String
-	 */
-	@GetMapping(PARAM_VALUE)
-	R<String> getParamValue(@RequestParam("paramKey") String paramKey);
-
-	/**
-	 * 鑾峰彇琛屾斂鍖哄垝
-	 *
-	 * @param code 涓婚敭
-	 * @return Region
-	 */
-	@GetMapping(REGION)
-	R<Region> getRegion(@RequestParam("code") String code);
-
-	/**
-	 * 鏍规嵁绉熸埛id浠ュ強鐢ㄦ埛鍚嶈幏鍙栧瘑鐮佺瓥鐣�
-	 * @param tenantId
-	 * @param name
-	 * @return
-	 */
-	@PostMapping(STRATEGY)
-	R<Strategy>  getByTenantIdAndName(@RequestParam("tenantId") String tenantId, @RequestParam("name") String name);
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛id鑾峰彇瀵嗙爜绛栫暐
-	 * @param userId
-	 * @return
-	 */
-	@PostMapping(STRATEGYBYID)
-	R<Strategy>  getByUserId(@RequestParam("id") Long userId);
-
-	/**
-	 * 鏍规嵁缁勫悎鏂瑰紡id鑾峰彇鍊�
-	 * @return
-	 */
-	@PostMapping(REGEX)
-	R<String> getRegex(@RequestBody List<String> combinationIds);
-
-	/**
-	 * 鏍规嵁缁勫悎鏂瑰紡id鑾峰彇鍊�
-	 * @return
-	 */
-	@PostMapping(REGEXONE)
-	R<List<String>> getRegexByList(@RequestBody List<String> combinationIds);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
deleted file mode 100644
index 1b84a20..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.*;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * Feign澶辫触閰嶇疆
- *
- * @author Chill
- */
-@Component
-public class ISysClientFallback implements ISysClient {
-
-	@Override
-	public R<Menu> getMenu(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Dept> getDept(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getDeptIds(String tenantId, String deptNames) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getDeptIdsByFuzzy(String tenantId, String deptNames) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getDeptName(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<String>> getDeptNames(String deptIds) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<Dept>> getDeptChild(Long deptId) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Post> getPost(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getPostIds(String tenantId, String postNames) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getPostIdsByFuzzy(String tenantId, String postNames) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getPostName(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<String>> getPostNames(String postIds) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Role> getRole(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getRoleIds(String tenantId, String roleNames) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getRoleName(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getRoleAlias(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<String>> getRoleNames(String roleIds) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<String>> getRoleAliases(String roleIds) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Tenant> getTenant(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Tenant> getTenant(String tenantId) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<TenantPackage> getTenantPackage(String tenantId) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Param> getParam(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getParamValue(String paramKey) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Region> getRegion(String code) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Strategy> getByTenantIdAndName(String tenantId, String name) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<Strategy> getByUserId(Long userId) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<String> getRegex(List<String> combinationIds) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<String>> getRegexByList(List<String> combinationIds) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ApiScopeVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ApiScopeVO.java
deleted file mode 100644
index c4ed3c1..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ApiScopeVO.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.ApiScope;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "ApiScopeVO瀵硅薄", description = "ApiScopeVO瀵硅薄")
-public class ApiScopeVO extends ApiScope {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 瑙勫垯绫诲瀷鍚�
-	 */
-	private String scopeTypeName;
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java
deleted file mode 100644
index f9f199c..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * CheckedTreeVO
- *
- * @author Chill
- */
-@Data
-public class CheckedTreeVO {
-
-	private List<String> menu;
-
-	private List<String> dataScope;
-
-	private List<String> apiScope;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DataScopeVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DataScopeVO.java
deleted file mode 100644
index 6b3bf24..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DataScopeVO.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.DataScope;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "DataScopeVO瀵硅薄", description = "DataScopeVO瀵硅薄")
-public class DataScopeVO extends DataScope {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 瑙勫垯绫诲瀷鍚�
-	 */
-	private String scopeTypeName;
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DeptVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DeptVO.java
deleted file mode 100644
index 04f5a5e..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DeptVO.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.node.INode;
-import org.springblade.system.entity.Dept;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "DeptVO瀵硅薄", description = "DeptVO瀵硅薄")
-public class DeptVO extends Dept implements INode<DeptVO> {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 鐖惰妭鐐笽D
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
-
-	/**
-	 * 瀛愬瓩鑺傜偣
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<DeptVO> children;
-
-	/**
-	 * 鏄惁鏈夊瓙瀛欒妭鐐�
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private Boolean hasChildren;
-
-	@Override
-	public List<DeptVO> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
-
-	/**
-	 * 涓婄骇鏈烘瀯
-	 */
-	private String parentName;
-
-	/**
-	 * 鏈烘瀯绫诲瀷鍚嶇О
-	 */
-	private String deptCategoryName;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantTreeVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantTreeVO.java
deleted file mode 100644
index d36c98e..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantTreeVO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import lombok.Data;
-import org.springblade.core.tool.node.TreeNode;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * GrantTreeVO
- *
- * @author Chill
- */
-@Data
-public class GrantTreeVO implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	private List<TreeNode> menu;
-
-	private List<TreeNode> dataScope;
-
-	private List<TreeNode> apiScope;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java
deleted file mode 100644
index 4627b2d..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * GrantVO
- *
- * @author Chill
- */
-@Data
-public class GrantVO implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	@ApiModelProperty(value = "roleIds闆嗗悎")
-	private List<Long> roleIds;
-
-	@ApiModelProperty(value = "menuIds闆嗗悎")
-	private List<Long> menuIds;
-
-	@ApiModelProperty(value = "topMenuIds闆嗗悎")
-	private List<Long> topMenuIds;
-
-	@ApiModelProperty(value = "dataScopeIds闆嗗悎")
-	private List<Long> dataScopeIds;
-
-	@ApiModelProperty(value = "apiScopeIds闆嗗悎")
-	private List<Long> apiScopeIds;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/MenuVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/MenuVO.java
deleted file mode 100644
index 6a1f717..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/MenuVO.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.node.INode;
-import org.springblade.system.entity.Menu;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "MenuVO瀵硅薄", description = "MenuVO瀵硅薄")
-public class MenuVO extends Menu implements INode<MenuVO> {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 鐖惰妭鐐笽D
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
-
-	/**
-	 * 瀛愬瓩鑺傜偣
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<MenuVO> children;
-
-	/**
-	 * 鏄惁鏈夊瓙瀛欒妭鐐�
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private Boolean hasChildren;
-
-	@Override
-	public List<MenuVO> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
-
-	/**
-	 * 涓婄骇鑿滃崟
-	 */
-	private String parentName;
-
-	/**
-	 * 鑿滃崟绫诲瀷
-	 */
-	private String categoryName;
-
-	/**
-	 * 鎸夐挳鍔熻兘
-	 */
-	private String actionName;
-
-	/**
-	 * 鏄惁鏂扮獥鍙f墦寮�
-	 */
-	private String isOpenName;
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ParamVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ParamVO.java
deleted file mode 100644
index 0e8ff1a..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ParamVO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Param;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "ParamVO瀵硅薄", description = "ParamVO瀵硅薄")
-public class ParamVO extends Param {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/PostVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/PostVO.java
deleted file mode 100644
index c39c335..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/PostVO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Post;
-
-/**
- * 宀椾綅琛ㄨ鍥惧疄浣撶被
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "PostVO瀵硅薄", description = "宀椾綅琛�")
-public class PostVO extends Post {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 宀椾綅鍒嗙被鍚�
-	 */
-	private String categoryName;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RegionVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RegionVO.java
deleted file mode 100644
index af7047e..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RegionVO.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.node.INode;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Region;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 琛屾斂鍖哄垝琛ㄨ鍥惧疄浣撶被
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "RegionVO瀵硅薄", description = "琛屾斂鍖哄垝琛�")
-public class RegionVO extends Region implements INode<RegionVO> {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 鐖惰妭鐐笽D
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
-
-	/**
-	 * 鐖惰妭鐐瑰悕绉�
-	 */
-	private String parentName;
-
-	/**
-	 * 鏄惁鏈夊瓙瀛欒妭鐐�
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private Boolean hasChildren;
-
-	/**
-	 * 瀛愬瓩鑺傜偣
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<RegionVO> children;
-
-	@Override
-	public Long getId() {
-		return Func.toLong(this.getCode());
-	}
-
-	@Override
-	public Long getParentId() {
-		return Func.toLong(this.getParentCode());
-	}
-
-	@Override
-	public List<RegionVO> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleMenuVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleMenuVO.java
deleted file mode 100644
index 1d17232..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleMenuVO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.RoleMenu;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "RoleMenuVO瀵硅薄", description = "RoleMenuVO瀵硅薄")
-public class RoleMenuVO extends RoleMenu {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleVO.java
deleted file mode 100644
index b8040db..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleVO.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.node.INode;
-import org.springblade.system.entity.Role;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "RoleVO瀵硅薄", description = "RoleVO瀵硅薄")
-public class RoleVO extends Role implements INode<RoleVO> {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 鐖惰妭鐐笽D
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
-
-	/**
-	 * 瀛愬瓩鑺傜偣
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<RoleVO> children;
-
-	@Override
-	public List<RoleVO> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
-
-	/**
-	 * 涓婄骇瑙掕壊
-	 */
-	private String parentName;
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java
deleted file mode 100644
index 313ecdb..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.Tenant;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "TenantVO瀵硅薄", description = "TenantVO瀵硅薄")
-public class TenantVO extends Tenant {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鏄惁寮�鍚笁鍛�
-	 */
-	private Integer ssaEnable;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/UserPwdstrategyVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/UserPwdstrategyVO.java
deleted file mode 100644
index ba40eb1..0000000
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/UserPwdstrategyVO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.springblade.system.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.entity.UserPwdstrategy;
-
-import java.util.List;
-
-/**
- * (UserPwdStrtategy)瀹炰綋绫�
- *
- * @author makejava
- * @since 2023-03-20 14:59:29
- */
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "TenantVO瀵硅薄", description = "TenantVO瀵硅薄")
-public class UserPwdstrategyVO extends UserPwdstrategy {
-
-	private static final long serialVersionUID = 336389756425054417L;
-
-	@ApiModelProperty(value = "闇�瑕佷慨鏀规垨鑰呮柊澧炲瘑鐮佺瓥鐣ョ殑鐢ㄦ埛id")
-	private List<Long> userIds;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/pom.xml b/Source/BladeX/blade-service-api/blade-user-api/pom.xml
deleted file mode 100644
index 9a13678..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service-api</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-user-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-cache</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/cache/UserCache.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/cache/UserCache.java
deleted file mode 100644
index 0504eb1..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/cache/UserCache.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.cache;
-
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.feign.IUserClient;
-
-import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
-import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
-
-/**
- * 绯荤粺缂撳瓨
- *
- * @author Chill
- */
-public class UserCache {
-	private static final String USER_CACHE_ID = "user:id:";
-	private static final String USER_CACHE_ACCOUNT = "user:account:";
-
-	private static IUserClient userClient;
-
-	private static IUserClient getUserClient() {
-		if (userClient == null) {
-			userClient = SpringUtil.getBean(IUserClient.class);
-		}
-		return userClient;
-	}
-
-	/**
-	 * 鏍规嵁浠诲姟鐢ㄦ埛id鑾峰彇鐢ㄦ埛淇℃伅
-	 *
-	 * @param taskUserId 浠诲姟鐢ㄦ埛id
-	 * @return
-	 */
-	public static User getUserByTaskUser(String taskUserId) {
-		Long userId = Func.toLong(StringUtil.removePrefix(taskUserId, TASK_USR_PREFIX));
-		return getUser(userId);
-	}
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛
-	 *
-	 * @param userId 鐢ㄦ埛id
-	 * @return
-	 */
-	public static User getUser(Long userId) {
-		return CacheUtil.get(USER_CACHE, USER_CACHE_ID, userId, () -> {
-			R<User> result = getUserClient().userInfoById(userId);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @param account  璐﹀彿鍚�
-	 * @return
-	 */
-	public static User getUser(String tenantId, String account) {
-		return CacheUtil.get(USER_CACHE, USER_CACHE_ACCOUNT, tenantId + StringPool.DASH + account, () -> {
-			R<User> result = getUserClient().userByAccount(tenantId, account);
-			return result.getData();
-		});
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
deleted file mode 100644
index b04494c..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.entity;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-import java.util.Date;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_user")
-@EqualsAndHashCode(callSuper = true)
-public class User extends TenantEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 鐢ㄦ埛缂栧彿
-	 */
-	private String code;
-	/**
-	 * 鐢ㄦ埛骞冲彴
-	 */
-	private Integer userType;
-	/**
-	 * 璐﹀彿
-	 */
-	private String account;
-	/**
-	 * 瀵嗙爜
-	 */
-	private String password;
-	/**
-	 * 鏄电О
-	 */
-	private String name;
-	/**
-	 * 鐪熷悕
-	 */
-	private String realName;
-	/**
-	 * 澶村儚
-	 */
-	private String avatar;
-	/**
-	 * 閭
-	 */
-	private String email;
-	/**
-	 * 鎵嬫満
-	 */
-	private String phone;
-	/**
-	 * 鐢熸棩
-	 */
-	private Date birthday;
-	/**
-	 * 鎬у埆
-	 */
-	private Integer sex;
-	/**
-	 * 瑙掕壊id
-	 */
-	private String roleId;
-	/**
-	 * 閮ㄩ棬id
-	 */
-	private String deptId;
-	/**
-	 * 瀵嗙爜绛栫暐
-	 */
-	@TableField(exist = false)
-	private String pwdStrategy;
-	/**
-	 * 宀椾綅id
-	 */
-	private String postId;
-	/**
-	 * 瀵嗙爜淇敼鏃堕棿
-	 */
-	private Date pwdUpdateTime;
-	/**
-	 * 鐢ㄦ埛瀵嗙骇
-	 */
-	private String secretgrade;
-	/**
-	 * 瀵嗙爜绛栫暐淇敼鐘舵��
-	 */
-	private Long strategyUpdateStatus;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java
deleted file mode 100644
index 1f3cd56..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_user_app")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "UserApp瀵硅薄", description = "UserApp瀵硅薄")
-public class UserApp extends Model<UserApp> {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鐢ㄦ埛ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐢ㄦ埛ID")
-	private Long userId;
-
-	/**
-	 * 鐢ㄦ埛鎷撳睍淇℃伅
-	 */
-	@ApiModelProperty(value = "鐢ㄦ埛鎷撳睍淇℃伅")
-	private String userExt;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java
deleted file mode 100644
index ec77cc8..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_user_dept")
-@ApiModel(value = "UserDept瀵硅薄", description = "UserDept瀵硅薄")
-public class UserDept implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鐢ㄦ埛ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐢ㄦ埛ID")
-	private Long userId;
-
-	/**
-	 * 閮ㄩ棬ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "閮ㄩ棬ID")
-	private Long deptId;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java
deleted file mode 100644
index 98063fa..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.entity;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springblade.core.tool.support.Kv;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * 鐢ㄦ埛淇℃伅
- *
- * @author Chill
- */
-@Data
-@ApiModel(description = "鐢ㄦ埛淇℃伅")
-public class UserInfo implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 绗笁鏂规巿鏉僫d
-	 */
-	@ApiModelProperty(value = "绗笁鏂规巿鏉僫d")
-	private String oauthId;
-
-	/**
-	 * 鐢ㄦ埛鍩虹淇℃伅
-	 */
-	@ApiModelProperty(value = "鐢ㄦ埛")
-	private User user;
-
-	/**
-	 * 鎷撳睍淇℃伅
-	 */
-	@ApiModelProperty(value = "鎷撳睍淇℃伅")
-	private Kv detail;
-
-	/**
-	 * 鏉冮檺鏍囪瘑闆嗗悎
-	 */
-	@ApiModelProperty(value = "鏉冮檺闆嗗悎")
-	private List<String> permissions;
-
-	/**
-	 * 瑙掕壊闆嗗悎
-	 */
-	@ApiModelProperty(value = "瑙掕壊闆嗗悎")
-	private List<String> roles;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
deleted file mode 100644
index 533ae6e..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_user_oauth")
-public class UserOauth implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 绉熸埛ID
-	 */
-	private String tenantId;
-
-	/**
-	 * 绗笁鏂圭郴缁熺敤鎴稩D
-	 */
-	private String uuid;
-
-	/**
-	 * 鐢ㄦ埛ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐢ㄦ埛涓婚敭")
-	private Long userId;
-
-	/**
-	 * 鐢ㄦ埛鍚�
-	 */
-	private String username;
-	/**
-	 * 鐢ㄦ埛鏄电О
-	 */
-	private String nickname;
-	/**
-	 * 鐢ㄦ埛澶村儚
-	 */
-	private String avatar;
-	/**
-	 * 鐢ㄦ埛缃戝潃
-	 */
-	private String blog;
-	/**
-	 * 鎵�鍦ㄥ叕鍙�
-	 */
-	private String company;
-	/**
-	 * 浣嶇疆
-	 */
-	private String location;
-	/**
-	 * 鐢ㄦ埛閭
-	 */
-	private String email;
-	/**
-	 * 鐢ㄦ埛澶囨敞锛堝悇骞冲彴涓殑鐢ㄦ埛涓汉浠嬬粛锛�
-	 */
-	private String remark;
-	/**
-	 * 鎬у埆
-	 */
-	private String gender;
-	/**
-	 * 鐢ㄦ埛鏉ユ簮
-	 */
-	private String source;
-
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java
deleted file mode 100644
index c64d4e2..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_user_other")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "UserOther瀵硅薄", description = "UserOther瀵硅薄")
-public class UserOther extends Model<UserOther> {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鐢ㄦ埛ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐢ㄦ埛ID")
-	private Long userId;
-
-	/**
-	 * 鐢ㄦ埛鎷撳睍淇℃伅
-	 */
-	@ApiModelProperty(value = "鐢ㄦ埛鎷撳睍淇℃伅")
-	private String userExt;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java
deleted file mode 100644
index bb91a71..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_org_user_web")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "UserWeb瀵硅薄", description = "UserWeb瀵硅薄")
-public class UserWeb extends Model<UserWeb> {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "涓婚敭")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 鐢ㄦ埛ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "鐢ㄦ埛ID")
-	private Long userId;
-
-	/**
-	 * 鐢ㄦ埛鎷撳睍淇℃伅
-	 */
-	@ApiModelProperty(value = "鐢ㄦ埛鎷撳睍淇℃伅")
-	private String userExt;
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java
deleted file mode 100644
index 3626e4b..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 鐢ㄦ埛绫诲瀷鏋氫妇
- *
- * @author Chill
- */
-@Getter
-@AllArgsConstructor
-public enum UserEnum {
-
-	/**
-	 * web
-	 */
-	WEB("web", 1),
-
-	/**
-	 * app
-	 */
-	APP("app", 2),
-
-	/**
-	 * other
-	 */
-	OTHER("other", 3),
-	;
-
-	final String name;
-	final int category;
-
-	/**
-	 * 鍖归厤鏋氫妇鍊�
-	 *
-	 * @param name 鍚嶇О
-	 * @return BladeUserEnum
-	 */
-	public static UserEnum of(String name) {
-		if (name == null) {
-			return null;
-		}
-		UserEnum[] values = UserEnum.values();
-		for (UserEnum smsEnum : values) {
-			if (smsEnum.name.equals(name)) {
-				return smsEnum;
-			}
-		}
-		return null;
-	}
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
deleted file mode 100644
index 8a412cc..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.feign;
-
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.entity.UserInfo;
-import org.springblade.system.user.entity.UserOauth;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * User Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_USER_NAME
-)
-public interface IUserClient {
-
-	String API_PREFIX = "/client";
-	String USER_INFO = API_PREFIX + "/user-info";
-	String USER_INFO_BY_TYPE = API_PREFIX + "/user-info-by-type";
-	String USER_INFO_BY_ID = API_PREFIX + "/user-info-by-id";
-	String USER_INFO_BY_ACCOUNT = API_PREFIX + "/user-info-by-account";
-	String USER_AUTH_INFO = API_PREFIX + "/user-auth-info";
-	String SAVE_USER = API_PREFIX + "/save-user";
-	String SAVE_USER_LIST = API_PREFIX + "/save-user-list";
-	String REMOVE_USER = API_PREFIX + "/remove-user";
-	String UPDATE_USER = API_PREFIX+"/update-user";
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛淇℃伅
-	 *
-	 * @param userId 鐢ㄦ埛id
-	 * @return
-	 */
-	@GetMapping(USER_INFO_BY_ID)
-	R<User> userInfoById(@RequestParam("userId") Long userId);
-
-	/**
-	 * 鏍规嵁璐﹀彿鑾峰彇鐢ㄦ埛淇℃伅
-	 *
-	 * @param tenantId 绉熸埛id
-	 * @param account  璐﹀彿
-	 * @return
-	 */
-	@GetMapping(USER_INFO_BY_ACCOUNT)
-	R<User> userByAccount(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛淇℃伅
-	 *
-	 * @param tenantId 绉熸埛ID
-	 * @param account  璐﹀彿
-	 * @return
-	 */
-	@GetMapping(USER_INFO)
-	R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛淇℃伅
-	 *
-	 * @param tenantId 绉熸埛ID
-	 * @param account  璐﹀彿
-	 * @param userType 鐢ㄦ埛骞冲彴
-	 * @return
-	 */
-	@GetMapping(USER_INFO_BY_TYPE)
-	R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("userType") String userType);
-
-	/**
-	 * 鑾峰彇绗笁鏂瑰钩鍙颁俊鎭�
-	 *
-	 * @param userOauth 绗笁鏂规巿鏉冪敤鎴蜂俊鎭�
-	 * @return UserInfo
-	 */
-	@PostMapping(USER_AUTH_INFO)
-	R<UserInfo> userAuthInfo(@RequestBody UserOauth userOauth);
-
-	/**
-	 * 鏂板缓鐢ㄦ埛
-	 *
-	 * @param user 鐢ㄦ埛瀹炰綋
-	 * @return
-	 */
-	@PostMapping(SAVE_USER)
-	R<Boolean> saveUser(@RequestBody User user);
-
-	/**
-	 * 鏂板缓澶氫釜鐢ㄦ埛
-	 * @param users
-	 * @return
-	 */
-	@PostMapping(SAVE_USER_LIST)
-	R<Boolean> saveUserList(@RequestBody List<User> users);
-
-	/**
-	 * 鍒犻櫎鐢ㄦ埛
-	 *
-	 * @param tenantIds 绉熸埛id闆嗗悎
-	 * @return
-	 */
-	@PostMapping(REMOVE_USER)
-	R<Boolean> removeUser(@RequestParam("tenantIds") String tenantIds);
-
-	/**
-	 * 淇敼鐢ㄦ埛鍩虹淇℃伅
-	 * @param user
-	 * @return
-	 */
-	@PostMapping(UPDATE_USER)
-	R<Boolean> updateUser(@RequestBody User user);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserSearchClient.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserSearchClient.java
deleted file mode 100644
index 52aa418..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserSearchClient.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.feign;
-
-
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.user.entity.User;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * User Search Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_USER_NAME
-)
-public interface IUserSearchClient {
-
-	String API_PREFIX = "/client";
-	String LIST_BY_USER = API_PREFIX + "/user/list-by-user";
-	String LIST_BY_DEPT = API_PREFIX + "/user/list-by-dept";
-	String LIST_BY_POST = API_PREFIX + "/user/list-by-post";
-	String LIST_BY_ROLE = API_PREFIX + "/user/list-by-role";
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param userId 鐢ㄦ埛ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	@GetMapping(LIST_BY_USER)
-	R<List<User>> listByUser(@RequestParam("userId") String userId);
-
-	/**
-	 * 鏍规嵁閮ㄩ棬ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param deptId 閮ㄩ棬ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	@GetMapping(LIST_BY_DEPT)
-	R<List<User>> listByDept(@RequestParam("deptId") String deptId);
-
-	/**
-	 * 鏍规嵁宀椾綅ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param postId 宀椾綅ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	@GetMapping(LIST_BY_POST)
-	R<List<User>> listByPost(@RequestParam("postId") String postId);
-
-	/**
-	 * 鏍规嵁瑙掕壊ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param roleId 瑙掕壊ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	@GetMapping(LIST_BY_ROLE)
-	R<List<User>> listByRole(@RequestParam("roleId") String roleId);
-
-}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO.java
deleted file mode 100644
index 37d46b2..0000000
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.vo;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.system.user.entity.User;
-
-/**
- * 瑙嗗浘瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "UserVO瀵硅薄", description = "UserVO瀵硅薄")
-public class UserVO extends User {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	/**
-	 * 瀵嗙爜
-	 */
-	@JsonIgnore
-	private String password;
-
-	/**
-	 * 瀵嗙爜绛栫暐
-	 */
-	private String pwdStrategy;
-
-	/**
-	 * 绉熸埛鍚�
-	 */
-	private String tenantName;
-
-	/**
-	 * 鐢ㄦ埛骞冲彴鍚�
-	 */
-	private String userTypeName;
-
-	/**
-	 * 瑙掕壊鍚�
-	 */
-	private String roleName;
-
-	/**
-	 * 閮ㄩ棬鍚�
-	 */
-	private String deptName;
-
-	/**
-	 * 宀椾綅鍚�
-	 */
-	private String postName;
-
-	/**
-	 * 鎬у埆
-	 */
-	private String sexName;
-
-	/**
-	 * 鎷撳睍淇℃伅
-	 */
-	private String userExt;
-
-}
diff --git a/Source/BladeX/blade-service-api/pom.xml b/Source/BladeX/blade-service-api/pom.xml
deleted file mode 100644
index effd0cb..0000000
--- a/Source/BladeX/blade-service-api/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>UBCS</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-service-api</artifactId>
-    <name>${project.artifactId}</name>
-    <version>3.0.1.RELEASE</version>
-    <packaging>pom</packaging>
-    <description>BladeX 寰湇鍔PI闆嗗悎</description>
-
-    <modules>
-        <module>blade-desk-api</module>
-        <module>blade-dict-api</module>
-        <module>blade-scope-api</module>
-        <module>blade-system-api</module>
-        <module>blade-user-api</module>
-        <module>blade-code-api</module>
-        <module>blade-omd-api</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-mybatis</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-tenant</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-openfeign</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>io.swagger</groupId>
-                    <artifactId>swagger-models</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-models</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-auto</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <skip>true</skip>
-                    <finalName>${project.name}</finalName>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-service/blade-code/pom.xml b/Source/BladeX/blade-service/blade-code/pom.xml
deleted file mode 100644
index 3e1fab2..0000000
--- a/Source/BladeX/blade-service/blade-code/pom.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <parent>
-        <groupId>org.springblade</groupId>
-        <artifactId>blade-service</artifactId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <artifactId>blade-code</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <properties>
-        <maven.compiler.source>8</maven.compiler.source>
-        <maven.compiler.target>8</maven.compiler.target>
-        <axis2.version>1.7.9</axis2.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.vci</groupId>
-            <artifactId>vci-platform-web</artifactId>
-            <version>2022.1-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>com.vci</groupId>
-            <artifactId>vci-platform-webservice</artifactId>
-            <version>2022.1-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.vci.mdm</groupId>
-            <artifactId>vci-mdm-wrj-webducking</artifactId>
-            <version>2022.1-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>de.odysseus.staxon</groupId>
-            <artifactId>staxon</artifactId>
-            <version>1.3</version>
-        </dependency>
-
-        <!--axis2 begin -->
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-adb</artifactId>
-            <version>${axis2.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-kernel</artifactId>
-            <version>${axis2.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-transport-http</artifactId>
-            <version>${axis2.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>javax-servlet</groupId>
-                    <artifactId>servlet-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-transport-local</artifactId>
-            <version>${axis2.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-jaxws</artifactId>
-            <version>${axis2.version}</version>
-        </dependency>
-        <!--axis2 end -->
-
-        <!--webservice鐨勫唴瀹�-->
-        <dependency>
-            <groupId>com.vci</groupId>
-            <artifactId>vci-platform-webservice</artifactId>
-            <version>2022.1-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-cloud</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-code-api</artifactId>
-            <version>3.0.1.RELEASE</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <version>2.8</version>
-                <executions>
-                    <execution>
-                        <id>copy</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
-                            <excludeGroupIds>com.vci.platform</excludeGroupIds>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>3.0.2</version>
-                <configuration>
-                    <archive>
-                        <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>lib/</classpathPrefix>
-                        </manifest>
-                    </archive>
-                    <excludes>
-                        <exclude>application-dev.yml</exclude>
-                        <exclude>application-prod.yml</exclude>
-                        <exclude>application.yml</exclude>
-                        <exclude>properties/conf.properties</exclude>
-                        <exclude>properties/eventConf.properties</exclude>
-                        <exclude>lib/*</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java
deleted file mode 100644
index 8b4151e..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package 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;
-import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.scheduling.annotation.EnableScheduling;
-
-/**
- * Code鍚姩鍣�
- *
- * @author ludc
- */
-@BladeCloudApplication
-@ComponentScan({"com.vci.*"})
-@EnableScheduling
-@EnableCaching
-public class CodeApplication {
-
-	public static void main(String[] 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
deleted file mode 100644
index ca8619c..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.springblade.code.Scheduling;
-
-
-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;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * 闆嗘垚浠诲姟瀹氭椂鍣�
- * 鎻掑叆dockingtask涓�
- * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
- */
-@Component
-public class DockingClassSyncScheduling {
-
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Resource
-    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
-
-    @Value("${clsfSyncPush.isStart:false}")
-    public boolean CLSF_SYNC_PUSH_ISSTARE;
-
-    /**
-     * 鏄惁鍒濆鍖栧畬鎴愪簡
-     */
-    public static volatile String FINISH_INIT = "false";
-
-    /**
-     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
-     */
-    @PostConstruct()
-    public void onInit(){
-        FINISH_INIT = "true";
-    }
-
-    //榛樿姣忓垎閽熸墽琛屾柟娉�
-    @Scheduled(cron = "${clsfSyncPush.cronTime:0 0/10 * * * ?}")
-    public void scheduled() {
-        if(CLSF_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
-            codeDuckingSyncServiceI.DockingClassSyncScheduing();
-            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
-            String time = formatter.format(new Date());
-            String outinfo = "============鍦� "+time+" 鎵ц浜嗗垎绫婚泦鎴愭帹閫�";
-            logger.info(outinfo);
-        }
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java
deleted file mode 100644
index 01c6d4b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.springblade.code.Scheduling;
-
-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;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * 闆嗘垚浠诲姟瀹氭椂鍣�
- * 鎻掑叆dockingtask涓�
- * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
- */
-@Component
-public class DockingDataSyncScheduling {
-
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Resource
-    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
-
-    @Value("${dataSyncPush.isStart:false}")
-    public boolean DATA_SYNC_PUSH_ISSTARE;
-
-    /**
-     * 鏄惁鍒濆鍖栧畬鎴愪簡
-     */
-    public static volatile String FINISH_INIT = "false";
-
-    /**
-     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
-     */
-    @PostConstruct()
-    public void onInit(){
-        FINISH_INIT = "true";
-    }
-
-    //榛樿姣忓垎閽熸墽琛屾柟娉�
-    @Scheduled(cron = "${dataSyncPush.cronTime:0 0/10 * * * ?}")
-    public void scheduled() {
-        if(DATA_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
-            codeDuckingSyncServiceI.DockingDataSyncScheduing();
-            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
-            String time = formatter.format(new Date());
-            String outinfo = "============鍦� "+time+" 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
-            logger.info(outinfo);
-        }
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java
deleted file mode 100644
index 6529118..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.springblade.code.Scheduling;
-
-
-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;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * 闆嗘垚浠诲姟瀹氭椂鍣�
- * 鎻掑叆dockingtask涓�
- * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
- */
-@Component
-public class DockingScheduling {
-
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Resource
-    private CodeDuckingServiceI codeDuckingServiceI;
-
-    @Value("${docking.insertCache2:false}")
-    public boolean INSERT_CACHE2;
-
-    /**
-     * 鏄惁鍒濆鍖栧畬鎴愪簡
-     */
-    public static volatile String FINISH_INIT = "false";
-
-    /**
-     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
-     */
-    @PostConstruct()
-    public void onInit(){
-        FINISH_INIT = "true";
-    }
-
-    //榛樿姣忓垎閽熸墽琛屾柟娉�
-    @Scheduled(cron = "${docking.cron:0 0/10 * * * ?}")
-    public void scheduled() {
-        if(INSERT_CACHE2 && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
-            codeDuckingServiceI.DockingScheduing();
-            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
-            String time = formatter.format(new Date());
-            String outinfo = "============鍦� "+time+" 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
-            logger.info(outinfo);
-        }
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java
deleted file mode 100644
index 10aeb67..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.springblade.code.algorithm;
-
-import org.springblade.code.annotation.MdmSerialAlgorithm;
-import org.springblade.code.annotation.MdmSerialAlgorithmMethod;
-
-/**
- * 娴佹按绠楁硶鐨勭ず渚�
- */
-@MdmSerialAlgorithm(text = "娴佹按绠楁硶鐨勭ず渚�",description = "璇蜂笉瑕佷娇鐢ㄨ繖涓被锛岃繖涓被鍙槸绀轰緥锛岀敤浜庢煡鐪嬪浣曠紪鍐欐祦姘寸畻娉�")
-public class CustomSerialAlgorithmExample {
-
-    /**
-     * 鐢熸垚娴佹按鍙风殑鏂规硶
-     * @return 娴佹按鍙风殑淇℃伅
-     */
-    @MdmSerialAlgorithmMethod
-    public String serialGenerate(){
-        return "";
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java
deleted file mode 100644
index b0dc7bd..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.springblade.code.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 闆嗘垚鏃惰嚜瀹氫箟鐨勮浆鎹㈢被
- * @author weidy
- * @date 2022-1-18
- */
-@Target({ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MdmIntegrationMap {
-
-    /**
-     * 鍊硷紝瀹為檯灏辨槸杩欎釜娉ㄨВ鎵�鍦ㄧ殑绫荤殑鍏ㄨ矾寰�
-     * @return 鍊�
-     */
-    String value() default "";
-
-    /**
-     * 浜嬩欢鐨勫悕绉�
-     * @return 浜嬩欢鍚嶇О
-     */
-    String text();
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java
deleted file mode 100644
index a8d54f9..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.springblade.code.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 闆嗘垚鏃惰嚜瀹氫箟鐨勮浆鎹㈡柟娉�
- * @author weidy
- * @date 2022-1-18
- */
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MdmIntegrationMapMethod {
-
-    /**
-     * 鍊硷紝
-     * @return 鍊�
-     */
-    String value() default "";
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java
deleted file mode 100644
index 138a7d3..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.springblade.code.annotation;
-
-import org.springframework.stereotype.Component;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 鑷畾涔夋祦姘寸畻娉曠殑娉ㄨВ
- * @author weidy
- * @date 2022-1-18
- */
-@Target({ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@Component
-public @interface MdmSerialAlgorithm {
-
-    /**
-     * 鍊硷紝瀹為檯灏辨槸杩欎釜娉ㄨВ鎵�鍦ㄧ殑绫荤殑鍏ㄨ矾寰�
-     * @return 鍊�
-     */
-    String value() default "";
-
-    /**
-     * 浜嬩欢鐨勫悕绉�
-     * @return 浜嬩欢鍚嶇О
-     */
-    String text();
-
-    /**
-     * 鎻忚堪
-     * @return 鎻忚堪
-     */
-    String description() default "";
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java
deleted file mode 100644
index 1603394..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.springblade.code.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 鑷畾涔夋祦姘寸畻娉曞鐞嗘柟娉曠殑娉ㄨВ
- * @author weidy
- * @date 2022-1-18
- */
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MdmSerialAlgorithmMethod {
-
-    /**
-     * 鍊�
-     * @return 鍊�
-     */
-    String value() default "";
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java
deleted file mode 100644
index df3ad1a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.springblade.code.constant;
-
-/**
- * 涓绘暟鎹浉鍏崇殑涓氬姟绫诲瀷缂栧彿
- */
-public class MdmBtmTypeConstant {
-
-    /**
-     * 涓婚搴撳垎绫�
-     */
-    public static final String CODE_CLASSIFY = "codeclassify";
-    /**
-     * 涓婚搴撳垎绫诲寘鍚殑妯℃澘
-     */
-    public static final String CODE_CLASSIFY_TEMPLATE = "codeclstemplate";
-    /**
-     * 涓婚搴撳垎绫绘ā鏉� 鍖呭惈鐨勫睘鎬�
-     */
-    public static final String CODE_CLASSIFY_TEMPLATE_ATTR = "codeclstempattr";
-
-    /**
-     * 涓绘暟鎹腑鐨勬寜閽墿灞�
-     */
-    public static final String CODE_BUTTON = "codebutton";
-    /**
-     * 涓绘暟鎹腑鐨勬ā鏉垮叧鑱旂殑鎸夐挳
-     */
-    public static final String CODE_TEMPLATE_BUTTON = "codetempbutton";
-    /**
-     * 涓绘暟鎹腑鐨勭紪鐮佽鍒�
-     */
-    public static final String CODE_RULE = "coderule";
-
-
-    /**
-     * 鍏抽敭灞炴�у垽鏂噸澶�
-     */
-    public static final String CODE_KEY_ATTR_REPEAT_RULE = "codekeyattrrepeat";
-
-    /**
-     * 鐩镐技鏌ヨ瑙勫垯
-     */
-    public static final String CODE_RESEMBLE_RULE = "coderesemblerule";
-    /**
-     * 妯℃澘闃舵
-     */
-    public static final String CODE_TEMPLATE_PHASE = "codetempphase";
-    /**
-     * 闃舵鐨勫睘鎬�
-     */
-    public static final String CODE_PHASE_ATTR = "codephaseattr";
-
-    /**
-     * 涓绘暟鎹垎绫讳娇鐢ㄧ殑娴佺▼妯℃澘
-     */
-    public static final String CODE_CLASSIFY_PROCESS_TEMPLATE = "codeclsflowtemp";
-
-    /**
-     *鍒嗙被鐨勬ā鏉垮搴旀祦绋嬩腑鐨勯樁娈甸厤缃�
-     */
-    public static final String CODE_CLASSIFY_PROCESS_PHASE = "codeclsflowphase" ;
-
-    /**
-     * 鍥哄畾鐮佺殑鐮佸��
-     */
-    public static final String CODE_FIXED_VALUE = "codefixedvalue";
-
-    /**
-     * 鍒嗙被鐮佺殑鐮佸��
-     */
-    public static final String CODE_CLASSIFY_VALUE = "codeclassifyvalue";
-
-    /**
-     * 鏄犲皠瑙勫垯
-     */
-    public static final String CODE_TEMPLATE_MAP = "codetempmap";
-    /**
-     * 鏄犲皠瑙勫垯鏄庣粏
-     */
-    public static final String CODE_TEMPLATE_MAP_ITEM = "codetempmapitem";
-    /**
-     * 鐮佹鍩虹淇℃伅
-     */
-    public static final String CODE_BASIC_SEC = "codebasicsec";
-
-    /**
-     * 鍚屼箟璇嶉厤缃�
-     */
-    public static final String CODE_SYNONYM = "codesynonym";
-    /**
-     * 鍏ㄩ儴鐨勭爜鍊�
-     */
-    public static final String CODE_ALL_CODE = "codeallcode";
-
-    /**
-     * 缂栫爜瑙勫垯鐨勬祦姘村��
-     */
-    public static final String CODE_SERIAL_VALUE = "codeserialvalue" ;
-
-    /**
-     * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇�
-     */
-    public static final String DOCKING_LOGE = "codedockinglog";
-
-    /**
-     * 璧勬簮瀵规帴瑙﹀彂鍣ㄦ彃鍏ヨ鎺ㄩ�佺殑鏁版嵁
-     */
-    public static final String DOCKING_DATA = "codedockingdata";
-
-    /**
-     * 璧勬簮瀵规帴瑙﹀彂鍣ㄦ彃鍏ヨ鎺ㄩ�佺殑鏁版嵁鍜岀郴缁熶俊鎭�
-     */
-    public static final String DOCKING_TASK = "codedockingtask";
-
-    /**
-     * 棰勭敵璇锋暟鎹�
-     */
-    public static final String DOCKING_PRE_APPLY_DATA = "dockingpadata";
-
-    /**
-     * 棰勭敵璇锋暟鎹俊鎭�
-     */
-    public static final String DOCKING_PRE_APPLY_DATA_INFO = "dockingpadatainfo";
-
-    /**
-     * 绯荤粺闆嗘垚鐨勭郴缁�
-     */
-    public static final String SYS_INT_BASE = "sysintbase";
-    /**
-     * 绯荤粺闆嗘垚鎺ュ彛鐨勫熀纭�淇℃伅
-     */
-    public static final String SYS_INT_INFO = "sysintinfo";
-
-    /**
-     * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹柟寮�
-     */
-    public static final String SYS_INT_AUTHORITY = "sysintauthority";
-
-    /**
-     * 绯荤粺闆嗘垚鎺ュ彛鐨勫弬鏁�,http瀵瑰簲鐨刾aramter
-     */
-    public static final String SYS_INT_PARAMTERY = "sysintparemter";
-
-    /**
-     * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佷俊鎭�,http瀵瑰簲鐨刪eader,webserver瀵瑰簲鐨勮处鍙峰瘑鐮佺瓑淇℃伅
-     */
-    public static final String SYS_INT_HEADER = "sysintheader";
-
-
-    /**
-     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
-     */
-    public static final String DOCKING_PRE_JINTEGMAPCONFIG = "jintegmapconifg";
-
-    /**
-     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
-     */
-    public static final String DOCKING_PRE_JCLASS = "jclass";
-    /**
-     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
-     */
-    public static final String DOCKING_PRE_JMETAATRR = "jmetaattr";
-
-    /**
-     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
-     */
-    public static final String DOCKING_PRE_JRANGE = "jrange";
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java
deleted file mode 100644
index a2f8716..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package org.springblade.code.constant;
-
-/**
- * 涓绘暟鎹帹閫佺浉鍏�
- */
-public class MdmDuckingConstant {
-
-    /**
-     *  dockingtask sendFlag 鎺ㄩ�佹垚鍔�
-     */
-    public static final String SEND_FLAG_TRUE = "true";
-
-    /**
-     * dockingtask sendFlag 鏈帹閫佹垚鍔�
-     */
-    public static final String SEND_FLAG_FALSE = "false";
-
-    /**
-     *  dockingloge interfacestatus 鎺ㄩ�佹垚鍔�
-     */
-    public static final String INTERFACE_STATUS_TRUE = "true";
-
-    /**
-     * dockingloge interfacestatus 鏈帹閫佹垚鍔�
-     */
-    public static final String INTERFACE_STATUS_FALSE = "false";
-
-    /**
-     * 瀛樻斁cache1鐨勬枃浠跺すkey,鏆傛椂涓嶇敤浜�
-     */
-    public static String DOCKING_CACHE1 = "DOCKING_CACHE1";
-
-    /**
-     * 瀛樻斁cache2鍒犻櫎鏁版嵁鐨勬枃浠跺すkey
-     */
-    public static String DOCKING_CACHE2_DELETE = "DOCKING_CACHE2_DELETE:";
-
-    /**
-     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝btmnam=DOCKING_DEFAULT_CLASSIFY
-     */
-    public static String DOCKING_DEFAULT_CLASSIFY = "CODECLASSIFY";
-
-    /**
-     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyoid=DOCKING_DEFAULT_CLASSIFYOID
-     */
-    public static String DOCKING_DEFAULT_CLASSIFYOID = "CODECLASSIFYOID";
-
-    /**
-     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyid=DOCKING_DEFAULT_CLASSIFYID
-     */
-    public static String DOCKING_DEFAULT_CLASSIFYID = "CODECLASSIFY";
-
-    /**
-     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyoname=DOCKING_DEFAULT_CLASSIFYNAME
-     */
-    public static String DOCKING_DEFAULT_CLASSIFYNAME = "CODECLASSIFYNAME";
-
-    /**
-     * 杩斿洖鏁版嵁鏍煎紡
-     */
-    public static String DATATYPE_JSON = "json";
-    public static String DATATYPE_XML = "xml";
-
-    public static String URLTYPE_WEBSERVICE = "webservice";
-    public static String URLTYPE_HTTP= "http";
-    public static String URLTYPE_GET = "get";
-    public static String URLTYPE_POST = "post";
-    public static String URLTYPE_CORBA = "corba";
-
-    public static String PARAM_XMLDATA = "xmlData";
-
-    public static String CACHE_TIME="cache_time";//瀛樺偍涓婁竴娆℃墽琛岀殑鏃堕棿
-
-    public static String CACHE_OID="oid";
-    public static String CACHE_BTMID="btmid";
-    public static String CACHE_BTMNAME="btmname";
-    public static String CACHE_TS="ts";
-    public static String CACHE_TYPE="type";
-    public static String CACHE_LCSTATUS="lcstatus";
-    public static String CACHE_CLASSIFYID="classifyid";
-    public static String CACHE_CLASSIFYOID="classifyoid";
-    public static String CACHE_CLASSIFYNAME="classifyname";
-    public static String CACHE_CLASSIFYOID_DDEFAULT="classifyoid";//鍒嗙被鏁版嵁鐨勬椂鍊檕id
-    public static String CACHE_CLASSIFYNAME_DDEFAULT="鍒嗙被鏁版嵁";//鍒嗙被鏁版嵁鐨勬椂鍊欏垎绫诲悕绉�
-
-    public static String PRE_APPLY_DATA_USER_TRUE ="true";//棰勭敵璇风殑鏁版嵁姝e湪浣跨敤锛岃〃绀鸿繖涓猽nique杩欐潯鏁版嵁鏄渶鏂扮殑
-    public static String PRE_APPLY_DATA_USER_FALSE ="false";//棰勭敵璇风殑鏁版嵁鏈娇鐢紝涓嶆槸鏈�鏂扮殑
-
-    //鍙杕pm涓�
-    public static String XML_MPM_MODEL="specification";//瑙勬牸
-    public static String XML_MPM_PARTTYPE="parttype";//闆朵欢鍨嬪彿
-    public static String XML_MPM_UNIT="unit";//鍗曚綅
-
-    //datalog
-    public static String DATA_LOGE_OUT="out";//鎺ㄩ�佹暟鎹�
-    public static String DATA_LOGE_IN="in";//鎺ユ敹鏁版嵁
-
-
-    //瑙f瀽xml
-    public static String XML_OBJECT="object";
-    public static String XML_CODE="code";
-    public static String XML_CODE_SUCCESS="200";
-    public static String XML_CODE_FAIL="500";
-    public static String XML_TYPE="type";
-    public static String XML_SYSTEMID="systemid";
-    public static String XML_SYSTEMID_MPM="MPM";//鍐欐鐨勫伐鑹虹郴缁焛d
-    public static String XML_DATAS="datas";
-    public static String XML_DATA="data";
-    public static String XML_UNIQUE="unique";
-    public static String XML_PROS="props";
-    public static String XML_PRO="prop";
-    public static String XML_PRO_TRAN="prop_tran";
-    public static String XML_ATTR="attr";
-    public static String XML_KEY="key";
-    public static String XML_MEAN="mean";
-    public static String XML_VALUE="value";
-    public static String XML_TEXT="text";
-    public static String XML_STATE="state";
-    public static String XML_MSG="msg";
-    public static String XML_NUM="num";
-    public static String XML_NAMEPATH="namepath";
-    public static String XML_NAME="name";
-    public static String XML_IDPATH="idpath";
-    public static String XML_ID="id";
-    public static String XML_ORDERNUM="orderNum";
-    public static String XML_PARENTID="parentId";
-    public static String XML_SENDTYPE="sendtype";
-    public static String XML_STATE_200="200";
-    public static String XML_STATE_400="400";
-    public static String XML_STATE_500="500";
-    public static String XML_DATACODE="datacode";
-    public static String XML_DATACODE_200="200";
-    public static String XML_DATACODE_500="500";
-    public static String XML_DATAMSG="datamsg";
-    public static String XML_MDMKEY="mdmkey";
-    public static String XML_MDMVALUE="mdmvalue";
-    public static String XML_SYSTEMKEY="systemkey";
-    public static String XML_SYSTEMVALUE="systemvalue";
-
-    public static String FLAG_TRUE="true";
-    public static String FLAG_FAIL="fail";
-
-
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java
deleted file mode 100644
index 5c9e830..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.springblade.code.constant;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 涓绘暟鎹紩鎿庣浉鍏崇殑甯搁噺
- * @author weidy
- * @date 2022-3-8
- */
-public class MdmEngineConstant {
-    /**
-     * 缂栫爜鐨勫瓧娈�
-     */
-    public static final String CODE_FIELD = "id";
-
-    /**
-     * 鐘舵��
-     */
-    public static final String CODE_STATUS_FILED = "lcstatus";
-
-    /**
-     * 闆嗗洟鐮佺殑瀛楁
-     */
-    public static final String CODE_GROUP_FIELD = "groupcode";
-
-    /**
-     * 鍒嗙被鐨勪富閿瓧娈�
-     */
-    public static final String CODE_CLASSIFY_OID_FIELD = "codeclsfid";
-
-    /**
-     * 妯℃澘鐨勪富閿瓧娈�
-     */
-    public static final String CODE_TEMPLATE_OID_FIELD = "codetemplateoid";
-
-    /**
-     * 鍒嗙被鍏ㄨ矾寰勭殑瀛楁
-     */
-    public static final String CODE_FULL_PATH_FILED = "codeclsfpath";
-
-    /**
-     * 鐮佹鐨勯暱搴︾殑瀛楁锛�-杩欎笉鏄暟鎹簱閲岀殑瀛楁
-     */
-    public static final String CODE_SEC_LENGTH_FIELD = "codeSecLengthField";
-
-    /**
-     * 瀵嗙骇鐨勫瓧娈�
-     */
-    public static final String SECRET_FIELD = "secretgrade";
-    /**
-     * 鍒涘缓鑰呭瓧娈�
-     */
-    public static final String CODE_CREATOR = "creator";
-    /**
-     * 鏇存敼鑰呭瓧娈�
-     */
-    public static final String CODE_EDITOR = "lastmodifier";
-    /**
-     * 榛樿鐨勫睘鎬у垪琛�
-     */
-    public static final List DEFAULT_ATTR_LIST = new ArrayList(){{
-        add(CODE_FIELD);
-        add(CODE_STATUS_FILED);
-        add(CODE_GROUP_FIELD);
-        add(CODE_CLASSIFY_OID_FIELD);
-        add(CODE_TEMPLATE_OID_FIELD);
-        add(CODE_FULL_PATH_FILED);
-    }};
-
-    /**
-     * 榛樿鐨勫睘鎬у垪琛�
-     */
-    public static final List DEFAULT_SYNC_ATTR_LIST = new ArrayList(){{
-        add(CODE_FIELD);
-        add(CODE_STATUS_FILED);
-        add(CODE_GROUP_FIELD);
-        add(CODE_CLASSIFY_OID_FIELD);
-        add(CODE_TEMPLATE_OID_FIELD);
-        add(CODE_FULL_PATH_FILED);
-        add(CODE_EDITOR);
-        add(CODE_CREATOR);
-    }};
-
-    /**
-     * 琛屽彿
-     */
-    public static final String IMPORT_ROW_INDEX = "${rowIndex}";
-
-    /**
-     * 绌虹殑娴佹按渚濇嵁
-     */
-    public static final String EMPTY_SERIAL_UNIT = "${emptyserial}";
-
-    /**
-     * 娴佹按渚濊禆鐨勮繛鎺ョ
-     */
-    public static final String SERIAL_UNIT_SPACE = "${serial}";
-
-    /**
-     * 娴佺▼鍊肩殑鍒嗛殧绗�
-     */
-    public static final String SERIAL_VALUE_SPACE = "${sav}";
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java
deleted file mode 100644
index 5e35fbb..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.springblade.code.constant;
-
-/**
- * 涓绘暟鎹殑鏋氫妇鍚嶇О
- */
-public class MdmEnumIdConstant {
-    /**
-     * 鎸夐挳鐨勪娇鐢ㄤ綅缃�
-     */
-    public static final String CODE_BUTTON_POSITION = "codeButtonPosition" ;
-
-    /**
-     * 鐮佹闀垮害绫诲瀷
-     */
-    public static final String CODE_SEC_LENGTH = "codeSecLength";
-    /**
-     * 鏃ユ湡鏍煎紡
-     */
-    public static final String CODE_DATA_FORMAT = "codeDateFormatEnum";
-    /**
-     * 灞傜骇鐮佹鐨勫眰绾х被鍨�
-     */
-    public static final String CODE_LEVEL_TYPE = "codeLevelType";
-    /**
-     * 瀛楃鎴彇绫诲瀷
-     */
-    public static final String CODE_CUT_TYPE = "codeCutType";
-    /**
-     * 缂栫爜鍙栧�肩被鍨�
-     */
-    public static final String CODE_GET_VALUE_TYPE = "codeGetValueType";
-    /**
-     * 涓婚搴撳垎绫荤殑娴佺▼鐢ㄩ��
-     */
-    public static final String CODE_CLASSIFY_PROCESS_USE = "codeClassifyProcessUse";
-    /**
-     * 缂栫爜鏄犲皠瑙勫垯绫诲瀷
-     */
-    public static final String CODE_MAP_RULE_TYPE = "codeMapRuleType";
-    /**
-     * 鐮佹绫诲瀷
-     */
-    public static final String CODE_SEC_TYPE = "codeSecType";
-    /**
-     * 鎸夐挳鐨勭敤閫�
-     */
-    public static final String CODE_TEMPLATE_BUTTON_USE = "codeTemplateButtonUse";
-
-    /**
-     * 绯荤粺闆嗘垚鎺ュ彛绫诲瀷
-     */
-    public static final String SYS_INTEGRATION_REQUEST_TYPE = "sysIntegrationRequestType";
-
-    /**
-     * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
-     */
-    public static final String SYS_INTEGRATION_REQUEST_METHOD_TYPE = "sysIntegrationRequestMethodType";
-
-    /**
-     * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
-     */
-    public static final String SYS_INTEGRATION_PARAM_AND_RETURN_TYPE = "sysIntegrationParamAndReturnType";
-
-    /**
-     * 绯荤粺闆嗘垚楠岃瘉鏂瑰紡
-     */
-    public static final String SYS_INTEGRATION_AUTHORITY_TYPE = "sysIntegrationAuthorityType";
-
-    /**
-     * 鏁版嵁娴佸悜鏂瑰紡
-     */
-    public static final String SYS_INTEGRATION_DATA_FLOW_TYPE = "sysIntegrationDataFlowType";
-    /***
-     * 绯荤粺鎺ュ彛鎺ㄩ�佹柟寮�
-     */
-    public static  final  String SYS_INTEGRATION_PUSH_TYPE="sysIntegrationPushType";
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java
deleted file mode 100644
index 4d6b216..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.springblade.code.constant;
-
-/**
- * 鐢熷懡鍛ㄦ湡鐨勫悕绉�
- * @author weidy
- * @date 2022-2-11
- */
-public class MdmLifeCycleConstant {
-    /**
-     * 鍒嗙被妯℃澘鐨勭敓鍛藉懆鏈�
-     */
-    public static final String CODE_CLASSIFY_TEMPLATE_LC ="codeClsTempLc";
-
-    /**
-     * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
-     */
-    public static final String CODE_RULE_LC = "codeRuleLC";
-    /**
-     * 鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡
-     */
-    public static final String CODE_ALL_CODE_LC = "codeAllCodeLC" ;
-    /**
-     * 缂栫爜鐨勯粯璁ょ殑鐢熷懡鍛ㄦ湡
-     */
-    public static final String CODE_DEFAULT_LC = "codeDataLC";
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java
deleted file mode 100644
index 1209f4a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.springblade.code.constant;
-
-/**
- * 涓绘暟鎹噷鐨勯摼鎺ョ被鍨嬪悕绉�
- * @author weidy
- * @date 2022-1-18
- */
-public class MdmLinkTypeConstant {
-    /**
-     * 缂栫爜瑙勫垯鐨勬槑缁�
-     */
-    public static final String CODE_RULE_ITEM = "codeRuleItem";
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java
deleted file mode 100644
index bb6c769..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.springblade.code.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-import com.vci.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;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Arrays;
-
-/**
- * 涓婚搴撳垎绫绘帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-20
- */
-@RestController
-@VciUnCheckRight
-@RequestMapping("/codeSyncUniversalControoler")
-public class CodeApplySyncController {
-    /**
-     * 鏃ュ織
-     */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-    /**
-     * 鎺ュ彛闆嗘垚鏈嶅姟
-     */
-    @Autowired
-    private UniversalInterfaceI universalInterface;
-    /****
-     * 鐢宠鎺ュ彛
-     * @param dataString 灞炴�т俊鎭�
-     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
-     * @return
-     * @throws Throwable
-     */
-    @VciUnCheckRight
-    @VciUnUseResponseAdvice
-    @PostMapping("/applyCode")
-   public String applyCode(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType)  {
-        String result="";
-        try {
-            result = universalInterface.applyCode(dataString, dataType);
-        }catch (Throwable e){
-            e.printStackTrace();
-            logger.error("applyCode->"+e.getMessage());
-        }
-         return result;
-    }
-
-    /****
-     * 鏇存柊/鍒犻櫎/鐘舵�佹帴鍙�
-     * @param dataString 灞炴�т俊鎭�
-     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
-     * @return
-     * @throws Throwable
-     */
-    @VciUnCheckRight
-    @VciUnUseResponseAdvice
-    @PostMapping("/syncData")
-    public String syncData(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType)  {
-        String result="";
-        try {
-            result= universalInterface.syncEditData(dataString,dataType);
-        }catch (Throwable e){
-            e.printStackTrace();;
-            logger.error("syncData->"+e.getMessage());
-        }
-        return result;
-    }
-
-
-    /****
-     * 鏌ヨ鍒嗙被鍙�
-     * @param dataString 灞炴�т俊鎭�
-     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
-     * @return
-     * @throws Throwable
-     */
-    @VciUnCheckRight
-    @VciUnUseResponseAdvice
-    @PostMapping("/queryClassify")
-    public String queryClassify(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType) throws Throwable {
-        String result="";
-        try {
-             result = universalInterface.queryClassify(dataString, dataType);
-        }catch (Throwable e){
-            e.printStackTrace();
-            logger.error("queryClassify->"+e.getMessage());
-        }
-        return result;
-    }
-
-    /****
-     * 鏌ヨ鍒嗙被鍙�
-     * @param dataString 灞炴�т俊鎭�
-     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
-     * @return
-     * @throws Throwable
-     */
-    @VciUnCheckRight
-    @VciUnUseResponseAdvice
-    @PostMapping("/queryData")
-    public String queryData(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType) throws Throwable {
-        String result="";
-        try {
-            result= universalInterface.queryData(dataString,dataType);
-        }catch (Throwable e){
-            e.printStackTrace();
-            logger.error("queryData->"+e.getMessage());
-        }
-        return result;
-    }
-
-    /****
-     * 鏌ヨ鍒嗙被鍙�
-     * @param dataString 灞炴�т俊鎭�
-     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
-     * @return
-     * @throws Throwable
-     */
-    @VciUnCheckRight
-    @VciUnUseResponseAdvice
-    @PostMapping("/testPushData")
-    public String testPushData(@RequestParam("dataString")String dataString, @RequestParam("dataType")String dataType) throws Throwable {
-        String result="";
-        ResultJsonDTO resultJsonDTO=new ResultJsonDTO();
-        ResultNodeDataDTO resultNodeDataDTO =new ResultNodeDataDTO();
-        ResultNodeObjectDTO resultNodeObjectDTO=new ResultNodeObjectDTO();
-        resultNodeObjectDTO.setCode("01001");
-        resultNodeObjectDTO.setOid("0001");
-        resultNodeObjectDTO.setMsg("娴嬭瘯鎴愬姛");
-        resultNodeObjectDTO.setErroid("0");
-        resultNodeDataDTO.setObject(Arrays.asList(resultNodeObjectDTO));
-        if(dataType.equalsIgnoreCase("json")){
-            resultJsonDTO.setData(resultNodeDataDTO);
-            Object object = JSONObject.toJSON(resultJsonDTO);
-            result = object.toString();
-        }else{
-            //缁勭粐杩斿洖鎺ュ彛淇℃伅
-            XStream xStream = new XStream(new DomDriver());
-            xStream.processAnnotations(ResultNodeDataDTO.class);
-            xStream.autodetectAnnotations(true);
-            String results=xStream.toXML(resultNodeDataDTO);
-            result ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + results;
-
-        }
-       //result="\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" ?><data>\\n  <object code=\\\"01001\\\" oid=\\\"0001\\\" erroid=\\\"0\\\" msg=\\\"娴嬭瘯鎴愬姛\\\"/>\\n</data>\"";
-        //缁勭粐杩斿洖鎺ュ彛淇℃伅
-       /* XStream xStream = new XStream(new DomDriver());
-        xStream.processAnnotations(ResultNodeDataDTO.class);
-        xStream.autodetectAnnotations(true);
-        ResultNodeDataDTO resultNodeDataDTOs = (ResultNodeDataDTO) xStream.fromXML(result);
-        resultJsonDTO.setData(resultNodeDataDTO);*/
-        return result;
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java
deleted file mode 100644
index acd9f74..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package org.springblade.code.controller;
-
-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.*;
-
-import java.util.Collection;
-import java.util.List;
-
-
-/**
- * 鐮佹鍩虹淇℃伅鎺у埗鍣�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeBasicSecController")
-public class CodeBasicSecController {
-    /**
-    * 鐮佹鍩虹淇℃伅 鏈嶅姟
-    */
-    @Autowired
-    private CodeBasicSecServiceI codeBasicSecService;
-
-    /**
-     * 鐮佹鍩虹淇℃伅鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃
-     */
-    @GetMapping("/gridCodeBasicSec")
-    public DataGrid<CodeBasicSecVO> gridCodeBasicSec(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeBasicSecService.gridCodeBasicSec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 鐮佹鍩虹淇℃伅
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeBasicSecVO> addSave(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
-        CodeBasicSecVO codeBasicSecVO = null;
-        try {
-            codeBasicSecVO = codeBasicSecService.addSave(codeBasicSecDTO);
-        } catch (VciBaseException e) {
-            return BaseResult.fail(e.getCode());
-        }
-        return BaseResult.success(codeBasicSecVO);
-    }
-
-    /**
-     * 淇敼 鐮佹鍩虹淇℃伅
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeBasicSecVO> editSave(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
-        CodeBasicSecVO codeBasicSecVO = null;
-        try {
-            codeBasicSecVO = codeBasicSecService.editSave(codeBasicSecDTO);
-        } catch (VciBaseException e) {
-            return BaseResult.fail(e.getCode());
-        }
-        return BaseResult.success(codeBasicSecVO);
-    }
-
-
-    /**
-     * 鍒犻櫎鐮佹鍩虹淇℃伅
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) {
-        return codeBasicSecService.deleteCodeBasicSec(codeBasicSecDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
-    * @param oid 涓婚敭
-    * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeBasicSecVO> getObjectByOid(String oid){
-        CodeBasicSecVO codeBasicSecVO = codeBasicSecService.getObjectByOid(oid);
-        return BaseResult.success(codeBasicSecVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeBasicSecVO> listCodeBasicSecByOids(String oids){
-        Collection<CodeBasicSecVO> voCollection =  codeBasicSecService.listCodeBasicSecByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeBasicSecService.refDataGridCodeBasicSec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鍙傛暟鍒嗙被鐮佹鍩虹淇℃伅鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑锛屽繀椤昏鏈夌紪鐮佽鍒欑殑涓婚敭 pkCodeRule
-     * @return 鐮佹鐨勪俊鎭�
-     */
-    @GetMapping("/refDataGridClassifySec")
-    public DataGrid<CodeBasicSecVO> refDataGridClassifySec(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeBasicSecService.refDataGridClassifySec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鍏嬮殕鐮佹淇℃伅
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱idArr锛氶�夋嫨婧愮爜娈典富閿殑闆嗗悎锛宲kCodeRule锛氱洰鏍囩紪鐮佽鍒欑殑涓婚敭
-     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @PostMapping("/clone")
-    public BaseResult cloneCodeBasicSec(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
-        VciBaseUtil.alertNotNull(codeBasicSecDTO.getOidArr(),"閫夋嫨鐮佹涓婚敭");
-        List<String> oidArr = VciBaseUtil.str2List(codeBasicSecDTO.getOidArr());
-        if (CollectionUtils.isEmpty(oidArr)){
-            return BaseResult.fail("閫夋嫨鐮佹涓婚敭涓嶈兘涓虹┖");
-        }
-        return codeBasicSecService.cloneCodeBasicSec(oidArr,codeBasicSecDTO.getPkCodeRule());
-    }
-
-    /**
-     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
-     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
-     * @return 鍒嗙被鐮佹鏍戠粨鏋�
-     */
-    @GetMapping("/treeCodeClassifySec")
-    public List<Tree> gridCodeClassifySecTree (String oid){
-        VciBaseUtil.alertNotNull(oid,"鍒嗙被鐮佹涓婚敭");
-        return codeBasicSecService.gridCodeClassifySecTree(oid);
-    }
-
-    /**
-     * 涓婄Щ
-     * @param oid 涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @PostMapping("/upOrderNum")
-    public BaseResult upOrderNum(String oid){
-        codeBasicSecService.upOrderNum(oid);
-        return BaseResult.success();
-    }
-
-    /**
-     * 涓嬬Щ
-     * @param oid 涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @PostMapping("/downOrderNum")
-    public BaseResult downOrderNum(String oid){
-        codeBasicSecService.downOrderNum(oid);
-        return BaseResult.success();
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java
deleted file mode 100644
index d3b6f49..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.springblade.code.controller;
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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;
-
-/**
- * 涓绘暟鎹腑鐨勬寜閽墿灞曟帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeButtonController")
-public class CodeButtonController {
-    /**
-    * 涓绘暟鎹腑鐨勬寜閽墿灞� 鏈嶅姟
-    */
-    @Autowired
-    private CodeButtonServiceI codeButtonService;
-
-    /**
-     * 涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeButton")
-    public DataGrid<CodeButtonVO> gridCodeButton(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-
-        return codeButtonService.gridCodeButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeButtonVO> addSave(@RequestBody CodeButtonDTO codeButtonDTO){
-         CodeButtonVO codeButtonVO = codeButtonService.addSave(codeButtonDTO);
-         return BaseResult.success(codeButtonVO);
-    }
-
-    /**
-     * 淇敼 涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeButtonVO> editSave(@RequestBody CodeButtonDTO codeButtonDTO){
-        CodeButtonVO codeButtonVO = codeButtonService.editSave(codeButtonDTO);
-        return BaseResult.success(codeButtonVO);
-    }
-
-
-    /**
-     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeButton( CodeButtonDTO codeButtonDTO) {
-        return codeButtonService.deleteCodeButton(codeButtonDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
-    * @param oid 涓婚敭
-    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeButtonVO> getObjectByOid(String oid){
-        CodeButtonVO codeButtonVO = codeButtonService.getObjectByOid(oid);
-        return BaseResult.success(codeButtonVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeButtonVO> listCodeButtonByOids(String oids){
-        Collection<CodeButtonVO> voCollection =  codeButtonService.listCodeButtonByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-    /**
-     * 鍚敤
-     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍚敤缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @PostMapping("/enableData")
-    public BaseResult enableOrgDuty(CodeButtonDTO buttonDTO) {
-        return codeButtonService.enableCodeButton(buttonDTO);
-    }
-
-    /**
-     * 鍋滅敤
-     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍋滅敤缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @PostMapping("/disableData")
-    public BaseResult disableOrgDuty(CodeButtonDTO buttonDTO) {
-        return codeButtonService.disableCodeButton(buttonDTO);
-    }
-
-
-
-
-    /**
-     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeButtonVO> refDataGridCodeButton(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeButtonService.refDataGridCodeButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java
deleted file mode 100644
index 233f74a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java
+++ /dev/null
@@ -1,255 +0,0 @@
-package org.springblade.code.controller;
-
-
-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.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;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.Collection;
-import java.util.List;
-
-import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED;
-import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED;
-
-/**
- * 涓婚搴撳垎绫绘帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-20
- */
-@RestController
-@RequestMapping("/codeClassifyController")
-public class CodeClassifyController {
-    /**
-    * 涓婚搴撳垎绫� 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyServiceI codeClassifyService;
-
-    /**
-     * 涓婚搴撳垎绫绘爲
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 涓婚搴撳垎绫绘樉绀烘爲
-     */
-    @GetMapping("/treeCodeClassify")
-    public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject)  {
-        return codeClassifyService.treeCodeClassify(treeQueryObject);
-    }
-
-    /**
-     * 涓婚搴撶殑鏍�
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 涓婚搴撴樉绀烘爲
-     */
-    @GetMapping("/treeTopCodeClassify")
-    public List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject){
-        return codeClassifyService.treeTopCodeClassify(treeQueryObject);
-    }
-
-    /**
-     * 澧炲姞 涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyVO> addSave(@RequestBody CodeClassifyDTO codeClassifyDTO){
-        if(codeClassifyDTO.getOrdernum()==null){
-            codeClassifyDTO.setOrdernum(0);
-        }
-         CodeClassifyVO codeClassifyVO = codeClassifyService.addSave(codeClassifyDTO);
-         return BaseResult.success(codeClassifyVO);
-    }
-
-    /**
-     * 淇敼 涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyVO> editSave(@RequestBody CodeClassifyDTO codeClassifyDTO){
-        return codeClassifyService.editSave(codeClassifyDTO);
-    }
-
-    /**
-    * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
-    * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
-    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-    */
-    @PostMapping( "/checkIsCanDelete")
-    public BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO)  {
-        return codeClassifyService.checkIsCanDelete(codeClassifyDTO);
-    }
-
-    /**
-     * 鍒犻櫎涓婚搴撳垎绫�
-     * @param  codeClassifyDTO锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassify(CodeClassifyDTO codeClassifyDTO) {
-        return codeClassifyService.deleteCodeClassify(codeClassifyDTO);
-    }
-
-    /**
-     * 鍚敤
-     * @param codeClassifyDTO
-     * @return
-     */
-    @PostMapping( "/enableData")
-    public BaseResult enable(CodeClassifyDTO codeClassifyDTO) {
-        return codeClassifyService.updateLcStatus(codeClassifyDTO.getOid(),FRAMEWORK_DATA_ENABLED);
-    }
-
-    /**
-     * 鍋滅敤
-     * @param codeClassifyDTO
-     * @return
-     */
-    @PostMapping( "/disableData")
-    public BaseResult disable(CodeClassifyDTO codeClassifyDTO) {
-        return codeClassifyService.updateLcStatus(codeClassifyDTO.getOid(),FRAMEWORK_DATA_DISABLED);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撳垎绫绘樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyVO> getObjectByOid(String oid){
-        CodeClassifyVO codeClassifyVO = codeClassifyService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撳垎绫绘樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyVO> listCodeClassifyByOids(String oids){
-        Collection<CodeClassifyVO> voCollection =  codeClassifyService.listCodeClassifyByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-    /**
-    * 鍙傜収鏍� 涓婚搴撳垎绫�
-    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-    * @return 涓婚搴撳垎绫绘樉绀烘爲
-    */
-    @GetMapping("/referTree")
-    public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
-        return codeClassifyService.referTree(treeQueryObject);
-    }
-
-    /**
-     * 瀵煎嚭鍒嗙被
-     * @param oid 鍒嗙被涓婚敭
-     */
-    @GetMapping("/exportClassify")
-    public void exportClassify(String oid, HttpServletResponse response) throws IOException {
-        String excelName = codeClassifyService.exportClassify(oid);
-        try {
-            ControllerUtil.writeFileToResponse(response,excelName);
-        } catch (Throwable e) {
-            //濡傛灉鍑洪敊,鎶婇敊璇俊鎭啓鍒皌ext
-            String msg = LangBaseUtil.getErrorMsg(e);
-            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒.txt";
-            LocalFileUtil.writeContentToFile(msg,errorFile);
-            ControllerUtil.writeFileToResponse(response,errorFile);
-        }
-    }
-
-    /**
-     * 涓嬭浇瀵煎叆鐨勬ā鏉�
-     * @param response 鍝嶅簲瀵硅薄
-     * @throws IOException 鎶涘嚭寮傚父
-     */
-    @GetMapping("/downloadImportExcel")
-    public void downloadImportExcel(HttpServletResponse response) throws IOException {
-        String excelName = codeClassifyService.createImportExcel();
-        try {
-            ControllerUtil.writeFileToResponse(response,excelName);
-        } catch (Throwable e) {
-            //濡傛灉鍑洪敊,鎶婇敊璇俊鎭啓鍒皌ext
-            String msg = LangBaseUtil.getErrorMsg(e);
-            if(StringUtils.isBlank(msg)){
-                msg = "鏈煡閿欒";
-            }
-            ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
-        }
-    }
-
-    /**
-     * 瀵煎叆鍒嗙被
-     * @param file excel鐨勫唴瀹�
-     * @return 鎵ц缁撴灉锛宱bj鏈夊�艰〃绀烘湁閿欒淇℃伅锛岄渶瑕佽闂甦ownloadErrorFile鏉ヤ笅杞�
-     */
-    @PostMapping("/importClassify")
-    public BaseResult importClassify(MultipartFile file) {
-        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
-        File file1 = new File(excelFileName);
-        try {
-            file.transferTo(new File(excelFileName));
-            codeClassifyService.importClassify(file1);
-            return BaseResult.success();
-        }catch (Throwable e) {
-            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.txt";
-            LocalFileUtil.writeContentToFile(LangBaseUtil.getErrorMsg(e),errorFile);
-            //鏀惧埌map閲�
-            BaseResult result = BaseResult.fail("瀵煎叆澶辫触");
-            result.setObj(ControllerUtil.putErrorFile(errorFile));
-            return result;
-        }finally {
-            file1.delete();
-        }
-    }
-
-    /**
-     * 涓嬭浇閿欒鐨勬枃浠朵俊鎭�
-     * @param uuid 鍞竴鏍囪瘑
-     * @param response 鍝嶅簲瀵硅薄
-     * @throws IOException 鎶涘嚭寮傚父
-     */
-    @GetMapping("/downloadErrorFile")
-    public void downloadErrorFile(String uuid, HttpServletResponse response) throws IOException {
-        ControllerUtil.downloadErrorFile(response,uuid);
-    }
-
-    /**
-     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
-     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢(涓嶆敮鎸佸垎椤�)
-     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
-     */
-    @GetMapping("/listClassifyLinkAttr")
-    public DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject){
-        return codeClassifyService.listClassifyLinkAttr(baseQueryObject);
-    }
-
-    /**
-     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
-     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    @GetMapping("/getObjectByIdPath")
-    public CodeClassifyVO getObjectByIdPath(String idPath){
-        return codeClassifyService.getObjectByIdPath(idPath);
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java
deleted file mode 100644
index c56f24a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package org.springblade.code.controller;
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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;
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeClsProcessTempController")
-public class CodeClassifyProcessTempController {
-    /**
-    * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉� 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyProcessTempServiceI codeClassifyProcessTempService;
-
-    /**
-     * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeClassifyProcessTemp")
-    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyProcessTempService.gridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyProcessTempVO> addSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
-         CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.addSave(codeClassifyProcessTempDTO);
-         return BaseResult.success(codeClassifyProcessTempVO);
-    }
-
-    /**
-     * 淇敼 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyProcessTempVO> editSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
-        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.editSave(codeClassifyProcessTempDTO);
-        return BaseResult.success(codeClassifyProcessTempVO);
-    }
-
-
-    /**
-     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassifyProcessTemp( CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
-        return codeClassifyProcessTempService.deleteCodeClassifyProcessTemp(codeClassifyProcessTempDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-    * @param oid 涓婚敭
-    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyProcessTempVO> getObjectByOid(String oid){
-        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyProcessTempVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(String oids){
-        Collection<CodeClassifyProcessTempVO> voCollection =  codeClassifyProcessTempService.listCodeClassifyProcessTempByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyProcessTempService.refDataGridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 浣跨敤妯℃澘鑾峰彇浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeTemplateOid 妯℃澘鐨勪富閿�
-     * @param processUse 娴佺▼鐨勭敤閫�
-     * @return 娴佺▼妯℃澘鐨勪俊鎭�
-     */
-    @GetMapping("/listProcessTemplate")
-    public BaseResult<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid,String processUse){
-        List<CodeClassifyProcessTempVO> processTempVOList = codeClassifyProcessTempService.listProcessTemplate(codeTemplateOid,processUse);
-        BaseResult result = BaseResult.success();
-        result.setData(processTempVOList);
-        return result;
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java
deleted file mode 100644
index 6aa3cbc..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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.*;
-
-import java.util.Collection;
-
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁嗘帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-03-10
- */
-@RestController
-@RequestMapping("/codeClsTempMapItemController")
-public class CodeClassifyTempMapItemController {
-    /**
-    * 鏄犲皠瑙勫垯鐨勬槑缁� 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyTempMapItemServiceI codeClassifyTempMapItemService;
-
-    /**
-     * 鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeClassifyTempMapItem")
-    public DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTempMapItemService.gridCodeClassifyTempMapItem(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyTempMapItemVO> addSave(@RequestBody CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO){
-         CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.addSave(codeClassifyTempMapItemDTO);
-         return BaseResult.success(codeClassifyTempMapItemVO);
-    }
-
-    /**
-     * 淇敼 鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyTempMapItemVO> editSave(@RequestBody CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO){
-        CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.editSave(codeClassifyTempMapItemDTO);
-        return BaseResult.success(codeClassifyTempMapItemVO);
-    }
-
-
-    /**
-     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassifyTempMapItem( CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) {
-        return codeClassifyTempMapItemService.deleteCodeClassifyTempMapItem(codeClassifyTempMapItemDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
-    * @param oid 涓婚敭
-    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyTempMapItemVO> getObjectByOid(String oid){
-        CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyTempMapItemVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(String oids){
-        Collection<CodeClassifyTempMapItemVO> voCollection =  codeClassifyTempMapItemService.listCodeClassifyTempMapItemByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTempMapItemService.refDataGridCodeClassifyTempMapItem(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java
deleted file mode 100644
index 4a450af..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import 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;
-
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeClassifyTempAttrController")
-public class CodeClassifyTemplateAttrController {
-    /**
-    * 涓婚搴撳垎绫荤殑妯℃澘灞炴�� 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyTemplateAttrServiceI codeClassifyTemplateAttrService;
-
-
-    /**
-     * 涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeClassifyTemplateAttr")
-    public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTemplateAttrService.gridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyTemplateAttrVO> addSave(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO){
-         CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = codeClassifyTemplateAttrService.addSave(codeClassifyTemplateAttrDTO);
-         return BaseResult.success(codeClassifyTemplateAttrVO);
-    }
-
-    /**
-     * 鎵归噺淇濆瓨鍒楄〃鏁版嵁
-     * @param list
-     * @return
-     */
-    @PostMapping( "/batchAddSave")
-    public BaseResult<List<CodeClassifyTemplateAttrVO>> batchAddSaves(@RequestBody List<CodeClassifyTemplateAttrDTO> list){
-        if(CollectionUtils.isEmpty(list)){
-            return BaseResult.fail("鍒楄〃涓嶈兘涓虹┖!");
-        }
-        List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOs = codeClassifyTemplateAttrService.batchAddSave(list);
-        return BaseResult.success(codeClassifyTemplateAttrVOs);
-    }
-
-
-    /**
-     * 淇敼 涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyTemplateAttrVO> editSave(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO){
-        return codeClassifyTemplateAttrService.editSave(codeClassifyTemplateAttrDTO);
-    }
-
-
-    /**
-     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassifyTemplateAttr(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) {
-        return codeClassifyTemplateAttrService.deleteCodeClassifyTemplateAttr(codeClassifyTemplateAttrDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-    * @param oid 涓婚敭
-    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyTemplateAttrVO> getObjectByOid(String oid){
-        CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = codeClassifyTemplateAttrService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyTemplateAttrVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(String oids){
-        Collection<CodeClassifyTemplateAttrVO> voCollection =  codeClassifyTemplateAttrService.listCodeClassifyTemplateAttrByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTemplateAttrService.refDataGridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�,鎺掗櫎鎺夎繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
-     * @param baseQueryObject
-     * @return
-     */
-    @GetMapping("/codeClassifyTemplateAttrByBtm")
-    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
-        return codeClassifyTemplateAttrService.codeClassifyTemplateAttrByBtm(baseQueryObject);
-    }
-
-    /**
-     * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬨�佽繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
-     * @param baseQueryObject
-     * @return
-     */
-    @GetMapping("/codeClassifyTemplateAttrByBtmHave")
-    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
-        return codeClassifyTemplateAttrService.codeClassifyTemplateAttrByBtmHave(baseQueryObject);
-    }
-
-    /**
-     * 鍚屾鍒板叾浠栨ā鏉�
-     * @param codeClassifyAttrDTO   id 鑻辨枃鍚嶇О
-     * @return 鎵ц缁撴灉
-     */
-    @PostMapping( "/copyto")
-    public BaseResult copyto(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyAttrDTO) {
-        return codeClassifyTemplateAttrService.copyto(codeClassifyAttrDTO);
-    }
-
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java
deleted file mode 100644
index dbb63b0..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.springblade.code.controller;
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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;
-
-/**
- * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeClsTempButtonController")
-public class CodeClassifyTemplateButtonController {
-    /**
-    * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽� 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyTemplateButtonServiceI codeClassifyTemplateButtonService;
-
-    /**
-     * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeClassifyTemplateButton")
-    public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTemplateButtonService.gridCodeClassifyTemplateButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyTemplateButtonVO> addSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
-         CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.addSave(codeClassifyTemplateButtonDTO);
-         return BaseResult.success(codeClassifyTemplateButtonVO);
-    }
-
-    /**
-     * 淇敼 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyTemplateButtonVO> editSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
-        CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.editSave(codeClassifyTemplateButtonDTO);
-        return BaseResult.success(codeClassifyTemplateButtonVO);
-    }
-
-
-    /**
-     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassifyTemplateButton( CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) {
-        return codeClassifyTemplateButtonService.deleteCodeClassifyTemplateButton(codeClassifyTemplateButtonDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyTemplateButtonVO> getObjectByOid(String oid){
-        CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyTemplateButtonVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(String oids){
-        Collection<CodeClassifyTemplateButtonVO> voCollection =  codeClassifyTemplateButtonService.listCodeClassifyTemplateButtonByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTemplateButtonService.refDataGridCodeClassifyTemplateButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java
deleted file mode 100644
index f36d86d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package org.springblade.code.controller;
-
-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;
-
-/**
- * 鍒嗙被妯℃澘瀵硅薄鎺у埗鍣�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeClassifyTemplateController")
-public class CodeClassifyTemplateController {
-    /**
-    * 鍒嗙被妯℃澘瀵硅薄 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyTemplateServiceI codeClassifyTemplateService;
-
-    /**
-     * 鍒嗙被妯℃澘瀵硅薄鏍�
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
-     */
-    @GetMapping("/treeCodeClassifyTemplate")
-    public List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject)  {
-        return  codeClassifyTemplateService.treeCodeClassifyTemplate(treeQueryObject);
-    }
-
-    /**
-     * 鍒嗙被妯℃澘鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     */
-    @GetMapping("/gridCodeClassifyTemplate")
-    public DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(BaseQueryObject baseQueryObject){
-        return  codeClassifyTemplateService.gridCodeClassifyTemplate(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 澧炲姞 鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyTemplateVO> addSave(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO){
-         return codeClassifyTemplateService.addSave(codeClassifyTemplateDTO);
-    }
-
-    /**
-     * 淇敼 鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyTemplateVO> editSave(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO){
-        return codeClassifyTemplateService.editSave(codeClassifyTemplateDTO);
-    }
-
-    /**
-    * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
-    * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
-    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-    */
-    @PostMapping( "/checkIsCanDelete")
-    public BaseResult checkIsCanDelete(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO)  {
-        return codeClassifyTemplateService.checkIsCanDelete(codeClassifyTemplateDTO);
-    }
-
-    /**
-     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassifyTemplate( CodeClassifyTemplateDTO codeClassifyTemplateDTO) {
-        return codeClassifyTemplateService.deleteCodeClassifyTemplate(codeClassifyTemplateDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
-    * @param oid 涓婚敭
-    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyTemplateVO> getObjectByOid(String oid){
-        CodeClassifyTemplateVO codeClassifyTemplateVO = codeClassifyTemplateService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyTemplateVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(String oids){
-        Collection<CodeClassifyTemplateVO> voCollection =  codeClassifyTemplateService.listCodeClassifyTemplateByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-    * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
-    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
-    */
-    @GetMapping("/referTree")
-    public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
-        return codeClassifyTemplateService.referTree(treeQueryObject);
-    }
-
-    /**
-     * 鍚敤
-     * @param codeClassifyDTO oid
-     * @return
-     */
-    @PostMapping( "/enableData")
-    public BaseResult enable( CodeClassifyTemplateDTO codeClassifyDTO) {
-        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(), CodeClassifyTemplateLC.RELEASED.getValue());
-    }
-
-    /**
-     * 鍋滅敤
-     * @param codeClassifyDTO oid
-     * @return
-     */
-    @PostMapping( "/disableData")
-    public BaseResult disableData( CodeClassifyTemplateDTO codeClassifyDTO) {
-        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.DISABLED.getValue());
-    }
-
-    /**
-     * 鍐嶇紪杈�
-     * @param codeClassifyDTO oid
-     * @return
-     */
-    @PostMapping( "/editDate")
-    public BaseResult editDate( CodeClassifyTemplateDTO codeClassifyDTO) {
-        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.EDITING.getValue());
-    }
-
-    /**
-     * 鍗囩増
-     * @param codeClassifyDTO
-     * @return oid妯℃澘oid
-     */
-    @PostMapping( "/upgrade")
-    public BaseResult Upgrade(@RequestBody CodeClassifyTemplateDTO codeClassifyDTO) {
-
-        return codeClassifyTemplateService.Upgrade(codeClassifyDTO);
-    }
-
-    @GetMapping( "/upgrade1")
-    public BaseResult upgrade1( CodeClassifyTemplateDTO codeClassifyDTO) {
-
-        return Upgrade(codeClassifyDTO);
-    }
-
-    /**
-     * 鍏嬮殕
-     * @param codeClassifyDTO
-     * @return oid妯℃澘oid
-     */
-    @PostMapping( "/copy")
-    public BaseResult copyTemplate(@RequestBody CodeClassifyTemplateDTO codeClassifyDTO) {
-
-        return codeClassifyTemplateService.copyTemplate(codeClassifyDTO);
-    }
-
-    @GetMapping( "/copyTemplate1")
-    public BaseResult copyTemplate1( CodeClassifyTemplateDTO codeClassifyDTO) {
-
-        return copyTemplate(codeClassifyDTO);
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java
deleted file mode 100644
index 3a24513..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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.*;
-
-import java.util.Collection;
-
-
-/**
- * 涓婚搴撴ā鏉挎槧灏勮鍒欐帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeClassifyTempMapController")
-public class CodeClassifyTemplateMapController {
-    /**
-    * 涓婚搴撴ā鏉挎槧灏勮鍒� 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyTemplateMapServiceI codeClassifyTemplateMapService;
-
-    /**
-     * 涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeClassifyTemplateMap")
-    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTemplateMapService.gridCodeClassifyTemplateMap(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyTemplateMapVO> addSave(@RequestBody CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO){
-         CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.addSave(codeClassifyTemplateMapDTO);
-         return BaseResult.success(codeClassifyTemplateMapVO);
-    }
-
-    /**
-     * 淇敼 涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyTemplateMapVO> editSave(@RequestBody CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO){
-        CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.editSave(codeClassifyTemplateMapDTO);
-        return BaseResult.success(codeClassifyTemplateMapVO);
-    }
-
-
-    /**
-     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassifyTemplateMap( CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) {
-        return codeClassifyTemplateMapService.deleteCodeClassifyTemplateMap(codeClassifyTemplateMapDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyTemplateMapVO> getObjectByOid(String oid){
-        CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyTemplateMapVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(String oids){
-        Collection<CodeClassifyTemplateMapVO> voCollection =  codeClassifyTemplateMapService.listCodeClassifyTemplateMapByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeClassifyTemplateMapService.refDataGridCodeClassifyTemplateMap(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java
deleted file mode 100644
index 1fbb15b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-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.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊兼帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeClassifyValueController")
-public class CodeClassifyValueController {
-    /**
-    * 鍒嗙被鐮佹鐨勭爜鍊� 鏈嶅姟
-    */
-    @Autowired
-    private CodeClassifyValueServiceI codeClassifyValueService;
-
-    /**
-     * 鍒嗙被鐮佹鐨勭爜鍊兼爲
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
-     */
-    @GetMapping("/treeCodeClassifyValue")
-    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject)  {
-        return  codeClassifyValueService.treeCodeClassifyValue(treeQueryObject);
-    }
-
-    /**
-     * 澧炲姞 鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeClassifyValueVO> addSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
-         CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.addSave(codeClassifyValueDTO);
-         return BaseResult.success(codeClassifyValueVO);
-    }
-
-    /**
-     * 淇敼 鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeClassifyValueVO> editSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
-        CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.editSave(codeClassifyValueDTO);
-        return BaseResult.success(codeClassifyValueVO);
-    }
-
-    /**
-    * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
-    * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
-    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-    */
-    @PostMapping( "/checkIsCanDelete")
-    public BaseResult checkIsCanDelete( CodeClassifyValueDTO codeClassifyValueDTO)  {
-        return codeClassifyValueService.checkIsCanDelete(codeClassifyValueDTO);
-    }
-
-    /**
-     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeClassifyValue( CodeClassifyValueDTO codeClassifyValueDTO) {
-        return codeClassifyValueService.deleteCodeClassifyValue(codeClassifyValueDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
-    * @param oid 涓婚敭
-    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeClassifyValueVO> getObjectByOid(String oid){
-        CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.getObjectByOid(oid);
-        return BaseResult.success(codeClassifyValueVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeClassifyValueVO> listCodeClassifyValueByOids(String oids){
-        Collection<CodeClassifyValueVO> voCollection =  codeClassifyValueService.listCodeClassifyValueByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-    * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
-    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
-    */
-    @GetMapping("/referTree")
-        public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
-        return codeClassifyValueService.referTree(treeQueryObject);
-    }
-
-    /**
-     * 淇濆瓨椤甸潰涓婄殑鍒嗙被鐮佹鐮佸�硷紝涓昏鏄繚瀛樺簭鍙风敤浜庢帓搴忋�傚鏋滄暟鎹簱涓瓨鍦ㄩ〉闈紶杈撳璞¢泦鍚堜腑涓嶅瓨鍦ㄧ殑鍊硷紝鍒欏垹闄ゃ��
-     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 鍜宑odeclassifysecoid 鍒嗙被鐮佹涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @PostMapping("/saveOrder")
-    public BaseResult saveOrder(@RequestBody Map<String,Object> param){
-        JSONArray json = JSONArray.parseArray(String.valueOf(param.get("dtoList")));
-        List<CodeClassifyValueDTO> dtoList = new ArrayList<>();
-        for (int i = 0; i < json.size(); i++) {
-            CodeClassifyValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeClassifyValueDTO.class);
-            dtoList.add(codeFixedValueDTO);
-        }
-        String codeclassifysecoid = (String) param.get("codeclassifysecoid");
-        VciBaseUtil.alertNotNull(dtoList,"鐮佸�奸泦鍚�");
-        if (CollectionUtils.isEmpty(dtoList)){
-            return BaseResult.success();
-        }
-        return codeClassifyValueService.batchSave4Order(dtoList,codeclassifysecoid);
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java
deleted file mode 100644
index 03343df..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java
+++ /dev/null
@@ -1,294 +0,0 @@
-package org.springblade.code.controller;
-
-
-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.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.code.constant.MdmDuckingConstant.DATA_LOGE_OUT;
-
-/**
- * 涓绘暟鎹紪鐮侀�氱敤闆嗘垚鎺у埗鍣�
- *
- * @author wangyi
- * @date 2022-03-20
- */
-@RestController
-@RequestMapping("/ducking")
-class CodeDuckingController {
-
-    /**
-     * 闆嗘垚鏈嶅姟
-     */
-    @Autowired
-    private CodeDuckingServiceI codeDuckingServiceI;
-
-    /**
-     * 闆嗘垚鏈嶅姟
-     */
-    @Autowired
-    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
-    /***
-     * 闆嗘垚灞炴�ф搷浣滃眰
-     */
-   @Autowired
-    private DockingPreAttrMappingSeviceI dockingPreAttrMappingSeviceI;
-
-   /**
-     * 棰勭敵璇锋帴鏀堕泦鎴愭暟鎹�
-     */
-    @Autowired
-    private DockingPreApplyDataServiceI dockingPreApplyDataServiceI;
-
-    public CodeDuckingController() {
-    }
-
-
-
-
-    /**
-     * 淇敼 涓婚搴撳垎绫�
-     * @param dockingPreApplyDataDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/setDataClassId")
-    public BaseResult<List<DockingPreApplyDataVO>> batchSetDataClassId(@RequestBody DockingPreApplyDataDTO dockingPreApplyDataDTO){
-        List<DockingPreApplyDataVO> dataDTOList=  dockingPreApplyDataServiceI.batchSetDataClassId(dockingPreApplyDataDTO);
-        return BaseResult.success(dataDTOList);
-    }
-
-    /***
-     * 鏍规嵁閫夋嫨棰濋鐢宠鐨勬暟鎹嬀閫夋暟鎹�
-     * @param codeClassifyOid
-     * @param templateOid
-     * @param btmType
-     * @param dataOids
-     * @return
-     */
-    @GetMapping("/gridApplyData")
-    public DataGrid<Map<String,String>> gridApplyData(String codeClassifyOid, String templateOid, String btmType, String dataOids){
-        return  dockingPreApplyDataServiceI.gridApplyData(codeClassifyOid,templateOid,btmType,dataOids);
-    }
-
-
-    /***
-     * 鏍规嵁閫夋嫨棰濋鐢宠鐨勬暟鎹嬀閫夋暟鎹�
-     *
-     * @return
-     */
-    @PutMapping("/batchApplyDatas")
-    public BaseResult batchApplyDatas(@RequestBody List<CodeOrderDTO> orderDTOs){
-        return dockingPreApplyDataServiceI.batchApplyDatas(orderDTOs);
-    }
-
-    /**
-     * 闆嗘垚棰勭敵璇峰垪琛�-宸插弽鐮�
-     * @param baseQueryObject
-     * ducking/gridPreDataFinish
-     * @return
-     */
-    @GetMapping("/gridPreDataFinishNum")
-    public DataGrid<DockingPreApplyDataVO> gridDockingPreApplyDataFinishNum(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        baseQueryObject.addCondition("num", QueryOptionConstant.ISNOTNULL);
-        DataGrid<DockingPreApplyDataVO> dockingPreApplyDataVODataGrid = dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-        return dockingPreApplyDataVODataGrid;
-    }
-
-    /**
-     * 闆嗘垚棰勭敵璇峰垪琛�-宸插鐞�
-     * @param baseQueryObject
-     * ducking/gridPreDataFinish
-     * @return
-     */
-    @GetMapping("/gridPreDataFinish")
-    public DataGrid<DockingPreApplyDataVO> gridDockingPreApplyDataFinish(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        baseQueryObject.addCondition("classifyoid", QueryOptionConstant.ISNOTNULL);
-        DataGrid<DockingPreApplyDataVO> dockingPreApplyDataVODataGrid = dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-        return dockingPreApplyDataVODataGrid;
-    }
-
-    /**
-     * 闆嗘垚棰勭敵璇峰垪琛�-鏈畬鎴�
-     * @param baseQueryObject
-     * ducking/gridPreDataUnFinish
-     * @return
-     */
-    @GetMapping("/gridPreDataUnFinish")
-    public DataGrid<DockingPreApplyDataVO> gridPreDataUnFinish(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        baseQueryObject.addCondition("num", "null");
-        return dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鎵归噺澶勭悊棰勭敵璇风紪鐮�
-     * 蹇呴』瑕佹湁鍒嗙被oid鍜宒ataoid
-     * @return
-     */
-    @PostMapping("/applyData")
-    public BaseResult applyData(@RequestBody List<PreApplyCodeOrderDTO> preApplyCodeOrderDTOList){
-        return dockingPreApplyDataServiceI.applyData(preApplyCodeOrderDTOList);
-    }
-
-    /**
-     * 闆嗘垚棰勭敵璇峰垪琛�-鏌ヨ鏁版嵁璇︾粏淇℃伅
-     * @param dockingPreApplyDataDTO
-     * @return
-     */
-    @GetMapping("/datainfo")
-    @VciUnCheckRight
-    public BaseResult datainfo(DockingPreApplyDataDTO dockingPreApplyDataDTO){
-        return dockingPreApplyDataServiceI.getDataInfoMap(dockingPreApplyDataDTO);
-    }
-
-    /**
-     * data鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridData")
-    public DataGrid<DockingDataDO> gridData(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeDuckingServiceI.gridData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * data鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridTask")
-    public DataGrid<DockingTaskDO> gridTask(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeDuckingServiceI.gridTask(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鎺ㄩ�佹暟鎹泦鎴愭棩蹇楀垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 闆嗘垚鏃ュ織鏄剧ず瀵硅薄鍒楄〃
-     */
-    @GetMapping("/gridLoge")
-    public DataGrid<DockingLogeDO> gridLoge(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-            Map<String, String> queryMap = baseQueryObject.getConditionMap();
-            queryMap.put("type",DATA_LOGE_OUT);
-        }
-        return codeDuckingServiceI.gridLoge(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鎺ュ彛param鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 闆嗘垚鏃ュ織鏄剧ず瀵硅薄鍒楄〃
-     */
-    @GetMapping("/gridHeader")
-    public DataGrid<SysIntHeaderDO> gridParam(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-            Map<String, String>  queryMap = baseQueryObject.getConditionMap();
-            queryMap.put("type",DATA_LOGE_OUT);
-        }
-        return codeDuckingServiceI.gridHeader(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     *鎵归噺澶勭悊
-     * 蹇呴』瑕佹湁鍒嗙被oid鍜宒ataoid
-     * @return
-     */
-    @PostMapping("/sendData")
-    public  BaseResult sendData(String oid){
-
-        return codeDuckingSyncServiceI.sendData(oid);
-    }
-
-    /***
-     * 鍒濆鍖栧睘鎬ч厤缃粍浠�
-     * @param sourceClsfId 鍒嗙被oid
-     * @param type  //1锛氭棤浜烘満;2锛�420
-     * @param templateOid 妯℃澘oid锛屽涓互,鍒嗗紑鐨�
-     * @param baseQueryObject //鏌ヨ瀵硅薄
-     * @return
-     */
-    @GetMapping("/gridAttrMapping")
-    public DataGrid<DockingPreAttrMappingVO> gridAttrMappings(String sourceClsfId, String templateOid, int type, BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return dockingPreAttrMappingSeviceI.gridAttrMappings(sourceClsfId,type,baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /***
-     * 灞炴�у彇鍊艰寖鍥磋幏鍙�
-     * @param attrOid 灞炴�id
-     * @param type //1锛氭棤浜烘満;2锛�420
-     * @param baseQueryObject /鏌ヨ瀵硅薄
-     * @return
-     */
-    @GetMapping("/gridAttrRanges")
-    public DataGrid<DockingPreAttrRangeVO> gridAttrRanges(String attrOid, int type, BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-         return dockingPreAttrMappingSeviceI.gridAttrRanges(attrOid,type,baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 淇濆瓨灞炴�ф槧灏勯厤缃粍浠�
-     * @param dockingPreAttrMappingDTOS 灞炴�ф槧灏勯厤缃暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/batchAddSave")
-    public BaseResult<List<DockingPreAttrMappingVO>> batchSave(@RequestBody List<DockingPreAttrMappingDTO> dockingPreAttrMappingDTOS){
-       List<DockingPreAttrMappingVO> dockingPreAttrRangeVOS= dockingPreAttrMappingSeviceI.batchAddSave(dockingPreAttrMappingDTOS);
-        return BaseResult.success(dockingPreAttrRangeVOS);
-    }
-
-    /**
-     * 涓嬭浇閿欒鐨勬枃浠朵俊鎭�
-     * @param uuid 鍞竴鏍囪瘑
-     * @param response 鍝嶅簲瀵硅薄
-     * @throws IOException 鎶涘嚭寮傚父
-     */
-    @GetMapping("/downloadErrorFile")
-    public void downloadErrorFile(String uuid, HttpServletResponse response) throws IOException {
-        ControllerUtil.downloadErrorFile(response,uuid);
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java
deleted file mode 100644
index 1dfa8ae..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-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.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊兼帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeFixedValueController")
-public class CodeFixedValueController {
-    /**
-    * 鍥哄畾鐮佹鐨勭爜鍊� 鏈嶅姟
-    */
-    @Autowired
-    private CodeFixedValueServiceI codeFixedValueService;
-
-    /**
-     * 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeFixedValue")
-    public DataGrid<CodeFixedValueVO> gridCodeFixedValue(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeFixedValueService.gridCodeFixedValue(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeFixedValueVO> addSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
-         CodeFixedValueVO codeFixedValueVO = codeFixedValueService.addSave(codeFixedValueDTO);
-         return BaseResult.success(codeFixedValueVO);
-    }
-
-    /**
-     * 淇敼 鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeFixedValueVO> editSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
-        CodeFixedValueVO codeFixedValueVO = codeFixedValueService.editSave(codeFixedValueDTO);
-        return BaseResult.success(codeFixedValueVO);
-    }
-
-
-    /**
-     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeFixedValue( CodeFixedValueDTO codeFixedValueDTO) {
-        return codeFixedValueService.deleteCodeFixedValue(codeFixedValueDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
-    * @param oid 涓婚敭
-    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeFixedValueVO> getObjectByOid(String oid){
-        CodeFixedValueVO codeFixedValueVO = codeFixedValueService.getObjectByOid(oid);
-        return BaseResult.success(codeFixedValueVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeFixedValueVO> listCodeFixedValueByOids(String oids){
-        Collection<CodeFixedValueVO> voCollection =  codeFixedValueService.listCodeFixedValueByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeFixedValueService.refDataGridCodeFixedValue(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
-     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 codefixedsecoid 鍥哄畾鐮佹涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @PostMapping("/saveOrder")
-    public BaseResult<CodeFixedValueVO> batchSave4Order(@RequestBody Map<String,Object> param){
-        JSONArray json = JSONArray.parseArray(String.valueOf(param.get("dtoList")));
-        List<CodeFixedValueDTO> dtoList = new ArrayList<>();
-        for (int i = 0; i < json.size(); i++) {
-            CodeFixedValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeFixedValueDTO.class);
-            dtoList.add(codeFixedValueDTO);
-        }
-        String codefixedsecoid = (String) param.get("codefixedsecoid");
-        VciBaseUtil.alertNotNull(dtoList,"鐮佸�煎璞¢泦鍚�",codefixedsecoid,"鍥哄畾鐮佹鐨勪富閿�");
-        if (CollectionUtils.isEmpty(dtoList)){
-            return codeFixedValueService.batchDeleteBySecOid(codefixedsecoid);
-        }
-        return codeFixedValueService.batchSave4Order(dtoList,codefixedsecoid);
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java
deleted file mode 100644
index 3e07fee..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.CodeKeyAttrRepeatRuleDTO;
-import org.springblade.code.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;
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鎺у埗鍣�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeKeyAttrRepeatController")
-public class CodeKeyAttrRepeatRuleController {
-    /**
-    * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯 鏈嶅姟
-    */
-    @Autowired
-    private CodeKeyAttrRepeatRuleServiceI codeKeyAttrRepeatRuleService;
-
-    /**
-     * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃
-     */
-    @GetMapping("/gridCodeKeyAttrRepeatRule")
-    public DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeKeyAttrRepeatRuleService.gridCodeKeyAttrRepeatRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeKeyAttrRepeatRuleVO> addSave(@RequestBody CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO){
-         CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.addSave(codeKeyAttrRepeatRuleDTO);
-         return BaseResult.success(codeKeyAttrRepeatRuleVO);
-    }
-
-    /**
-     * 淇敼 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeKeyAttrRepeatRuleVO> editSave(@RequestBody CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO){
-        CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.editSave(codeKeyAttrRepeatRuleDTO);
-        return BaseResult.success(codeKeyAttrRepeatRuleVO);
-    }
-
-
-    /**
-     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeKeyAttrRepeatRule( CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) {
-        return codeKeyAttrRepeatRuleService.deleteCodeKeyAttrRepeatRule(codeKeyAttrRepeatRuleDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-    * @param oid 涓婚敭
-    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeKeyAttrRepeatRuleVO> getObjectByOid(String oid){
-        CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.getObjectByOid(oid);
-        return BaseResult.success(codeKeyAttrRepeatRuleVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(String oids){
-        Collection<CodeKeyAttrRepeatRuleVO> voCollection =  codeKeyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeKeyAttrRepeatRuleService.refDataGridCodeKeyAttrRepeatRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java
deleted file mode 100644
index ab3efc0..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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;
-
-/**
- * 闃舵鐨勫睘鎬ф帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codePhaseAttrController")
-public class CodePhaseAttrController {
-    /**
-    * 闃舵鐨勫睘鎬� 鏈嶅姟
-    */
-    @Autowired
-    private CodePhaseAttrServiceI codePhaseAttrService;
-
-    /**
-     * 闃舵鐨勫睘鎬у垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodePhaseAttr")
-    public DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codePhaseAttrService.gridCodePhaseAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodePhaseAttrVO> addSave(@RequestBody CodePhaseAttrDTO codePhaseAttrDTO){
-         CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.addSave(codePhaseAttrDTO);
-         return BaseResult.success(codePhaseAttrVO);
-    }
-
-    /**
-     * 淇敼 闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodePhaseAttrVO> editSave(@RequestBody CodePhaseAttrDTO codePhaseAttrDTO){
-        CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.editSave(codePhaseAttrDTO);
-        return BaseResult.success(codePhaseAttrVO);
-    }
-
-
-    /**
-     * 鍒犻櫎闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodePhaseAttr( CodePhaseAttrDTO codePhaseAttrDTO) {
-        return codePhaseAttrService.deleteCodePhaseAttr(codePhaseAttrDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
-    * @param oid 涓婚敭
-    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodePhaseAttrVO> getObjectByOid(String oid){
-        CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.getObjectByOid(oid);
-        return BaseResult.success(codePhaseAttrVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodePhaseAttrVO> listCodePhaseAttrByOids(String oids){
-        Collection<CodePhaseAttrVO> voCollection =  codePhaseAttrService.listCodePhaseAttrByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codePhaseAttrService.refDataGridCodePhaseAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java
deleted file mode 100644
index 4365759..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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;
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯鎺у埗鍣�
- *
- * @author weidy
- * @date 2022-04-10
- */
-@RestController
-@RequestMapping("/resembleRuleController")
-public class CodeResembleRuleController {
-    /**
-    * 鐩镐技鏌ヨ瑙勫垯 鏈嶅姟
-    */
-    @Autowired
-    private CodeResembleRuleServiceI codeResembleRuleService;
-
-    /**
-     * 鐩镐技鏌ヨ瑙勫垯鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃
-     */
-    @GetMapping("/gridCodeResembleRule")
-    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeResembleRuleService.gridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeResembleRuleVO> addSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
-         CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.addSave(codeResembleRuleDTO);
-         return BaseResult.success(codeResembleRuleVO);
-    }
-
-    /**
-     * 淇敼 鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeResembleRuleVO> editSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
-        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.editSave(codeResembleRuleDTO);
-        return BaseResult.success(codeResembleRuleVO);
-    }
-
-
-    /**
-     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeResembleRule( CodeResembleRuleDTO codeResembleRuleDTO) {
-        return codeResembleRuleService.deleteCodeResembleRule(codeResembleRuleDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
-    * @param oid 涓婚敭
-    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeResembleRuleVO> getObjectByOid(String oid){
-        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.getObjectByOid(oid);
-        return BaseResult.success(codeResembleRuleVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeResembleRuleVO> listCodeResembleRuleByOids(String oids){
-        Collection<CodeResembleRuleVO> voCollection =  codeResembleRuleService.listCodeResembleRuleByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeResembleRuleService.refDataGridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java
deleted file mode 100644
index f009539..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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.*;
-
-import java.util.Collection;
-import java.util.Map;
-
-
-/**
- * 涓绘暟鎹紪鐮佽鍒欐帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/mdmRuleController")
-public class CodeRuleController {
-    /**
-    * 涓绘暟鎹紪鐮佽鍒� 鏈嶅姟
-    */
-    @Autowired
-    private CodeRuleServiceI codeRuleService;
-
-    /**
-     * 涓绘暟鎹紪鐮佽鍒欏垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeRule")
-    public DataGrid<CodeRuleVO> gridCodeRule(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        DataGrid<CodeRuleVO> result = codeRuleService.gridCodeRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-        return result;
-    }
-    /**
-     * 澧炲姞 涓绘暟鎹紪鐮佽鍒�
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeRuleVO> addSave(@RequestBody CodeRuleDTO codeRuleDTO){
-         CodeRuleVO codeRuleVO = codeRuleService.addSave(codeRuleDTO);
-         return BaseResult.success(codeRuleVO);
-    }
-
-    /**
-     * 淇敼 涓绘暟鎹紪鐮佽鍒�
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeRuleVO> editSave(@RequestBody CodeRuleDTO codeRuleDTO){
-        CodeRuleVO codeRuleVO = codeRuleService.editSave(codeRuleDTO);
-        return BaseResult.success(codeRuleVO);
-    }
-
-
-    /**
-     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeRule( CodeRuleDTO codeRuleDTO) {
-        return codeRuleService.deleteCodeRule(codeRuleDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
-    * @param oid 涓婚敭
-    * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeRuleVO> getObjectByOid(String oid){
-        CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(oid);
-        return BaseResult.success(codeRuleVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeRuleVO> listCodeRuleByOids(String oids){
-        Collection<CodeRuleVO> voCollection =  codeRuleService.listCodeRuleByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeRuleVO> refDataGridCodeRule(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeRuleService.refDataGridCodeRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
-     * @param oid 涓婚敭
-     * @return 浣跨敤鑼冨洿
-     */
-    @GetMapping("/listUseRange")
-    public BaseResult<CodeClassifyVO> listUseRange(String oid){
-        Collection<CodeClassifyVO> voList = codeRuleService.listUseRangeInCodeClassify(oid);
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voList);
-       return baseResult;
-    }
-
-    /**
-     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
-     * @param map 灏佽鍙傛暟锛屽寘鎷琽id 缂栫爜瑙勫垯涓婚敭 update 鏇存柊鐘舵�佺殑鎿嶄綔
-     * @return 鎵ц缁撴灉
-     */
-    @PostMapping ("/updateStatus")
-    public BaseResult updateStatus(@RequestBody Map<String,String> map){
-        if (CollectionUtils.isEmpty(map)){
-            return BaseResult.fail("鍙傛暟閿欒");
-        }
-        String oid = map.get("oid");
-        String update = map.get("update");
-        return codeRuleService.updateStatus(oid,update);
-    }
-
-    /**
-     * 鍏嬮殕缂栫爜瑙勫垯
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     */
-    @PostMapping("/clone")
-    public BaseResult cloneCodeRule(@RequestBody CodeRuleDTO codeRuleDTO){
-        return codeRuleService.cloneCodeRule(codeRuleDTO);
-    }
-
-    /**
-     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @DeleteMapping("/clearAllCode")
-    public BaseResult clearAllCode(String oid){
-        return codeRuleService.clearAllCode(oid);
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java
deleted file mode 100644
index ff58b66..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.springblade.code.controller;
-
-
-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;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 娴佹按绠楁硶鎺у埗鍣�
- * @author weidy
- * @date 2022-2-17
- */
-@RestController
-@RequestMapping("/codeSerialAlgorithmController")
-public class CodeSerialAlgorithmController {
-
-    /**
-     * 绠楁硶鏈嶅姟
-     */
-    @Autowired
-    private CodeSerialAlgorithmServiceI algorithmService;
-
-    /**
-     * 绠楁硶鐨勫垪琛�
-     * @return 绠楁硶鐨勪俊鎭�
-     */
-    @GetMapping("/gridCodeSerialAlgorithm")
-    public DataGrid<CodeSerialAlgorithmVO> gridCodeSerialAlgorithm(){
-        return algorithmService.gridSerialAlgorithm();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java
deleted file mode 100644
index bb59f9c..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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.*;
-
-import java.util.Collection;
-
-
-/**
- * 鍚屼箟璇嶉厤缃帶鍒跺櫒
- *
- * @author weidy
- * @date 2022-02-17
- */
-@RestController
-@RequestMapping("/codeSynonymController")
-public class CodeSynonymController {
-    /**
-    * 鍚屼箟璇嶉厤缃� 鏈嶅姟
-    */
-    @Autowired
-    private CodeSynonymServiceI codeSynonymService;
-
-    /**
-     * 鍚屼箟璇嶉厤缃垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛�
-     */
-    @GetMapping("/gridCodeSynonym")
-    public DataGrid<CodeSynonymVO> gridCodeSynonym(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeSynonymService.gridCodeSynonym(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeSynonymVO> addSave(@RequestBody CodeSynonymDTO codeSynonymDTO){
-         CodeSynonymVO codeSynonymVO = codeSynonymService.addSave(codeSynonymDTO);
-         return BaseResult.success(codeSynonymVO);
-    }
-
-    /**
-     * 淇敼 鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeSynonymVO> editSave(@RequestBody CodeSynonymDTO codeSynonymDTO){
-        CodeSynonymVO codeSynonymVO = codeSynonymService.editSave(codeSynonymDTO);
-        return BaseResult.success(codeSynonymVO);
-    }
-
-
-    /**
-     * 鍒犻櫎鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeSynonym( CodeSynonymDTO codeSynonymDTO) {
-        return codeSynonymService.deleteCodeSynonym(codeSynonymDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
-    * @param oid 涓婚敭
-    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeSynonymVO> getObjectByOid(String oid){
-        CodeSynonymVO codeSynonymVO = codeSynonymService.getObjectByOid(oid);
-        return BaseResult.success(codeSynonymVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeSynonymVO> listCodeSynonymByOids(String oids){
-        Collection<CodeSynonymVO> voCollection =  codeSynonymService.listCodeSynonymByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeSynonymVO> refDataGridCodeSynonym(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeSynonymService.refDataGridCodeSynonym(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java
deleted file mode 100644
index 0a937f5..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.springblade.code.controller;
-
-
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.code.dto.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.*;
-
-import java.util.Collection;
-
-
-/**
- * 妯℃澘闃舵鎺у埗鍣�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@RestController
-@RequestMapping("/codeTempPhaseController")
-public class CodeTemplatePhaseController {
-    /**
-    * 妯℃澘闃舵 鏈嶅姟
-    */
-    @Autowired
-    private CodeTemplatePhaseServiceI codeTemplatePhaseService;
-
-    /**
-     * 妯℃澘闃舵鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃
-     */
-    @GetMapping("/gridCodeTemplatePhase")
-    public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeTemplatePhaseService.gridCodeTemplatePhase(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-    /**
-     * 澧炲姞 妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PostMapping( "/addSave")
-    public BaseResult<CodeTemplatePhaseVO> addSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
-         CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.addSave(codeTemplatePhaseDTO);
-         return BaseResult.success(codeTemplatePhaseVO);
-    }
-
-    /**
-     * 淇敼 妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-     */
-    @PutMapping("/editSave")
-    public BaseResult<CodeTemplatePhaseVO> editSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
-        CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.editSave(codeTemplatePhaseDTO);
-        return BaseResult.success(codeTemplatePhaseVO);
-    }
-
-
-    /**
-     * 鍒犻櫎妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @DeleteMapping( "/deleteData")
-    public BaseResult delCodeTemplatePhase( CodeTemplatePhaseDTO codeTemplatePhaseDTO) {
-        return codeTemplatePhaseService.deleteCodeTemplatePhase(codeTemplatePhaseDTO);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇妯℃澘闃舵
-    * @param oid 涓婚敭
-    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
-    */
-    @GetMapping("/getObjectByOid")
-    public BaseResult<CodeTemplatePhaseVO> getObjectByOid(String oid){
-        CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.getObjectByOid(oid);
-        return BaseResult.success(codeTemplatePhaseVO);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
-     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
-     */
-    @GetMapping("/listDataByOids")
-    public BaseResult<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(String oids){
-        Collection<CodeTemplatePhaseVO> voCollection =  codeTemplatePhaseService.listCodeTemplatePhaseByOids(VciBaseUtil.str2List(oids));
-        BaseResult baseResult = BaseResult.success();
-        baseResult.setData(voCollection);
-        return  baseResult;
-    }
-
-
-
-    /**
-     * 鍙傜収妯℃澘闃舵鍒楄〃
-     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     */
-    @GetMapping("/refDataGrid")
-    public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(BaseQueryObject baseQueryObject){
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        return codeTemplatePhaseService.refDataGridCodeTemplatePhase(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鑾峰彇闃舵涓病鏈変娇鐢ㄧ殑妯℃澘灞炴��
-     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
-     * @return 灞炴�х殑淇℃伅
-     */
-    @GetMapping("/gridUnUsedAttribute")
-    public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(BaseQueryObject baseQueryObject){
-        return codeTemplatePhaseService.gridUnUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-    /**
-     * 鑾峰彇闃舵涓娇鐢ㄧ殑妯℃澘灞炴��
-     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
-     * @return 灞炴�х殑淇℃伅
-     */
-    @GetMapping("/gridUsedAttribute")
-    public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(BaseQueryObject baseQueryObject){
-        return codeTemplatePhaseService.gridUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-    }
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java
deleted file mode 100644
index baeadd4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java
+++ /dev/null
@@ -1,141 +0,0 @@
-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.CodeAllCodeDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鎵�鏈夌殑鐮佸�兼暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-03-01
- */
-public interface  CodeAllCodeDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeAllCodeDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeAllCodeDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeAllCodeDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeAllCodeDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeAllCodeDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeAllCodeDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeAllCodeDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeAllCodeDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeAllCodeDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeAllCodeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java
deleted file mode 100644
index 3c60430..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java
+++ /dev/null
@@ -1,148 +0,0 @@
-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.CodeBasicSecDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeBasicSecDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeBasicSecDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeBasicSecDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeBasicSecDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeBasicSecDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeBasicSecDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeBasicSecDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeBasicSecDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeBasicSecDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeBasicSecDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeBasicSecDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-	/**
-	 * 灏咲O瀵硅薄杞崲涓築atchCBO锛屾柟渚夸笌Cbo瀵硅薄涓�璧锋搷浣�
-	 * @param codeBasicSec 鐮佹鍩烘湰淇℃伅DO瀵硅薄
-	 * @param operationType 鎿嶄綔鏂瑰紡 - add 娣诲姞 edit 缂栬緫 delete 鍒犻櫎
-	 * @return 鎵ц缁撴灉琛屾暟
-	 */
-	BatchCBO trans2BatchCBO(CodeBasicSecDO codeBasicSec,String operationType);
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java
deleted file mode 100644
index c943971..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java
+++ /dev/null
@@ -1,142 +0,0 @@
-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.CodeButtonDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeButtonDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeButtonDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeButtonDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeButtonDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeButtonDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeButtonDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeButtonDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeButtonDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeButtonDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeButtonDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java
deleted file mode 100644
index 1b89f08..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java
+++ /dev/null
@@ -1,232 +0,0 @@
-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.CodeClassifyDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓婚搴撳垎绫绘暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-20
- */
-public interface  CodeClassifyDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撳垎绫绘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撳垎绫绘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄
-	 */
-	List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-	 * 浣跨敤鏌ヨ灏佽鍣ㄦ煡璇㈡�绘暟
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鎬绘暟
-	 */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-	/**
-	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
-	* @param oid 鏁版嵁涓婚敭
-	* @return 鏌ヨ缁撴灉 key鏄富閿紝value鏄湰娆℃煡璇㈢殑灞傜骇
-	*/
-	Map<String,String> selectAllLevelChildOid(String oid);
-
-	/**
-	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
-	 * @param oid 褰撳墠鍒嗙被鐨刼id
-	 * @return oid,id,name,btmtypeid,btmtypename
-	 */
-	List<CodeClassifyDO> selectAllLevelParents(String oid);
-
-	/**
-	 * 鑾峰彇褰撳墠鍒嗙被鐨勬墍鏈変笂绾у垎绫伙紙鍚湰娆℃煡璇㈠眰绾у彿锛�
-	 * @param oid 涓婚敭
-	 * @return 鎵�鏈夌殑涓婄骇
-	 */
-	List<CodeClassifyDO> selectAllLevelParentByOid(String oid);
-
-	/**
-	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
-	 * @param oid 褰撳墠鍒嗙被鐨刼id
-	 * @return oid,id,name,btmtypeid,btmtypename
-	 */
-	CodeClassifyDO selectBtmOrParentBtm(String oid);
-
-	/**
-	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
-	 * @param oid 鏁版嵁涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	List<CodeClassifyDO> selectAllLevelChild(String oid);
-
-	/**
-	 * 鏌ヨ鎵�鏈夌殑涓嬬骇锛屽苟鍖呭惈灞傜骇鐨勮矾寰�
-	 * @param oid 涓婄骇鐨勪富閿�
-	 * @param fieldInPath 瀛楁鍦ㄨ矾寰勪腑鐨勫唴瀹�
-	 * @param enable 鏄惁鍙煡璇㈠惎鐢�
-	 * @return 鍒嗙被鐨勬暟鎹唴瀹�
-	 */
-    List<CodeClassifyDO> selectAllLevelChildHasPath(String oid, String fieldInPath,boolean enable);
-
-    /**
-	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
-	* @param oid 涓婚敭
-	* @return 鎬绘暟
-	*/
-	long countAllLevelChildOid(String oid);
-
-	/**
-	 * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
-	 *
-	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-	 * @return 鍒嗙被鐨勬樉绀哄璞�
-	 */
-	List<CodeClassifyDO> listParentClassify(String codeClassifyOid);
-
-	/**
-	 * 鏌ヨ杩欎釜鍒嗙被鐨剅oot鑺傜偣oid
-	 */
-	CodeClassifyDO getRootClassify(String codeClassifyOid);
-
-	/**
-	 * 鍒ゆ柇杩欎釜鍒嗙被鏄惁灞炰簬wupin鍒嗙被鏍�
-	 * @param oid
-	 * @return
-	 */
-	boolean isWupin(String oid);
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-	/**
-	 * 鏍¢獙鏄惁鍖呭惈瀛愯妭鐐�
-	 * @param oid 鍒嗙被鐨勪富閿�
-	 * @return true 琛ㄧず鍖呭惈
-	 */
-    boolean checkHasChild(String oid);
-
-	/**
-	 * 浣跨敤瀛楁鐨勮矾寰勶紝鏌ヨ瀵硅薄
-	 * @param fieldPath 瀛楁鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮� xxx/yyy/zz鐨勬牸寮�
-	 * @param field 瀛楁鐨勮嫳鏂囧悕绉�
-	 * @return 鍒嗙被鐨勫璞�
-	 */
-	CodeClassifyDO selectByFieldPath(String fieldPath, String field);
-
-	/***
-	 * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
-	 * @param classifyId
-	 * @param enable
-	 * @return
-	 */
-	public List<CodeClassifyDO>getIdPathToNamePathByParentId(String classifyId,boolean enable);
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java
deleted file mode 100644
index 41b4169..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java
+++ /dev/null
@@ -1,141 +0,0 @@
-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.CodeClassifyProcessTempDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeClassifyProcessTempDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyProcessTempDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyProcessTempDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyProcessTempDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyProcessTempDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyProcessTempDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyProcessTempDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyProcessTempDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyProcessTempDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyProcessTempDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyProcessTempDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java
deleted file mode 100644
index b310840..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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.CodeClassifyTempMapItemDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-03-10
- */
-public interface  CodeClassifyTempMapItemDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyTempMapItemDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyTempMapItemDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyTempMapItemDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTempMapItemDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyTempMapItemDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyTempMapItemDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyTempMapItemDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyTempMapItemDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTempMapItemDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTempMapItemDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java
deleted file mode 100644
index 0b3b07c..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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.CodeClassifyTemplateAttrDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeClassifyTemplateAttrDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyTemplateAttrDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyTemplateAttrDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyTemplateAttrDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateAttrDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyTemplateAttrDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyTemplateAttrDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyTemplateAttrDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyTemplateAttrDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateAttrDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java
deleted file mode 100644
index 2061b54..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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.CodeClassifyTemplateButtonDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeClassifyTemplateButtonDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyTemplateButtonDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyTemplateButtonDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyTemplateButtonDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateButtonDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyTemplateButtonDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyTemplateButtonDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyTemplateButtonDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyTemplateButtonDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateButtonDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java
deleted file mode 100644
index 7631fc2..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java
+++ /dev/null
@@ -1,170 +0,0 @@
-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.CodeClassifyTemplateDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍒嗙被妯℃澘瀵硅薄鏁版嵁鎿嶄綔灞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeClassifyTemplateDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyTemplateDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyTemplateDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyTemplateDO selectByPrimaryKey(String oid);
-
-
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyTemplateDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyTemplateDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyTemplateDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyTemplateDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-	/**
-	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
-	* @param oid 鏁版嵁涓婚敭
-	* @return 鏌ヨ缁撴灉
-	*/
-	List<String> selectAllLevelChildOid(String oid);
-
-	/**
-	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
-	 * @param oid 鏁版嵁涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	List<CodeClassifyTemplateDO> selectAllLevelChild(String oid);
-
-	/**
-	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
-	* @param oid 涓婚敭
-	* @return 鎬绘暟
-	*/
-	long countAllLevelChildOid(String oid);
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-	/**
-	 * 鏌ヨ鍒嗙被鐨勫瓙鍒嗙被鍖呭惈鐨勬ā鏉跨殑鍐呭
-	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-	 * @return key鏄ā鏉跨殑涓婚敭锛寁alue鏄ā鏉挎墍灞炵殑鍒嗙被涓婚敭
-	 */
-    Map<String/**妯℃澘鐨勪富閿�**/, String/**妯℃澘鐨勫垎绫�**/> selectChildHasReleaseTemplate(String codeClassifyOid);
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java
deleted file mode 100644
index 6c9b9f9..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java
+++ /dev/null
@@ -1,141 +0,0 @@
-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.CodeClassifyTemplateMapDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeClassifyTemplateMapDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyTemplateMapDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyTemplateMapDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyTemplateMapDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateMapDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyTemplateMapDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyTemplateMapDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyTemplateMapDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyTemplateMapDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateMapDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyTemplateMapDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java
deleted file mode 100644
index c493bb4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java
+++ /dev/null
@@ -1,147 +0,0 @@
-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.CodeClassifyValueDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeClassifyValueDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeClassifyValueDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeClassifyValueDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeClassifyValueDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyValueDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeClassifyValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeClassifyValueDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeClassifyValueDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeClassifyValueDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeClassifyValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-	/**
-	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
-	* @param oid 鏁版嵁涓婚敭
-	* @return 鏌ヨ缁撴灉
-	*/
-	List<String> selectAllLevelChildOid(String oid);
-
-	/**
-	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
-	 * @param oid 鏁版嵁涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	List<CodeClassifyValueDO> selectAllLevelChild(String oid);
-
-	/**
-	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
-	* @param oid 涓婚敭
-	* @return 鎬绘暟
-	*/
-	long countAllLevelChildOid(String oid);
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java
deleted file mode 100644
index 9a62c19..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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.CodeFixedValueDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeFixedValueDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeFixedValueDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeFixedValueDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeFixedValueDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeFixedValueDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeFixedValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeFixedValueDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeFixedValueDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeFixedValueDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeFixedValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeFixedValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java
deleted file mode 100644
index f6286f1..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package org.springblade.code.dao;
-
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import org.springblade.code.model.CodeKeyAttrRepeatRuleDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁鎿嶄綔灞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeKeyAttrRepeatRuleDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeKeyAttrRepeatRuleDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeKeyAttrRepeatRuleDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeKeyAttrRepeatRuleDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-	 * 鏍规嵁缂栧彿鎵归噺鏌ヨ瀵硅薄
-	 * @param ids 缂栧彿鐨勯泦鍚�
-	 * @return 涓氬姟瀵硅薄
-	 */
-	List<CodeKeyAttrRepeatRuleDO> selectByIdCollection(Collection<String> ids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeKeyAttrRepeatRuleDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeKeyAttrRepeatRuleDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeKeyAttrRepeatRuleDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeKeyAttrRepeatRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeKeyAttrRepeatRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java
deleted file mode 100644
index 4321057..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java
+++ /dev/null
@@ -1,141 +0,0 @@
-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.CodePhaseAttrDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 闃舵鐨勫睘鎬ф暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodePhaseAttrDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodePhaseAttrDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodePhaseAttrDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodePhaseAttrDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodePhaseAttrDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodePhaseAttrDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodePhaseAttrDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodePhaseAttrDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodePhaseAttrDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodePhaseAttrDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodePhaseAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java
deleted file mode 100644
index 1cd39bf..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java
+++ /dev/null
@@ -1,141 +0,0 @@
-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.CodeResembleRuleDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯鏁版嵁鎿嶄綔灞�
- *
- * @author weidy
- * @date 2022-04-10
- */
-public interface  CodeResembleRuleDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeResembleRuleDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeResembleRuleDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeResembleRuleDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeResembleRuleDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeResembleRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeResembleRuleDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeResembleRuleDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeResembleRuleDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeResembleRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeResembleRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java
deleted file mode 100644
index c95c33b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java
+++ /dev/null
@@ -1,155 +0,0 @@
-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.CodeRuleDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓绘暟鎹紪鐮佽鍒欐暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeRuleDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeRuleDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeRuleDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeRuleDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeRuleDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-	 * 浣跨敤缂栧彿闆嗗悎鎵归噺鏌ヨ瀵硅薄
-	 * @param ids 缂栧彿鐨勯泦鍚�
-	 * @return 涓氬姟瀵硅薄
-	 */
-	List<CodeRuleDO> selectByIdCollection(Collection<String> ids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeRuleDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeRuleDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeRuleDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-	/**
-	 * 鍒犻櫎鏁版嵁涓嶈繘琛屾寔涔呭寲锛岃浆鍖栦负batchCBO
-	 * @param codeRule 缂栫爜瑙勫垯瀵硅薄
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	BatchCBO delete4BatchCBO (CodeRuleDO codeRule);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java
deleted file mode 100644
index 9541cc0..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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.CodeSerialValueDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 娴佹按鐨勫�兼暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-03-01
- */
-public interface  CodeSerialValueDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 娴佹按鐨勫�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeSerialValueDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeSerialValueDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeSerialValueDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeSerialValueDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeSerialValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeSerialValueDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 娴佹按鐨勫�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeSerialValueDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeSerialValueDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeSerialValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeSerialValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java
deleted file mode 100644
index b6968d5..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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.CodeSynonymDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍚屼箟璇嶉厤缃暟鎹搷浣滃眰
- *
- * @author weidy
- * @date 2022-02-17
- */
-public interface  CodeSynonymDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeSynonymDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeSynonymDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeSynonymDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeSynonymDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeSynonymDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeSynonymDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeSynonymDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeSynonymDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeSynonymDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeSynonymDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java
deleted file mode 100644
index 90c9d4d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java
+++ /dev/null
@@ -1,142 +0,0 @@
-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.CodeTemplatePhaseDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 妯℃澘闃舵鏁版嵁鎿嶄綔灞�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface  CodeTemplatePhaseDaoI {
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO deleteByPrimaryKey(String oid);
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO insert(CodeTemplatePhaseDO record);
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	BatchCBO batchInsert(List<CodeTemplatePhaseDO> records);
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	CodeTemplatePhaseDO selectByPrimaryKey(String oid);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeTemplatePhaseDO> selectByPrimaryKeys(String oids);
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	List<CodeTemplatePhaseDO> selectByPrimaryKeyCollection(Collection<String> oids);
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	List<CodeTemplatePhaseDO> selectAll();
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	BatchCBO updateByPrimaryKey(CodeTemplatePhaseDO record);
-
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	BatchCBO batchUpdate(List<CodeTemplatePhaseDO> records);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeTemplatePhaseDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	Long countByCondition(Map<String,String> conditionMap);
-
-	/**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	List<CodeTemplatePhaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	String selectNameByOid(String oid);
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	int updateLcStatus( String oid, String lcStatus);
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	BatchCBO batchDeleteByOids(Collection<String> oids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java
deleted file mode 100644
index 9232c94..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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
deleted file mode 100644
index e53ff61..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingLogeDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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
deleted file mode 100644
index 171b997..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataDaoI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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
deleted file mode 100644
index b639407..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataInfoDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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
deleted file mode 100644
index f1d0502..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrMappingDaoI.java
+++ /dev/null
@@ -1,133 +0,0 @@
-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
deleted file mode 100644
index bf5c989..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrRangeDaoI.java
+++ /dev/null
@@ -1,126 +0,0 @@
-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
deleted file mode 100644
index 15678d8..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingTaskDaoI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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
deleted file mode 100644
index 82c573b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntAuthorityDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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
deleted file mode 100644
index d12e1f7..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntBaseDaoI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-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
deleted file mode 100644
index 961f3da..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntHeaderDaoI.java
+++ /dev/null
@@ -1,143 +0,0 @@
-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
deleted file mode 100644
index ea2528c..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntInfoDaoI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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
deleted file mode 100644
index 47282da..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntParamDaoI.java
+++ /dev/null
@@ -1,144 +0,0 @@
-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
deleted file mode 100644
index 3fc6343..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeAllCodeDaoI;
-import org.springblade.code.model.CodeAllCodeDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鎵�鏈夌殑鐮佸�兼暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-03-01
- */
-@Repository
-public class  CodeAllCodeDaoImpl implements CodeAllCodeDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeAllCodeDO codeAllCodeDO = selectByPrimaryKey(oid);
-		return boService.delete(codeAllCodeDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeAllCodeDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeAllCodeDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeAllCodeDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeAllCodeDO record = boService.selectByOid(oid, CodeAllCodeDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeAllCodeDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeAllCodeDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeAllCodeDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeAllCodeDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeAllCodeDO> selectAll(){
-		return boService.queryObject(CodeAllCodeDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeAllCodeDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeAllCodeDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeAllCodeDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeAllCodeDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeAllCodeDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeAllCodeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeAllCodeDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeAllCodeDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeallcode");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeallcode");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeAllCodeDO> dos = boService.selectByOidCollection(oids, CodeAllCodeDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java
deleted file mode 100644
index 8e93f0d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java
+++ /dev/null
@@ -1,269 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import 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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeBasicSecDaoImpl implements CodeBasicSecDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeBasicSecDO codeBasicSecDO = selectByPrimaryKey(oid);
-		return boService.delete(codeBasicSecDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeBasicSecDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeBasicSecDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeBasicSecDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeBasicSecDO record = boService.selectByOid(oid, CodeBasicSecDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeBasicSecDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeBasicSecDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeBasicSecDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeBasicSecDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeBasicSecDO> selectAll(){
-		return boService.queryObject(CodeBasicSecDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeBasicSecDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeBasicSecDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeBasicSecDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeBasicSecDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeBasicSecDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeBasicSecDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeBasicSecDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeBasicSecDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codebasicsec");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codebasicsec");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeBasicSecDO> dos = boService.selectByOidCollection(oids, CodeBasicSecDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-
-	/**
-	 * 涓嶈缃寔涔呭寲锛岃浆鍖朌O涓築atchCBO
-	 * @param codeBasicSec 鐮佹鍩虹淇℃伅瀵硅薄
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public BatchCBO trans2BatchCBO(CodeBasicSecDO codeBasicSec,String operationType) {
-		VciBaseUtil.alertNotNull(codeBasicSec,"鐮佹鍩虹淇℃伅");
-		WebUtil.setPersistence(false);
-		BatchCBO batchCBO = null;
-		if ("add".equals(operationType)) {
-			batchCBO= boService.addSave(codeBasicSec);
-		}else if ("edit".equals(operationType)){
-			batchCBO = boService.editSave(codeBasicSec);
-		}else if ("delete".equals(operationType)){
-			batchCBO = boService.delete(codeBasicSec);
-		}else{
-			batchCBO = new BatchCBO();
-		}
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java
deleted file mode 100644
index 4610198..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeButtonDaoI;
-import org.springblade.code.model.CodeButtonDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeButtonDaoImpl implements CodeButtonDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeButtonDO codeButtonDO = selectByPrimaryKey(oid);
-		return boService.delete(codeButtonDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeButtonDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeButtonDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeButtonDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeButtonDO record = boService.selectByOid(oid, CodeButtonDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeButtonDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeButtonDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeButtonDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeButtonDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeButtonDO> selectAll(){
-		return boService.queryObject(CodeButtonDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeButtonDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeButtonDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeButtonDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeButtonDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeButtonDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeButtonDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeButtonDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codebutton");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codebutton");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeButtonDO> dos = boService.selectByOidCollection(oids, CodeButtonDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java
deleted file mode 100644
index fbc6b81..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java
+++ /dev/null
@@ -1,518 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import 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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.*;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 涓婚搴撳垎绫绘暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-20
- */
-@Repository
-public class  CodeClassifyDaoImpl implements CodeClassifyDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-	 * 骞冲彴鐨勫鎴风
-	 */
-	@Autowired
-	private PlatformClientUtil platformClientUtil;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyDO codeClassifyDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撳垎绫绘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyDO record = boService.selectByOid(oid, CodeClassifyDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyDO> selectAll(){
-		return boService.queryObject(CodeClassifyDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撳垎绫绘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyDO.class,conditionMap)));
-	}
-
-	/**
-	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-	 *
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄
-	 */
-	@Override
-	public List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyDO.class);
-	}
-
-	/**
-	 * 浣跨敤鏌ヨ灏佽鍣ㄦ煡璇㈡�绘暟
-	 *
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鎬绘暟
-	 */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-	/**
-	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
-	* @param oid 鏁版嵁涓婚敭
-	* @return 鏌ヨ缁撴灉锛宬ey鏄富閿紝value鏄湰娆℃煡璇㈢殑灞傜骇
-	*/
-	@Override
-	public Map<String,String> selectAllLevelChildOid(String oid){
-		String sql = "select oid,level from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " START WITH parentCodeClassifyOid = :oid CONNECT BY PRIOR OID = parentCodeClassifyOid";
-	    Map< String,String> conditionMap = new HashMap< String,String>();
-	    conditionMap.put("oid",oid);
-	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		Map<String,String> oidLevelMap = new HashMap<>();
-		if(!CollectionUtils.isEmpty(dataList)){
-			for(Map data:dataList){
-				oidLevelMap.put(VciBaseUtil.getStringValueFromObject(data.get("oid")),VciBaseUtil.getStringValueFromObject(data.get("level")));
-			}
-		}
-		return oidLevelMap;
-	}
-
-	/**
-	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
-	 * @param oid 褰撳墠鍒嗙被鐨刼id
-	 * @return oid,id,name,btmtypeid,btmtypename
-	 */
-	@Override
-	public List<CodeClassifyDO> selectAllLevelParents(String oid){
-		String sql = "select oid,id,name,btmtypeid,btmtypename from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where btmtypeid is not null start with oid= :oid connect by prior PARENTCODECLASSIFYOID=oid ";
-		Map< String,String> conditionMap = new HashMap< String,String>();
-		conditionMap.put("oid",oid);
-		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		List<CodeClassifyDO> oidList = new ArrayList<CodeClassifyDO>();
-		if(!CollectionUtils.isEmpty(dataList)){
-			for(Map data:dataList){
-				CodeClassifyDO codeClassifyDO = new CodeClassifyDO();
-				codeClassifyDO.setOid(VciBaseUtil.getStringValueFromObject(data.get("oid")));
-				codeClassifyDO.setId(VciBaseUtil.getStringValueFromObject(data.get("id")));
-				codeClassifyDO.setName(VciBaseUtil.getStringValueFromObject(data.get("name")));
-				codeClassifyDO.setBtmTypeId(VciBaseUtil.getStringValueFromObject(data.get("btmtypeid")));
-				codeClassifyDO.setBtmTypeName(VciBaseUtil.getStringValueFromObject(data.get("btmtypename")));
-				oidList.add(codeClassifyDO);
-			}
-		}
-		return oidList;
-	}
-
-	/**
-	 * 鑾峰彇褰撳墠鍒嗙被鐨勬墍鏈変笂绾у垎绫伙紙鍚湰娆℃煡璇㈠眰绾у彿锛�
-	 * @param oid 涓婚敭
-	 * @return 鎵�鏈夌殑涓婄骇
-	 */
-	@Override
-	public List<CodeClassifyDO> selectAllLevelParentByOid(String oid){
-		String sql = "select oid,level from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " start with oid= :oid connect by prior PARENTCODECLASSIFYOID = oid ";
-		Map< String,String> conditionMap = new HashMap< String,String>();
-		conditionMap.put("oid",oid);
-		List<ClientBusinessObject> cbos = boService.queryBySql(sql, conditionMap);
-		Map<String,String> oidLevelMap = new HashMap<>();
-		Optional.ofNullable(cbos).orElseGet(()->new ArrayList<>()).stream().forEach(cbo->{
-			oidLevelMap.put(cbo.getOid(),cbo.getAttributeValue("level"));
-		});
-		if(CollectionUtils.isEmpty(oidLevelMap)){
-			return new ArrayList<>();
-		}
-		//浣跨敤涓婚敭鏌ヨ涓�涓�
-		List<CodeClassifyDO> classifyDOS = selectByPrimaryKeyCollection(oidLevelMap.keySet());
-		if(!CollectionUtils.isEmpty(classifyDOS)){
-			classifyDOS.stream().forEach(classifyDO->{
-				classifyDO.setDataLevel(VciBaseUtil.getInt(oidLevelMap.getOrDefault(classifyDO.getOid(),"0")));
-			});
-		}
-		return classifyDOS;
-	}
-
-	/**
-	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
-	 * @param oid 褰撳墠鍒嗙被鐨刼id
-	 * @return oid,id,name,btmtypeid,btmtypename锛屾病鏈夊氨杩斿洖null
-	 */
-	@Override
-	public CodeClassifyDO selectBtmOrParentBtm(String oid){
-		List<CodeClassifyDO> oidList = selectAllLevelParents(oid);
-		return oidList.size()==0?null:oidList.get(0);
-	}
-
-	/**
-	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
-	 * @param oid 鏁版嵁涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@Override
-	public List<CodeClassifyDO> selectAllLevelChild(String oid){
-		Map<String, String> oidLevelMap = selectAllLevelChildOid(oid);
-		if(CollectionUtils.isEmpty(oidLevelMap)){
-			return new ArrayList<>();
-		}
-		List<CodeClassifyDO> classifyDOS = boService.selectByOidCollection(oidLevelMap.keySet(), CodeClassifyDO.class);
-		if(!CollectionUtils.isEmpty(classifyDOS)){
-			classifyDOS.stream().forEach(classifyDO->{
-				classifyDO.setDataLevel(VciBaseUtil.getInt(oidLevelMap.getOrDefault(classifyDO.getOid(),"0")));
-			});
-		}
-		return classifyDOS;
-	}
-
-	/**
-	 * 鏌ヨ鎵�鏈夌殑涓嬬骇锛屽苟鍖呭惈灞傜骇鐨勮矾寰�
-	 * @param oid 涓婄骇鐨勪富閿�
-	 * @param fieldInPath 瀛楁鍦ㄨ矾寰勪腑鐨勫唴瀹�
-	 * @param enable 鏄惁鍙煡璇㈠惎鐢ㄧ殑
-	 * @return 鍒嗙被鐨勬暟鎹唴瀹�
-	 */
-	@Override
-	public List<CodeClassifyDO> selectAllLevelChildHasPath(String oid, String fieldInPath, boolean enable){
-		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(),CodeClassifyDO.class);
-		if(StringUtils.isBlank(fieldInPath)){
-			fieldInPath = VciQueryWrapperForDO.ID_FIELD;
-		}
-		//coderuleoid.name as codeRuleOidName
-		String selectField = queryWrapperForDO.getSelectFieldSql().replace(", path","").replace(", dataLevel","")
-				+ ",level as datalevel ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + "." + fieldInPath + ", '#') as path ";
-		String sql = selectField + " from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " " + queryWrapperForDO.getTableNick() +
-				queryWrapperForDO.getLinkTableSql() +
-				(enable?" where " +  queryWrapperForDO.getTableNick() + ".lcstatus ='Enabled' " :"")
-				+ " START WITH " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid " + (StringUtils.isBlank(oid)?" is null " : " = '" + oid + "' " )
-				+ " CONNECT BY PRIOR " +  queryWrapperForDO.getTableNick() + ".OID = " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid";
-		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
-		return dataList;
-	}
-
-	/**
-	 *
-	 * @param classifyId
-	 * @param enable
-	 * @return
-	 */
-	@Override
-	public List<CodeClassifyDO> getIdPathToNamePathByParentId(String classifyId,boolean enable) {
-		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(), CodeClassifyDO.class);
-		//coderuleoid.name as codeRuleOidName
-		String selectField = queryWrapperForDO.getSelectFieldSql().replace(", path","").replace(", dataLevel","")
-		+",level as datalevel ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".name, '#') as namePath,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".id, '#') as idPath ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".id, '#') as path ";
-		String sql = selectField + " from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " " + queryWrapperForDO.getTableNick() +
-				queryWrapperForDO.getLinkTableSql() +
-				(enable?" where " +  queryWrapperForDO.getTableNick() + ".lcstatus ='Enabled' " :"")
-				+ " START WITH " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid " + (StringUtils.isBlank(classifyId)?" is null " : " = '" + classifyId + "' " )
-				+ " CONNECT BY PRIOR " +  queryWrapperForDO.getTableNick() + ".OID = " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid";
-		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
-
-		return dataList;
-	}
-
-	/**
-	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
-	* @param oid 涓婚敭
-	* @return 鎬绘暟
-	*/
-	@Override
-	public long countAllLevelChildOid(String oid){
-		String sql = "select count(OID) as countsize from platformbtm_codeclassify START WITH parentCodeClassifyOid = :oid CONNECT BY PRIOR OID= parentCodeClassifyOid";
-		Map< String,String> conditionMap = new HashMap< String,String>();
-		conditionMap.put("oid",oid);
-		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
-	}
-
-	/**
-	 * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
-	 *
-	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-	 * @return 鍒嗙被鐨勬樉绀哄璞�
-	 */
-	@Override
-	public List<CodeClassifyDO> listParentClassify(String codeClassifyOid){
-		String sql = "select\n" +
-				"*\n" +
-				"from\n" +
-				"PLATFORMBTM_CODECLASSIFY\n" +
-				"where lcstatus='Enabled'" +
-				"start with \n" +
-				"oid='"+codeClassifyOid+"'\n" +
-				"connect by \n" +
-				"prior parentcodeclassifyoid=oid";
-		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
-		return dataList;
-	}
-
-	/**
-	 * 鏌ヨ杩欎釜鍒嗙被鐨剅oot鑺傜偣oid
-	 */
-	@Override
-	public CodeClassifyDO getRootClassify(String codeClassifyOid){
-		List<CodeClassifyDO> dataList = listParentClassify(codeClassifyOid);
-		return dataList.size()>0?dataList.get(dataList.size()-1):null;
-	}
-
-	/**
-	 * 鍒ゆ柇杩欎釜鍒嗙被鏄惁灞炰簬wupin鍒嗙被鏍�
-	 * @param oid
-	 * @return
-	 */
-	@Override
-	public boolean isWupin(String oid){
-		boolean u = false;
-		String sql = "  select count(1) iswupin from \n" +
-				"  (\n" +
-				"  select\n" +
-				"  oid\n" +
-				"  from\n" +
-				"  PLATFORMBTM_CODECLASSIFY\n" +
-				"  where lcstatus='Enabled'\n" +
-				"  start with\n" +
-				"  oid=\n" +
-				"  (\n" +
-				"  select oid from PLATFORMBTM_CODECLASSIFY where id='wupin'\n" +
-				"  )\n" +
-				"  connect by\n" +
-				"  parentcodeclassifyoid=prior oid\n" +
-				"  ) t\n" +
-				"  where oid = '"+oid+"'";
-		try {
-			List<Map> dataList = boService.queryByOnlySqlForMap(sql);
-			String iswupin = dataList.get(0).getOrDefault("ISWUPIN","0").toString();
-			int count = Integer.parseInt(iswupin);
-			u=count>0?true:false;
-		}catch (Exception e){
-			e.printStackTrace();
-		}
-		return u;
-	}
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclassify");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclassify");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyDO> dos = boService.selectByOidCollection(oids, CodeClassifyDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-	/**
-	 * 鏍¢獙鏄惁鍖呭惈瀛愯妭鐐�
-	 *
-	 * @param oid 鍒嗙被鐨勪富閿�
-	 * @return true 琛ㄧず鍖呭惈
-	 */
-	@Override
-	public boolean checkHasChild(String oid) {
-		if(StringUtils.isBlank(oid)){
-			return false;
-		}
-		Map<String ,String > conditionMap = new HashMap<>();
-		conditionMap.put("parentCodeClassifyOid",oid);
-		return boService.queryCount(CodeClassifyDO.class,conditionMap) > 0;
-	}
-
-	/**
-	 * 浣跨敤瀛楁鐨勮矾寰勶紝鏌ヨ瀵硅薄
-	 *
-	 * @param fieldPath 瀛楁鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮� xxx/yyy/zz鐨勬牸寮�
-	 * @param field     瀛楁鐨勮嫳鏂囧悕绉�
-	 * @return 鍒嗙被鐨勫璞�
-	 */
-	@Override
-	public CodeClassifyDO selectByFieldPath(String fieldPath, String field) {
-		if(StringUtils.isBlank(field)){
-			field = VciQueryWrapperForDO.ID_FIELD;
-		}
-		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(),CodeClassifyDO.class);
-		String sql = "select * from (select oid , SYS_CONNECT_BY_PATH(" + field + ",'/') as paths from " + queryWrapperForDO.getTableName() +
-				" START WITH parentCodeClassifyOid is null CONNECT BY PRIOR OID= parentCodeClassifyOid ) a where a.paths = '/" + fieldPath + "' ";
-		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
-		return (!CollectionUtils.isEmpty(dataList))?selectByPrimaryKey(dataList.get(0).getOid()):null;
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java
deleted file mode 100644
index a59cbbc..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeClassifyProcessTempDaoI;
-import org.springblade.code.model.CodeClassifyProcessTempDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeClassifyProcessTempDaoImpl implements CodeClassifyProcessTempDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyProcessTempDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyProcessTempDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyProcessTempDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyProcessTempDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyProcessTempDO record = boService.selectByOid(oid, CodeClassifyProcessTempDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyProcessTempDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyProcessTempDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyProcessTempDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyProcessTempDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyProcessTempDO> selectAll(){
-		return boService.queryObject(CodeClassifyProcessTempDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyProcessTempDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyProcessTempDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyProcessTempDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyProcessTempDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyProcessTempDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeClassifyProcessTempDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyProcessTempDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyProcessTempDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclsflowtemp");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclsflowtemp");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyProcessTempDO> dos = boService.selectByOidCollection(oids, CodeClassifyProcessTempDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java
deleted file mode 100644
index 6e8a771..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeClassifyTempMapItemDaoI;
-import org.springblade.code.model.CodeClassifyTempMapItemDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-03-10
- */
-@Repository
-public class  CodeClassifyTempMapItemDaoImpl implements CodeClassifyTempMapItemDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyTempMapItemDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyTempMapItemDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyTempMapItemDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyTempMapItemDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyTempMapItemDO record = boService.selectByOid(oid, CodeClassifyTempMapItemDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTempMapItemDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTempMapItemDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyTempMapItemDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyTempMapItemDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyTempMapItemDO> selectAll(){
-		return boService.queryObject(CodeClassifyTempMapItemDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyTempMapItemDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyTempMapItemDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTempMapItemDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyTempMapItemDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTempMapItemDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeClassifyTempMapItemDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTempMapItemDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTempMapItemDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyTempMapItemDO> dos = boService.selectByOidCollection(oids, CodeClassifyTempMapItemDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java
deleted file mode 100644
index 72e7176..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.springblade.code.dao.impl;
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeClassifyTemplateAttrDaoI;
-import org.springblade.code.model.CodeClassifyTemplateAttrDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeClassifyTemplateAttrDaoImpl implements CodeClassifyTemplateAttrDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyTemplateAttrDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyTemplateAttrDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyTemplateAttrDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyTemplateAttrDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyTemplateAttrDO record = boService.selectByOid(oid, CodeClassifyTemplateAttrDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateAttrDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateAttrDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyTemplateAttrDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyTemplateAttrDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyTemplateAttrDO> selectAll(){
-		return boService.queryObject(CodeClassifyTemplateAttrDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateAttrDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyTemplateAttrDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateAttrDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyTemplateAttrDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateAttrDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeClassifyTemplateAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateAttrDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateAttrDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyTemplateAttrDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateAttrDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos,false);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java
deleted file mode 100644
index 1fb87ee..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeClassifyTemplateButtonDaoI;
-import org.springblade.code.model.CodeClassifyTemplateButtonDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeClassifyTemplateButtonDaoImpl implements CodeClassifyTemplateButtonDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyTemplateButtonDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyTemplateButtonDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyTemplateButtonDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyTemplateButtonDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyTemplateButtonDO record = boService.selectByOid(oid, CodeClassifyTemplateButtonDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateButtonDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateButtonDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyTemplateButtonDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyTemplateButtonDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyTemplateButtonDO> selectAll(){
-		return boService.queryObject(CodeClassifyTemplateButtonDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateButtonDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyTemplateButtonDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateButtonDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyTemplateButtonDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateButtonDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeClassifyTemplateButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateButtonDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateButtonDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyTemplateButtonDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateButtonDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java
deleted file mode 100644
index 96d384b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.*;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-/**
- * 鍒嗙被妯℃澘瀵硅薄鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeClassifyTemplateDaoImpl implements CodeClassifyTemplateDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyTemplateDO,false);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyTemplateDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyTemplateDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyTemplateDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyTemplateDO record = boService.selectByOid(oid, CodeClassifyTemplateDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyTemplateDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyTemplateDO> selectAll(){
-		return boService.queryObject(CodeClassifyTemplateDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyTemplateDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyTemplateDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeClassifyTemplateDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-	/**
-	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
-	* @param oid 鏁版嵁涓婚敭
-	* @return 鏌ヨ缁撴灉
-	*/
-	@Override
-	public List<String> selectAllLevelChildOid(String oid){
-		String sql = "select oid from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid= OID";
-	    Map< String,String> conditionMap = new HashMap< String,String>();
-	    conditionMap.put("oid",oid);
-	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		List<String> oidList = new ArrayList<String>();
-		if(!CollectionUtils.isEmpty(dataList)){
-			for(Map data:dataList){
-				oidList.add(VciBaseUtil.getStringValueFromObject(data.get("oid")));
-			}
-		}
-		return oidList;
-	}
-
-	/**
-	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
-	 * @param oid 鏁版嵁涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@Override
-	public List<CodeClassifyTemplateDO> selectAllLevelChild(String oid){
-		return boService.selectByOidCollection(selectAllLevelChildOid(oid),CodeClassifyTemplateDO.class);
-	}
-
-	/**
-	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
-	* @param oid 涓婚敭
-	* @return 鎬绘暟
-	*/
-	@Override
-	public long countAllLevelChildOid(String oid){
-		String sql = "select count(OID) countsize from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid = OID";
-		Map< String,String> conditionMap = new HashMap< String,String>();
-		conditionMap.put("oid",oid);
-		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
-	}
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclstemplate");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclstemplate");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyTemplateDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-	/**
-	 * 鏌ヨ鍒嗙被鐨勫瓙鍒嗙被鍖呭惈鐨勬ā鏉跨殑鍐呭
-	 *
-	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-	 * @return key鏄ā鏉跨殑涓婚敭锛寁alue鏄ā鏉挎墍灞炵殑鍒嗙被涓婚敭
-	 */
-	@Override
-	public Map<String, String> selectChildHasReleaseTemplate(String codeClassifyOid) {
-		Map<String, String> tempClsMap = new HashMap<>();
-		if(StringUtils.isNotBlank(codeClassifyOid)) {
-			String sql = "select t.oid as oid,cls.oid as clsoid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE) +
-					" t left join (select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where lcstatus = :lcstatus " +
-					" start with oid = :classifyoid \n" +
-					"connect by prior oid=parentcodeclassifyoid) cls  on t.codeclassifyoid = cls.oid where t.lcstatus =:templatelcstatus and cls.oid is not null\n";
-			Map<String, String> conditionMap = new HashMap<>();
-			conditionMap.put("lcstatus", FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED);
-			conditionMap.put("classifyoid", codeClassifyOid.trim());
-			conditionMap.put("templatelcstatus", CodeClassifyTemplateLC.RELEASED.getValue());
-			List<ClientBusinessObject> cbos = boService.queryBySql(sql, conditionMap);
-
-			if(!CollectionUtils.isEmpty(cbos)){
-				cbos.stream().forEach(cbo->{
-					tempClsMap.put(cbo.getOid(),cbo.getAttributeValue("clsoid"));
-				});
-			}else{
-
-			}
-		}
-		return tempClsMap;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java
deleted file mode 100644
index edc8d07..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeClassifyTemplateMapDaoI;
-import org.springblade.code.model.CodeClassifyTemplateMapDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeClassifyTemplateMapDaoImpl implements CodeClassifyTemplateMapDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyTemplateMapDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyTemplateMapDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyTemplateMapDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyTemplateMapDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyTemplateMapDO record = boService.selectByOid(oid, CodeClassifyTemplateMapDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateMapDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateMapDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyTemplateMapDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyTemplateMapDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyTemplateMapDO> selectAll(){
-		return boService.queryObject(CodeClassifyTemplateMapDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateMapDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyTemplateMapDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyTemplateMapDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyTemplateMapDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateMapDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeClassifyTemplateMapDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateMapDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateMapDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codetempmap");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codetempmap");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyTemplateMapDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateMapDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java
deleted file mode 100644
index 0e24617..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java
+++ /dev/null
@@ -1,255 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeClassifyValueDaoI;
-import org.springblade.code.model.CodeClassifyValueDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeClassifyValueDaoImpl implements CodeClassifyValueDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyValueDO codeClassifyValueDO = selectByPrimaryKey(oid);
-		return boService.delete(codeClassifyValueDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeClassifyValueDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeClassifyValueDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeClassifyValueDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClassifyValueDO record = boService.selectByOid(oid, CodeClassifyValueDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyValueDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyValueDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeClassifyValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeClassifyValueDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeClassifyValueDO> selectAll(){
-		return boService.queryObject(CodeClassifyValueDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeClassifyValueDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeClassifyValueDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeClassifyValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeClassifyValueDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyValueDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeClassifyValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyValueDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyValueDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-	/**
-	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
-	* @param oid 鏁版嵁涓婚敭
-	* @return 鏌ヨ缁撴灉
-	*/
-	@Override
-	public List<String> selectAllLevelChildOid(String oid){
-		String sql = "select oid FROM platformbtm_codeclassifyvalue START WITH parentClassifyValueOid = :oid CONNECT BY PRIOR parentClassifyValueOid= OID";
-	    Map< String,String> conditionMap = new HashMap< String,String>();
-	    conditionMap.put("oid",oid);
-	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		List<String> oidList = new ArrayList<String>();
-		if(!CollectionUtils.isEmpty(dataList)){
-			for(Map data:dataList){
-				oidList.add(VciBaseUtil.getStringValueFromObject(data.get("oid")));
-			}
-		}
-		return oidList;
-	}
-
-	/**
-	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
-	 * @param oid 鏁版嵁涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@Override
-	public List<CodeClassifyValueDO> selectAllLevelChild(String oid){
-		return boService.selectByOidCollection(selectAllLevelChildOid(oid),CodeClassifyValueDO.class);
-	}
-
-	/**
-	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
-	* @param oid 涓婚敭
-	* @return 鎬绘暟
-	*/
-	@Override
-	public long countAllLevelChildOid(String oid){
-		String sql = "select count(OID) countsize FROM platformbtm_codeclassifyvalue START WITH parentClassifyValueOid = :oid CONNECT BY PRIOR parentClassifyValueOid = OID";
-		Map< String,String> conditionMap = new HashMap< String,String>();
-		conditionMap.put("oid",oid);
-		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
-	}
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeClassifyValueDO> dos = boService.selectByOidCollection(oids, CodeClassifyValueDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java
deleted file mode 100644
index e41a21b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.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;
-import plm.bs.bom.common.AttributeValue;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeFixedValueDaoImpl implements CodeFixedValueDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeFixedValueDO codeFixedValueDO = selectByPrimaryKey(oid);
-		return boService.delete(codeFixedValueDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeFixedValueDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeFixedValueDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeFixedValueDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeFixedValueDO record = boService.selectByOid(oid, CodeFixedValueDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeFixedValueDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeFixedValueDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeFixedValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeFixedValueDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeFixedValueDO> selectAll(){
-		return boService.queryObject(CodeFixedValueDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeFixedValueDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeFixedValueDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeFixedValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeFixedValueDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeFixedValueDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeFixedValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeFixedValueDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeFixedValueDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeFixedValueDO> dos = boService.selectByOidCollection(oids, CodeFixedValueDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		Set<ClientBusinessObject> deleteCbos = batchCBO.getDeleteCbos();
-		deleteCbos.forEach(cbo -> {
-			cbo.getBusinessObject().newAttrValList = new AttributeValue[0];
-		});
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java
deleted file mode 100644
index 75f5a13..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java
+++ /dev/null
@@ -1,262 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeKeyAttrRepeatRuleDaoImpl implements CodeKeyAttrRepeatRuleDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByPrimaryKey(oid);
-		return boService.delete(codeKeyAttrRepeatRuleDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeKeyAttrRepeatRuleDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeKeyAttrRepeatRuleDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeKeyAttrRepeatRuleDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeKeyAttrRepeatRuleDO record = boService.selectByOid(oid, CodeKeyAttrRepeatRuleDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeKeyAttrRepeatRuleDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeKeyAttrRepeatRuleDO.class);
-	}
-
-	/**
-	 * 鏍规嵁缂栧彿鎵归噺鏌ヨ瀵硅薄
-	 *
-	 * @param ids 缂栧彿鐨勯泦鍚�
-	 * @return 涓氬姟瀵硅薄
-	 */
-	@Override
-	public List<CodeKeyAttrRepeatRuleDO> selectByIdCollection(Collection<String> ids) {
-		VciBaseUtil.alertNotNull(ids,"缂栧彿闆嗗悎");
-		Map<String,String> conditionMap = new HashMap<>();
-		conditionMap.put("id", QueryOptionConstant.IN +VciBaseUtil.toInSql(ids.toArray(new String[0])));
-		VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeKeyAttrRepeatRuleDO.class);
-		return boService.selectByQueryWrapper(wrapper,CodeKeyAttrRepeatRuleDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeKeyAttrRepeatRuleDO> selectAll(){
-		return boService.queryObject(CodeKeyAttrRepeatRuleDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeKeyAttrRepeatRuleDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeKeyAttrRepeatRuleDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeKeyAttrRepeatRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeKeyAttrRepeatRuleDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeKeyAttrRepeatRuleDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeKeyAttrRepeatRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeKeyAttrRepeatRuleDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeKeyAttrRepeatRuleDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codekeyattrrepeat");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codekeyattrrepeat");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeKeyAttrRepeatRuleDO> dos = boService.selectByOidCollection(oids, CodeKeyAttrRepeatRuleDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java
deleted file mode 100644
index 6c9def1..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package org.springblade.code.dao.impl;
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodePhaseAttrDaoI;
-import org.springblade.code.model.CodePhaseAttrDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 闃舵鐨勫睘鎬ф暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodePhaseAttrDaoImpl implements CodePhaseAttrDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodePhaseAttrDO codePhaseAttrDO = selectByPrimaryKey(oid);
-		return boService.delete(codePhaseAttrDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodePhaseAttrDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodePhaseAttrDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodePhaseAttrDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodePhaseAttrDO record = boService.selectByOid(oid, CodePhaseAttrDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodePhaseAttrDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodePhaseAttrDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodePhaseAttrDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodePhaseAttrDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodePhaseAttrDO> selectAll(){
-		return boService.queryObject(CodePhaseAttrDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodePhaseAttrDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodePhaseAttrDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodePhaseAttrDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodePhaseAttrDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodePhaseAttrDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodePhaseAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodePhaseAttrDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodePhaseAttrDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codephaseattr");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codephaseattr");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodePhaseAttrDO> dos = boService.selectByOidCollection(oids, CodePhaseAttrDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java
deleted file mode 100644
index 2e23d14..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeResembleRuleDaoI;
-import org.springblade.code.model.CodeResembleRuleDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author weidy
- * @date 2022-04-10
- */
-@Repository
-public class  CodeResembleRuleDaoImpl implements CodeResembleRuleDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeResembleRuleDO codeResembleRuleDO = selectByPrimaryKey(oid);
-		return boService.delete(codeResembleRuleDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeResembleRuleDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeResembleRuleDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeResembleRuleDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeResembleRuleDO record = boService.selectByOid(oid, CodeResembleRuleDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeResembleRuleDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeResembleRuleDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeResembleRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeResembleRuleDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeResembleRuleDO> selectAll(){
-		return boService.queryObject(CodeResembleRuleDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeResembleRuleDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeResembleRuleDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeResembleRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeResembleRuleDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeResembleRuleDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeResembleRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeResembleRuleDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeResembleRuleDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "coderesemblerule");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "coderesemblerule");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeResembleRuleDO> dos = boService.selectByOidCollection(oids, CodeResembleRuleDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java
deleted file mode 100644
index 725522c..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java
+++ /dev/null
@@ -1,274 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 涓绘暟鎹紪鐮佽鍒欐暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeRuleDaoImpl implements CodeRuleDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeRuleDO codeRuleDO = selectByPrimaryKey(oid);
-		return boService.delete(codeRuleDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeRuleDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeRuleDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeRuleDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeRuleDO record = boService.selectByOid(oid, CodeRuleDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeRuleDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeRuleDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeRuleDO.class);
-	}
-
-	/**
-	 * 浣跨敤缂栧彿闆嗗悎鎵归噺鏌ヨ瀵硅薄
-	 *
-	 * @param ids 缂栧彿鐨勯泦鍚�
-	 * @return 涓氬姟瀵硅薄
-	 */
-	@Override
-	public List<CodeRuleDO> selectByIdCollection(Collection<String> ids) {
-		VciBaseUtil.alertNotNull(ids,"缂栧彿闆嗗悎");
-		Map<String,String> conditionMap = new HashMap<>();
-		conditionMap.put("id", QueryOptionConstant.IN + VciBaseUtil.toInSql(ids.toArray(new String[0])) );
-		VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeRuleDO.class);
-		return boService.selectByQueryWrapper(wrapper,CodeRuleDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeRuleDO> selectAll(){
-		return boService.queryObject(CodeRuleDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeRuleDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeRuleDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeRuleDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeRuleDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeRuleDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeRuleDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "coderule");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "coderule");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeRuleDO> dos = boService.selectByOidCollection(oids, CodeRuleDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-	/**
-	 * 鍒犻櫎鏁版嵁涓嶈繘琛屾寔涔呭寲锛岃浆鍖栦负batchCBO
-	 * @param codeRule 缂栫爜瑙勫垯瀵硅薄
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public BatchCBO delete4BatchCBO(CodeRuleDO codeRule) {
-		VciBaseUtil.alertNotNull(codeRule,"缂栫爜瑙勫垯");
-		WebUtil.setPersistence(false);
-		return boService.delete(codeRule);
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java
deleted file mode 100644
index a67841e..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.springblade.code.dao.impl;
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeSerialValueDaoI;
-import org.springblade.code.model.CodeSerialValueDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 娴佹按鐨勫�兼暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-03-01
- */
-@Repository
-public class  CodeSerialValueDaoImpl implements CodeSerialValueDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeSerialValueDO codeSerialValueDO = selectByPrimaryKey(oid);
-		return boService.delete(codeSerialValueDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 娴佹按鐨勫�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeSerialValueDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeSerialValueDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeSerialValueDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeSerialValueDO record = boService.selectByOid(oid, CodeSerialValueDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeSerialValueDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeSerialValueDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeSerialValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeSerialValueDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeSerialValueDO> selectAll(){
-		return boService.queryObject(CodeSerialValueDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 娴佹按鐨勫�兼暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeSerialValueDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeSerialValueDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeSerialValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeSerialValueDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeSerialValueDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeSerialValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeSerialValueDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeSerialValueDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeSerialValueDO> dos = boService.selectByOidCollection(oids, CodeSerialValueDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java
deleted file mode 100644
index b7f9101..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeSynonymDaoI;
-import org.springblade.code.model.CodeSynonymDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 鍚屼箟璇嶉厤缃暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-02-17
- */
-@Repository
-public class  CodeSynonymDaoImpl implements CodeSynonymDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeSynonymDO codeSynonymDO = selectByPrimaryKey(oid);
-		return boService.delete(codeSynonymDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeSynonymDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeSynonymDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeSynonymDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeSynonymDO record = boService.selectByOid(oid, CodeSynonymDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeSynonymDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeSynonymDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeSynonymDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeSynonymDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeSynonymDO> selectAll(){
-		return boService.queryObject(CodeSynonymDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeSynonymDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeSynonymDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeSynonymDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeSynonymDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeSynonymDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeSynonymDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeSynonymDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeSynonymDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeSynonymDO> dos = boService.selectByOidCollection(oids, CodeSynonymDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java
deleted file mode 100644
index fa61557..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.CodeTemplatePhaseDaoI;
-import org.springblade.code.model.CodeTemplatePhaseDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 妯℃澘闃舵鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Repository
-public class  CodeTemplatePhaseDaoImpl implements CodeTemplatePhaseDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeTemplatePhaseDO codeTemplatePhaseDO = selectByPrimaryKey(oid);
-		return boService.delete(codeTemplatePhaseDO,false);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(CodeTemplatePhaseDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<CodeTemplatePhaseDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public CodeTemplatePhaseDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeTemplatePhaseDO record = boService.selectByOid(oid, CodeTemplatePhaseDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeTemplatePhaseDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeTemplatePhaseDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<CodeTemplatePhaseDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, CodeTemplatePhaseDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<CodeTemplatePhaseDO> selectAll(){
-		return boService.queryObject(CodeTemplatePhaseDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(CodeTemplatePhaseDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<CodeTemplatePhaseDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<CodeTemplatePhaseDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(CodeTemplatePhaseDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeTemplatePhaseDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<CodeTemplatePhaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,CodeTemplatePhaseDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeTemplatePhaseDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-	/**
-	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
-	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
-	 * @return 鎵ц鐨勭粨鏋�
-	 */
-	@Override
-	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
-		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codetempphase");
-		if(CollectionUtils.isEmpty(cbos)){
-			return 0;
-		}
-		lifeCycleService.transCboStatus(cbos,lcStatus);
-		return cbos.size();
-	}
-	/**
-	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
-	 * @param oid 涓婚敭
-	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
-	 */
-	@Override
-	public int updateLcStatus( String oid, String lcStatus){
-		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codetempphase");
-		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
-			return 0;
-		}
-		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
-		return 1;
-	}
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<CodeTemplatePhaseDO> dos = boService.selectByOidCollection(oids, CodeTemplatePhaseDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos,false);//涓嶅垽鏂弬鐓�
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java
deleted file mode 100644
index 311f157..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.DockingDataDaoI;
-import org.springblade.code.model.DockingDataDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-03-28
- */
-@Repository
-public class DockingDataDaoImpl implements DockingDataDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingDataDO DockingDataDO = selectByPrimaryKey(oid);
-		return boService.delete(DockingDataDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(DockingDataDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<DockingDataDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public DockingDataDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		DockingDataDO record = boService.selectByOid(oid, DockingDataDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingDataDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingDataDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<DockingDataDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, DockingDataDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<DockingDataDO> selectAll(){
-		return boService.queryObject(DockingDataDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(DockingDataDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<DockingDataDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingDataDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(DockingDataDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingDataDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<DockingDataDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,DockingDataDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingDataDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<DockingDataDO> dos = boService.selectByOidCollection(oids, DockingDataDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java
deleted file mode 100644
index 2481ba4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.DockingLogeDaoI;
-import org.springblade.code.model.DockingLogeDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-03-28
- */
-@Repository
-public class DockingLogeDaoImpl implements DockingLogeDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		DockingLogeDO dockingLogDO = selectByPrimaryKey(oid);
-		return boService.delete(dockingLogDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(DockingLogeDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<DockingLogeDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public DockingLogeDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		DockingLogeDO record = boService.selectByOid(oid, DockingLogeDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingLogeDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingLogeDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<DockingLogeDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, DockingLogeDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<DockingLogeDO> selectAll(){
-		return boService.queryObject(DockingLogeDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(DockingLogeDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<DockingLogeDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingLogeDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(DockingLogeDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingLogeDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<DockingLogeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,DockingLogeDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingLogeDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<DockingLogeDO> dos = boService.selectByOidCollection(oids, DockingLogeDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java
deleted file mode 100644
index 1a10965..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.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;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-/**
- * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author weidy
- * @date 2022-04-05
- */
-@Repository
-public class  DockingPreApplyDataDaoImpl implements DockingPreApplyDataDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingPreApplyDataDO dockingPreApplyDataDO = selectByPrimaryKey(oid);
-		return boService.delete(dockingPreApplyDataDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(DockingPreApplyDataDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<DockingPreApplyDataDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public DockingPreApplyDataDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		DockingPreApplyDataDO record = boService.selectByOid(oid, DockingPreApplyDataDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingPreApplyDataDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreApplyDataDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<DockingPreApplyDataDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, DockingPreApplyDataDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<DockingPreApplyDataDO> selectAll(){
-		return boService.queryObject(DockingPreApplyDataDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(DockingPreApplyDataDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<DockingPreApplyDataDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingPreApplyDataDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(DockingPreApplyDataDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreApplyDataDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<DockingPreApplyDataDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,DockingPreApplyDataDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreApplyDataDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<DockingPreApplyDataDO> dos = boService.selectByOidCollection(oids, DockingPreApplyDataDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java
deleted file mode 100644
index 9234eee..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.DockingPreApplyDataInfoDaoI;
-import org.springblade.code.model.DockingPreApplyDataInfoDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author weidy
- * @date 2022-04-05
- */
-@Repository
-public class  DockingPreApplyDataInfoDaoImpl implements DockingPreApplyDataInfoDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = selectByPrimaryKey(oid);
-		return boService.delete(dockingPreApplyDataInfoDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(DockingPreApplyDataInfoDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<DockingPreApplyDataInfoDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public DockingPreApplyDataInfoDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		DockingPreApplyDataInfoDO record = boService.selectByOid(oid, DockingPreApplyDataInfoDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingPreApplyDataInfoDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreApplyDataInfoDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<DockingPreApplyDataInfoDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, DockingPreApplyDataInfoDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<DockingPreApplyDataInfoDO> selectAll(){
-		return boService.queryObject(DockingPreApplyDataInfoDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(DockingPreApplyDataInfoDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<DockingPreApplyDataInfoDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingPreApplyDataInfoDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(DockingPreApplyDataInfoDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreApplyDataInfoDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<DockingPreApplyDataInfoDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,DockingPreApplyDataInfoDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreApplyDataInfoDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<DockingPreApplyDataInfoDO> dos = boService.selectByOidCollection(oids, DockingPreApplyDataInfoDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java
deleted file mode 100644
index b8efb09..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.DockingPreAttrMappingDaoI;
-import org.springblade.code.model.DockingPreAttrMappingDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-@Repository
-public class DockingPreAttrMappingDaoImpl implements DockingPreAttrMappingDaoI {
-    /**
-     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-     */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-     */
-    @Autowired
-    private OsLifeCycleServiceI lifeCycleService;
-    /**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BatchCBO deleteByPrimaryKey(String oid) {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingPreAttrMappingDO dockingPreAttrMappingDO = selectByPrimaryKey(oid);
-        return boService.delete(dockingPreAttrMappingDO);
-    }
-    /**
-     * 娣诲姞鏁版嵁
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BatchCBO insert(DockingPreAttrMappingDO record) {
-        VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-        return boService.addSave(record);
-    }
-    /**
-     * 鎵归噺娣诲姞鏁版嵁
-     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-     * @return 鎵ц缁撴灉鏁�
-     */
-    @Override
-    public BatchCBO batchInsert(List<DockingPreAttrMappingDO> records) {
-        VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-        BatchCBO batchCBO = boService.batchAddSave(records);
-        return batchCBO;
-    }
-    /**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-    @Override
-    public DockingPreAttrMappingDO selectByPrimaryKey(String oid) {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingPreAttrMappingDO record = boService.selectByOid(oid, DockingPreAttrMappingDO.class);
-        if(record == null || StringUtils.isBlank(record.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return record;
-    }
-    /**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    @Override
-    public List<DockingPreAttrMappingDO> selectByPrimaryKeys(String oids) {
-        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-        return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreAttrMappingDO.class);
-
-    }
-    /**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-    @Override
-    public List<DockingPreAttrMappingDO> selectByPrimaryKeyCollection(Collection<String> oids) {
-        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-        return boService.selectByOidCollection(oids, DockingPreAttrMappingDO.class);
-    }
-    /**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-    @Override
-    public List<DockingPreAttrMappingDO> selectAll() {
-        return boService.queryObject(DockingPreAttrMappingDO.class,null);
-    }
-    /**
-     * 鏇存柊瀵硅薄
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BatchCBO updateByPrimaryKey(DockingPreAttrMappingDO record) {
-        VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-        return boService.editSave(record);
-    }
-    /**
-     * 鎵归噺鏇存柊
-     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-     * @return 鎵ц缁撴灉琛屾暟
-     */
-    @Override
-    public BatchCBO batchUpdate(List<DockingPreAttrMappingDO> records) {
-        VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-        BatchCBO batchCBO = boService.batchEditSave(records);
-        return batchCBO;
-    }
-    /**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    @Override
-    public List<DockingPreAttrMappingDO> selectByCondition(Map<String, String> conditionMap, PageHelper pageHelper) {
-        return boService.queryObject(DockingPreAttrMappingDO.class,conditionMap,pageHelper);
-    }
-    /**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-    @Override
-    public Long countByCondition(Map<String, String> conditionMap) {
-        return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreAttrMappingDO.class,conditionMap)));
-    }
-    /**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    @Override
-    public List<DockingPreAttrMappingDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
-        return boService.selectByQueryWrapper(queryWrapper,DockingPreAttrMappingDO.class);
-    }
-    /**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-    @Override
-    public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
-        return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreAttrMappingDO.class)));
-    }
-    /**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-    @Override
-    public String selectNameByOid(String oid) {
-        return selectByPrimaryKey(oid).getName();
-    }
-    /**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-    @Override
-    public BatchCBO batchDeleteByOids(Collection<String> oids) {
-        List<DockingPreAttrMappingDO> dos = boService.selectByOidCollection(oids, DockingPreAttrMappingDO.class);
-        BatchCBO batchCBO = boService.batchDelete(dos);
-        return batchCBO;
-    }
-
-    /***
-     * 鏍规嵁灞炴�т富閿壒閲忚幏鍙栧璞�
-     * @param oids 涓婚敭
-     * @return
-     */
-    @Override
-    public List<DockingPreAttrMappingDO> selectByOid(String oids){
-        VciBaseUtil.alertNotNull(oids,"涓婚敭");
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingPreAttrMappingDO.class);
-        queryWrapper.addQueryMap("oid", QueryOptionConstant.IN  + VciBaseUtil.toInSql(oids));
-        return selectByWrapper(queryWrapper);
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java
deleted file mode 100644
index 740b916..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package org.springblade.code.dao.impl;
-
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.DockingPreAttrRangeDaoI;
-import org.springblade.code.model.DockingPreAttrRangeDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-@Repository
-public class DockingPreAttrRangeDaoImpl implements DockingPreAttrRangeDaoI {
-    /**
-     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-     */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-     */
-    @Autowired
-    private OsLifeCycleServiceI lifeCycleService;
-    /**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BatchCBO deleteByPrimaryKey(String oid) {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingPreAttrRangeDO dockingPreAttrRangeDO = selectByPrimaryKey(oid);
-        return boService.delete(dockingPreAttrRangeDO);
-    }
-    /**
-     * 娣诲姞鏁版嵁
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BatchCBO insert(DockingPreAttrRangeDO record) {
-        VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-        return boService.addSave(record);
-    }
-    /**
-     * 鎵归噺娣诲姞鏁版嵁
-     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-     * @return 鎵ц缁撴灉鏁�
-     */
-    @Override
-    public BatchCBO batchInsert(List<DockingPreAttrRangeDO> records) {
-        VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-        BatchCBO batchCBO = boService.batchAddSave(records);
-        return batchCBO;
-    }
-    /**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-    @Override
-    public DockingPreAttrRangeDO selectByPrimaryKey(String oid) {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingPreAttrRangeDO record = boService.selectByOid(oid, DockingPreAttrRangeDO.class);
-        if(record == null || StringUtils.isBlank(record.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return record;
-    }
-    /**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    @Override
-    public List<DockingPreAttrRangeDO> selectByPrimaryKeys(String oids) {
-        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-        return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreAttrRangeDO.class);
-
-    }
-    /**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-    @Override
-    public List<DockingPreAttrRangeDO> selectByPrimaryKeyCollection(Collection<String> oids) {
-        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-        return boService.selectByOidCollection(oids, DockingPreAttrRangeDO.class);
-    }
-    /**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-    @Override
-    public List<DockingPreAttrRangeDO> selectAll() {
-        return boService.queryObject(DockingPreAttrRangeDO.class,null);
-    }
-    /**
-     * 鏇存柊瀵硅薄
-     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BatchCBO updateByPrimaryKey(DockingPreAttrRangeDO record) {
-        VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-        return boService.editSave(record);
-    }
-    /**
-     * 鎵归噺鏇存柊
-     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
-     * @return 鎵ц缁撴灉琛屾暟
-     */
-    @Override
-    public BatchCBO batchUpdate(List<DockingPreAttrRangeDO> records) {
-        VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-        BatchCBO batchCBO = boService.batchEditSave(records);
-        return batchCBO;
-    }
-    /**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    @Override
-    public List<DockingPreAttrRangeDO> selectByCondition(Map<String, String> conditionMap, PageHelper pageHelper) {
-        return boService.queryObject(DockingPreAttrRangeDO.class,conditionMap,pageHelper);
-    }
-    /**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-    @Override
-    public Long countByCondition(Map<String, String> conditionMap) {
-        return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreAttrRangeDO.class,conditionMap)));
-    }
-    /**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    @Override
-    public List<DockingPreAttrRangeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
-        return boService.selectByQueryWrapper(queryWrapper,DockingPreAttrRangeDO.class);
-    }
-    /**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-    @Override
-    public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
-        return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreAttrRangeDO.class)));
-    }
-    /**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-    @Override
-    public String selectNameByOid(String oid) {
-        return selectByPrimaryKey(oid).getName();
-    }
-    /**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-    @Override
-    public BatchCBO batchDeleteByOids(Collection<String> oids) {
-        List<DockingPreAttrRangeDO> dos = boService.selectByOidCollection(oids, DockingPreAttrRangeDO.class);
-        BatchCBO batchCBO = boService.batchDelete(dos);
-        return batchCBO;
-    }
-
-    /***
-     * 鏍规嵁灞炴�т富閿壒閲忚幏鍙栧璞�
-     * @param attrOid 涓婚敭
-     * @return
-     */
-    @Override
-    public List<DockingPreAttrRangeDO> selectByAttrOid(String attrOid){
-        VciBaseUtil.alertNotNull(attrOid,"灞炴�т富閿�");
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingPreAttrRangeDO.class);
-        queryWrapper.addQueryMap("jmetaListId", QueryOptionConstant.IN  + VciBaseUtil.toInSql(attrOid));
-        return selectByWrapper(queryWrapper);
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java
deleted file mode 100644
index 2d7c71b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.springblade.code.dao.impl;
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.DockingTaskDaoI;
-import org.springblade.code.model.DockingTaskDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-03-28
- */
-@Repository
-public class  DockingTaskDaoImpl implements DockingTaskDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        DockingTaskDO dockingTaskDO = selectByPrimaryKey(oid);
-		return boService.delete(dockingTaskDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(DockingTaskDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<DockingTaskDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public DockingTaskDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		DockingTaskDO record = boService.selectByOid(oid, DockingTaskDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingTaskDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingTaskDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<DockingTaskDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, DockingTaskDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<DockingTaskDO> selectAll(){
-		return boService.queryObject(DockingTaskDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(DockingTaskDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<DockingTaskDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<DockingTaskDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(DockingTaskDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingTaskDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<DockingTaskDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,DockingTaskDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingTaskDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<DockingTaskDO> dos = boService.selectByOidCollection(oids, DockingTaskDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java
deleted file mode 100644
index 4aeef3a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.SysIntAuthorityDaoI;
-import org.springblade.code.model.SysIntAuthorityDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author lihang
- * @date 2022-03-07
- */
-@Repository
-public class  SysIntAuthorityDaoImpl implements SysIntAuthorityDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        SysIntAuthorityDO sysIntAuthorityDO = selectByPrimaryKey(oid);
-		return boService.delete(sysIntAuthorityDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(SysIntAuthorityDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<SysIntAuthorityDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public SysIntAuthorityDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		SysIntAuthorityDO record = boService.selectByOid(oid, SysIntAuthorityDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntAuthorityDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntAuthorityDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<SysIntAuthorityDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, SysIntAuthorityDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<SysIntAuthorityDO> selectAll(){
-		return boService.queryObject(SysIntAuthorityDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(SysIntAuthorityDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<SysIntAuthorityDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntAuthorityDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(SysIntAuthorityDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntAuthorityDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<SysIntAuthorityDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,SysIntAuthorityDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntAuthorityDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<SysIntAuthorityDO> dos = boService.selectByOidCollection(oids, SysIntAuthorityDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java
deleted file mode 100644
index 6b53749..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.SysIntBaseDaoI;
-import org.springblade.code.model.SysIntBaseDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author lihang
- * @date 2022-03-07
- */
-@Repository
-public class  SysIntBaseDaoImpl implements SysIntBaseDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        SysIntBaseDO sysIntBaseDO = selectByPrimaryKey(oid);
-		return boService.delete(sysIntBaseDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(SysIntBaseDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<SysIntBaseDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public SysIntBaseDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		SysIntBaseDO record = boService.selectByOid(oid, SysIntBaseDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntBaseDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntBaseDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<SysIntBaseDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, SysIntBaseDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<SysIntBaseDO> selectAll(){
-		return boService.queryObject(SysIntBaseDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(SysIntBaseDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<SysIntBaseDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntBaseDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(SysIntBaseDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntBaseDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<SysIntBaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,SysIntBaseDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntBaseDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<SysIntBaseDO> dos = boService.selectByOidCollection(oids, SysIntBaseDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java
deleted file mode 100644
index 9f3a946..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package org.springblade.code.dao.impl;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.SysIntHeaderDaoI;
-import org.springblade.code.model.SysIntHeaderDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-import static org.springblade.code.constant.MdmDuckingConstant.FLAG_FAIL;
-
-
-/**
- * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-04-11
- */
-@Repository
-public class  SysIntHeaderDaoImpl implements SysIntHeaderDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        SysIntHeaderDO sysIntHeaderDO = selectByPrimaryKey(oid);
-		return boService.delete(sysIntHeaderDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(SysIntHeaderDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<SysIntHeaderDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public SysIntHeaderDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		SysIntHeaderDO record = boService.selectByOid(oid, SysIntHeaderDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntHeaderDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntHeaderDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<SysIntHeaderDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, SysIntHeaderDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<SysIntHeaderDO> selectAll(){
-		return boService.queryObject(SysIntHeaderDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(SysIntHeaderDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<SysIntHeaderDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntHeaderDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(SysIntHeaderDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntHeaderDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<SysIntHeaderDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,SysIntHeaderDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntHeaderDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<SysIntHeaderDO> dos = boService.selectByOidCollection(oids, SysIntHeaderDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-	//==
-
-	/**
-	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
-	 * @param sysinfoOid 涓婚敭
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<SysIntHeaderDO> selectBySysinfoOid(String sysinfoOid){
-		VciBaseUtil.alertNotNull(sysinfoOid,"sysinfo涓婚敭");
-		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntHeaderDO.class);
-		queryWrapper.addQueryMap("infoOid",sysinfoOid);
-		return selectByWrapper(queryWrapper);
-	}
-
-	/**
-	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
-	 * @param records
-	 */
-	@Override
-	public BaseResult updateSysinfoHeader(List<SysIntHeaderDO> records){
-
-		if(records.size()<1){
-			return BaseResult.fail("sysinfoOid涓嶈兘涓虹┖!");
-		}
-		String sysinfoOid = records.get(0).getInfoOid();
-
-		List<SysIntHeaderDO> sysIntHeaderDOList = selectBySysinfoOid(sysinfoOid);
-		for (SysIntHeaderDO sysIntHeaderDO:sysIntHeaderDOList){
-				sysIntHeaderDO.setUsedflag(FLAG_FAIL);
-		}
-
-		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-		//鍏堜綔搴熶互鍓嶇殑
-		BatchCBO batchCBO_batchUpdate = batchUpdate(sysIntHeaderDOList);
-		//鍐嶆柊澧�
-		BatchCBO batchCBO_batchInsert = batchInsert(records);
-		batchCBO_batchUpdate.copyFromOther(batchCBO_batchInsert);
-
-		WebUtil.setPersistence(true);//鎵ц淇濆瓨
-		boService.persistenceBatch(batchCBO_batchUpdate);//涓�璧锋墽琛屼繚瀛�
-		return BaseResult.success("鎵归噺鎵ц鎴愬姛");
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java
deleted file mode 100644
index 199cae4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.springblade.code.dao.impl;
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.SysIntInfoDaoI;
-import org.springblade.code.model.SysIntInfoDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
-
-/**
- * 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
- *
- * @author lihang
- * @date 2022-03-07
- */
-@Repository
-public class  SysIntInfoDaoImpl implements SysIntInfoDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        SysIntInfoDO sysIntInfoDO = selectByPrimaryKey(oid);
-		return boService.delete(sysIntInfoDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(SysIntInfoDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<SysIntInfoDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public SysIntInfoDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		SysIntInfoDO record = boService.selectByOid(oid, SysIntInfoDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntInfoDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntInfoDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<SysIntInfoDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, SysIntInfoDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<SysIntInfoDO> selectAll(Map conditonMap){
-		return boService.queryObject(SysIntInfoDO.class,conditonMap);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(SysIntInfoDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<SysIntInfoDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntInfoDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(SysIntInfoDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntInfoDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<SysIntInfoDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,SysIntInfoDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntInfoDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<SysIntInfoDO> dos = boService.selectByOidCollection(oids, SysIntInfoDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java
deleted file mode 100644
index e2f7ef5..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java
+++ /dev/null
@@ -1,256 +0,0 @@
-package org.springblade.code.dao.impl;
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.OsLifeCycleServiceI;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.code.dao.SysIntParamDaoI;
-import org.springblade.code.model.SysIntParamDO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-import static org.springblade.code.constant.MdmDuckingConstant.FLAG_FAIL;
-
-
-/**
- * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
- *
- * @author weidy
- * @date 2022-04-11
- */
-@Repository
-public class  SysIntParamDaoImpl implements SysIntParamDaoI {
-
-	/**
-	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-	*/
-	@Autowired
-	private WebBoServiceI boService;
-
-	/**
-	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
-	*/
-	@Autowired
-	private OsLifeCycleServiceI lifeCycleService;
-
-	/**
-     * 浣跨敤涓婚敭鍒犻櫎
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO deleteByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        SysIntParamDO sysIntParamDO = selectByPrimaryKey(oid);
-		return boService.delete(sysIntParamDO);
-	}
-
-	/**
-     * 娣诲姞鏁版嵁
-     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO insert(SysIntParamDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
-		return boService.addSave(record);
-	}
-
-	/**
-	* 鎵归噺娣诲姞鏁版嵁
-	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉鏁�
-	*/
-	@Override
-	public BatchCBO batchInsert(List<SysIntParamDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
-		BatchCBO batchCBO = boService.batchAddSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鏌ヨ
-     * @param oid 鏁版嵁涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     */
-	@Override
-	public SysIntParamDO selectByPrimaryKey(String oid){
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		SysIntParamDO record = boService.selectByOid(oid, SysIntParamDO.class);
-		if(record == null || StringUtils.isBlank(record.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return record;
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
-     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntParamDO> selectByPrimaryKeys(String oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntParamDO.class);
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
-     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
-     * @return 涓氬姟瀵硅薄
-     */
-	@Override
-	public List<SysIntParamDO> selectByPrimaryKeyCollection(Collection<String> oids){
-		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
-		return boService.selectByOidCollection(oids, SysIntParamDO.class);
-	}
-
-	/**
-     * 鏌ヨ鎵�鏈夊垎绫�
-     * @return 鏌ヨ缁撴灉
-     */
-	@Override
-	public List<SysIntParamDO> selectAll(){
-		return boService.queryObject(SysIntParamDO.class,null);
-	}
-
-	/**
-     * 鏇存柊瀵硅薄
-     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
-     * @return 鎵ц缁撴灉
-     */
-	@Override
-	public BatchCBO updateByPrimaryKey(SysIntParamDO record){
-		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
-		return boService.editSave(record);
-    }
-	/**
-	* 鎵归噺鏇存柊
-	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
-	* @return 鎵ц缁撴灉琛屾暟
-	*/
-	@Override
-	public BatchCBO batchUpdate(List<SysIntParamDO> records){
-		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
-		BatchCBO batchCBO = boService.batchEditSave(records);
-		return batchCBO;
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
-     * @param conditionMap 鏌ヨ鏉′欢锛�
-     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-	@Override
-	public List<SysIntParamDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
-		return boService.queryObject(SysIntParamDO.class,conditionMap,pageHelper);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByCondition(Map< String,String> conditionMap){
-		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntParamDO.class,conditionMap)));
-	}
-
-	/**
-	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
-	 * @param queryWrapper 鏌ヨ灏佽鍣�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<SysIntParamDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
-		return boService.selectByQueryWrapper(queryWrapper,SysIntParamDO.class);
-	}
-
-	/**
-     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鎬绘暟
-     */
-	@Override
-	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
-		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntParamDO.class)));
-	}
-
-	/**
-     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
-     * @param oid 涓婚敭
-     * @return 涓枃鍚嶇О
-     */
-	@Override
-	public String selectNameByOid(String oid){
-		return selectByPrimaryKey(oid).getName();
-	}
-
-
-
-	/**
-     * 鎵归噺鍒犻櫎瀵硅薄
-     * @param oids 瀵硅薄鐨勪富閿泦鍚�
-     * @return 鍙楀奖鍝嶇殑琛屾暟
-     */
-	@Override
-	public BatchCBO batchDeleteByOids(Collection<String> oids){
-		List<SysIntParamDO> dos = boService.selectByOidCollection(oids, SysIntParamDO.class);
-		BatchCBO batchCBO = boService.batchDelete(dos);
-		return batchCBO;
-	}
-
-	//==
-
-	/**
-	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
-	 * @param sysinfoOid 涓婚敭
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	public List<SysIntParamDO> selectBySysinfoOid(String sysinfoOid){
-		VciBaseUtil.alertNotNull(sysinfoOid,"sysinfo涓婚敭");
-		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntParamDO.class);
-		queryWrapper.addQueryMap("infoOid",sysinfoOid);
-		return selectByWrapper(queryWrapper);
-	}
-
-	/**
-	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
-	 * @param records
-	 */
-	public BaseResult updateSysinfoParam(List<SysIntParamDO> records){
-
-		if(records.size()<1){
-			return BaseResult.fail("sysinfoOid涓嶈兘涓虹┖!");
-		}
-		String sysinfoOid = records.get(0).getInfoOid();
-
-		List<SysIntParamDO> sysIntParamDOList = selectBySysinfoOid(sysinfoOid);
-		for (SysIntParamDO sysIntParamDO:sysIntParamDOList){
-			sysIntParamDO.setUsedflag(FLAG_FAIL);
-		}
-
-		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-		//鍏堜綔搴熶互鍓嶇殑
-		BatchCBO batchCBO_batchUpdate = batchUpdate(sysIntParamDOList);
-		//鍐嶆柊澧�
-		BatchCBO batchCBO_batchInsert = batchInsert(records);
-		batchCBO_batchUpdate.copyFromOther(batchCBO_batchInsert);
-
-		WebUtil.setPersistence(true);//鎵ц淇濆瓨
-		boService.persistenceBatch(batchCBO_batchUpdate);//涓�璧锋墽琛屼繚瀛�
-		return BaseResult.success("鎵归噺鎵ц鎴愬姛");
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java
deleted file mode 100644
index b840bba..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 妯℃澘鐨勬寜閽敤閫�
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_TEMPLATE_BUTTON_USE,text = "妯℃澘鐨勬寜閽敤閫�",description = "")
-public enum CodeButtonUseEnum implements BaseEnum {
-
-    /**
-     * 缂栫爜鐢宠
-     */
-    ORDER("code_temp_button_use_order","缂栫爜鐢宠"),
-
-    /**
-     * 缂栫爜淇敼
-     */
-    MODIFY("code_temp_button_use_modify","缂栫爜淇敼"),
-
-    /**
-     * 缂栫爜鍥炴敹
-     */
-    DELETE("code_temp_button_use_delete","缂栫爜鍥炴敹"),
-
-    /**
-     * 鏌ヨ
-     */
-    QUERY("code_temp_button_use_query","鏌ヨ");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeButtonUseEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeButtonUseEnum forValue(String value) {
-        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java
deleted file mode 100644
index b063833..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鍒嗙被鐨勬祦绋嬬殑鐢ㄩ��
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,text = "鍒嗙被涓殑娴佺▼妯℃澘鐢ㄩ��",description = "")
-public enum CodeClassifyProcessUseEnum implements BaseEnum {
-
-    /**
-     * 鐢宠
-     */
-    ORDER("code_cls_flow_use_order","鐢宠"),
-
-    /**
-     * 淇敼
-     */
-    MODIFY("code_cls_flow_use_modify","淇敼"),
-
-    /**
-     * 鍥炴敹
-     */
-    DELETE("code_cls_flow_use_delete","鍥炴敹"),
-
-    /**
-     * 鍐荤粨
-     */
-    FREEZE("code_cls_flow_use_freeze","鍐荤粨"),
-
-    /**
-     * 瑙e喕
-     */
-    UNFREEZE("code_cls_flow_use_unfreeze","瑙e喕");
-
-//    /**
-//     * 鍏朵粬
-//     */
-//    OTHER("code_cls_flow_use_other","鍏朵粬");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeClassifyProcessUseEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeClassifyProcessUseEnum forValue(String value) {
-        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java
deleted file mode 100644
index 292f3d7..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鎴彇绫诲瀷
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_CUT_TYPE,text = "鍊兼埅鍙栫被鍨�",description = "")
-public enum CodeCutTypeEnum implements BaseEnum {
-
-    /**
-     * 涓嶆埅鍙�
-     */
-    NONE("code_cut_none","涓嶆埅鍙�"),
-
-    /**
-     * 宸︽埅鍙�
-     */
-    LEFT("code_cut_left","宸︽埅鍙�"),
-
-    /**
-     * 鍙虫埅鍙�
-     */
-    RIGHT("code_level_right","鍙虫埅鍙�");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeCutTypeEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeCutTypeEnum forValue(String value) {
-        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java
deleted file mode 100644
index 5f56418..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鍙栧�肩被鍨�
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_GET_VALUE_TYPE,text = "涓绘暟鎹腑鍙栧�肩被鍨�",description = "")
-public enum CodeGetValueTypeEnum implements BaseEnum {
-
-    /**
-     * 褰撳墠鍒嗙被浠e彿鍊�
-     */
-    CURRENT("code_get_value_current","褰撳墠鍒嗙被浠e彿鍊�"),
-
-    /**
-     * 鍚戜笂閬嶅巻鍏ㄩ儴鐖朵唬鍙风殑鍚堝苟鍊�
-     */
-    TOP("code_get_value_all_up","鍚戜笂閬嶅巻鍏ㄩ儴鐖朵唬鍙风殑鍚堝苟鍊�");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeGetValueTypeEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeGetValueTypeEnum forValue(String value) {
-        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java
deleted file mode 100644
index 7ae00fa..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 灞傜骇鐮佹鐨勫眰绾х被鍨�
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_LEVEL_TYPE,text = "灞傜骇鐮佹鐨勫眰绾х被鍨�",description = "")
-public enum CodeLevelTypeEnum implements BaseEnum {
-
-    /**
-     * 鎸囧畾灞傜骇
-     */
-    SPECIAL("code_level_special","鎸囧畾灞傜骇"),
-
-//    /**
-//     * 浠绘剰灞傜骇
-//     */
-//    ANY("code_level_any","浠绘剰灞傜骇"),
-
-    /**
-     * 鏈�灏忓眰绾�
-     */
-    MIN("code_level_min","鏈�灏忓眰绾�");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeLevelTypeEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeLevelTypeEnum forValue(String value) {
-        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java
deleted file mode 100644
index 49c9d32..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鏄犲皠瑙勫垯绫诲瀷
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_MAP_RULE_TYPE,text = "鏄犲皠瑙勫垯绫诲瀷",description = "")
-public enum CodeMapRuleTypeEnum implements BaseEnum {
-
-    /**
-     * 闆嗗洟鐮佸鍑�
-     */
-    GROUP_EXPORT("code_map_group_export","闆嗗洟鐮佸鍑�"),
-
-    /**
-     * 闆嗗洟鐮佸鍏�
-     */
-    GROUP_IMPORT("code_map_group_import","闆嗗洟鐮佸鍏�"),
-
-    /**
-     * 鎵归噺鐢宠
-     */
-    BATCH_ORDER("code_map_batch_order","鎵归噺鐢宠"),
-
-    /**
-     * 鍏朵粬
-     */
-    OTHER("code_map_other","鍏朵粬"),
-
-    /**
-     * 鍘嗗彶鏁版嵁瀵煎叆
-     */
-    HISTORY_DATA_IMPORT("code_map_history_import","鍘嗗彶鏁版嵁瀵煎叆");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeMapRuleTypeEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeMapRuleTypeEnum forValue(String value) {
-        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java
deleted file mode 100644
index 16ee86a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鐮佹闀垮害鎺у埗绫诲瀷
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_SEC_LENGTH,text = "鐮佹闀垮害绫诲瀷",description = "")
-public enum CodeSecLengthTypeEnum implements BaseEnum {
-
-    /**
-     * 鍥哄畾闀垮害
-     */
-    STATIC("code_sec_length_static","鍥哄畾闀垮害"),
-
-    /**
-     * 鍙彉闀垮害
-     */
-    TOOLBAR("code_sec_length_variable","鍙彉闀垮害");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeSecLengthTypeEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeSecLengthTypeEnum forValue(String value) {
-        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java
deleted file mode 100644
index f03d7ee..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鐮佹鐨勭被鍨�
- * @author weidy
- * @date 2022-1-20
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_SEC_TYPE,text = "鐮佹鐨勭被鍨�",description = "")
-public enum CodeSecTypeEnum implements BaseEnum {
-
-    /**
-     * 鍥哄畾鐮佹
-     */
-    CODE_FIXED_SEC("codefixedsec","鍥哄畾鐮佹"),
-
-    /**
-     * 鍙彉鐮佹
-     */
-    CODE_VARIABLE_SEC("codevariablesec","鍙彉鐮佹"),
-    /**
-     * 鏃ユ湡鐮佹
-     */
-    CODE_DATE_SEC("codedatasec","鏃ユ湡鐮佹"),
-    /**
-     * 鍒嗙被鐮佹
-     */
-    CODE_CLASSIFY_SEC("codeclassifysec","鍒嗙被鐮佹"),
-    /**
-     * 灞炴�х爜娈�
-     */
-    CODE_ATTR_SEC("codeattrsec","灞炴�х爜娈�"),
-    /**
-     * 娴佹按鐮佹
-     */
-    CODE_SERIAL_SEC("codeserialsec","娴佹按鐮佹"),
-
-    /**
-     * 灞傜骇鐮佹
-     */
-    CODE_LEVEL_SEC("codelevelsec","灞傜骇鐮佹"),
-
-    /**
-     * 寮曠敤鐮佹
-     */
-    CODE_REFER_SEC("coderefersec","寮曠敤鐮佹")
-    ;
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeSecTypeEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeSecTypeEnum forValue(String value) {
-        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java
deleted file mode 100644
index 5bb54a8..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.springblade.code.enumpack;
-
-
-import com.vci.starter.web.annotation.VciEnum;
-import com.vci.starter.web.enumpck.BaseEnum;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鎸夐挳浣跨敤浣嶇疆
- * @author weidy
- * @date 2022-1-17
- */
-@VciEnum(name = MdmEnumIdConstant.CODE_BUTTON_POSITION,text = "鎸夐挳鐨勪娇鐢ㄤ綅缃�",description = "")
-public enum CodeUseButtonPositionTypeEnum implements BaseEnum {
-
-    /**
-     * 鍦ㄨ〃鏍间腑浣跨敤
-     */
-    TABLE("code_button_table","鍦ㄨ〃鏍间腑浣跨敤"),
-
-    /**
-     * 宸ュ叿鏍�
-     */
-    TOOLBAR("code_button_toolbar","宸ュ叿鏍�");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeUseButtonPositionTypeEnum(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeUseButtonPositionTypeEnum forValue(String value) {
-        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java
deleted file mode 100644
index 80a05db..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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
deleted file mode 100644
index cb2deaf..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationDataFlowTypeEnum.java
+++ /dev/null
@@ -1,124 +0,0 @@
-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
deleted file mode 100644
index 845df6e..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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
deleted file mode 100644
index 532f635..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestMethodEnum.java
+++ /dev/null
@@ -1,136 +0,0 @@
-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
deleted file mode 100644
index ef81be4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestTypeEnum.java
+++ /dev/null
@@ -1,135 +0,0 @@
-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
deleted file mode 100644
index 58fa7b9..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/sysIntegrationPushTypeEnum.java
+++ /dev/null
@@ -1,122 +0,0 @@
-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
deleted file mode 100644
index 8d9b3b8..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package org.springblade.code.lifecycle;
-
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-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;
-
-/**
- * 鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡
- * @author weidy
- * @date 2022-3-1
- */
-@VciLifeCycle(name = MdmLifeCycleConstant.CODE_ALL_CODE_LC,text = "鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
-        translations={
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_OBSOLETED,name = "鐮佸�煎洖鏀跺垹闄ゆ暟鎹�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,name = "鎻愪氦瀹℃壒"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,name = "瀹℃壒涓嶉�氳繃鎴栬�呯粓姝�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "瀹℃壒閫氳繃"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍥炴敹"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鎵ц鍋滅敤"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍋滅敤鍚庡洖鏀�")
-        }
-)
-public enum CodeAllCodeLC implements BaseEnum {
-
-    /**
-     * 缂栬緫涓�
-     */
-    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
-
-    /**
-     * 瀹℃壒涓�
-     */
-    AUDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,"瀹℃壒涓�"),
-
-    /**
-     * 宸插彂甯�
-     */
-    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
-
-    /**
-     * 鐮佸�煎洖鏀�
-     */
-    TASK_BACK(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,"鐮佸�煎洖鏀�"),
-
-    /**
-     * 鐮佸�兼暟鎹攢姣�
-     */
-    OBSOLETED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_OBSOLETED,"鐮佸�兼暟鎹攢姣�"),
-
-    /**
-     * 鍋滅敤
-     */
-    DISABLE(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeAllCodeLC(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeAllCodeLC forValue(String value) {
-        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java
deleted file mode 100644
index 6c18f8a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.springblade.code.lifecycle;
-
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-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;
-
-/**
- * 鍒嗙被妯℃澘鐨勭敓鍛藉懆鏈�
- * @author weidy
- * @date 2022-2-11
- */
-@VciLifeCycle(name = MdmLifeCycleConstant.CODE_CLASSIFY_TEMPLATE_LC,text = "鍒嗙被涓殑娴佺▼妯℃澘鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
-        translations={
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "浣滃簾"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�")
-        }
-)
-public enum CodeClassifyTemplateLC implements BaseEnum {
-
-    /**
-     * 缂栬緫涓�
-     */
-    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
-
-    /**
-     * 宸插彂甯�
-     */
-    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
-
-    /**
-     * 鍋滅敤
-     */
-    DISABLED(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeClassifyTemplateLC(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeClassifyTemplateLC forValue(String value) {
-        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java
deleted file mode 100644
index d50a188..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package org.springblade.code.lifecycle;
-
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-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;
-
-/**
- * 涓婚搴撴暟鎹殑榛樿鐢熷懡鍛ㄦ湡
- * @author weidy
- * @date 2022-3-2
- */
-@VciLifeCycle(name = MdmLifeCycleConstant.CODE_DEFAULT_LC,text = "涓婚搴撴暟鎹殑榛樿鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
-        translations={
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,name = "鎻愪氦瀹℃壒"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,name = "瀹℃壒涓嶉�氳繃鎴栬�呯粓姝�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "瀹℃壒閫氳繃"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍥炴敹"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鎵ц鍋滅敤"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍋滅敤鍚庡洖鏀�")
-        }
-)
-public enum CodeDefaultLC implements BaseEnum {
-
-    /**
-     * 缂栬緫涓�
-     */
-    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
-
-    /**
-     * 瀹℃壒涓�
-     */
-    AUDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,"瀹℃壒涓�"),
-
-    /**
-     * 宸插彂甯�
-     */
-    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
-
-    /**
-     * 鐮佸�煎洖鏀�
-     */
-    TASK_BACK(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,"鐮佸�煎洖鏀�"),
-    /**
-     * 鍋滅敤
-     */
-    DISABLE(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
-
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeDefaultLC(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeDefaultLC forValue(String value) {
-        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java
deleted file mode 100644
index 2b74f4b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.springblade.code.lifecycle;
-
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-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;
-
-/**
- * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
- * @author weidy
- * @date 2022-2-23
- */
-@VciLifeCycle(name = MdmLifeCycleConstant.CODE_RULE_LC,text = "缂栫爜瑙勫垯鏉跨敓鍛藉懆鏈�",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
-        translations={
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "浣滃簾"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
-            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�")
-        }
-)
-public enum CodeRuleLC implements BaseEnum {
-
-    /**
-     * 缂栬緫涓�
-     */
-    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
-
-    /**
-     * 宸插彂甯�
-     */
-    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
-
-    /**
-     * 鍋滅敤
-     */
-    DISABLED(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
-
-    /**
-     * 鏋氫妇鐨勫��
-     */
-    private String value;
-
-    /**
-     * 鏋氫妇鏄剧ず鏂囨湰
-     */
-    private String text;
-
-    /**
-     * 鑾峰彇鏋氫妇鍊�
-     *
-     * @return 鏋氫妇鍊�
-     */
-    @Override
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * 璁剧疆鏋氫妇鍊�
-     *
-     * @param value 鏋氫妇鍊�
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-     *
-     * @return 鏄剧ず鏂囨湰
-     */
-    @Override
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * 璁剧疆鏄剧ず鏂囨湰
-     *
-     * @param text 鏄剧ず鏂囨湰
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param value 鍊�
-     * @param text  鏄剧ず鏂囨湰
-     */
-    private CodeRuleLC(String value, String text) {
-        this.value = value;
-        this.text = text;
-    }
-
-    /**
-     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-     *
-     * @param text 鍚嶇О
-     * @return 鏋氫妇鍊�
-     */
-    public static String getValueByText(String text) {
-        for (CodeRuleLC wenum : CodeRuleLC.values()) {
-            if (wenum.getText().equalsIgnoreCase(text)) {
-                return wenum.getValue();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鍚嶇О
-     */
-    public static String getTextByValue(String value) {
-        for (CodeRuleLC wenum : CodeRuleLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum.getText();
-            }
-        }
-        return "";
-    }
-
-    /**
-     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-     *
-     * @param value 鏋氫妇鍊�
-     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-     */
-    public static CodeRuleLC forValue(String value) {
-        for (CodeRuleLC wenum : CodeRuleLC.values()) {
-            if (wenum.getValue().equalsIgnoreCase(value)) {
-                return wenum;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java
deleted file mode 100644
index 15c17e4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.Transient;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import org.springblade.code.constant.MdmLifeCycleConstant;
-
-/**
- * 鍏ㄩ儴鐨勭爜鍊�
- * @author weidy
- * @date 2022-3-1
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_ALL_CODE,text = "鎵�鏈夌殑鐮佸��",lifeCycle = MdmLifeCycleConstant.CODE_ALL_CODE_LC,
-        startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED)
-public class CodeAllCodeDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 5020487634341415429L;
-    /**
-     * 鍒嗙被鐨勪富閿�
-     */
-    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勪富閿�")
-    private String codeClassifyOid;
-
-    /**
-     * 瑙勫垯鐨勪富閿�
-     */
-    @Column(nullable = false,columnDefinition = "瑙勫垯鐨勪富閿�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
-    private String codeRuleOid;
-
-    /**
-     * 瑙勫垯鐨勫悕绉�
-     */
-    @Transient
-    private String codeRuleOidName;
-
-    /**
-     * 瀛樺偍鏁版嵁鐨勬ā鏉�
-     */
-    @Column(columnDefinition = "鏁版嵁妯℃澘")
-    private String codeClassifyTemplateOid;
-
-    /**
-     * 鐮佸�肩殑鍊�
-     */
-    @Column(columnDefinition = "鐮佸�肩殑鍊�")
-    private String id;
-
-    /**
-     * 鍒涘缓缂栫爜鐨勪笟鍔$被鍨�
-     */
-    @Column(columnDefinition = "鍒涘缓缂栫爜鐨勪笟鍔$被鍨�")
-    private String createCodeBtm;
-
-    /**
-     * 鍒涘缓缂栫爜鐨勪笟鍔℃暟鎹富閿�
-     */
-    @Column(columnDefinition = "鍒涘缓缂栫爜鐨勬暟鎹富閿�")
-    private String createCodeOid;
-
-    /***
-     * 娴佹按渚濊禆
-     */
-    @Column(length = 4000,columnDefinition = "娴佹按渚濊禆")
-    private String serialUnit;
-
-    /**
-     * 娌℃湁濉厖鍓嶇殑娴佹按鍙�
-     */
-    @Column(columnDefinition = "娌℃湁濉厖鍓嶇殑娴佹按鍙�",length = 4000)
-    private String unFillSerial;
-
-    public String getSerialUnit() {
-        return serialUnit;
-    }
-
-    public void setSerialUnit(String serialUnit) {
-        this.serialUnit = serialUnit;
-    }
-
-    public String getUnFillSerial() {
-        return unFillSerial;
-    }
-
-    public void setUnFillSerial(String unFillSerial) {
-        this.unFillSerial = unFillSerial;
-    }
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-
-    public String getCodeRuleOid() {
-        return codeRuleOid;
-    }
-
-    public void setCodeRuleOid(String codeRuleOid) {
-        this.codeRuleOid = codeRuleOid;
-    }
-
-    public String getCodeClassifyTemplateOid() {
-        return codeClassifyTemplateOid;
-    }
-
-    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
-        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getCreateCodeBtm() {
-        return createCodeBtm;
-    }
-
-    public void setCreateCodeBtm(String createCodeBtm) {
-        this.createCodeBtm = createCodeBtm;
-    }
-
-    public String getCreateCodeOid() {
-        return createCodeOid;
-    }
-
-    public void setCreateCodeOid(String createCodeOid) {
-        this.createCodeOid = createCodeOid;
-    }
-
-    public String getCodeRuleOidName() {
-        return codeRuleOidName;
-    }
-
-    public void setCodeRuleOidName(String codeRuleOidName) {
-        this.codeRuleOidName = codeRuleOidName;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeAllCodeDO{" +
-                "codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", codeRuleOid='" + codeRuleOid + '\'' +
-                ", codeRuleOidName='" + codeRuleOidName + '\'' +
-                ", codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
-                ", id='" + id + '\'' +
-                ", createCodeBtm='" + createCodeBtm + '\'' +
-                ", createCodeOid='" + createCodeOid + '\'' +
-                ", serialUnit='" + serialUnit + '\'' +
-                ", unFillSerial='" + unFillSerial + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java
deleted file mode 100644
index 1f6aba1..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java
+++ /dev/null
@@ -1,728 +0,0 @@
-package org.springblade.code.model;
-
-import org.springblade.code.constant.MdmEnumIdConstant;
-import com.vci.starter.web.annotation.*;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.enumpck.VciFieldTypeEnum;
-import com.vci.starter.web.model.BaseModel;
-import com.vci.web.constant.EnumIdConstant;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-
-/**
- * 鍩虹鐮佹鐨勪俊鎭�
- * 鏂逛究鍦ㄥ悓涓�涓〉闈㈤噷鏄剧ず鎵�鏈夌殑鐮佹
- * @author weidy
- * @date 2022-1-18
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_BASIC_SEC,text = "鐮佹鍩虹淇℃伅",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeBasicSecDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 1803476098497357359L;
-    /**
-     * 鐮佹淇℃伅
-     */
-    @Column(columnDefinition = "鐮佹淇℃伅",nullable = false)
-    private String id;
-
-    /**
-     * 鐮佹鍚嶇О
-     */
-    @Column(columnDefinition = "鐮佹鍚嶇О",nullable = false)
-    private String name;
-
-    /**
-     * 鐮佹绫诲瀷
-     */
-    @Column(columnDefinition = "鐮佹绫诲瀷",nullable = false)
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_SEC_TYPE,showTextField = "secTypeText")
-    private String secType;
-
-    /**
-     * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
-     */
-    @Transient()
-    private String secTypeText;
-
-    /**
-     * 鎵�灞炵紪鐮佽鍒�
-     */
-    @Column(columnDefinition = "鎵�灞炵紪鐮佽鍒�",nullable = false)
-    private String pkCodeRule;
-
-    /**
-     * 鐮佹鎺掑簭鍙�
-     */
-    @Column(columnDefinition = "orderNum",nullable = false)
-    private Integer orderNum;
-
-    /**
-     * 寮曠敤鐨勫睘鎬х殑鏂囨湰
-     */
-    @Column(columnDefinition = "寮曠敤鐨勫睘鎬у悕绉�")
-    private String referAttributeName;
-
-    /**
-     * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
-     */
-    @Column(columnDefinition = "寮曠敤鐨勫睘鎬ц嫳鏂�")
-    private String referAttributeId;
-
-    /**
-     * 鍙栧�艰鍒�
-     */
-    @Column(columnDefinition = "鍙栧�艰鍒�",length = 4000)
-    private String getValueClass ;
-
-    //鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
-    /**
-     * 鏃ユ湡鏍煎紡
-     */
-    @Column(columnDefinition = "鏃ユ湡鏍煎紡")
-    private String codeDateFormatStr;
-
-    /**
-     * 鐮佹闀垮害绫诲瀷
-     */
-    @Column(columnDefinition = "鐮佹闀垮害绫诲瀷")
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_SEC_LENGTH,showTextField = "secLengthTypeText")
-    private String codeSecLengthType;
-
-    /**
-     * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
-     */
-    @Transient(referColumn = MdmEnumIdConstant.CODE_SEC_LENGTH + "_secLengthType")
-    private String codeSecLengthTypeText;
-
-    /**
-     * 鐮佹鐨勯暱搴�
-     */
-    @Column(columnDefinition = "鐮佹鐨勯暱搴�")
-    private String codeSecLength;
-
-    /**
-     * 灞傜骇绫诲瀷
-     */
-    @Column(columnDefinition = "灞傜骇绫诲瀷")
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_LEVEL_TYPE,showTextField = "codeLevelTypeText")
-    private String codeLevelType;
-
-    /**
-     * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
-     */
-    @Transient(referColumn = MdmEnumIdConstant.CODE_LEVEL_TYPE + "_codeLevelType")
-    private String codeLevelTypeText;
-
-    /**
-     * 灞傜骇鐨勫��
-     */
-    @Column(columnDefinition = "灞傜骇鐨勫��")
-    private Integer codeLevelValue;
-
-    /**
-     * 鍊兼埅鍙栭暱搴�
-     */
-    @Column(columnDefinition = "鍊兼埅鍙栭暱搴�")
-    private Integer valueCutLength;
-
-    /**
-     * 瀛楃鎴彇绫诲瀷
-     */
-    @Column(columnDefinition = "瀛楃鎴彇绫诲瀷")
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_CUT_TYPE,showTextField = "valueCutTypeText")
-    private String valueCutType;
-
-    /**
-     * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
-     */
-    @Transient
-    private String valueCutTypeText;
-
-    /**
-     * 鍙栧�肩被鍨�
-     */
-    @Column(columnDefinition = "鍙栧�肩被鍨�")
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_GET_VALUE_TYPE,showTextField = "codeGetValueTypeText")
-    private String codeGetValueType;
-
-    /**
-     * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
-     */
-    @Transient
-    private String codeGetValueTypeText;
-
-    /**
-     * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
-     */
-    @Column(columnDefinition = "寮曠敤灞炴�ф墍灞炵殑搴撳垎绫�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
-    private String referCodeClassifyOid;
-
-    /**
-     * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鐨勫悕绉�
-     */
-    @Transient(referColumn = "referCodeClassifyOid.name")
-    private String referCodeClassifyOidName;
-
-    /**
-     * 寮曠敤鐨勪笟鍔$被鍨�
-     */
-    @Column(columnDefinition = "寮曠敤鐨勪笟鍔$被鍨�")
-    private String referBtmId;
-
-    /**
-     * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
-     */
-    @Column(columnDefinition = "寮曠敤鐨勪笟鍔$被鍨嬪悕绉�")
-    private String referBtmName;
-
-    /**
-     * 鍙傜収鐨勭獥鍙i厤缃�
-     */
-    @Column(columnDefinition = "鍙傜収绐楀彛閰嶇疆",length = 4000)
-    private String referConfig;
-
-    /**
-     * 鏄剧ず淇℃伅
-     */
-    @Column(columnDefinition = "鏄剧ず淇℃伅",length = 4000)
-    private String referValueInfo;
-
-    /**
-     * 杩囨护鐨剆ql鍐呭
-     */
-    @Column(columnDefinition = "杩囨护鐨剆ql鍐呭",length = 4000)
-    private String filterSql ;
-
-
-    /**
-     * 娴佹按鍙疯捣濮嬪��
-     */
-    @Column(columnDefinition = "娴佹按鍙疯捣濮嬪��")
-    private String serialStart;
-
-    /**
-     * 娴佹按鐨勬闀�
-     */
-    @Column(columnDefinition = "娴佹按鐨勬闀�")
-    private Integer serialStep;
-
-
-    /**
-     * 缂栫爜琛ヤ綅鏂瑰紡
-     */
-    @VciUseEnum(value = EnumIdConstant.CODE_FILL_TYPE,showTextField = "codeFillTypeText")
-    @Column(columnDefinition = "缂栫爜琛ヤ綅鏂瑰紡")
-    private String codeFillType;
-
-    /**
-     * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
-     */
-    @Column(columnDefinition = "缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰")
-    private String codeFillTypeText;
-
-    /**
-     * 琛ヤ綅鏃剁殑瀛楃
-     */
-    @Column(columnDefinition = "琛ヤ綅鏃剁殑瀛楃",defaultValue = "0")
-    private String codeFillSeparator;
-
-    /**
-     * 濉厖闀垮害
-     */
-    @Column(columnDefinition = "濉厖闀垮害")
-    private String codeFillLength;
-
-    /**
-     * 涓婇檺
-     */
-    @Column(columnDefinition = "娴佹按涓婇檺")
-    private Integer codeFillLimit;
-
-    /**
-     * 娴佹按鏄惁琛ョ爜
-     */
-    @Column(columnDefinition = "娴佹按鏄惁琛ョ爜",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String codeFillFlag;
-
-    /**
-     * 鑷畾涔夌殑娴佹按绠楁硶绫�
-     */
-    @Column(columnDefinition = "鑷畾涔夌殑娴佹按绠楁硶")
-    private String customCodeSerialClass;
-
-    /**
-     * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
-     */
-    @Column(columnDefinition = "鏄惁鑷姩鍖归厤鍒嗙被鍊�",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String matchClassifyValueFlag;
-
-    /**
-     * 鐖跺垎绫荤爜娈典富閿�
-     */
-    @Column(columnDefinition = "鐖跺垎绫荤爜娈典富閿�")
-    @VciUseRefer(value = MdmBtmTypeConstant.CODE_BASIC_SEC,showTextField = "parentClassifySecText")
-    private String parentClassifySecOid;
-
-    /**
-     * 鐖跺垎绫荤爜娈靛悕绉�
-     */
-    @Transient(referColumn = "parentClassifySecOid.name")
-    private String parentClassifySecText;
-
-
-    /**
-     * 鏄惁鍙互涓虹┖
-     */
-    @Column(columnDefinition = "鏄惁鍙互涓虹┖",defaultValue = "true")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String nullableFlag;
-
-    /**
-     * 鏄惁鍙備笌缂栫爜
-     */
-    @Column(columnDefinition = "鏄惁鍙備笌缂栫爜",defaultValue = "true")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String componentCodeFlag;
-
-    /**
-     * 鏄惁娴佹按渚濊禆
-     */
-    @Column(columnDefinition = "鏄惁娴佹按渚濊禆",defaultValue = "true")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String serialDependFlag;
-
-    /**
-     * 鏄惁鏄剧ず
-     */
-    @Column(columnDefinition = "鏄惁鏄剧ず",defaultValue = "true")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String displayFlag;
-
-    /**
-     * 娴佹按渚濊禆椤哄簭
-     */
-    @Column(columnDefinition = "娴佹按渚濊禆椤哄簭")
-    private Integer serialDependOrder;
-
-    public String getReferCodeClassifyOidName() {
-        return referCodeClassifyOidName;
-    }
-
-    public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
-        this.referCodeClassifyOidName = referCodeClassifyOidName;
-    }
-
-    public String getReferBtmId() {
-        return referBtmId;
-    }
-
-    public void setReferBtmId(String referBtmId) {
-        this.referBtmId = referBtmId;
-    }
-
-    public String getReferBtmName() {
-        return referBtmName;
-    }
-
-    public void setReferBtmName(String referBtmName) {
-        this.referBtmName = referBtmName;
-    }
-
-    public Integer getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSecType() {
-        return secType;
-    }
-
-    public void setSecType(String secType) {
-        this.secType = secType;
-    }
-
-    public String getSecTypeText() {
-        return secTypeText;
-    }
-
-    public void setSecTypeText(String secTypeText) {
-        this.secTypeText = secTypeText;
-    }
-
-    public String getPkCodeRule() {
-        return pkCodeRule;
-    }
-
-    public void setPkCodeRule(String pkCodeRule) {
-        this.pkCodeRule = pkCodeRule;
-    }
-
-    public String getGetValueClass() {
-        return getValueClass;
-    }
-
-    public void setGetValueClass(String getValueClass) {
-        this.getValueClass = getValueClass;
-    }
-
-    public String getCodeDateFormatStr() {
-        return codeDateFormatStr;
-    }
-
-    public void setCodeDateFormatStr(String codeDateFormatStr) {
-        this.codeDateFormatStr = codeDateFormatStr;
-    }
-
-
-    public String getCodeSecLength() {
-        return codeSecLength;
-    }
-
-    public void setCodeSecLength(String codeSecLength) {
-        this.codeSecLength = codeSecLength;
-    }
-
-    public String getCodeLevelType() {
-        return codeLevelType;
-    }
-
-    public void setCodeLevelType(String codeLevelType) {
-        this.codeLevelType = codeLevelType;
-    }
-
-    public String getCodeLevelTypeText() {
-        return codeLevelTypeText;
-    }
-
-    public void setCodeLevelTypeText(String codeLevelTypeText) {
-        this.codeLevelTypeText = codeLevelTypeText;
-    }
-
-    public Integer getCodeLevelValue() {
-        return codeLevelValue;
-    }
-
-    public void setCodeLevelValue(Integer codeLevelValue) {
-        this.codeLevelValue = codeLevelValue;
-    }
-
-    public Integer getValueCutLength() {
-        return valueCutLength;
-    }
-
-    public void setValueCutLength(Integer valueCutLength) {
-        this.valueCutLength = valueCutLength;
-    }
-
-    public String getValueCutType() {
-        return valueCutType;
-    }
-
-    public void setValueCutType(String valueCutType) {
-        this.valueCutType = valueCutType;
-    }
-
-    public String getValueCutTypeText() {
-        return valueCutTypeText;
-    }
-
-    public void setValueCutTypeText(String valueCutTypeText) {
-        this.valueCutTypeText = valueCutTypeText;
-    }
-
-    public String getCodeGetValueType() {
-        return codeGetValueType;
-    }
-
-    public void setCodeGetValueType(String codeGetValueType) {
-        this.codeGetValueType = codeGetValueType;
-    }
-
-    public String getCodeGetValueTypeText() {
-        return codeGetValueTypeText;
-    }
-
-    public void setCodeGetValueTypeText(String codeGetValueTypeText) {
-        this.codeGetValueTypeText = codeGetValueTypeText;
-    }
-
-    public String getReferCodeClassifyOid() {
-        return referCodeClassifyOid;
-    }
-
-    public void setReferCodeClassifyOid(String referCodeClassifyOid) {
-        this.referCodeClassifyOid = referCodeClassifyOid;
-    }
-
-    public String getReferConfig() {
-        return referConfig;
-    }
-
-    public void setReferConfig(String referConfig) {
-        this.referConfig = referConfig;
-    }
-
-    public String getReferValueInfo() {
-        return referValueInfo;
-    }
-
-    public void setReferValueInfo(String referValueInfo) {
-        this.referValueInfo = referValueInfo;
-    }
-
-    public String getFilterSql() {
-        return filterSql;
-    }
-
-    public void setFilterSql(String filterSql) {
-        this.filterSql = filterSql;
-    }
-
-    public String getSerialStart() {
-        return serialStart;
-    }
-
-    public void setSerialStart(String serialStart) {
-        this.serialStart = serialStart;
-    }
-
-    public Integer getSerialStep() {
-        return serialStep;
-    }
-
-    public void setSerialStep(Integer serialStep) {
-        this.serialStep = serialStep;
-    }
-
-    public String getCodeFillType() {
-        return codeFillType;
-    }
-
-    public void setCodeFillType(String codeFillType) {
-        this.codeFillType = codeFillType;
-    }
-
-    public String getCodeFillTypeText() {
-        return codeFillTypeText;
-    }
-
-    public void setCodeFillTypeText(String codeFillTypeText) {
-        this.codeFillTypeText = codeFillTypeText;
-    }
-
-    public String getCodeFillSeparator() {
-        return codeFillSeparator;
-    }
-
-    public void setCodeFillSeparator(String codeFillSeparator) {
-        this.codeFillSeparator = codeFillSeparator;
-    }
-
-    public String getCodeFillLength() {
-        return codeFillLength;
-    }
-
-    public void setCodeFillLength(String codeFillLength) {
-        this.codeFillLength = codeFillLength;
-    }
-
-    public Integer getCodeFillLimit() {
-        return codeFillLimit;
-    }
-
-    public void setCodeFillLimit(Integer codeFillLimit) {
-        this.codeFillLimit = codeFillLimit;
-    }
-
-    public String getCodeFillFlag() {
-        return codeFillFlag;
-    }
-
-    public void setCodeFillFlag(String codeFillFlag) {
-        this.codeFillFlag = codeFillFlag;
-    }
-
-    public String getCustomCodeSerialClass() {
-        return customCodeSerialClass;
-    }
-
-    public void setCustomCodeSerialClass(String customCodeSerialClass) {
-        this.customCodeSerialClass = customCodeSerialClass;
-    }
-
-    public String getMatchClassifyValueFlag() {
-        return matchClassifyValueFlag;
-    }
-
-    public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
-        this.matchClassifyValueFlag = matchClassifyValueFlag;
-    }
-
-    public String getParentClassifySecOid() {
-        return parentClassifySecOid;
-    }
-
-    public void setParentClassifySecOid(String parentClassifySecOid) {
-        this.parentClassifySecOid = parentClassifySecOid;
-    }
-
-    public String getParentClassifySecText() {
-        return parentClassifySecText;
-    }
-
-    public void setParentClassifySecText(String parentClassifySecText) {
-        this.parentClassifySecText = parentClassifySecText;
-    }
-
-
-    public String getCodeSecLengthType() {
-        return codeSecLengthType;
-    }
-
-    public void setCodeSecLengthType(String codeSecLengthType) {
-        this.codeSecLengthType = codeSecLengthType;
-    }
-
-    public String getCodeSecLengthTypeText() {
-        return codeSecLengthTypeText;
-    }
-
-    public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
-        this.codeSecLengthTypeText = codeSecLengthTypeText;
-    }
-
-    public String getNullableFlag() {
-        return nullableFlag;
-    }
-
-    public void setNullableFlag(String nullableFlag) {
-        this.nullableFlag = nullableFlag;
-    }
-
-    public String getComponentCodeFlag() {
-        return componentCodeFlag;
-    }
-
-    public void setComponentCodeFlag(String componentCodeFlag) {
-        this.componentCodeFlag = componentCodeFlag;
-    }
-
-    public String getSerialDependFlag() {
-        return serialDependFlag;
-    }
-
-    public void setSerialDependFlag(String serialDependFlag) {
-        this.serialDependFlag = serialDependFlag;
-    }
-
-    public String getDisplayFlag() {
-        return displayFlag;
-    }
-
-    public void setDisplayFlag(String displayFlag) {
-        this.displayFlag = displayFlag;
-    }
-
-    public Integer getSerialDependOrder() {
-        return serialDependOrder;
-    }
-
-    public void setSerialDependOrder(Integer serialDependOrder) {
-        this.serialDependOrder = serialDependOrder;
-    }
-
-    public String getReferAttributeId() {
-        return referAttributeId;
-    }
-
-    public void setReferAttributeId(String referAttributeId) {
-        this.referAttributeId = referAttributeId;
-    }
-
-    public String getReferAttributeName() {
-        return referAttributeName;
-    }
-
-    public void setReferAttributeName(String referAttributeName) {
-        this.referAttributeName = referAttributeName;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeBasicSecDO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", secType='" + secType + '\'' +
-                ", secTypeText='" + secTypeText + '\'' +
-                ", pkCodeRule='" + pkCodeRule + '\'' +
-                ", orderNum=" + orderNum +
-                ", referAttributeName='" + referAttributeName + '\'' +
-                ", referAttributeId='" + referAttributeId + '\'' +
-                ", getValueClass='" + getValueClass + '\'' +
-                ", codeDateFormatStr='" + codeDateFormatStr + '\'' +
-                ", codeSecLengthType='" + codeSecLengthType + '\'' +
-                ", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
-                ", codeSecLength='" + codeSecLength + '\'' +
-                ", codeLevelType='" + codeLevelType + '\'' +
-                ", codeLevelTypeText='" + codeLevelTypeText + '\'' +
-                ", codeLevelValue=" + codeLevelValue +
-                ", valueCutLength=" + valueCutLength +
-                ", valueCutType='" + valueCutType + '\'' +
-                ", valueCutTypeText='" + valueCutTypeText + '\'' +
-                ", codeGetValueType='" + codeGetValueType + '\'' +
-                ", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
-                ", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
-                ", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
-                ", referBtmId='" + referBtmId + '\'' +
-                ", referBtmName='" + referBtmName + '\'' +
-                ", referConfig='" + referConfig + '\'' +
-                ", referValueInfo='" + referValueInfo + '\'' +
-                ", filterSql='" + filterSql + '\'' +
-                ", serialStart='" + serialStart + '\'' +
-                ", serialStep=" + serialStep +
-                ", codeFillType='" + codeFillType + '\'' +
-                ", codeFillTypeText='" + codeFillTypeText + '\'' +
-                ", codeFillSeparator='" + codeFillSeparator + '\'' +
-                ", codeFillLength='" + codeFillLength + '\'' +
-                ", codeFillLimit=" + codeFillLimit +
-                ", codeFillFlag='" + codeFillFlag + '\'' +
-                ", customCodeSerialClass='" + customCodeSerialClass + '\'' +
-                ", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
-                ", parentClassifySecOid='" + parentClassifySecOid + '\'' +
-                ", parentClassifySecText='" + parentClassifySecText + '\'' +
-                ", nullableFlag='" + nullableFlag + '\'' +
-                ", componentCodeFlag='" + componentCodeFlag + '\'' +
-                ", serialDependFlag='" + serialDependFlag + '\'' +
-                ", displayFlag='" + displayFlag + '\'' +
-                ", serialDependOrder=" + serialDependOrder +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java
deleted file mode 100644
index 3a9ccbb..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.Transient;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseEnum;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 缂栫爜閲岀殑鎸夐挳鎵╁睍
- * @author weidy
- * @date 2022-1-17
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_BUTTON,text = "涓绘暟鎹腑鐨勬寜閽墿灞�",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
-public class CodeButtonDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = -2281543776769670606L;
-
-    /**
-     * 鎸夐挳鐨勮嫳鏂囩紪鍙�
-     */
-    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勮嫳鏂囩紪鍙�")
-    private String id;
-
-    /**
-     * 鎸夐挳鐨勪腑鏂囧悕绉�
-     */
-    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勪腑鏂囧悕绉�")
-    private String name;
-
-    /**
-     * 鎸夐挳鐨勫浘鏍囨牱寮�
-     */
-    @Column(columnDefinition = "鎸夐挳鐨勫浘鏍囨牱寮�")
-    private String iconCls;
-
-    /**
-     * 鎵ц鐨刯s鍐呭
-     */
-    @Column(columnDefinition = "鎵ц鐨刯s鍐呭")
-    private String executeJs;
-
-    /**
-     * 浣跨敤鎸夐挳鐨勪綅缃�
-     */
-    @Column(columnDefinition = "鎸夐挳鐨勪綅缃�")
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_BUTTON_POSITION,showTextField = "usedPositionTypeText")
-    private String usedPositionType;
-
-    /**
-     * 浣跨敤鎸夐挳鐨勪綅缃殑鏄剧ず鏂囨湰
-     */
-    @Transient(referColumn = MdmEnumIdConstant.CODE_BUTTON_POSITION +"_usedPositionType")
-    private String usedPositionTypeText;
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getIconCls() {
-        return iconCls;
-    }
-
-    public void setIconCls(String iconCls) {
-        this.iconCls = iconCls;
-    }
-
-    public String getExecuteJs() {
-        return executeJs;
-    }
-
-    public void setExecuteJs(String executeJs) {
-        this.executeJs = executeJs;
-    }
-
-    public String getUsedPositionType() {
-        return usedPositionType;
-    }
-
-    public void setUsedPositionType(String usedPositionType) {
-        this.usedPositionType = usedPositionType;
-    }
-
-    public String getUsedPositionTypeText() {
-        return usedPositionTypeText;
-    }
-
-    public void setUsedPositionTypeText(String usedPositionTypeText) {
-        this.usedPositionTypeText = usedPositionTypeText;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeButtonDO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", iconCls='" + iconCls + '\'' +
-                ", executeJs='" + executeJs + '\'' +
-                ", usedPositionType='" + usedPositionType + '\'' +
-                ", usedPositionTypeText='" + usedPositionTypeText + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java
deleted file mode 100644
index 4fa8402..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package org.springblade.code.model;
-
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.Transient;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-
-/**
- * 涓婚搴撶殑鍒嗙被
- * @author weidy
- * @date 2022-1-14
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY,text = "涓婚搴撳垎绫�",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
-public class CodeClassifyDO extends BaseModel {
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 2217599544701726951L;
-
-    /**
-     * 鍒嗙被鐨勭紪鍙�
-     */
-    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勭紪鍙�")
-    private String id;
-
-    /**
-     * 鍒嗙被鐨勫悕绉�
-     */
-    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勫悕绉�")
-    private String name;
-
-    /**
-     * 涓婄骇鐨勪富閿�
-     */
-    @Column(columnDefinition = "涓婄骇鏁版嵁鐨勪富閿�")
-    private String parentCodeClassifyOid;
-
-    /**
-     * 鎺掑簭鍙�
-     */
-    @Column(columnDefinition = "鎺掑簭鍙�",nullable = false)
-    private Integer orderNum;
-
-    /**
-     * 瀛樺偍鐨勪笟鍔$被鍨�
-     */
-    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勭紪鍙�")
-    private String btmTypeId;
-
-    /**
-     * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
-     */
-    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勫悕绉�")
-    private String btmTypeName;
-
-    /**
-     * 缂栫爜瑙勫垯鐨勪富閿�
-     */
-    @Column(columnDefinition = "缂栫爜瑙勫垯鐨勪富閿�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
-    private String codeRuleOid;
-
-    /**
-     * 缂栫爜瑙勫垯鐨勫悕绉�
-     */
-    @Transient(referColumn = "codeRuleOid.name")
-    private String codeRuleOidName;
-
-    /**
-     * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
-     */
-    @Column(columnDefinition = "鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_KEY_ATTR_REPEAT_RULE)
-    private String codeKeyAttrRepeatOid;
-
-    /**
-     * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鍚嶇О
-     */
-    @Transient(referColumn = "codeKeyAttrRepeatOid.name")
-    private String codeKeyAttrRepeatOidName;
-
-    /**
-     * 鐩镐技椤规煡璇㈢殑瑙勫垯涓婚敭
-     */
-    @Column(columnDefinition = "鐩镐技椤规煡璇㈢殑瑙勫垯")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_RESEMBLE_RULE)
-    private String codeResembleRuleOid;
-
-    /**
-     * 鐩镐技椤规煡璇㈣鍒欏悕绉�
-     */
-    @Transient(referColumn = "codeResembleRuleOid.name")
-    private String codeResembleRuleOidName;
-
-    /**
-     * 鏁版嵁鎵�鍦ㄧ殑灞傜骇
-     */
-    @Transient
-    private Integer dataLevel;
-
-    /**
-     * 璺緞
-     */
-    @Transient
-    private String path;
-    /***
-     * 鍚嶇О璺緞
-     */
-    @Transient
-    private String namePath;
-    /***
-     * 浠g爜璺緞
-     */
-    @Transient
-    private String idPath;
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getParentCodeClassifyOid() {
-        return parentCodeClassifyOid;
-    }
-
-    public void setParentCodeClassifyOid(String parentCodeClassifyOid) {
-        this.parentCodeClassifyOid = parentCodeClassifyOid;
-    }
-
-    public Integer getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    public String getBtmTypeId() {
-        return btmTypeId;
-    }
-
-    public void setBtmTypeId(String btmTypeId) {
-        this.btmTypeId = btmTypeId;
-    }
-
-    public String getBtmTypeName() {
-        return btmTypeName;
-    }
-
-    public void setBtmTypeName(String btmTypeName) {
-        this.btmTypeName = btmTypeName;
-    }
-
-    public String getCodeRuleOid() {
-        return codeRuleOid;
-    }
-
-    public void setCodeRuleOid(String codeRuleOid) {
-        this.codeRuleOid = codeRuleOid;
-    }
-
-
-    public String getCodeKeyAttrRepeatOid() {
-        return codeKeyAttrRepeatOid;
-    }
-
-    public void setCodeKeyAttrRepeatOid(String codeKeyAttrRepeatOid) {
-        this.codeKeyAttrRepeatOid = codeKeyAttrRepeatOid;
-    }
-
-    public String getCodeRuleOidName() {
-        return codeRuleOidName;
-    }
-
-    public void setCodeRuleOidName(String codeRuleOidName) {
-        this.codeRuleOidName = codeRuleOidName;
-    }
-
-    public String getCodeKeyAttrRepeatOidName() {
-        return codeKeyAttrRepeatOidName;
-    }
-
-    public void setCodeKeyAttrRepeatOidName(String codeKeyAttrRepeatOidName) {
-        this.codeKeyAttrRepeatOidName = codeKeyAttrRepeatOidName;
-    }
-
-    public Integer getDataLevel() {
-        return dataLevel;
-    }
-
-    public void setDataLevel(Integer dataLevel) {
-        this.dataLevel = dataLevel;
-    }
-
-    public String getCodeResembleRuleOid() {
-        return codeResembleRuleOid;
-    }
-
-    public void setCodeResembleRuleOid(String codeResembleRuleOid) {
-        this.codeResembleRuleOid = codeResembleRuleOid;
-    }
-
-    public String getCodeResembleRuleOidName() {
-        return codeResembleRuleOidName;
-    }
-
-    public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
-        this.codeResembleRuleOidName = codeResembleRuleOidName;
-    }
-
-    public String getNamePath() {
-        return namePath;
-    }
-
-    public void setNamePath(String namePath) {
-        this.namePath = namePath;
-    }
-
-    public String getIdPath() {
-        return idPath;
-    }
-
-    public void setIdPath(String idPath) {
-        this.idPath = idPath;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyDO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", parentCodeClassifyOid='" + parentCodeClassifyOid + '\'' +
-                ", orderNum=" + orderNum +
-                ", btmTypeId='" + btmTypeId + '\'' +
-                ", btmTypeName='" + btmTypeName + '\'' +
-                ", codeRuleOid='" + codeRuleOid + '\'' +
-                ", codeRuleOidName='" + codeRuleOidName + '\'' +
-                ", codeKeyAttrRepeatOid='" + codeKeyAttrRepeatOid + '\'' +
-                ", codeKeyAttrRepeatOidName='" + codeKeyAttrRepeatOidName + '\'' +
-                ", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
-                ", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
-                ", dataLevel=" + dataLevel +
-                ", path='" + path + '\'' +
-                ", namePath='" + namePath + '\'' +
-                ", idPath='" + idPath + '\'' +
-                '}';
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java
deleted file mode 100644
index d4d3641..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.springblade.code.model;
-
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-
-/**
- * 娴佺▼妯℃澘鍜岄樁娈电殑鍐呭
- * @author weidy
- * @date 2022-1-14
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_PROCESS_PHASE,text = "娴佺▼妯℃澘鍜岄樁娈电殑鍐呭",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeClassifyProcessPhaseDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 3814649551140170874L;
-    /**
-     * 涓婚搴撳垎绫讳富閿�
-     */
-    @Column(nullable = false,columnDefinition = "涓婚搴撳垎绫讳富閿�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
-    private String codeClassifyOid;
-
-    /**
-     * 鎵�灞炴ā鏉�
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
-    private String classifyTemplateOid;
-
-    /**
-     * 鎵�灞為樁娈电殑淇℃伅
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉块樁娈�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE)
-    private String codePhaseOid;
-
-    /**
-     * 娴佺▼妯℃澘缂栧彿
-     */
-    @Column(columnDefinition = "娴佺▼妯℃澘缂栧彿")
-    private String id;
-
-    /**
-     * 娴佺▼妯℃澘鐨勫悕绉�
-     */
-    @Column(columnDefinition = "娴佺▼妯℃澘鍚嶇О",nullable = false)
-    private String name;
-
-    /**
-     * 娴佺▼涓殑浠诲姟鑺傜偣鐨勫悕绉�
-     */
-    @Column(columnDefinition = "娴佺▼涓殑浠诲姟鑺傜偣鍚嶇О",nullable = false)
-    private String processNodeName;
-
-
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getClassifyTemplateOid() {
-        return classifyTemplateOid;
-    }
-
-    public void setClassifyTemplateOid(String classifyTemplateOid) {
-        this.classifyTemplateOid = classifyTemplateOid;
-    }
-
-    public String getCodePhaseOid() {
-        return codePhaseOid;
-    }
-
-    public void setCodePhaseOid(String codePhaseOid) {
-        this.codePhaseOid = codePhaseOid;
-    }
-
-    public String getProcessNodeName() {
-        return processNodeName;
-    }
-
-    public void setProcessNodeName(String processNodeName) {
-        this.processNodeName = processNodeName;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyProcessPhaseDO{" +
-                "codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", classifyTemplateOid='" + classifyTemplateOid + '\'' +
-                ", codePhaseOid='" + codePhaseOid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", processNodeName='" + processNodeName + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java
deleted file mode 100644
index 33cc2a7..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.springblade.code.model;
-
-
-import com.vci.starter.web.annotation.*;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
- * @author weidy
- * @date 2022-1-14
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_PROCESS_TEMPLATE,text = "鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeClassifyProcessTempDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 6606901931032525995L;
-    /**
-     * 涓婚搴撳垎绫讳富閿�
-     */
-    @Column(nullable = false,columnDefinition = "涓婚搴撳垎绫讳富閿�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
-    private String codeClassifyOid;
-
-    /**
-     * 鎵�灞炴ā鏉�
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
-    private String classifyTemplateOid;
-
-    /**
-     * 娴佺▼妯℃澘缂栧彿
-     */
-    @Column(columnDefinition = "娴佺▼妯℃澘缂栧彿")
-    private String id;
-
-    /**
-     * 娴佺▼妯℃澘鐨勫悕绉�
-     */
-    @Column(columnDefinition = "娴佺▼妯℃澘鍚嶇О",nullable = false)
-    private String name;
-
-    /**
-     * 娴佺▼妯℃澘鐢ㄩ��
-     */
-    @Column(columnDefinition = "娴佺▼妯℃澘鐢ㄩ��",nullable = false)
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,showTextField = "codeProcessUseText")
-    private String codeProcessUse;
-
-    /**
-     * 娴佺▼妯℃澘鐢ㄩ�旀樉绀哄悕绉�
-     */
-    @Transient
-    private String codeProcessUseText;
-
-    /**
-     * 娴佺▼妯℃澘鐨勭増鏈�
-     */
-    @Column(nullable = false)
-    private String processVersion;
-
-    /**
-     * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬х紪鍙�
-     */
-    @Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬�")
-    private String codeTempAttrOidArr;
-
-    /**
-     * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
-     */
-    @Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬у悕绉�")
-    private String codeTempAttrOidArrName;
-
-    public String getProcessVersion() {
-        return processVersion;
-    }
-
-    public void setProcessVersion(String processVersion) {
-        this.processVersion = processVersion;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getCodeClassifyOid() {
-        return codeClassifyOid;
-    }
-
-    public void setCodeClassifyOid(String codeClassifyOid) {
-        this.codeClassifyOid = codeClassifyOid;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCodeProcessUse() {
-        return codeProcessUse;
-    }
-
-    public void setCodeProcessUse(String codeProcessUse) {
-        this.codeProcessUse = codeProcessUse;
-    }
-
-    public String getCodeProcessUseText() {
-        return codeProcessUseText;
-    }
-
-    public void setCodeProcessUseText(String codeProcessUseText) {
-        this.codeProcessUseText = codeProcessUseText;
-    }
-
-    public String getClassifyTemplateOid() {
-        return classifyTemplateOid;
-    }
-
-    public void setClassifyTemplateOid(String classifyTemplateOid) {
-        this.classifyTemplateOid = classifyTemplateOid;
-    }
-
-    public String getCodeTempAttrOidArr() {
-        return codeTempAttrOidArr;
-    }
-
-    public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
-        this.codeTempAttrOidArr = codeTempAttrOidArr;
-    }
-
-    public String getCodeTempAttrOidArrName() {
-        return codeTempAttrOidArrName;
-    }
-
-    public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
-        this.codeTempAttrOidArrName = codeTempAttrOidArrName;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyProcessTempDO{" +
-                "codeClassifyOid='" + codeClassifyOid + '\'' +
-                ", classifyTemplateOid='" + classifyTemplateOid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", codeProcessUse='" + codeProcessUse + '\'' +
-                ", codeProcessUseText='" + codeProcessUseText + '\'' +
-                ", processVersion='" + processVersion + '\'' +
-                ", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
-                ", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java
deleted file mode 100644
index 55cddae..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.Transient;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁�
- * @author weidy
- * @date 2022-1-17
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_MAP_ITEM,text = "鏄犲皠瑙勫垯鐨勬槑缁�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeClassifyTempMapItemDO extends BaseModel {
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = -415692697543751712L;
-
-    /**
-     * 鏄犲皠瑙勫垯涓婚敭
-     */
-    @Column(nullable = false,columnDefinition = "鏄犲皠瑙勫垯涓婚敭")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_MAP)
-    private String classifyTemplateMapOid;
-
-    /**
-     * 鏄犲皠鍚嶇О
-     */
-    @Column(columnDefinition = "鏄犲皠鍚嶇О")
-    private String name;
-
-    /**
-     * 闆嗗洟鐮佸睘鎬ey
-     */
-    @Column(columnDefinition = "闆嗗洟鐮佸睘鎬ey")
-    private String groupCodeAttrId;
-
-    /**
-     * 闆嗗洟鐮佸睘鎬у悕绉�
-     */
-    @Column(columnDefinition = "闆嗗洟鐮佸睘鎬у悕绉�")
-    private String groupCodeAttrName;
-
-    /**
-     * 鍒嗙被妯℃澘灞炴�т富閿�
-     */
-    @Column(columnDefinition = "鍒嗙被妯℃澘灞炴�т富閿�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR)
-    private String classifyTemplateAttrOid;
-    /**
-     * 妯℃澘灞炴�ey
-     */
-    @Transient(referColumn = "classifyTemplateAttrOid.id")
-    private String classifyAttrId;
-
-    /**
-     * 妯℃澘灞炴�у悕绉�
-     */
-    @Transient(referColumn = "classifyTemplateAttrOid.name")
-    private String classifyAttrName;
-
-    /**
-     * 鐩爣绔殑鏃堕棿鏍煎紡
-     */
-    @Column(columnDefinition = "鐩爣绔殑鏃堕棿鏍煎紡")
-    private String targetDateFormat;
-
-    /**
-     * 杞崲鍏紡
-     */
-    @Column(columnDefinition = "杞崲鍏紡",length = 4000)
-    private String switchEval;
-
-    /**
-     * 杞崲鐨勮嚜瀹氫箟绫�
-     */
-    @Column(columnDefinition = "杞崲鐨勮嚜瀹氫箟绫�",length = 200)
-    private String switchClassName;
-
-    public String getClassifyTemplateMapOid() {
-        return classifyTemplateMapOid;
-    }
-
-    public void setClassifyTemplateMapOid(String classifyTemplateMapOid) {
-        this.classifyTemplateMapOid = classifyTemplateMapOid;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getGroupCodeAttrId() {
-        return groupCodeAttrId;
-    }
-
-    public void setGroupCodeAttrId(String groupCodeAttrId) {
-        this.groupCodeAttrId = groupCodeAttrId;
-    }
-
-    public String getGroupCodeAttrName() {
-        return groupCodeAttrName;
-    }
-
-    public void setGroupCodeAttrName(String groupCodeAttrName) {
-        this.groupCodeAttrName = groupCodeAttrName;
-    }
-
-    public String getClassifyTemplateAttrOid() {
-        return classifyTemplateAttrOid;
-    }
-
-    public void setClassifyTemplateAttrOid(String classifyTemplateAttrOid) {
-        this.classifyTemplateAttrOid = classifyTemplateAttrOid;
-    }
-
-    public String getClassifyAttrId() {
-        return classifyAttrId;
-    }
-
-    public void setClassifyAttrId(String classifyAttrId) {
-        this.classifyAttrId = classifyAttrId;
-    }
-
-    public String getClassifyAttrName() {
-        return classifyAttrName;
-    }
-
-    public void setClassifyAttrName(String classifyAttrName) {
-        this.classifyAttrName = classifyAttrName;
-    }
-
-    public String getTargetDateFormat() {
-        return targetDateFormat;
-    }
-
-    public void setTargetDateFormat(String targetDateFormat) {
-        this.targetDateFormat = targetDateFormat;
-    }
-
-    public String getSwitchEval() {
-        return switchEval;
-    }
-
-    public void setSwitchEval(String switchEval) {
-        this.switchEval = switchEval;
-    }
-
-    public String getSwitchClassName() {
-        return switchClassName;
-    }
-
-    public void setSwitchClassName(String switchClassName) {
-        this.switchClassName = switchClassName;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyTempMapItemDO{" +
-                "classifyTemplateMapOid='" + classifyTemplateMapOid + '\'' +
-                ", name='" + name + '\'' +
-                ", groupCodeAttrId='" + groupCodeAttrId + '\'' +
-                ", groupCodeAttrName='" + groupCodeAttrName + '\'' +
-                ", classifyTemplateAttrOid='" + classifyTemplateAttrOid + '\'' +
-                ", classifyAttrId='" + classifyAttrId + '\'' +
-                ", classifyAttrName='" + classifyAttrName + '\'' +
-                ", targetDateFormat='" + targetDateFormat + '\'' +
-                ", switchEval='" + switchEval + '\'' +
-                ", switchClassName='" + switchClassName + '\'' +
-                '}' + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java
deleted file mode 100644
index bff5a47..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java
+++ /dev/null
@@ -1,858 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.starter.web.annotation.*;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.enumpck.VciFieldTypeEnum;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴��
- * @author weidy
- * @date 2022-1-17
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,text = "涓婚搴撳垎绫荤殑妯℃澘灞炴��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeClassifyTemplateAttrDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = -8685210169495428202L;
-
-    /**
-     * 鎵�灞炴ā鏉�
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
-    private String classifyTemplateOid;
-
-    /**
-     * 鎵�灞炴ā鏉垮悕绉�
-     */
-    @Transient(referColumn = "classifyTemplateOid.name")
-    private String classifyTemplateOidName;
-
-    /**
-     * 灞炴�ц嫳鏂囧悕绉�
-     */
-    @Column(nullable = false,columnDefinition = "灞炴�ц嫳鏂囧悕绉�")
-    private String id;
-
-    /**
-     * 灞炴�т腑鏂囧悕绉�
-     */
-    @Column(nullable = false,columnDefinition = "灞炴�т腑鏂囧悕绉�")
-    private String name;
-
-    /**
-     * 灞炴�х殑绫诲瀷
-     */
-    @Column(columnDefinition = "灞炴�х殑绫诲瀷",nullable = false)
-    private String attributeDataType;
-
-    /**
-     * 鏄惁鍏抽敭灞炴��
-     */
-    @Column(columnDefinition = "鏄惁鍏抽敭灞炴��",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String keyAttrFlag;
-
-    /**
-     * 鏄惁蹇�熸煡璇㈠睘鎬�
-     */
-    @Column(columnDefinition = "鏄惁蹇�熸煡璇㈠睘鎬�",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String queryAttrFlag;
-
-    /**
-     * 鏄惁楂樼骇鏌ヨ灞炴��
-     */
-    @Column(columnDefinition = "鏄惁楂樼骇鏌ヨ灞炴��",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String seniorQueryAttrFlag;
-
-    /**
-     * 鐩镐技鏌ラ噸灞炴��
-     */
-    @Column(columnDefinition = "鐩镐技鏌ラ噸灞炴��",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String sameRepeatAttrFlag;
-
-    /**
-     * 鏄惁鎺掑簭
-     */
-    @Column(columnDefinition = "鏄惁鎺掑簭",defaultValue = "true")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String sortAttrFlag;
-
-    /**
-     * 鏄惁鐢熸垚浜岀淮鐮�
-     */
-    @Column(columnDefinition = "鏄惁鐢熸垚浜岀淮鐮�",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String qrcodeFlag;
-
-    /**
-     * 鏄惁鐢熸垚鏉″舰鐮�
-     */
-    @Column(columnDefinition = "鏄惁鐢熸垚涓�缁寸爜",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String barcodeFlag;
-
-
-    /**
-     * 缁勫悎瑙勫垯
-     */
-    @Column(columnDefinition = "缁勫悎瑙勫垯",length = 4000)
-    private String componentRule;
-
-    /**
-     * 楠岃瘉瑙勫垯
-     */
-    @Column(columnDefinition = "楠岃瘉瑙勫垯",length = 4000)
-    private String verifyRule;
-
-    /**
-     * 鍒嗙被娉ㄥ叆灞傜骇
-     */
-    @Column(columnDefinition = "鍒嗙被娉ㄥ叆灞傜骇",defaultValue = "none")
-    private String classifyInvokeLevel;
-
-    /**
-     * 鍒嗙被娉ㄥ叆鐨勫睘鎬�
-     */
-    @Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�",length = 32)
-    private String classifyInvokeAttr;
-
-    /**
-     * 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-     */
-    @Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�",length = 200)
-    private String classifyInvokeAttrName;
-
-    /**
-     * 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-     */
-    @Column(columnDefinition = "鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String classifyInvokeEditFlag;
-
-    /**
-     * 灞炴�ф帓搴忓彿
-     */
-    @Column(columnDefinition = "灞炴�ф帓搴忓彿")
-    private Integer orderNum;
-
-    /**
-     * 琛ㄥ崟閲屾槸鍚︽樉绀�
-     */
-    @Column(columnDefinition = "琛ㄥ崟閲屾槸鍚︽樉绀�",defaultValue = "true")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String formDisplayFlag;
-
-    /**
-     * 鍒楄〃閲屾槸鍚︽樉绀�
-     */
-    @Column(columnDefinition = "鍒楄〃閲屾槸鍚︽樉绀�",defaultValue = "true")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String tableDisplayFlag;
-
-    /**
-     * 鎵�灞炲睘鎬у垎缁�
-     */
-    @Column(columnDefinition = "鎵�灞炲睘鎬у垎缁�")
-    private String attributeGroup;
-
-    /**
-     * 浣跨敤鏋氫妇鑻辨枃缂栧彿
-     */
-    @Column(columnDefinition = "浣跨敤鏋氫妇鑻辨枃缂栧彿")
-    private String enumId;
-
-    /**
-     * 浣跨敤鏋氫妇涓枃鍚嶇О
-     */
-    @Column(columnDefinition = "浣跨敤鏋氫妇涓枃鍚嶇О")
-    private String enumName;
-
-    /**
-     * 鏋氫妇鏄惁鍙互缂栬緫
-     */
-    @Column(columnDefinition = "鏋氫妇鏄惁鍙互缂栬緫")
-    private String enumEditFlag;
-
-    /**
-     * 鍙傜収涓氬姟绫诲瀷
-     */
-    @Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�")
-    private String referBtmId;
-
-    /**
-     * 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-     */
-    @Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�")
-    private String referBtmName;
-
-    /**
-     * 鍙傜収鐨勭獥鍙i厤缃�
-     */
-    @Column(columnDefinition = "鍙傜収绐楀彛閰嶇疆",length = 4000)
-    private String referConfig;
-
-    /**
-     * 鏄惁蹇呰緭
-     */
-    @Column(columnDefinition = "鏄惁蹇呰緭",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String requireFlag;
-
-    /**
-     * 鏄惁鍙
-     */
-    @Column(columnDefinition = "鏄惁鍙",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String readOnlyFlag;
-
-    /**
-     * 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-     */
-    @Column(columnDefinition = "灞炴�ф帶鍒惰緭鍏ョ殑闀垮害",defaultValue = "254")
-    private Integer controlLength = 254;
-
-    /**
-     * 琛ㄥ崟涓婃樉绀虹殑鏍峰紡
-     */
-    @Column(length = 1000,columnDefinition = "琛ㄥ崟閲屾樉绀虹殑鏍峰紡")
-    private String formDisplayStyle;
-
-    /**
-     * 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-     */
-    @Column(length = 1000,columnDefinition = "琛ㄦ牸閲屾樉绀虹殑鏍峰紡")
-    private String tableDisplayStyle;
-
-    /**
-     * 琛ㄥ崟涓秴閾炬帴
-     */
-    @Column(columnDefinition = "琛ㄥ崟涓秴閾炬帴鍐呭",length = 1000)
-    private String formHref;
-
-    /**
-     * 琛ㄦ牸涓秴閾炬帴
-     */
-    @Column(columnDefinition = "琛ㄦ牸涓秴閾炬帴鍐呭",length = 1000)
-    private String tableHref;
-
-    /**
-     * 灏忔暟绮惧害
-     */
-    @Column(columnDefinition = "灏忔暟绮惧害")
-    private Integer precisionLength;
-
-    /**
-     * 灏忔暟鍒诲害
-     */
-    @Column(columnDefinition = "灏忔暟鍒诲害")
-    private Integer scaleLength;
-
-    /**
-     * 鍙栧�艰寖鍥�
-     */
-    @Column(columnDefinition = "鍙栧�艰寖鍥�",length = 1000)
-    private String valueArea;
-
-    /**
-     * 鏃堕棿鏍煎紡
-     */
-    @Column(columnDefinition = "鏃堕棿鏍煎紡")
-    private String codeDateFormat;
-
-    /**
-     * 琛ㄦ牸涓樉绀虹殑js
-     */
-    @Column(columnDefinition = "琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js",length = 254)
-    private String tableDisplayJs;
-
-    /**
-     * 鏄惁鏄剧ず澶氳鏂囨湰
-     */
-    @Column(columnDefinition = "鏄惁鏄剧ず澶氳鏂囨湰",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String textAreaFlag;
-
-    /**
-     * 鏄惁涓哄浘鐗囩瓑鍏冪礌
-     */
-    @Column(columnDefinition = "棰勮鍥�",defaultValue = "false")
-    @VciFieldType(VciFieldTypeEnum.VTBoolean)
-    private String imageFlag;
-
-    /**
-     * 榛樿鍊�
-     */
-    @Column(columnDefinition = "榛樿鍊�")
-    private String defaultValue;
-
-    /**
-     * 鍓嶇紑
-     */
-    @Column(columnDefinition = "鍓嶇紑")
-    private String prefixValue;
-
-    /**
-     * 鍚庣紑
-     */
-    @Column(columnDefinition = "鍚庣紑")
-    private String suffixValue;
-
-    /**
-     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-     */
-    @Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��")
-    private String filterSourceAttr;
-
-    /**
-     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-     */
-    @Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�")
-    private String filterSourceAttrName;
-
-    /**
-     * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
-     */
-    @Column(length = 4000,columnDefinition = "鏋氫妇娉ㄥ叆鐨勫唴瀹�")
-    private String enumString;
-
-    /**
-     * 灞炴�х殑瀹藉害
-     */
-    @Column(columnDefinition = "灞炴�у垪琛ㄤ腑瀹藉害")
-    private Integer attrTableWidth;
-    /**
-     * 璇存槑
-     */
-    @Column(columnDefinition = "璇存槑")
-    private String explain;
-
-    /**
-     * 閫夋嫨搴撴爣璇�
-     */
-    @Column(columnDefinition = "閫夋嫨搴撴爣璇�")
-    private String libraryIdentification;
-
-    /**
-     * 绾ц仈灞炴�х紪鍙�
-     */
-    @Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
-    private String parentCode;
-
-    /**
-     * 绾ц仈灞炴�у悕绉�
-     */
-    @Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
-    private String parentName;
-
-    /**
-     * 绾ц仈鏌ヨ灞炴��
-     */
-    @Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
-    private String parentQueryAttr;
-
-
-
-    public String getClassifyTemplateOid() {
-        return classifyTemplateOid;
-    }
-
-    public void setClassifyTemplateOid(String classifyTemplateOid) {
-        this.classifyTemplateOid = classifyTemplateOid;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getAttributeDataType() {
-        return attributeDataType;
-    }
-
-    public void setAttributeDataType(String attributeDataType) {
-        this.attributeDataType = attributeDataType;
-    }
-
-    public String getKeyAttrFlag() {
-        return keyAttrFlag;
-    }
-
-    public void setKeyAttrFlag(String keyAttrFlag) {
-        this.keyAttrFlag = keyAttrFlag;
-    }
-
-    public String getQueryAttrFlag() {
-        return queryAttrFlag;
-    }
-
-    public void setQueryAttrFlag(String queryAttrFlag) {
-        this.queryAttrFlag = queryAttrFlag;
-    }
-
-    public String getSeniorQueryAttrFlag() {
-        return seniorQueryAttrFlag;
-    }
-
-    public void setSeniorQueryAttrFlag(String seniorQueryAttrFlag) {
-        this.seniorQueryAttrFlag = seniorQueryAttrFlag;
-    }
-
-    public String getSameRepeatAttrFlag() {
-        return sameRepeatAttrFlag;
-    }
-
-    public void setSameRepeatAttrFlag(String sameRepeatAttrFlag) {
-        this.sameRepeatAttrFlag = sameRepeatAttrFlag;
-    }
-
-    public String getSortAttrFlag() {
-        return sortAttrFlag;
-    }
-
-    public void setSortAttrFlag(String sortAttrFlag) {
-        this.sortAttrFlag = sortAttrFlag;
-    }
-
-    public String getQrcodeFlag() {
-        return qrcodeFlag;
-    }
-
-    public void setQrcodeFlag(String qrcodeFlag) {
-        this.qrcodeFlag = qrcodeFlag;
-    }
-
-    public String getBarcodeFlag() {
-        return barcodeFlag;
-    }
-
-    public void setBarcodeFlag(String barcodeFlag) {
-        this.barcodeFlag = barcodeFlag;
-    }
-
-    public String getComponentRule() {
-        return componentRule;
-    }
-
-    public void setComponentRule(String componentRule) {
-        this.componentRule = componentRule;
-    }
-
-    public String getVerifyRule() {
-        return verifyRule;
-    }
-
-    public void setVerifyRule(String verifyRule) {
-        this.verifyRule = verifyRule;
-    }
-
-    public String getClassifyInvokeLevel() {
-        return classifyInvokeLevel;
-    }
-
-    public void setClassifyInvokeLevel(String classifyInvokeLevel) {
-        this.classifyInvokeLevel = classifyInvokeLevel;
-    }
-
-    public String getClassifyInvokeAttr() {
-        return classifyInvokeAttr;
-    }
-
-    public void setClassifyInvokeAttr(String classifyInvokeAttr) {
-        this.classifyInvokeAttr = classifyInvokeAttr;
-    }
-
-    public String getClassifyInvokeAttrName() {
-        return classifyInvokeAttrName;
-    }
-
-    public void setClassifyInvokeAttrName(String classifyInvokeAttrName) {
-        this.classifyInvokeAttrName = classifyInvokeAttrName;
-    }
-
-    public String getClassifyInvokeEditFlag() {
-        return classifyInvokeEditFlag;
-    }
-
-    public void setClassifyInvokeEditFlag(String classifyInvokeEditFlag) {
-        this.classifyInvokeEditFlag = classifyInvokeEditFlag;
-    }
-
-    public Integer getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    public String getFormDisplayFlag() {
-        return formDisplayFlag;
-    }
-
-    public void setFormDisplayFlag(String formDisplayFlag) {
-        this.formDisplayFlag = formDisplayFlag;
-    }
-
-    public String getTableDisplayFlag() {
-        return tableDisplayFlag;
-    }
-
-    public void setTableDisplayFlag(String tableDisplayFlag) {
-        this.tableDisplayFlag = tableDisplayFlag;
-    }
-
-    public String getAttributeGroup() {
-        return attributeGroup;
-    }
-
-    public void setAttributeGroup(String attributeGroup) {
-        this.attributeGroup = attributeGroup;
-    }
-
-    public String getEnumId() {
-        return enumId;
-    }
-
-    public void setEnumId(String enumId) {
-        this.enumId = enumId;
-    }
-
-    public String getEnumName() {
-        return enumName;
-    }
-
-    public void setEnumName(String enumName) {
-        this.enumName = enumName;
-    }
-
-    public String getEnumEditFlag() {
-        return enumEditFlag;
-    }
-
-    public void setEnumEditFlag(String enumEditFlag) {
-        this.enumEditFlag = enumEditFlag;
-    }
-
-    public String getReferBtmId() {
-        return referBtmId;
-    }
-
-    public void setReferBtmId(String referBtmId) {
-        this.referBtmId = referBtmId;
-    }
-
-    public String getReferBtmName() {
-        return referBtmName;
-    }
-
-    public void setReferBtmName(String referBtmName) {
-        this.referBtmName = referBtmName;
-    }
-
-    public String getReferConfig() {
-        return referConfig;
-    }
-
-    public void setReferConfig(String referConfig) {
-        this.referConfig = referConfig;
-    }
-
-    public String getRequireFlag() {
-        return requireFlag;
-    }
-
-    public void setRequireFlag(String requireFlag) {
-        this.requireFlag = requireFlag;
-    }
-
-    public String getReadOnlyFlag() {
-        return readOnlyFlag;
-    }
-
-    public void setReadOnlyFlag(String readOnlyFlag) {
-        this.readOnlyFlag = readOnlyFlag;
-    }
-
-    public Integer getControlLength() {
-        return controlLength;
-    }
-
-    public void setControlLength(Integer controlLength) {
-        this.controlLength = controlLength;
-    }
-
-    public String getFormDisplayStyle() {
-        return formDisplayStyle;
-    }
-
-    public void setFormDisplayStyle(String formDisplayStyle) {
-        this.formDisplayStyle = formDisplayStyle;
-    }
-
-    public String getTableDisplayStyle() {
-        return tableDisplayStyle;
-    }
-
-    public void setTableDisplayStyle(String tableDisplayStyle) {
-        this.tableDisplayStyle = tableDisplayStyle;
-    }
-
-    public String getFormHref() {
-        return formHref;
-    }
-
-    public void setFormHref(String formHref) {
-        this.formHref = formHref;
-    }
-
-    public String getTableHref() {
-        return tableHref;
-    }
-
-    public void setTableHref(String tableHref) {
-        this.tableHref = tableHref;
-    }
-
-    public Integer getPrecisionLength() {
-        return precisionLength;
-    }
-
-    public void setPrecisionLength(Integer precisionLength) {
-        this.precisionLength = precisionLength;
-    }
-
-    public Integer getScaleLength() {
-        return scaleLength;
-    }
-
-    public void setScaleLength(Integer scaleLength) {
-        this.scaleLength = scaleLength;
-    }
-
-    public String getValueArea() {
-        return valueArea;
-    }
-
-    public void setValueArea(String valueArea) {
-        this.valueArea = valueArea;
-    }
-
-    public String getCodeDateFormat() {
-        return codeDateFormat;
-    }
-
-    public void setCodeDateFormat(String codeDateFormat) {
-        this.codeDateFormat = codeDateFormat;
-    }
-
-    public String getTableDisplayJs() {
-        return tableDisplayJs;
-    }
-
-    public void setTableDisplayJs(String tableDisplayJs) {
-        this.tableDisplayJs = tableDisplayJs;
-    }
-
-    public String getTextAreaFlag() {
-        return textAreaFlag;
-    }
-
-    public void setTextAreaFlag(String textAreaFlag) {
-        this.textAreaFlag = textAreaFlag;
-    }
-
-    public String getImageFlag() {
-        return imageFlag;
-    }
-
-    public void setImageFlag(String imageFlag) {
-        this.imageFlag = imageFlag;
-    }
-
-    public String getDefaultValue() {
-        return defaultValue;
-    }
-
-    public void setDefaultValue(String defaultValue) {
-        this.defaultValue = defaultValue;
-    }
-
-    public String getPrefixValue() {
-        return prefixValue;
-    }
-
-    public void setPrefixValue(String prefixValue) {
-        this.prefixValue = prefixValue;
-    }
-
-    public String getSuffixValue() {
-        return suffixValue;
-    }
-
-    public void setSuffixValue(String suffixValue) {
-        this.suffixValue = suffixValue;
-    }
-
-    public String getFilterSourceAttr() {
-        return filterSourceAttr;
-    }
-
-    public void setFilterSourceAttr(String filterSourceAttr) {
-        this.filterSourceAttr = filterSourceAttr;
-    }
-
-    public String getFilterSourceAttrName() {
-        return filterSourceAttrName;
-    }
-
-    public void setFilterSourceAttrName(String filterSourceAttrName) {
-        this.filterSourceAttrName = filterSourceAttrName;
-    }
-
-    public String getEnumString() {
-        return enumString;
-    }
-
-    public void setEnumString(String enumString) {
-        this.enumString = enumString;
-    }
-
-    public Integer getAttrTableWidth() {
-        return attrTableWidth;
-    }
-
-    public void setAttrTableWidth(Integer attrTableWidth) {
-        this.attrTableWidth = attrTableWidth;
-    }
-
-    public String getExplain() {
-        return explain;
-    }
-
-    public void setExplain(String explain) {
-        this.explain = explain;
-    }
-
-    public String getLibraryIdentification() {
-        return libraryIdentification;
-    }
-
-    public void setLibraryIdentification(String libraryIdentification) {
-        this.libraryIdentification = libraryIdentification;
-    }
-
-    public String getParentCode() {
-        return parentCode;
-    }
-
-    public void setParentCode(String parentCode) {
-        this.parentCode = parentCode;
-    }
-
-    public String getParentName() {
-        return parentName;
-    }
-
-    public void setParentName(String parentName) {
-        this.parentName = parentName;
-    }
-
-    public String getParentQueryAttr() {
-        return parentQueryAttr;
-    }
-
-    public void setParentQueryAttr(String parentQueryAttr) {
-        this.parentQueryAttr = parentQueryAttr;
-    }
-
-    public String getClassifyTemplateOidName() {
-        return classifyTemplateOidName;
-    }
-
-    public void setClassifyTemplateOidName(String classifyTemplateOidName) {
-        this.classifyTemplateOidName = classifyTemplateOidName;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyTemplateAttrDO{" +
-                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
-                ", classifyTemplateOidName='" + classifyTemplateOidName + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", attributeDataType='" + attributeDataType + '\'' +
-                ", keyAttrFlag='" + keyAttrFlag + '\'' +
-                ", queryAttrFlag='" + queryAttrFlag + '\'' +
-                ", seniorQueryAttrFlag='" + seniorQueryAttrFlag + '\'' +
-                ", sameRepeatAttrFlag='" + sameRepeatAttrFlag + '\'' +
-                ", sortAttrFlag='" + sortAttrFlag + '\'' +
-                ", qrcodeFlag='" + qrcodeFlag + '\'' +
-                ", barcodeFlag='" + barcodeFlag + '\'' +
-                ", componentRule='" + componentRule + '\'' +
-                ", verifyRule='" + verifyRule + '\'' +
-                ", classifyInvokeLevel='" + classifyInvokeLevel + '\'' +
-                ", classifyInvokeAttr='" + classifyInvokeAttr + '\'' +
-                ", classifyInvokeAttrName='" + classifyInvokeAttrName + '\'' +
-                ", classifyInvokeEditFlag='" + classifyInvokeEditFlag + '\'' +
-                ", orderNum=" + orderNum +
-                ", formDisplayFlag='" + formDisplayFlag + '\'' +
-                ", tableDisplayFlag='" + tableDisplayFlag + '\'' +
-                ", attributeGroup='" + attributeGroup + '\'' +
-                ", enumId='" + enumId + '\'' +
-                ", enumName='" + enumName + '\'' +
-                ", enumEditFlag='" + enumEditFlag + '\'' +
-                ", referBtmId='" + referBtmId + '\'' +
-                ", referBtmName='" + referBtmName + '\'' +
-                ", referConfig='" + referConfig + '\'' +
-                ", requireFlag='" + requireFlag + '\'' +
-                ", readOnlyFlag='" + readOnlyFlag + '\'' +
-                ", controlLength=" + controlLength +
-                ", formDisplayStyle='" + formDisplayStyle + '\'' +
-                ", tableDisplayStyle='" + tableDisplayStyle + '\'' +
-                ", formHref='" + formHref + '\'' +
-                ", tableHref='" + tableHref + '\'' +
-                ", precisionLength=" + precisionLength +
-                ", scaleLength=" + scaleLength +
-                ", valueArea='" + valueArea + '\'' +
-                ", codeDateFormat='" + codeDateFormat + '\'' +
-                ", tableDisplayJs='" + tableDisplayJs + '\'' +
-                ", textAreaFlag='" + textAreaFlag + '\'' +
-                ", imageFlag='" + imageFlag + '\'' +
-                ", defaultValue='" + defaultValue + '\'' +
-                ", prefixValue='" + prefixValue + '\'' +
-                ", suffixValue='" + suffixValue + '\'' +
-                ", filterSourceAttr='" + filterSourceAttr + '\'' +
-                ", filterSourceAttrName='" + filterSourceAttrName + '\'' +
-                ", enumString='" + enumString + '\'' +
-                ", attrTableWidth=" + attrTableWidth +
-                ", explain='" + explain + '\'' +
-                ", libraryIdentification='" + libraryIdentification + '\'' +
-                ", parentCode='" + parentCode + '\'' +
-                ", parentName='" + parentName + '\'' +
-                ", parentQueryAttr='" + parentQueryAttr + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java
deleted file mode 100644
index 6f6c619..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.starter.web.annotation.*;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 妯℃澘灞炴�т笅鐨勬寜閽�
- * @author weidy
- * @date 2022-1-17
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_BUTTON,text = "涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeClassifyTemplateButtonDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = -5004852745300082871L;
-    /**
-     * 鎵�灞炴ā鏉�
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
-    private String classifyTemplateOid;
-
-    /**
-     * 鎸夐挳鐨勪富閿�
-     */
-    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勪富閿�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_BUTTON)
-    private String classifyButtonOid;
-
-    /**
-     * 鎸夐挳鐨勫悕绉�
-     */
-    @Transient(referColumn = "classifyButtonOid.name")
-    private String classifyButtonOidName;
-
-    /**
-     * 鎸夐挳鐢ㄩ��
-     */
-    @Column(columnDefinition = "鎸夐挳鐢ㄩ��")
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_TEMPLATE_BUTTON_USE,showTextField = "buttonUseText")
-    private String buttonUse;
-
-    /**
-     * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
-     */
-    @Transient()
-    private String buttonUseText;
-
-    /**
-     * 鎸夐挳鏍囪瘑
-     */
-    @Transient(referColumn = "classifyButtonOid.id")
-    private String id;
-
-    /**
-     * 鎺掑簭鍙�
-     */
-    @Column(columnDefinition = "鎺掑簭鍙�")
-    private Integer orderNum;
-
-    public String getClassifyTemplateOid() {
-        return classifyTemplateOid;
-    }
-
-    public void setClassifyTemplateOid(String classifyTemplateOid) {
-        this.classifyTemplateOid = classifyTemplateOid;
-    }
-
-    public String getClassifyButtonOid() {
-        return classifyButtonOid;
-    }
-
-    public void setClassifyButtonOid(String classifyButtonOid) {
-        this.classifyButtonOid = classifyButtonOid;
-    }
-
-    public Integer getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    public String getButtonUse() {
-        return buttonUse;
-    }
-
-    public void setButtonUse(String buttonUse) {
-        this.buttonUse = buttonUse;
-    }
-
-    public String getButtonUseText() {
-        return buttonUseText;
-    }
-
-    public void setButtonUseText(String buttonUseText) {
-        this.buttonUseText = buttonUseText;
-    }
-
-    public String getClassifyButtonOidName() {
-        return classifyButtonOidName;
-    }
-
-    public void setClassifyButtonOidName(String classifyButtonOidName) {
-        this.classifyButtonOidName = classifyButtonOidName;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyTemplateButtonDO{" +
-                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
-                ", classifyButtonOid='" + classifyButtonOid + '\'' +
-                ", classifyButtonOidName='" + classifyButtonOidName + '\'' +
-                ", buttonUse='" + buttonUse + '\'' +
-                ", buttonUseText='" + buttonUseText + '\'' +
-                ", orderNum=" + orderNum +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java
deleted file mode 100644
index c4ee7f8..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.Transient;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import org.springblade.code.constant.MdmLifeCycleConstant;
-
-/**
- * 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
- *
- * @author weidy
- * @date 2022-01-24
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE,text = "鍒嗙被妯℃澘瀵硅薄",lifeCycle = MdmLifeCycleConstant.CODE_CLASSIFY_TEMPLATE_LC,
-		revisionRule = FrameWorkDefaultValueConstant.NUMBER_REVISION,startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING)
-public class CodeClassifyTemplateDO extends BaseModel {
-
-	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
-	private static final long serialVersionUID = 4615707117801077811L;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿�
-	*/
-	@Column(columnDefinition = "涓婚搴撳垎绫讳富閿�"    ,showTextField = "codeClassifyOidName"  )
-    @VciUseRefer(value = MdmBtmTypeConstant.CODE_CLASSIFY,showTextField = "codeClassifyOidName" )
-    private String codeClassifyOid;
-
-	/**
-	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
-	*/
-	@Transient(referColumn = "codeClassifyOid.name")
-	private String codeClassifyOidName;
-
-	/**
-	 * 瀛樺偍鐨勪笟鍔$被鍨�
-	 */
-	@Column(columnDefinition = "涓氬姟绫诲瀷鐨勭紪鍙�")
-	private String btmTypeId;
-
-	/**
-	 * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
-	 */
-	@Column(columnDefinition = "涓氬姟绫诲瀷鐨勫悕绉�")
-	private String btmTypeName;
-
-	public String getCodeClassifyOid() {
-		return codeClassifyOid;
-	}
-
-	public void setCodeClassifyOid(String codeClassifyOid) {
-		this.codeClassifyOid = codeClassifyOid;
-	}
-
-	public String getCodeClassifyOidName() {
-		return codeClassifyOidName;
-	}
-
-	public void setCodeClassifyOidName(String codeClassifyOidName) {
-		this.codeClassifyOidName = codeClassifyOidName;
-	}
-
-	public String getBtmTypeId() {
-		return btmTypeId;
-	}
-
-	public void setBtmTypeId(String btmTypeId) {
-		this.btmTypeId = btmTypeId;
-	}
-
-	public String getBtmTypeName() {
-		return btmTypeName;
-	}
-
-	public void setBtmTypeName(String btmTypeName) {
-		this.btmTypeName = btmTypeName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateDO{" +
-				"codeClassifyOid='" + codeClassifyOid + '\'' +
-				", codeClassifyOidName='" + codeClassifyOidName + '\'' +
-				", btmTypeId='" + btmTypeId + '\'' +
-				", btmTypeName='" + btmTypeName + '\'' +
-				"} " + super.toString();
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java
deleted file mode 100644
index 41fb962..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.starter.web.annotation.*;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import org.springblade.code.constant.MdmEnumIdConstant;
-
-/**
- * 妯℃澘鏄犲皠瑙勫垯
- * 闆嗗洟鐮佸鍏ュ拰瀵煎嚭
- * @author weidy
- * @date 2022-1-17
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_MAP,text = "涓婚搴撴ā鏉挎槧灏勮鍒�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeClassifyTemplateMapDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = -7507653171857583003L;
-    /**
-     * 鎵�灞炴ā鏉�
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
-    private String classifyTemplateOid;
-
-    /**
-     * 鎵�灞炴ā鏉垮悕绉�
-     */
-    @Transient(referColumn = "classifyTemplateOid.name")
-    private String classifyTemplateName;
-
-    /**
-     * 鏄犲皠瑙勫垯缂栧彿
-     */
-    @Column(columnDefinition = "鏄犲皠瑙勫垯缂栧彿")
-    private String id;
-
-    /**
-     * 鏄犲皠瑙勫垯鍚嶇О
-     */
-    @Column(columnDefinition = "鏄犲皠瑙勫垯鍚嶇О",nullable = false)
-    private String name;
-
-    /**
-     * 鏄犲皠瑙勫垯绫诲瀷
-     */
-    @Column(columnDefinition = "鏄犲皠瑙勫垯绫诲瀷",nullable = false)
-    @VciUseEnum(value = MdmEnumIdConstant.CODE_MAP_RULE_TYPE,showTextField = "codeMapRuleTypeText")
-    private String codeMapRuleType;
-
-    /**
-     * 鏄犲皠瑙勫垯绫诲瀷鐨勫悕绉�
-     */
-    @Transient
-    private String codeMapRuleTypeText;
-
-    public String getClassifyTemplateOid() {
-        return classifyTemplateOid;
-    }
-
-    public void setClassifyTemplateOid(String classifyTemplateOid) {
-        this.classifyTemplateOid = classifyTemplateOid;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCodeMapRuleType() {
-        return codeMapRuleType;
-    }
-
-    public void setCodeMapRuleType(String codeMapRuleType) {
-        this.codeMapRuleType = codeMapRuleType;
-    }
-
-    public String getCodeMapRuleTypeText() {
-        return codeMapRuleTypeText;
-    }
-
-    public void setCodeMapRuleTypeText(String codeMapRuleTypeText) {
-        this.codeMapRuleTypeText = codeMapRuleTypeText;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyTemplateMapDO{" +
-                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", codeMapRuleType='" + codeMapRuleType + '\'' +
-                ", codeMapRuleTypeText='" + codeMapRuleTypeText + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java
deleted file mode 100644
index fc809c9..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊�
- * 鐩稿綋浜庣骇鑱旂殑涓嬫媺妗�
- * @author weidy
- * @date 2022-1-18
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_VALUE,text = "鍒嗙被鐮佹鐨勭爜鍊�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeClassifyValueDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 5238387322464830032L;
-    /**
-     * 鍒嗙被鐮佹涓婚敭
-     */
-    @Column(columnDefinition = "鍒嗙被鐮佹涓婚敭")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_BASIC_SEC)
-    private String codeClassifySecOid;
-
-    /**
-     * 鍒嗙被鐮佸��
-     */
-    @Column(columnDefinition = "鍒嗙被鐮佸��")
-    private String id;
-
-    /**
-     * 鍒嗙被鍚嶇О
-     */
-    @Column(columnDefinition = "鍒嗙被鍚嶇О")
-    private String name;
-
-    /**
-     * 鐮佸�煎簭鍙�
-     */
-    @Column(columnDefinition = "鐮佸�煎簭鍙�")
-    private Integer orderNum;
-
-    /**
-     * 涓婄骇鍒嗙被鐮佸�间富閿�
-     */
-    @Column(columnDefinition = "涓婄骇鍒嗙被鐮佸�间富閿�")
-    private String parentClassifyValueOid;
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCodeClassifySecOid() {
-        return codeClassifySecOid;
-    }
-
-    public void setCodeClassifySecOid(String codeClassifySecOid) {
-        this.codeClassifySecOid = codeClassifySecOid;
-    }
-
-    public String getParentClassifyValueOid() {
-        return parentClassifyValueOid;
-    }
-
-    public void setParentClassifyValueOid(String parentClassifyValueOid) {
-        this.parentClassifyValueOid = parentClassifyValueOid;
-    }
-
-    public Integer getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeClassifyValueDO{" +
-                "codeClassifySecOid='" + codeClassifySecOid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", orderNum=" + orderNum +
-                ", parentClassifyValueOid='" + parentClassifyValueOid + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java
deleted file mode 100644
index 8416111..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.springblade.code.model;
-
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊�
- * 鐩稿綋浜庡湪鏋氫妇鐨勪綔鐢紝浼氭湁澶氫釜
- * @author weidy
- * @date 2022-1-18
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_FIXED_VALUE,text = "鍥哄畾鐮佹鐨勭爜鍊�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeFixedValueDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 3392365440606832597L;
-    /**
-     * 鍥哄畾鐮佹涓婚敭
-     */
-    @Column(columnDefinition = "鍥哄畾鐮佹涓婚敭")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_BASIC_SEC)
-    private String codeFixedSecOid;
-
-    /**
-     * 鍥哄畾鐮佹鐨勭爜鍊�
-     */
-    @Column(columnDefinition = "鍥哄畾鐮佹鐨勭爜鍊�")
-    private String id;
-
-    /**
-     * 鍥哄畾鐮佹鐮佸�肩殑鎻忚堪
-     */
-    @Column(columnDefinition = "鍥哄畾鐮佹鐮佸�肩殑鎻忚堪")
-    private String name;
-
-    /**
-     * 灞炴�ф帓搴忓彿
-     */
-    @Column(columnDefinition = "灞炴�ф帓搴忓彿")
-    private Integer orderNum;
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCodeFixedSecOid() {
-        return codeFixedSecOid;
-    }
-
-    public void setCodeFixedSecOid(String codeFixedSecOid) {
-        this.codeFixedSecOid = codeFixedSecOid;
-    }
-
-    public Integer getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeFixedValueDO{" +
-                "codeFixedSecOid='" + codeFixedSecOid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", orderNum=" + orderNum +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java
deleted file mode 100644
index 180fc33..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.springblade.code.model;
-
-public class CodeImprotDataGridVO {
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java
deleted file mode 100644
index abe740f..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.springblade.code.model;
-
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
- * @author weidy
- * @date 2022-1-17
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_KEY_ATTR_REPEAT_RULE,text = "鍏抽敭鏁版嵁鏌ラ噸瑙勫垯",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
-public class CodeKeyAttrRepeatRuleDO extends BaseModel {
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 6696611801656232742L;
-
-    /**
-     * 鏌ラ噸瑙勫垯鑻辨枃缂栧彿
-     */
-    @Column(columnDefinition = "鏌ラ噸瑙勫垯鑻辨枃缂栧彿")
-    private String id;
-
-    /**
-     * 鏌ラ噸瑙勫垯涓枃鍚嶇О
-     */
-    @Column(nullable = false,columnDefinition = "鏌ラ噸瑙勫垯涓枃鍚嶇О")
-    private String name;
-
-    /**
-     * 鏄惁蹇界暐澶у皬鍐�
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐澶у皬鍐�")
-    private String ignoreCaseFlag;
-
-    /**
-     * 鏄惁蹇界暐绌烘牸
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐绌烘牸")
-    private String ignoreSpaceFlag;
-
-    /**
-     * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄩ儴绌烘牸")
-    private String ignoreAllSpaceFlag;
-
-    /**
-     * 鏄惁蹇界暐鍏ㄥ崐瑙�
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄥ崐瑙�")
-    private String ignoreWidthFlag;
-
-    public String getIgnoreWidthFlag() {
-        return ignoreWidthFlag;
-    }
-
-    public void setIgnoreWidthFlag(String ignoreWidthFlag) {
-        this.ignoreWidthFlag = ignoreWidthFlag;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getIgnoreCaseFlag() {
-        return ignoreCaseFlag;
-    }
-
-    public void setIgnoreCaseFlag(String ignoreCaseFlag) {
-        this.ignoreCaseFlag = ignoreCaseFlag;
-    }
-
-    public String getIgnoreSpaceFlag() {
-        return ignoreSpaceFlag;
-    }
-
-    public void setIgnoreSpaceFlag(String ignoreSpaceFlag) {
-        this.ignoreSpaceFlag = ignoreSpaceFlag;
-    }
-
-    public String getIgnoreAllSpaceFlag() {
-        return ignoreAllSpaceFlag;
-    }
-
-    public void setIgnoreAllSpaceFlag(String ignoreAllSpaceFlag) {
-        this.ignoreAllSpaceFlag = ignoreAllSpaceFlag;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeKeyAttrRepeatRuleDO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", ignoreCaseFlag='" + ignoreCaseFlag + '\'' +
-                ", ignoreSpaceFlag='" + ignoreSpaceFlag + '\'' +
-                ", ignoreAllSpaceFlag='" + ignoreAllSpaceFlag + '\'' +
-                ", ignoreWidthFlag='" + ignoreWidthFlag + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java
deleted file mode 100644
index e37c25f..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.springblade.code.model;
-
-
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-
-/**
- * 闃舵鐨勫睘鎬�
- * @author weidy
- * @date 2022-1-14
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_PHASE_ATTR,text = "闃舵鐨勫睘鎬�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodePhaseAttrDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 1316335276045033657L;
-    /**
-     * 鎵�灞為樁娈电殑淇℃伅
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉块樁娈�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE)
-    private String codePhaseOid;
-
-    /**
-     * 灞炴�х紪鍙�
-     */
-    @Column(columnDefinition = "灞炴�х紪鍙�",nullable = false)
-    private String id;
-
-    /**
-     * 灞炴�у悕绉�
-     */
-    @Column(columnDefinition = "灞炴�у悕绉�")
-    private String name;
-
-    /**
-     * 鎵�灞炲睘鎬у垎缁�
-     */
-    @Column(columnDefinition = "鎵�灞炲睘鎬у垎缁�")
-    private String attributeGroup;
-
-    public String getAttributeGroup() {
-        return attributeGroup;
-    }
-
-    public void setAttributeGroup(String attributeGroup) {
-        this.attributeGroup = attributeGroup;
-    }
-
-    public String getCodePhaseOid() {
-        return codePhaseOid;
-    }
-
-    public void setCodePhaseOid(String codePhaseOid) {
-        this.codePhaseOid = codePhaseOid;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public String toString() {
-        return "CodePhaseAttrDO{" +
-                "codePhaseOid='" + codePhaseOid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", attributeGroup='" + attributeGroup + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java
deleted file mode 100644
index db85fdd..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.springblade.code.model;
-
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯
- * @author weidy
- * @date 2022-4-10
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_RESEMBLE_RULE,text = "鐩镐技鏌ヨ瑙勫垯",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
-public class CodeResembleRuleDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 7375719926432663351L;
-
-    /**
-     * 鐩镐技鏌ヨ瑙勫垯缂栧彿
-     */
-    @Column(columnDefinition = "鐩镐技鏌ヨ瑙勫垯缂栧彿")
-    private String id;
-
-    /**
-     * 鐩镐技鏌ヨ瑙勫垯缂栧彿
-     */
-    @Column(nullable = false,columnDefinition = "鐩镐技鏌ヨ瑙勫垯缂栧彿")
-    private String name;
-
-    /**
-     * 鏄惁蹇界暐澶у皬鍐�
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐澶у皬鍐�")
-    private String ignoreCaseFlag;
-
-    /**
-     * 鏄惁蹇界暐绌烘牸
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐绌烘牸")
-    private String ignoreSpaceFlag;
-
-    /**
-     * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄩ儴绌烘牸")
-    private String ignoreAllSpaceFlag;
-
-    /**
-     * 鏄惁蹇界暐鍏ㄥ崐瑙�
-     */
-    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄥ崐瑙�")
-    private String ignoreWidthFlag;
-
-    /**
-     * 杩炴帴绗�
-     */
-    @Column(columnDefinition = "杩炴帴绗�",length = 200)
-    private String linkCharacter;
-
-    public String getIgnoreWidthFlag() {
-        return ignoreWidthFlag;
-    }
-
-    public void setIgnoreWidthFlag(String ignoreWidthFlag) {
-        this.ignoreWidthFlag = ignoreWidthFlag;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getIgnoreCaseFlag() {
-        return ignoreCaseFlag;
-    }
-
-    public void setIgnoreCaseFlag(String ignoreCaseFlag) {
-        this.ignoreCaseFlag = ignoreCaseFlag;
-    }
-
-    public String getIgnoreSpaceFlag() {
-        return ignoreSpaceFlag;
-    }
-
-    public void setIgnoreSpaceFlag(String ignoreSpaceFlag) {
-        this.ignoreSpaceFlag = ignoreSpaceFlag;
-    }
-
-    public String getIgnoreAllSpaceFlag() {
-        return ignoreAllSpaceFlag;
-    }
-
-    public void setIgnoreAllSpaceFlag(String ignoreAllSpaceFlag) {
-        this.ignoreAllSpaceFlag = ignoreAllSpaceFlag;
-    }
-
-
-    public String getLinkCharacter() {
-        return linkCharacter;
-    }
-
-    public void setLinkCharacter(String linkCharacter) {
-        this.linkCharacter = linkCharacter;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeResembleRuleDO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", ignoreCaseFlag='" + ignoreCaseFlag + '\'' +
-                ", ignoreSpaceFlag='" + ignoreSpaceFlag + '\'' +
-                ", ignoreAllSpaceFlag='" + ignoreAllSpaceFlag + '\'' +
-                ", ignoreWidthFlag='" + ignoreWidthFlag + '\'' +
-                ", linkCharacter='" + linkCharacter + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java
deleted file mode 100644
index 26f31e2..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
-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;
-
-/**
- * 缂栫爜瑙勫垯
- * @author weidy
- * @date 2022-1-18
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_RULE,text = "涓绘暟鎹紪鐮佽鍒�",lifeCycle = MdmLifeCycleConstant.CODE_RULE_LC,startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING)
-public class CodeRuleDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = -7142347409110551299L;
-    /**
-     * 瑙勫垯缂栧彿
-     */
-    @Column(columnDefinition = "瑙勫垯缂栧彿")
-    private String id;
-
-    /**
-     * 瑙勫垯鐨勫悕绉�
-     */
-    @Column(columnDefinition = "瑙勫垯鍚嶇О")
-    private String name;
-
-    /**
-     * 瑙勫垯鐨勬弿杩�
-     */
-    @Column(columnDefinition = "瑙勫垯鐨勬弿杩�")
-    private String description;
-
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeRuleDO{" +
-                "id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", description='" + description + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java
deleted file mode 100644
index 3d1c7a5..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.springblade.code.model;
-
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-
-/**
- * 缂栫爜瑙勫垯鐨勬祦姘村��
- * @author weidy
- * @date 2022-3-1
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_SERIAL_VALUE,text = "娴佹按鐨勫��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeSerialValueDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 4585738864706015777L;
-    /**
-     * 缂栫爜瑙勫垯鐨勪富閿�
-     */
-    @Column(nullable = false,columnDefinition = "缂栫爜瑙勫垯涓婚敭")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
-    private String codeRuleOid;
-
-    /***
-     * 娴佹按渚濊禆
-     */
-    @Column(length = 4000,columnDefinition = "娴佹按渚濊禆")
-    private String serialUnit;
-
-    /**
-     * 鐮佹鐨勪富閿�
-     */
-    @Column(columnDefinition = "鐮佹鐨勪富閿�")
-    private String codeSecOid;
-
-    /**
-     * 鏈�澶ф祦姘村彿
-     */
-    @Column(columnDefinition = "鏈�澶ф祦姘村彿")
-    private String maxSerial;
-
-    public String getCodeRuleOid() {
-        return codeRuleOid;
-    }
-
-    public void setCodeRuleOid(String codeRuleOid) {
-        this.codeRuleOid = codeRuleOid;
-    }
-
-    public String getSerialUnit() {
-        return serialUnit;
-    }
-
-    public void setSerialUnit(String serialUnit) {
-        this.serialUnit = serialUnit;
-    }
-
-    public String getCodeSecOid() {
-        return codeSecOid;
-    }
-
-    public void setCodeSecOid(String codeSecOid) {
-        this.codeSecOid = codeSecOid;
-    }
-
-    public String getMaxSerial() {
-        return maxSerial;
-    }
-
-    public void setMaxSerial(String maxSerial) {
-        this.maxSerial = maxSerial;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeSerialValueDO{" +
-                "codeRuleOid='" + codeRuleOid + '\'' +
-                ", serialUnit='" + serialUnit + '\'' +
-                ", codeSecOid='" + codeSecOid + '\'' +
-                ", maxSerial='" + maxSerial + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java
deleted file mode 100644
index 3b7b468..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.springblade.code.model;
-
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.Transient;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-import org.springblade.code.constant.MdmBtmTypeConstant;
-
-/**
- * 鍚屼箟璇�
- * @author weidy
- * @date 2022-2-17
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_SYNONYM,text = "鍚屼箟璇嶉厤缃�",description = "鍚屼箟璇嶉厤缃�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeSynonymDO extends BaseModel {
-
-    /**
-     * 妯℃澘涓婚敭
-     */
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
-    @Column(nullable = false,columnDefinition = "妯℃澘涓婚敭")
-    private String codeClassifyTemplateOid;
-
-    /**
-     * 妯℃澘鐨勫悕绉�
-     */
-    @Transient(referColumn = "codeClassifyTemplateOid.name")
-    private String codeClassifyTemplateOidName;
-
-
-    /**
-     * 灞炴�х殑鑻辨枃鍚嶇О
-     */
-    @Column(nullable = false,columnDefinition = "灞炴�ц嫳鏂囧悕绉�")
-    private String id;
-
-    /**
-     * 灞炴�х殑涓枃鍚嶇О
-     */
-    @Column(nullable = false,columnDefinition = "灞炴�т腑鏂囧悕绉�")
-    private String name;
-
-    /**
-     * 婧愬��
-     */
-    @Column(nullable = false,length = 200,columnDefinition = "婧愬��")
-    private String sourceValue;
-
-    /**
-     * 鍚屼箟璇�
-     */
-    @Column(nullable = false,length = 200,columnDefinition = "鍚屼箟璇�")
-    private String synonymValue;
-
-    public String getCodeClassifyTemplateOid() {
-        return codeClassifyTemplateOid;
-    }
-
-    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
-        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
-    }
-
-    public String getCodeClassifyTemplateOidName() {
-        return codeClassifyTemplateOidName;
-    }
-
-    public void setCodeClassifyTemplateOidName(String codeClassifyTemplateOidName) {
-        this.codeClassifyTemplateOidName = codeClassifyTemplateOidName;
-    }
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSourceValue() {
-        return sourceValue;
-    }
-
-    public void setSourceValue(String sourceValue) {
-        this.sourceValue = sourceValue;
-    }
-
-    public String getSynonymValue() {
-        return synonymValue;
-    }
-
-    public void setSynonymValue(String synonymValue) {
-        this.synonymValue = synonymValue;
-    }
-
-
-    @Override
-    public String toString() {
-        return "CodeSynonymDO{" +
-                "codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
-                ", codeClassifyTemplateOidName='" + codeClassifyTemplateOidName + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", sourceValue='" + sourceValue + '\'' +
-                ", synonymValue='" + synonymValue + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java
deleted file mode 100644
index 7aa35cf..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.springblade.code.model;
-
-
-import org.springblade.code.constant.MdmBtmTypeConstant;
-import com.vci.starter.web.annotation.Column;
-import com.vci.starter.web.annotation.VciBtmType;
-import com.vci.starter.web.annotation.VciUseRefer;
-import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
-import com.vci.starter.web.model.BaseModel;
-
-/**
- * 妯℃澘闃舵
- * @author weidy
- * @date 2022-1-14
- */
-@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_PHASE,text = "妯℃澘闃舵",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
-public class CodeTemplatePhaseDO extends BaseModel {
-
-    /**
-     * 搴忓垪鍖�
-     */
-    private static final long serialVersionUID = 3526024656097456437L;
-    /**
-     * 鎵�灞炵紪鐮佹ā鏉�
-     */
-    @Column(nullable = false,columnDefinition = "鎵�灞炵紪鐮佹ā鏉�")
-    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
-    private String codeClassifyTemplateOid;
-
-    /**
-     * 闃舵缂栧彿
-     */
-    @Column(columnDefinition = "闃舵缂栧彿")
-    private String id;
-
-    /**
-     * 闃舵鍚嶇О
-     */
-    @Column(nullable = false,columnDefinition = "闃舵鍚嶇О")
-    private String name;
-
-
-
-    @Override
-    public String getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCodeClassifyTemplateOid() {
-        return codeClassifyTemplateOid;
-    }
-
-    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
-        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
-    }
-
-
-    @Override
-    public String toString() {
-        return "CodeTemplatePhaseDO{" +
-                "codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                "} " + super.toString();
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java
deleted file mode 100644
index 56653bc..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java
+++ /dev/null
@@ -1,148 +0,0 @@
-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
deleted file mode 100644
index 0ad2461..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingLogeDO.java
+++ /dev/null
@@ -1,228 +0,0 @@
-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
deleted file mode 100644
index 0f97469..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataDO.java
+++ /dev/null
@@ -1,266 +0,0 @@
-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
deleted file mode 100644
index 3bfac1d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataInfoDO.java
+++ /dev/null
@@ -1,103 +0,0 @@
-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
deleted file mode 100644
index 4b27d1d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrMappingDO.java
+++ /dev/null
@@ -1,207 +0,0 @@
-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
deleted file mode 100644
index 87a04e5..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrRangeDO.java
+++ /dev/null
@@ -1,95 +0,0 @@
-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
deleted file mode 100644
index 2d718b4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingTaskDO.java
+++ /dev/null
@@ -1,224 +0,0 @@
-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
deleted file mode 100644
index e9bd2c4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntAuthorityDO.java
+++ /dev/null
@@ -1,159 +0,0 @@
-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
deleted file mode 100644
index 5333ac6..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntBaseDO.java
+++ /dev/null
@@ -1,78 +0,0 @@
-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
deleted file mode 100644
index 54e1298..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntHeaderDO.java
+++ /dev/null
@@ -1,90 +0,0 @@
-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
deleted file mode 100644
index 3b7e93d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntInfoDO.java
+++ /dev/null
@@ -1,656 +0,0 @@
-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
deleted file mode 100644
index 55703c1..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntParamDO.java
+++ /dev/null
@@ -1,89 +0,0 @@
-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
deleted file mode 100644
index bcb3abc..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/TaskDuckingDO.java
+++ /dev/null
@@ -1,236 +0,0 @@
-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
deleted file mode 100644
index 75db4ce..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package org.springblade.code.service;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.*;
-import com.vci.web.pageModel.BatchCBO;
-import org.springblade.code.dto.CodeBasicSecDTO;
-import org.springblade.code.model.CodeBasicSecDO;
-import org.springblade.code.vo.pagemodel.CodeBasicSecVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鐮佹鍩虹淇℃伅鏈嶅姟鎺ュ彛
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeBasicSecServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑鐮佹鍩虹淇℃伅
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeBasicSecVO> gridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO>  codeBasicSecDOs) throws VciBaseException;
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasFixedValue 鏄惁鏈夊浐瀹氬��
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs, boolean hasFixedValue) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeBasicSecDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSecDO codeBasicSecDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鐮佹鍩虹淇℃伅
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeBasicSecVO addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鐮佹鍩虹淇℃伅
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeBasicSecVO editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎鐮佹鍩虹淇℃伅
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
-    * @param oid 涓婚敭
-    * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeBasicSecVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeBasicSecVO> listCodeBasicSecByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 涓婚敭鍒犻櫎鐮佹鍩虹淇℃伅
-     * @param oid 鐮佹鍩虹淇℃伅涓婚敭
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeBasicSecByPrimaryKey(String oid) throws VciBaseException;
-
-    /**
-     * 鍏嬮殕鐮佹淇℃伅
-     * @param oidList 婧愮爜娈典俊鎭富閿泦鍚�
-     * @param pkCodeRule 鐩爣缂栫爜瑙勫垯
-     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    BaseResult cloneCodeBasicSec(List<String> oidList, String pkCodeRule);
-
-    /**
-     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
-     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
-     * @return 鍒嗙被鐮佹鏍戠粨鏋�
-     */
-    List<Tree> gridCodeClassifySecTree(String oid);
-
-    /**
-     * 鏍规嵁鐮佹鍒嗙被鐨勭被鍨嬪垽鏂睘鎬ф槸鍚︽槸绌虹殑
-     *
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鏈夌┖鐨勫垯浼爇ey-灞炴�у悕 value-瀛楁鍚箟锛屾病鏈夌┖鐨勫垯浼� key-success value-true
-     */
-    KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO);
-
-    /**
-     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鍐呭
-     * @param ruleOid 瑙勫垯鐨勫唴瀹�
-     * @return 鐮佹鐨勫唴瀹�
-     */
-    List<CodeBasicSecVO> listCodeBasicSecByRuleOid(String ruleOid);
-
-    /**
-     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鐨勫唴瀹�
-     * @param ruleCollection 瑙勫垯涓婚敭闆嗗悎
-     * @return 鐮佹鐨勫唴瀹�
-     */
-    List<CodeBasicSecVO> listCodeBasicSecByRuleOids(Collection<String> ruleCollection);
-
-    /**
-     * 鍙傜収鍒嗙被鐨勭爜娈�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鐨勫璞�
-     * @return 鐮佹鐨勫唴瀹�
-     */
-    DataGrid<CodeBasicSecVO> refDataGridClassifySec(Map<String, String> conditionMap, PageHelper pageHelper);
-
-    /**
-     * 鏍规嵁缂栫爜瑙勫垯鎵归噺鍒犻櫎鐮佹鍩烘湰淇℃伅
-     * @param codeRuleOid 缂栫爜瑙勫垯涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    BatchCBO batchDeleteSecByCodeRuleOid(String codeRuleOid);
-
-    /**
-     * 涓婄Щ
-     * @param oid 涓婚敭
-     */
-    void upOrderNum(String oid);
-
-    /**
-     * 涓嬬Щ
-     * @param oid 涓婚敭
-     */
-    void downOrderNum(String oid);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java
deleted file mode 100644
index 7e538a8..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java
+++ /dev/null
@@ -1,115 +0,0 @@
-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.CodeButtonDTO;
-import org.springblade.code.model.CodeButtonDO;
-import org.springblade.code.vo.pagemodel.CodeButtonVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓绘暟鎹腑鐨勬寜閽墿灞曟湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeButtonServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeButtonVO> gridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButtonDO>  codeButtonDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeButtonDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeButtonVO codeButtonDO2VO(CodeButtonDO codeButtonDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeButtonVO addSave(CodeButtonDTO codeButtonDTO) throws VciBaseException;
-
-    /**
-     * 淇敼涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeButtonVO editSave(CodeButtonDTO codeButtonDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeButton(CodeButtonDTO codeButtonDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
-    * @param oid 涓婚敭
-    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeButtonVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeButtonVO> refDataGridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 鍚敤
-     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult enableCodeButton(CodeButtonDTO buttonDTO);
-
-    /**
-     * 鍋滅敤
-     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult disableCodeButton(CodeButtonDTO buttonDTO);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java
deleted file mode 100644
index aa38a9a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java
+++ /dev/null
@@ -1,124 +0,0 @@
-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 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;
-import java.util.Map;
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeClassifyProcessTempServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTempDO codeClassifyProcessTempDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-    * @param oid 涓婚敭
-    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
-     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
-     * @return 鍙楀奖鍝嶇殑鍐呭
-     */
-    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) ;
-
-    /**
-     * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
-     * @param codeTemplateOid 妯℃澘鐨勪富閿�
-     * @param processUse 鐢ㄩ��
-     * @return 妯℃澘鐨勪俊鎭�
-     */
-    List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse);
-
-    /**
-     * 浣跨敤妯℃澘鍚嶇О鏌ヨ
-     * @param codeTemplateOid 鍒嗙被妯℃澘涓婚敭
-     * @param processName 妯℃澘鍚嶇О
-     */
-    CodeClassifyProcessTempVO getProcessTempVOByName(String codeTemplateOid,String processName);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java
deleted file mode 100644
index 3ac7dd0..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package org.springblade.code.service;
-
-
-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;
-import java.util.List;
-
-/**
- * 涓婚搴撳垎绫绘湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-20
- */
-public interface CodeClassifyServiceI {
-    /**
-     * 鏌ヨ涓婚搴撳垎绫� 鏍�
-     * @param treeQueryObject 鏍戞煡璇㈠璞�
-     * @return 涓婚搴撳垎绫� 鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws VciBaseException;
-
-    /**
-     * 涓婚搴撶殑鏍�
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 涓婚搴撴樉绀烘爲
-     */
-    List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject);
-
-    /**
-     * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
-     *
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
-     */
-    List<CodeClassifyDO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject);
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO>  codeClassifyDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyVO codeClassifyDO2VO(CodeClassifyDO codeClassifyDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyVO addSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
-
-    /**
-     * 淇敼涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    BaseResult editSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
-
-
-    /**
-     * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
-     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
-
-    /**
-     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
-     *
-     * @param oid 涓婚敭
-     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
-     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    boolean checkChildIsLinked(String oid) throws VciBaseException;
-
-    /**
-     * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
-     *
-     * @param oid 涓婚敭
-     * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
-     * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    boolean checkHasChild(String oid) throws VciBaseException;
-
-    /**
-     * 鍒犻櫎涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassify(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撳垎绫绘樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撳垎绫绘樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyVO> listCodeClassifyByOids(Collection<String> oidCollections) throws VciBaseException;
-
-    /**
-     * 鍙傜収鏍� 涓婚搴撳垎绫�
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 涓婚搴撳垎绫绘樉绀烘爲
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
-
-    /**
-     * 鍚敤銆佸仠鐢�
-     * @param oid 涓婚敭
-     * @param lcStatus 鐘舵��
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult updateLcStatus( String oid, String lcStatus);
-
-    /**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄
-     */
-    List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
-
-    /**
-     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鍒嗙被鐩稿叧鐨勬墍鏈変俊鎭�
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 鍒嗙被涓婄骇锛屼笅绾х殑淇℃伅
-     */
-    CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid);
-
-    /**
-     * 鑾峰彇褰撳墠鍒嗙被鐨勯《灞傚垎绫�
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 椤跺眰鍒嗙被鐨勪俊鎭�
-     */
-    CodeClassifyVO getTopClassifyVO(String codeClassifyOid);
-
-    /**
-     * 缁熻瀛愯妭鐐圭殑涓暟
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 涓暟
-     */
-    int countChildrenByClassifyOid(String codeClassifyOid);
-    /**
-     * 鑾峰彇瀛愮骇鐨勪富棰樺簱鍒嗙被
-     *
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @param allLevel        鏄惁鎵�鏈夌殑灞傜骇
-     * @param fieldInPath 鍦ㄨ矾寰勪腑鐨勫瓧娈�
-     * @param enable 鏄惁鍙樉绀哄惎鐢�
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    List<CodeClassifyVO> listChildrenClassify(String codeClassifyOid, boolean allLevel, String fieldInPath, boolean enable);
-
-    /**
-     * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
-     *
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    List<CodeClassifyVO> listParentClassify(String codeClassifyOid);
-
-    /**
-     * 瀵煎嚭鍒嗙被
-     * @param oid 鍒嗙被涓婚敭
-     * @return excel鏂囦欢璺緞
-     */
-    String exportClassify(String oid);
-
-    /**
-     * 鍒涘缓瀵煎叆妯℃澘
-     * @return excel鏂囦欢璺緞
-     */
-    String createImportExcel();
-
-    /**
-     * 瀵煎叆鍒嗙被
-     * @param file1 鏂囦欢鐨勪俊鎭�
-     */
-    void importClassify(File file1);
-
-    /**
-     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
-     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢
-     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
-     */
-    DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject);
-
-    /**
-     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
-     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    CodeClassifyVO getObjectByIdPath(String idPath);
-
-    /**
-     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
-     * @param clsfNamePath 鍒嗙被鍚嶇О鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    CodeClassifyVO getObjectByClsfNamePath(String clsfNamePath);
-
-    /***
-     * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
-     * @param classifyId
-     * @param enable
-     * @return
-     */
-    public List<CodeClassifyVO> getIdPathToNamePathByParentId(String classifyId,boolean enable);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java
deleted file mode 100644
index d854dd6..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java
+++ /dev/null
@@ -1,101 +0,0 @@
-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.CodeClassifyTempMapItemDTO;
-import org.springblade.code.model.CodeClassifyTempMapItemDO;
-import org.springblade.code.vo.pagemodel.CodeClassifyTempMapItemVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁嗘湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-03-10
- */
-public interface CodeClassifyTempMapItemServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTempMapItemDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTempMapItemDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyTempMapItemVO codeClassifyTempMapItemDO2VO(CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTempMapItemVO addSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTempMapItemVO editSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassifyTempMapItem(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
-    * @param oid 涓婚敭
-    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyTempMapItemVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java
deleted file mode 100644
index cf1dcfa..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package org.springblade.code.service;
-
-
-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;
-import java.util.Map;
-
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeClassifyTemplateAttrServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttrDO>  codeClassifyTemplateAttrDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateAttrVO addSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
-    List<CodeClassifyTemplateAttrVO> batchAddSave(List<CodeClassifyTemplateAttrDTO> codeClassifyTemplateAttrDTOs) throws VciBaseException;
-
-    /**
-     * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    BaseResult editSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassifyTemplateAttr(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-    * @param oid 涓婚敭
-    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyTemplateAttrVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
-     * @param baseQueryObject
-     * @return
-     */
-    DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject);
-
-    /**
-     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
-     * @param baseQueryObject
-     * @return
-     */
-    DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject);
-
-    /**
-     * 鍚屾鍒板叾浠栨ā鏉�
-     * @param codeClassifyTemplateAttrDTO oid
-     * @return
-     */
-    BaseResult copyto(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
-
-    /**
-     * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
-     * @param templateOidCollection 妯℃澘鐨勪富閿�
-     * @return 灞炴�х殑淇℃伅
-     */
-    List<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection);
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java
deleted file mode 100644
index 700e08c..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java
+++ /dev/null
@@ -1,133 +0,0 @@
-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 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;
-import java.util.Map;
-
-/**
- * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeClassifyTemplateButtonServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO>  codeClassifyTemplateButtonDOs) throws VciBaseException;
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateButtonVO addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
-
-    /**
-     * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateButtonVO editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
-     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid);
-
-    /**
-     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
-     * @param templateOid 妯℃澘鐨勪富閿�
-     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
-     */
-    List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid);
-
-    /**
-     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
-     * @param templateOid 妯℃澘鐨勪富閿�
-     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勬樉绀轰俊鎭�
-     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
-     */
-    List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid,boolean hasButtonVO);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java
deleted file mode 100644
index c327e9e..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java
+++ /dev/null
@@ -1,100 +0,0 @@
-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.CodeClassifyTemplateMapDTO;
-import org.springblade.code.model.CodeClassifyTemplateMapDO;
-import org.springblade.code.vo.pagemodel.CodeClassifyTemplateMapVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 涓婚搴撴ā鏉挎槧灏勮鍒欐湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeClassifyTemplateMapServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateMapDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateMapDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateMapVO codeClassifyTemplateMapDO2VO(CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateMapVO addSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
-
-    /**
-     * 淇敼涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateMapVO editSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassifyTemplateMap(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyTemplateMapVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java
deleted file mode 100644
index d14eed2..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.springblade.code.service;
-
-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;
-import java.util.Map;
-
-/**
- * 鍒嗙被妯℃澘瀵硅薄鏈嶅姟鎺ュ彛
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeClassifyTemplateServiceI {
-    /**
-     * 鏌ヨ鍒嗙被妯℃澘瀵硅薄 鏍�
-     * @param treeQueryObject 鏍戞煡璇㈠璞�
-     * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject) throws VciBaseException;
-    /**
-      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
-      *
-      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
-      */
-    List<CodeClassifyTemplateDO> selectCodeClassifyTemplateDOByTree(TreeQueryObject treeQueryObject);
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO> codeClassifyTemplateDOs) throws VciBaseException;
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasAttr 鏄惁鍖呭惈灞炴��
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO> codeClassifyTemplateDOs, boolean hasAttr) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateVO codeClassifyTemplateDO2VO(CodeClassifyTemplateDO codeClassifyTemplateDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    BaseResult<CodeClassifyTemplateVO> addSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    BaseResult editSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
-
-    /**
-     * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
-     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult checkIsCanDelete(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
-
-    /**
-     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
-     *
-     * @param oid 涓婚敭
-     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
-     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-     boolean checkChildIsLinked(String oid) throws VciBaseException;
-
-    /**
-      * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
-      *
-      * @param oid 涓婚敭
-      * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
-      * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-      */
-    boolean checkHasChild(String oid) throws VciBaseException;
-
-    /**
-     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassifyTemplate(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
-    * @param oid 涓婚敭
-    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyTemplateVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄(鍖呭惈灞炴�э級
-     * @param oid 涓婚敭
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyTemplateVO getObjectHasAttrByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
-
-    /**
-     * 鍒嗙被妯℃澘鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 鍚敤銆佸仠鐢�
-     * @param oid
-     * @param lcStatus
-     * @return
-     */
-    BaseResult updateLcStatus( String oid, String lcStatus);
-
-    /**
-     * 鍗囩増
-     */
-    BaseResult Upgrade(CodeClassifyTemplateDTO codeClassifyDTO);
-
-    /**
-     * 妯℃澘鍏嬮殕
-     */
-    BaseResult copyTemplate(CodeClassifyTemplateDTO codeClassifyDTO);
-
-    /**
-     * 浣跨敤涓婚搴撶殑鍒嗙被涓婚敭锛岃幏鍙栫敓鏁堢殑妯℃澘
-     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
-     * @param hasAttribute 鏄惁鍖呭惈灞炴��
-     * @return 妯℃澘鐨勪俊鎭�
-     */
-    List<CodeClassifyTemplateVO> listReleaseTemplateByClassifyOid(String codeClassifyOid,boolean hasAttribute);
-
-    /**
-     * 鐢ㄦā鏉跨殑鐗堟湰鏉ユ帓搴�
-     * @param templateVOList 妯℃澘鐨勬樉绀哄璞�
-     * @return 鎺掑簭鍚庣殑鍒楄〃
-     */
-    List<CodeClassifyTemplateVO> sortTemplateByRevision(List<CodeClassifyTemplateVO> templateVOList);
-
-    /**
-     * 鏍¢獙瀛愬垎绫绘槸鍚︾浉鍚岀殑妯℃澘
-     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
-     * @return true琛ㄧず鐩稿悓
-     */
-    boolean checkChildHasSameTemplate(String codeClassifyOid);
-    /**
-     * 鑾峰彇鎵�鏈夊瓙鍒嗙被妯℃澘
-     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
-     * @return true琛ㄧず鐩稿悓
-     */
-    List<CodeClassifyTemplateVO> childTemplates(String codeClassifyOid);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java
deleted file mode 100644
index 830eaed..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java
+++ /dev/null
@@ -1,152 +0,0 @@
-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.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;
-
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeClassifyValueServiceI {
-    /**
-     * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
-     * @param treeQueryObject 鏍戞煡璇㈠璞�
-     * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException;
-    /**
-      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
-      *
-      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
-      */
-    List<CodeClassifyValueDO> selectCodeClassifyValueDOByTree(TreeQueryObject treeQueryObject);
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyValueDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeClassifyValueVO> codeClassifyValueDO2VOs(Collection<CodeClassifyValueDO>  codeClassifyValueDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyValueDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeClassifyValueVO codeClassifyValueDO2VO(CodeClassifyValueDO codeClassifyValueDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyValueVO addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeClassifyValueVO editSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
-
-    /**
-     * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
-     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult checkIsCanDelete(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
-
-    /**
-     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
-     *
-     * @param oid 涓婚敭
-     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
-     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-     boolean checkChildIsLinked(String oid) throws VciBaseException;
-
-    /**
-      * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
-      *
-      * @param oid 涓婚敭
-      * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
-      * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-      */
-    boolean checkHasChild(String oid) throws VciBaseException;
-
-    /**
-     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeClassifyValue(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
-    * @param oid 涓婚敭
-    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeClassifyValueVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeClassifyValueVO> listCodeClassifyValueByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
-
-    /**
-     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
-     * @param classifySecOid 鐮佹鐨勪富閿�
-     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
-     * @return 鍒嗙被鐮佸�肩殑鍐呭
-     */
-    List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid);
-
-    /**
-     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
-     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult batchDeleteBySecOid(String codeclassifysecoid);
-
-    /**
-     * 鎵归噺娣诲姞鍒嗙被鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
-     * @param dtoList 鍒嗙被鐮佹鐨勭爜鍊煎垪琛�
-     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult batchSave4Order(List<CodeClassifyValueDTO> dtoList, String codeclassifysecoid);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java
deleted file mode 100644
index f895be7..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java
+++ /dev/null
@@ -1,92 +0,0 @@
-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.model.DockingDataDO;
-import org.springblade.code.model.DockingLogeDO;
-import org.springblade.code.model.DockingTaskDO;
-import org.springblade.code.model.SysIntHeaderDO;
-
-import java.util.Map;
-
-/**
- * 涓�銆侀厤缃垎绫汇�佺郴缁熴�佹帴鍙f暟鎹�
- * 1銆侀厤缃郴缁烻ysIntBaseDO
- * 2銆侀厤缃郴缁熴�佹帴鍙c�佸垎绫籗ysIntInfoDO
- *
- * 浜屻�佸鐞嗛鐢宠鏁版嵁
- * 1銆佹帴鏀秞mlData
- * 2銆佸伐鑹虹郴缁熺壒娈婂鐞嗭紝鏍规嵁unique鏌ヨ缂栫爜锛屾湁宸茬粡鍙戝竷鐨勬暟鎹紝鐩存帴杩斿洖缂栫爜銆傛病鏈夋煡璇㈠埌宸茬粡鍙戝竷鐨勭紪鐮侊紙缂栬緫涓�佹彁浜や腑銆佸鏍镐腑銆佸仠鐢ㄧ瓑锛夊拰涓�鑸郴缁熶竴鏍锋寜鐓х3姝ュ鐞�
- * 3銆佽В鏋恱mlData閲屾瘡涓�涓猟ata鑺傜偣锛屽瓨鍌ㄥ叆DockingPreApplyDataDO锛宒ata鑺傜偣涓媝ros鑺傜偣瀛樺偍鍏ockingPreApplyDataInfoDO
- * 4銆佽繑鍥瀤mlData锛岄噷杈规爣璇嗕簡姣忎竴涓猟ata鐨勫鐞嗙粨鏋�
- *
- * 涓夈�佹牴鎹鐢宠鏁版嵁锛屾彃鍏ヤ富鏁版嵁
- * 1銆佸叧鑱斿垎绫�
- * 2銆佹煡璇㈠嚭DockingPreApplyDataInfoDO瀛樺偍鐨勬暟鎹紝鎸夌収鏁版嵁鏄犲皠xml锛岃浆鎹负鎴戜滑鐨刱ey锛岃繑缁欏墠绔嚜鍔ㄥ~鍏呭埌鏂板鏁版嵁鐨勯〉闈�
- * 3銆佽皟鐢ㄩ�氱敤鐨勬暟鎹柊澧炴帴鍙d繚瀛樻暟鎹紝杩欎竴姝ュ拰涓绘暟鎹鐞嗘ā鍧楀姛鑳戒竴鏍�
- *
- * 鍥涖�佹帹閫佹暟鎹�
- * 1銆佸垎绫绘暟鎹拰涓绘暟鎹湁鍙樺寲鐨勬椂鍊欙紝鏁版嵁搴撹Е鍙戝櫒(TIG_CODEALLCODE_FORDOCKINGDATA,TIG_codeclsify_FORDOCKINGDATA)鑷姩鎻掑叆dockingdata
- * 2銆丏ockingScheduling鎵ц鏃讹紝鏌ヨdockingdatasendflag=false鐨勬暟鎹紝缁撳悎鏌ヨsysintinfo鏁版嵁锛屾煡璇ockingtask
- * 3銆乨ockingtask涓彇鍑烘潵鏁版嵁锛屾牴鎹産tmname鍜屾暟鎹畂id鏌ヨ鍑烘潵瑕佹帹閫佺殑鏁版嵁锛屾煡璇ysIntInfoDO锛屾牴鎹竴銆�2銆佷腑閰嶇疆鐨勪俊鎭紝鎵ц鎺ㄩ��
- *
- * @author wangyi
- * @date 2022-03-20
- */
-public interface CodeDuckingServiceI {
-
-    /**
-     * 浜屻��1銆�2銆�3銆�4銆�
-     * 澶勭悊棰勭敵璇锋暟鎹�
-     * @param xmlDatas
-     * @return 鎺ユ敹鐨剎mlDate
-     */
-    String applicateCode(String xmlDatas);
-
-    /**
-     * 鍥涖��2銆�
-     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
-     */
-    void insertCache2();
-
-    /**
-     * 鍥涖��1銆�2銆�3銆�
-     */
-    void sendData3();
-
-    /**
-     * 瀹氭椂浠诲姟璋冪敤
-     */
-    void DockingScheduing();
-
-    /**
-     * 鏁版嵁鍒犻櫎鐨勬椂鍊欙紝缂撳瓨鍒皉edis
-     * @param oid
-     */
-    void cacheDeleteData(String oid,Object obj);
-
-    /**
-     * 鏌ヨdata鍒楄〃
-     */
-    DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鏌ヨtask鍒楄〃
-     */
-    DataGrid<DockingTaskDO> gridTask(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 鏌ヨ闆嗘垚log鍒楄〃
-     */
-    DataGrid<DockingLogeDO> gridLoge(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 鏌ヨ闆嗘垚鎺ュ彛param鍒楄〃
-     */
-    DataGrid<SysIntHeaderDO> gridHeader(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java
deleted file mode 100644
index a18196e..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.springblade.code.service;
-
-
-import com.vci.starter.web.pagemodel.BaseResult;
-
-/**
- * 涓�銆侀厤缃垎绫汇�佺郴缁熴�佹帴鍙f暟鎹�
- * 1銆侀厤缃郴缁烻ysIntBaseDO
- * 2銆侀厤缃郴缁熴�佹帴鍙c�佸垎绫籗ysIntInfoDO
- *
- * 浜屻�佸鐞嗛鐢宠鏁版嵁
- * 1銆佹帴鏀秞mlData
- * 2銆佸伐鑹虹郴缁熺壒娈婂鐞嗭紝鏍规嵁unique鏌ヨ缂栫爜锛屾湁宸茬粡鍙戝竷鐨勬暟鎹紝鐩存帴杩斿洖缂栫爜銆傛病鏈夋煡璇㈠埌宸茬粡鍙戝竷鐨勭紪鐮侊紙缂栬緫涓�佹彁浜や腑銆佸鏍镐腑銆佸仠鐢ㄧ瓑锛夊拰涓�鑸郴缁熶竴鏍锋寜鐓х3姝ュ鐞�
- * 3銆佽В鏋恱mlData閲屾瘡涓�涓猟ata鑺傜偣锛屽瓨鍌ㄥ叆DockingPreApplyDataDO锛宒ata鑺傜偣涓媝ros鑺傜偣瀛樺偍鍏ockingPreApplyDataInfoDO
- * 4銆佽繑鍥瀤mlData锛岄噷杈规爣璇嗕簡姣忎竴涓猟ata鐨勫鐞嗙粨鏋�
- *
- * 涓夈�佹牴鎹鐢宠鏁版嵁锛屾彃鍏ヤ富鏁版嵁
- * 1銆佸叧鑱斿垎绫�
- * 2銆佹煡璇㈠嚭DockingPreApplyDataInfoDO瀛樺偍鐨勬暟鎹紝鎸夌収鏁版嵁鏄犲皠xml锛岃浆鎹负鎴戜滑鐨刱ey锛岃繑缁欏墠绔嚜鍔ㄥ~鍏呭埌鏂板鏁版嵁鐨勯〉闈�
- * 3銆佽皟鐢ㄩ�氱敤鐨勬暟鎹柊澧炴帴鍙d繚瀛樻暟鎹紝杩欎竴姝ュ拰涓绘暟鎹鐞嗘ā鍧楀姛鑳戒竴鏍�
- *
- * 鍥涖�佹帹閫佹暟鎹�
- * 1銆佸垎绫绘暟鎹拰涓绘暟鎹湁鍙樺寲鐨勬椂鍊欙紝鏁版嵁搴撹Е鍙戝櫒(TIG_CODEALLCODE_FORDOCKINGDATA,TIG_codeclsify_FORDOCKINGDATA)鑷姩鎻掑叆dockingdata
- * 2銆丏ockingScheduling鎵ц鏃讹紝鏌ヨdockingdatasendflag=false鐨勬暟鎹紝缁撳悎鏌ヨsysintinfo鏁版嵁锛屾煡璇ockingtask
- * 3銆乨ockingtask涓彇鍑烘潵鏁版嵁锛屾牴鎹産tmname鍜屾暟鎹畂id鏌ヨ鍑烘潵瑕佹帹閫佺殑鏁版嵁锛屾煡璇ysIntInfoDO锛屾牴鎹竴銆�2銆佷腑閰嶇疆鐨勪俊鎭紝鎵ц鎺ㄩ��
- *
- * @author wangyi
- * @date 2022-03-20
- */
-public interface CodeDuckingSyncServiceI {
-
-    /**
-     * 鏁版嵁瀹氭椂浠诲姟璋冪敤
-     */
-    void DockingDataSyncScheduing();
-
-    /**
-     * 鏁版嵁瀹氭椂浠诲姟璋冪敤
-     */
-    void DockingClassSyncScheduing();
-
-    /**
-     * 鎺ㄩ�佹湭瀹屾垚鐨勯泦鎴愭暟鎹�
-     * @return
-     */
-    BaseResult sendData(String oids);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java
deleted file mode 100644
index ef3ebc6..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java
+++ /dev/null
@@ -1,124 +0,0 @@
-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.CodeFixedValueDTO;
-import org.springblade.code.model.CodeFixedValueDO;
-import org.springblade.code.vo.pagemodel.CodeFixedValueVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeFixedValueServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeFixedValueVO> gridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeFixedValueDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeFixedValueVO> codeFixedValueDO2VOs(Collection<CodeFixedValueDO>  codeFixedValueDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeFixedValueDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeFixedValueVO codeFixedValueDO2VO(CodeFixedValueDO codeFixedValueDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeFixedValueVO addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeFixedValueVO editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeFixedValue(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
-    * @param oid 涓婚敭
-    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeFixedValueVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeFixedValueVO> listCodeFixedValueByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
-     * @param secOidCollection 鐮佹鐨勪富閿�
-     * @return 鐮佸�兼樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭鐜颁簡閿欒浼氭姏鍑哄紓甯�
-     */
-    Map<String,List<CodeFixedValueVO>> listCodeFixedValueBySecOids(Collection<String> secOidCollection) throws VciBaseException;
-
-    /**
-     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
-     * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
-     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid);
-
-    /**
-     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
-     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult<CodeFixedValueVO> batchDeleteBySecOid(String codefixedsecoid);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java
deleted file mode 100644
index 895cc68..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.springblade.code.service;
-
-
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import org.springblade.code.bo.CodeClassifyFullInfoBO;
-import org.springblade.code.dto.CodeKeyAttrRepeatRuleDTO;
-import org.springblade.code.model.CodeKeyAttrRepeatRuleDO;
-import org.springblade.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏈嶅姟鎺ュ彛
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeKeyAttrRepeatRuleServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeKeyAttrRepeatRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeKeyAttrRepeatRuleVO> codeKeyAttrRepeatRuleDO2VOs(Collection<CodeKeyAttrRepeatRuleDO>  codeKeyAttrRepeatRuleDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeKeyAttrRepeatRuleDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleDO2VO(CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeKeyAttrRepeatRuleVO addSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeKeyAttrRepeatRuleVO editSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeKeyAttrRepeatRule(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-    * @param oid 涓婚敭
-    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeKeyAttrRepeatRuleVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(Collection<String> oidCollections) throws VciBaseException;
-
-    /**
-     * 缂栧彿鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param idCollections 缂栧彿闆嗗悎
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-     */
-    Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByIds(List<String> idCollections);
-
-    /**
-     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭潵鑾峰彇鍏抽敭灞炴�у垽鏂鍒欑殑鍐呭
-     * @param classifyFullInfo 涓婚搴撳垎绫荤殑鍏ㄩ儴淇℃伅
-     * @return 瑙勫垯鐨勬樉绀哄璞�
-     */
-    CodeKeyAttrRepeatRuleVO getRuleByClassifyFullInfo(CodeClassifyFullInfoBO classifyFullInfo);
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java
deleted file mode 100644
index d18a60f..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java
+++ /dev/null
@@ -1,107 +0,0 @@
-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.CodePhaseAttrDTO;
-import org.springblade.code.model.CodePhaseAttrDO;
-import org.springblade.code.vo.pagemodel.CodePhaseAttrVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 闃舵鐨勫睘鎬ф湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodePhaseAttrServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑闃舵鐨勫睘鎬�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codePhaseAttrDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO> codePhaseAttrDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codePhaseAttrDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodePhaseAttrVO codePhaseAttrDO2VO(CodePhaseAttrDO codePhaseAttrDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodePhaseAttrVO addSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
-
-    /**
-     * 淇敼闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodePhaseAttrVO editSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodePhaseAttr(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
-    * @param oid 涓婚敭
-    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodePhaseAttrVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodePhaseAttrVO> listCodePhaseAttrByOids(Collection<String> oidCollections) throws VciBaseException;
-
-    /**
-     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 浣跨敤妯℃澘涓婚敭鍜岄樁娈电紪鍙疯幏鍙栧寘鍚殑灞炴��
-     * @param templateOid 妯℃澘鐨勭紪鍙�
-     * @param phaseId 闃舵鐨勭紪鍙�
-     * @return 灞炴�х殑鑻辨枃鍚嶇О
-     */
-    List<String> listAttrByTemplateOidAndPhaseId(String templateOid, String phaseId);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java
deleted file mode 100644
index bf061ec..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java
+++ /dev/null
@@ -1,100 +0,0 @@
-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.CodeResembleRuleDTO;
-import org.springblade.code.model.CodeResembleRuleDO;
-import org.springblade.code.vo.pagemodel.CodeResembleRuleVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯鏈嶅姟鎺ュ彛
- *
- * @author weidy
- * @date 2022-04-10
- */
-public interface CodeResembleRuleServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑鐩镐技鏌ヨ瑙勫垯
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeResembleRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO> codeResembleRuleDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRuleDO codeResembleRuleDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
-    * @param oid 涓婚敭
-    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeResembleRuleVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java
deleted file mode 100644
index c822141..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java
+++ /dev/null
@@ -1,175 +0,0 @@
-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.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;
-import java.util.Map;
-
-/**
- * 涓绘暟鎹紪鐮佽鍒欐湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeRuleServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹紪鐮佽鍒�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeRuleVO> gridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO>  codeRuleDOs) throws VciBaseException;
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasSec 鏄惁鍖呭惈鐮佹
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs, boolean hasSec) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeRuleDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞涓绘暟鎹紪鐮佽鍒�
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeRuleVO addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException;
-
-    /**
-     * 淇敼涓绘暟鎹紪鐮佽鍒�
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeRuleVO editSave(CodeRuleDTO codeRuleDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException;
-
-    /**
-     * 鏍¢獙缂栫爜瑙勫垯鐨勭姸鎬佹槸鍚﹀彲浠ョ紪杈戞垨鍒犻櫎
-     * @param lcStatus 缂栫爜瑙勫垯
-     * @return true琛ㄧず鍙互缂栬緫鎴栧垹闄わ紝false琛ㄧず涓嶅彲浠�
-     */
-    boolean checkEditDelStatus(String lcStatus);
-
-    /**
-    * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
-    * @param oid 涓婚敭
-    * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeRuleVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @param hasSec 鏄惁鍖呭惈鐮佹
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections,boolean hasSec) throws VciBaseException;
-
-    /**
-     * 浣跨敤缂栧彿鐨勯泦鍚堣幏鍙栬鍒欑殑鍐呭
-     * @param idCollection 缂栧彿鐨勯泦鍚�
-     * @return 瑙勫垯鐨勫唴瀹�
-     */
-    List<CodeRuleVO> listCodeRuleByIds(Collection<String> idCollection);
-
-    /**
-     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeRuleVO> refDataGridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @return 涓婚搴撳垎绫讳娇鐢ㄥ埌璇ョ紪鐮佽鍒欑殑鎵�鏈夐泦鍚�
-     */
-    Collection<CodeClassifyVO> listUseRangeInCodeClassify(String oid);
-
-    /**
-     * 妫�楠岀紪鐮佽鍒欐槸鍚﹀凡缁忚浣跨敤
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @return true琛ㄧず宸茬粡浣跨敤锛宖alse琛ㄧず鏈浣跨敤
-     */
-    boolean isAlreadyInUse(String oid);
-
-    /**
-     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @param update enable:鍚敤 disable:鍋滅敤 release:鍙戝竷
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult updateStatus(String oid, String update);
-
-    /**
-     * 鍏嬮殕缂栫爜瑙勫垯
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     */
-    BaseResult cloneCodeRule(CodeRuleDTO codeRuleDTO);
-
-    /**
-     * 浣跨敤涓婚敭鑾峰彇缂栫爜瑙勫垯鐨勫唴瀹�
-     * @param oid 涓婚敭
-     * @return 瑙勫垯鐨勬樉绀哄璞�
-     */
-    CodeRuleVO getObjectHasSecByOid(String oid);
-
-    /**
-     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    BaseResult clearAllCode(String oid);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java
deleted file mode 100644
index fad2385..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.springblade.code.service;
-
-import com.vci.starter.web.pagemodel.DataGrid;
-import org.springblade.code.vo.pagemodel.CodeSerialAlgorithmVO;
-
-/**
- * 娴佹按绠楁硶绫�
- * @author weidy
- * @date 2022-2-17
- */
-public interface CodeSerialAlgorithmServiceI {
-
-    /**
-     * 鑾峰彇娴佹按绠楁硶鐨勫垪琛�
-     * @return 娴佹按绠楁硶鐨勪俊鎭�
-     */
-    DataGrid<CodeSerialAlgorithmVO> gridSerialAlgorithm();
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java
deleted file mode 100644
index 9120d9b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java
+++ /dev/null
@@ -1,101 +0,0 @@
-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.CodeSynonymDTO;
-import org.springblade.code.model.CodeSynonymDO;
-import org.springblade.code.vo.pagemodel.CodeSynonymVO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍚屼箟璇嶉厤缃湇鍔℃帴鍙�
- *
- * @author weidy
- * @date 2022-02-17
- */
-public interface CodeSynonymServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍚屼箟璇嶉厤缃�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeSynonymDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO>  codeSynonymDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeSynonymDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeSynonymVO codeSynonymDO2VO(CodeSynonymDO codeSynonymDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeSynonymVO addSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
-
-    /**
-     * 淇敼鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeSynonymVO editSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
-
-
-    /**
-     * 鍒犻櫎鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeSynonym(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
-
-    /**
-    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
-    * @param oid 涓婚敭
-    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeSynonymVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeSynonymVO> listCodeSynonymByOids(Collection<String> oidCollections) throws VciBaseException;
-
-
-
-    /**
-     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeSynonymVO> refDataGridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java
deleted file mode 100644
index cb88e8d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java
+++ /dev/null
@@ -1,137 +0,0 @@
-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 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;
-import java.util.Map;
-
-/**
- * 妯℃澘闃舵鏈嶅姟鎺ュ彛
- *
- * @author weidy
- * @date 2022-01-24
- */
-public interface CodeTemplatePhaseServiceI {
-    /**
-     * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO> codeTemplatePhaseDOs) throws VciBaseException;
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhaseDO codeTemplatePhaseDO) throws VciBaseException;
-
-    /**
-     * 澧炲姞妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
-
-    /**
-     * 淇敼妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
-
-    /**
-     * 鍒犻櫎妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    BaseResult deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
-
-    /**
-     * 妯℃澘淇敼瑙﹀彂鍔熻兘
-     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    BatchCBO codeTemplateAttrModifyTrigger(List<CodeClassifyTemplateAttrDO> attrDOList);
-
-    /**
-     * 妯℃澘灞炴�у垹闄ょ殑鏃跺�欒Е鍙�
-     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    BatchCBO codeTemplateAttrDeleteTrigger(List<CodeClassifyTemplateAttrDO> attrDOList);
-
-    /**
-     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
-     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid);
-
-    /**
-    * 涓婚敭鑾峰彇妯℃澘闃舵
-    * @param oid 涓婚敭
-    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException;
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException;
-
-    /**
-     * 鍙傜収妯℃澘闃舵鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-     DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
-
-    /**
-     * 闃舵涓嶅寘鍚殑灞炴��
-     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
-     * @param pageHelper 鍒嗛〉瀵硅薄
-     * @return 灞炴�х殑淇℃伅
-     */
-    DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper);
-
-    /**
-     * 闃舵鍖呭惈鐨勫睘鎬�
-     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
-     * @param pageHelper 鍒嗛〉瀵硅薄
-     * @return 灞炴�х殑淇℃伅
-     */
-    DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper);
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java
deleted file mode 100644
index b8bbd54..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java
+++ /dev/null
@@ -1,100 +0,0 @@
-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
deleted file mode 100644
index d9969b6..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataServiceI.java
+++ /dev/null
@@ -1,152 +0,0 @@
-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
deleted file mode 100644
index f6182bf..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreAttrMappingSeviceI.java
+++ /dev/null
@@ -1,48 +0,0 @@
-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
deleted file mode 100644
index a471b09..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmEngineServiceI.java
+++ /dev/null
@@ -1,361 +0,0 @@
-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
deleted file mode 100644
index b147458..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmIOServiceI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-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
deleted file mode 100644
index ab7dd2a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmProductCodeServiceI.java
+++ /dev/null
@@ -1,38 +0,0 @@
-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
deleted file mode 100644
index b941206..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntAuthorityServiceI.java
+++ /dev/null
@@ -1,101 +0,0 @@
-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
deleted file mode 100644
index 8226f62..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntBaseServiceI.java
+++ /dev/null
@@ -1,101 +0,0 @@
-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
deleted file mode 100644
index e4b384a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntInfoServiceI.java
+++ /dev/null
@@ -1,159 +0,0 @@
-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
deleted file mode 100644
index e9ff043..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/UniversalInterfaceI.java
+++ /dev/null
@@ -1,47 +0,0 @@
-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
deleted file mode 100644
index 777d11a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java
+++ /dev/null
@@ -1,834 +0,0 @@
-package org.springblade.code.service.impl;
-
-
-import com.alibaba.fastjson.JSONObject;
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
-import com.vci.starter.revision.bo.TreeWrapperOptions;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.*;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciParentQueryOption;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.enumpck.OsCodeFillTypeEnum;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.pageModel.UIFormReferVO;
-import com.vci.web.service.BdSelectInputCharServiceI;
-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.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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 鐮佹鍩虹淇℃伅鏈嶅姟
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeBasicSecServiceImpl implements CodeBasicSecServiceI {
-
-    /**
-     * 鏃ュ織
-     */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-     * 鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private CodeBasicSecDaoI codeBasicSecMapper;
-
-    /**
-     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-     */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-     * 瀵硅薄鐨勬搷浣�
-     */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-    /**
-     * 涓绘暟鎹紪鐮佽鍒欐湇鍔�
-     */
-    @Autowired
-    private CodeRuleServiceI codeRuleService;
-
-    /**
-     * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔�
-     */
-    @Autowired
-    private CodeClassifyValueServiceI codeClassifyValueService;
-
-    /**
-     * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
-     */
-    @Autowired
-    private CodeClassifyValueDaoI codeClassifyValueMapper;
-
-    /**
-     * 鍥哄畾鐮佹鐨勭爜鍊肩殑鏈嶅姟
-     */
-    @Autowired
-    private CodeFixedValueServiceI fixedValueService;
-
-    /**
-     * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
-     */
-    @Autowired
-    private CodeFixedValueDaoI fixedValueMapper;
-    /**
-     * 涓婂眰鍒嗙被鐮佹鐨勫睘鎬у悕绉�
-     */
-    private static  final String PARENT_FIELD_NAME = "parentclassifysecoid";
-
-    /**
-     * 涓婄骇鍒嗙被鐮佸�肩殑灞炴�у悕绉�
-     */
-    private static final String PARENT_CLASSIFY_VALUE_FIELD_NAME = "parentClassifyValueOid";
-
-    /**
-     * 鍙�夊彲杈撴湇鍔�
-     */
-    @Autowired
-    private BdSelectInputCharServiceI charService;
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑鐮佹鍩虹淇℃伅
-     *
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper   鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeBasicSecVO> gridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultAsc("ordernum");
-        if(!conditionMap.containsKey("pkCodeRule") || StringUtils.isBlank(conditionMap.get("pkCodeRule"))){
-            return new DataGrid<>();
-        }
-        List<CodeBasicSecDO> doList = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
-        DataGrid<CodeBasicSecVO> dataGrid = new DataGrid<CodeBasicSecVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeBasicSecDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeBasicSecMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs) throws VciBaseException {
-        List<CodeBasicSecVO> voList = new ArrayList<CodeBasicSecVO>();
-        if (!CollectionUtils.isEmpty(codeBasicSecDOs)) {
-            for (CodeBasicSecDO s : codeBasicSecDOs) {
-                CodeBasicSecVO vo = codeBasicSecDO2VO(s);
-                if (vo != null) {
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasFixedValue 鏄惁鏈夊浐瀹氬��
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs, boolean hasFixedValue) throws VciBaseException {
-        List<CodeBasicSecVO> voList = new ArrayList<CodeBasicSecVO>();
-        if (!CollectionUtils.isEmpty(codeBasicSecDOs)) {
-            for (CodeBasicSecDO s : codeBasicSecDOs) {
-                CodeBasicSecVO vo = codeBasicSecDO2VO(s);
-                if (vo != null) {
-                    voList.add(vo);
-                }
-            }
-        }
-        if(hasFixedValue && !CollectionUtils.isEmpty(voList)){
-            List<CodeBasicSecVO> fixedSecVOList = voList.stream().filter(s -> CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equalsIgnoreCase(s.getSectype())).collect(Collectors.toList());
-            if(!CollectionUtils.isEmpty(fixedSecVOList)){
-                //鏌ヨ鍥哄畾鐮佺殑鐮佸��
-                Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(fixedSecVOList.stream().map(CodeBasicSecVO::getOid).collect(Collectors.toList()));
-                voList.stream().forEach(vo->{
-                    vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null));
-                });
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeBasicSecDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSecDO codeBasicSecDO) throws VciBaseException {
-        CodeBasicSecVO vo = new CodeBasicSecVO();
-        if (codeBasicSecDO != null) {
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            if (true) {
-                //vo.setLcStatusText({lcStatusFullClassName}.getTextByValue(vo.getLcStatus()));
-            }
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鐮佹鍩虹淇℃伅
-     *
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeBasicSecVO addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
-        VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeBasicSecDTO.getPkCodeRule(),"缂栫爜瑙勫垯鐨勪富閿�");
-        CodeRuleVO ruleVO = codeRuleService.getObjectByOid(codeBasicSecDTO.getPkCodeRule());
-        if(!CodeRuleLC.EDITING.getValue().equalsIgnoreCase(ruleVO.getLcStatus())){
-            throw new VciBaseException("缂栫爜瑙勫垯鐨勭姸鎬佷笉鏄��" + CodeRuleLC.EDITING.getText() + "銆戯紒涓嶅厑璁镐慨鏀�");
-        }
-        KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
-        if (! "success".equals(attrKv.getKey())){
-            throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
-        }
-
-
-
-        //灏咲TO杞崲涓篋O
-        CodeBasicSecDO codeBasicSecDO = new CodeBasicSecDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
-        //鎺掑簭鍙凤紝榛樿绛変簬褰撳墠宸叉湁鐨勬暟閲忓姞1
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("pkCodeRule",ruleVO.getOid());
-        Long total = codeBasicSecMapper.countByCondition(conditionMap);
-        if(total == null){
-            total = 0L;
-        }
-        codeBasicSecDO.setOrderNum(total.intValue() + 1);
-
-        //琛ヤ綅鐨勬椂鍊欙紝瑕佹帶鍒惰ˉ浣嶅瓧绗�
-        if((OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType())
-         || OsCodeFillTypeEnum.RIGHT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType()))
-                && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
-            throw new VciBaseException("褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖");
-        }
-        //寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
-        if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
-            if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
-                throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐� 鍙傜収閰嶇疆 鐨勫唴瀹�");
-            }
-            try{
-                JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
-            }catch (Throwable e){
-                throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝鍙傜収閰嶇疆鐨勫唴瀹圭殑鏍煎紡涓嶆纭�,",new String[0],e);
-            }
-        }
-        codeBasicSecMapper.insert(codeBasicSecDO);
-        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-        if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
-            charService.save(MdmBtmTypeConstant.CODE_BASIC_SEC,"codefileseparator",codeBasicSecDO.getCodeFillSeparator(),sessionInfo);
-        }
-        return codeBasicSecDO2VO(codeBasicSecDO);
-    }
-
-    /**
-     * 淇敼鐮佹鍩虹淇℃伅
-     *
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeBasicSecVO editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
-        VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
-        if (! "success".equals(attrKv.getKey())){
-            throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
-        }
-        //灏咲TO杞崲涓篋O
-        CodeBasicSecDO codeBasicSecDO = selectByOid(codeBasicSecDTO.getOid());
-        boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
-        if (!status){
-            //杩斿洖閿欒淇℃伅
-            throw new VciBaseException("缂栫爜瑙勫垯涓嶅厑璁哥紪杈戞垨鍒犻櫎锛�");
-        } else {
-            //琛ヤ綅鐨勬椂鍊欙紝瑕佹帶鍒惰ˉ浣嶅瓧绗�
-            if((OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType())
-                    || OsCodeFillTypeEnum.RIGHT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType()))
-                    && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
-                throw new VciBaseException("褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖");
-            }
-            //寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
-            if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
-                if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
-                    throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐� 鍙傜収閰嶇疆 鐨勫唴瀹�");
-                }
-                try{
-                    JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
-                }catch (Throwable e){
-                    throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝鍙傜収閰嶇疆鐨勫唴瀹圭殑鏍煎紡涓嶆纭�,",new String[0],e);
-                }
-            }
-            revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);
-            codeBasicSecMapper.updateByPrimaryKey(codeBasicSecDO);
-            SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-            if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
-                charService.save(MdmBtmTypeConstant.CODE_BASIC_SEC,"codefileseparator",codeBasicSecDO.getCodeFillSeparator(),sessionInfo);
-            }
-        }
-        return codeBasicSecDO2VO(codeBasicSecDO);
-    }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     *
-     * @param codeBasicSecDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeBasicSecDO  鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeBasicSecDTO codeBasicSecDTO, CodeBasicSecDO codeBasicSecDO) {
-        boService.checkTs(codeBasicSecDTO);
-        if (!checkIsLinked(null, codeBasicSecDO.getOid())) {
-            return BaseResult.success();
-        } else {
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE, new String[]{""});
-        }
-    }
-
-    /**
-     * 鏍¢獙鏄惁琚紩鐢�
-     *
-     * @param codeRuleOid     缂栫爜瑙勫垯涓婚敭
-     * @param codeBasicSecOid 缂栫爜鍩虹淇℃伅涓婚敭
-     * @return true琛ㄧず宸茶寮曠敤锛宖alse琛ㄧず鏈寮曠敤
-     * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    private boolean checkIsLinked(String codeRuleOid, String codeBasicSecOid) throws VciBaseException {
-        boolean flag = true;
-        if (StringUtils.isNotBlank(codeRuleOid)) {
-            boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeRuleOid).getLcStatus());
-            if (!status){
-                return true;
-            }
-            boolean alreadyInUse = codeRuleService.isAlreadyInUse(codeRuleOid);
-            if (!alreadyInUse){
-               flag = false;
-            }
-        } else {
-            boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecMapper.selectByPrimaryKey(codeBasicSecOid).getPkCodeRule()).getLcStatus());
-            if (!status){
-                return true;
-            }
-            boolean alreadyInUse = codeRuleService.isAlreadyInUse(codeBasicSecMapper.selectByPrimaryKey(codeBasicSecOid).getPkCodeRule());
-            if (!alreadyInUse){
-                flag = false;
-            }
-        }
-        return flag;
-    }
-
-    /**
-     * 鍒犻櫎鐮佹鍩虹淇℃伅
-     *
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
-        VciBaseUtil.alertNotNull(codeBasicSecDTO, "鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄", codeBasicSecDTO.getOid(), "鐮佹鍩虹淇℃伅鐨勪富閿�");
-        return deleteCodeBasicSecByPrimaryKey(codeBasicSecDTO.getOid());
-    }
-
-    /**
-     * 涓婚敭鍒犻櫎鐮佹鍩虹淇℃伅
-     *
-     * @param oid 鐮佹鍩虹淇℃伅涓婚敭
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeBasicSecByPrimaryKey(String oid) throws VciBaseException {
-        CodeBasicSecDO codeBasicSecDO = selectByOid(oid);
-        boolean isLinked = checkIsLinked(codeBasicSecDO.getPkCodeRule(), oid);
-        if (isLinked) {
-            return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�");
-        }
-        Map<String,String> conditionMap = new HashMap<>();
-        //鎵ц鍒犻櫎鎿嶄綔
-        WebUtil.setPersistence(false);
-        BatchCBO batchCBO = codeBasicSecMapper.deleteByPrimaryKey(oid);
-        Set<ClientBusinessObject> deleteSet = new HashSet<>();
-        deleteSet.addAll(batchCBO.getDeleteCbos());
-        if (CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(codeBasicSecDO.getSecType())){
-            conditionMap.put("codefixedsecoid",codeBasicSecDO.getOid());
-            VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeFixedValueDO.class);
-            List<CodeFixedValueDO> fixedValueDOS = fixedValueMapper.selectByWrapper(wrapper);
-            BatchCBO valueCBO = fixedValueMapper.batchDeleteByOids(fixedValueDOS.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toSet()));
-            deleteSet.addAll(valueCBO.getDeleteCbos());
-        }
-        if (CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equals(codeBasicSecDO.getSecType())){
-            conditionMap.put("codeclassifysecoid",codeBasicSecDO.getOid());
-            VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyValueDO.class);
-            List<CodeClassifyValueDO> classifyValueDOS = codeClassifyValueMapper.selectByWrapper(wrapper);
-            if(!CollectionUtils.isEmpty(classifyValueDOS)) {
-                BatchCBO valueCBO = codeClassifyValueMapper.batchDeleteByOids(classifyValueDOS.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toSet()));
-                deleteSet.addAll(valueCBO.getDeleteCbos());
-            }
-        }
-        batchCBO.setDeleteCbos(deleteSet);
-        WebUtil.setPersistence(true);
-        boService.persistenceBatch(batchCBO);
-        return (batchCBO != null && batchCBO.getDeleteCbos() != null && batchCBO.getDeleteCbos().size() > 0) ? BaseResult.successMsg(DELETE_SUCCESS) : BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-     * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
-     *
-     * @param oid 涓婚敭
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeBasicSecVO getObjectByOid(String oid) throws VciBaseException {
-        return codeBasicSecDO2VO(selectByOid(oid));
-    }
-
-    /**
-     * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-     *
-     * @param oid 涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    private CodeBasicSecDO selectByOid(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid, "涓婚敭");
-        CodeBasicSecDO codeBasicSecDO = codeBasicSecMapper.selectByPrimaryKey(oid.trim());
-        if (codeBasicSecDO == null || StringUtils.isBlank(codeBasicSecDO.getOid())) {
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeBasicSecDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
-     *
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeBasicSecVO> listCodeBasicSecByOids(Collection<String> oidCollections) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeBasicSecDO> codeBasicSecDOList = listCodeBasicSecDOByOidCollections(oidCollections);
-        return codeBasicSecDO2VOs(codeBasicSecDOList);
-    }
-
-    /**
-     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-     *
-     * @param oidCollections 涓婚敭鐨勯泦鍚�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    private List<CodeBasicSecDO> listCodeBasicSecDOByOidCollections(Collection<String> oidCollections) {
-        List<CodeBasicSecDO> codeBasicSecDOList = new ArrayList<CodeBasicSecDO>();
-        if (!CollectionUtils.isEmpty(oidCollections)) {
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for (Collection<String> oids : oidCollectionsList) {
-                List<CodeBasicSecDO> tempDOList = codeBasicSecMapper.selectByPrimaryKeyCollection(oids);
-                if (!CollectionUtils.isEmpty(tempDOList)) {
-                    codeBasicSecDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return codeBasicSecDOList;
-    }
-
-
-    /**
-     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
-     *
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper   鍒嗛〉鍜屾帓搴�
-     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (conditionMap == null) {
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeBasicSec(conditionMap, pageHelper);
-    }
-
-    /**
-     * 鍏嬮殕鐮佹淇℃伅
-     *
-     * @param oidList 婧愮爜娈典俊鎭富閿泦鍚�
-     * @param pkCodeRule 鐩爣缂栫爜瑙勫垯
-     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     */
-    @Override
-    public BaseResult cloneCodeBasicSec(List<String> oidList, String pkCodeRule) {
-        boolean isLinked = checkIsLinked(pkCodeRule,null);
-        if (isLinked) {
-            return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�");
-        }
-        List<CodeBasicSecDO> createList = new ArrayList<>();
-        List<CodeBasicSecDO> basicSecDOS = codeBasicSecMapper.selectByPrimaryKeyCollection(oidList);
-        basicSecDOS.forEach(sec -> {
-            CodeBasicSecDO newSecDO = new CodeBasicSecDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(sec,newSecDO);
-            newSecDO.setOid("");
-            newSecDO.setNameOid("");
-            newSecDO.setRevisionOid("");
-            newSecDO.setId(newSecDO.getId() + "_copy");
-            newSecDO.setName(newSecDO.getName() + "_copy");
-            newSecDO.setPkCodeRule(pkCodeRule);
-            createList.add(newSecDO);
-        });
-        codeBasicSecMapper.batchInsert(createList);
-        return BaseResult.success();
-    }
-
-    /**
-     * 鏍规嵁鐮佹鍒嗙被鐨勭被鍨嬪垽鏂睘鎬ф槸鍚︽槸绌虹殑
-     *
-     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
-     * @return 鏈夌┖鐨勫垯浼爇ey-灞炴�у悕 value-瀛楁鍚箟锛屾病鏈夌┖鐨勫垯浼� key-success value-true
-     */
-    @Override
-    public KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO) {
-        VciBaseUtil.alertNotNull(codeBasicSecDTO.getSectype(), "鐮佹鍒嗙被");
-        String secType = codeBasicSecDTO.getSectype();
-        HashMap<String, String> attrMap = JSONObject.parseObject(JSONObject.toJSONString(codeBasicSecDTO), HashMap.class);
-        Map<String, String> notNullableAttr = getNotNullableAttr(secType);
-        if (notNullableAttr == null) {
-            throw new VciBaseException("鐮佹鍒嗙被濉啓鍑洪敊锛岃鏌ラ獙鍚庨噸璇�");
-        }
-        for (String key : notNullableAttr.keySet()) {
-            if (StringUtils.isBlank(WebUtil.getStringValueFromObject(attrMap.get(key)))) {
-                KeyValue kv = new KeyValue();
-                kv.setKey(key);
-                kv.setValue(notNullableAttr.get(key));
-                return kv;
-            }
-        }
-        KeyValue kv = new KeyValue();
-        kv.setKey("success");
-        kv.setValue("true");
-        return kv;
-    }
-
-    /**
-     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鍐呭
-     *
-     * @param ruleOid 瑙勫垯鐨勫唴瀹�
-     * @return 鐮佹鐨勫唴瀹�
-     */
-    @Override
-    public List<CodeBasicSecVO> listCodeBasicSecByRuleOid(String ruleOid) {
-        if(StringUtils.isBlank(ruleOid)){
-            return new ArrayList<>();
-        }
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("pkCodeRule",ruleOid);
-        PageHelper pageHelper = new PageHelper(-1);
-        pageHelper.addDefaultAsc("ordernum");
-        List<CodeBasicSecDO> secDOList = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
-        return codeBasicSecDO2VOs(secDOList,true);
-    }
-
-    /**
-     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鐨勫唴瀹�
-     *
-     * @param ruleCollection 瑙勫垯涓婚敭闆嗗悎
-     * @return 鐮佹鐨勫唴瀹�
-     */
-    @Override
-    public List<CodeBasicSecVO> listCodeBasicSecByRuleOids(Collection<String> ruleCollection) {
-        if(CollectionUtils.isEmpty(ruleCollection)){
-            return new ArrayList<>();
-        }
-        List<CodeBasicSecDO> secDOList = new CopyOnWriteArrayList<>();
-        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-        VciBaseUtil.switchCollectionForOracleIn(ruleCollection).parallelStream().forEach(ruleOids->{
-            WebUtil.setCurrentUserSessionInfo(sessionInfo);
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("pkcoderule", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(ruleOids.toArray(new String[0])) + ")");
-            PageHelper pageHelper = new PageHelper(-1);
-            pageHelper.addDefaultAsc("ordernum");
-            List<CodeBasicSecDO> tempSecDOs = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
-            if(!CollectionUtils.isEmpty(tempSecDOs)){
-                secDOList.addAll(tempSecDOs);
-            }
-        });
-        return codeBasicSecDO2VOs(secDOList);
-    }
-
-    /**
-     * 鍙傜収鍒嗙被鐨勭爜娈�
-     *
-     * @param conditionMap 鏌ヨ鏉′欢锛屽繀椤昏鏈塸kCodeRule
-     * @param pageHelper   鍒嗛〉鐨勫璞�
-     * @return 鐮佹鐨勫唴瀹�
-     */
-    @Override
-    public DataGrid<CodeBasicSecVO> refDataGridClassifySec(Map<String, String> conditionMap, PageHelper pageHelper) {
-        if(CollectionUtils.isEmpty(conditionMap) || !conditionMap.containsKey("pkCodeRule")){
-            return new DataGrid<>();
-        }
-        conditionMap.put("secType",CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue());
-        return refDataGridCodeBasicSec(conditionMap,pageHelper);
-    }
-
-    /**
-     * 鏍规嵁鐮佹绫诲瀷鑾峰彇涓嶅彲涓虹┖鐨勫瓧娈�
-     *
-     * @param secType 鐮佹绫诲瀷
-     * @return 涓嶅彲涓虹┖鐨勫瓧娈甸泦鍚�
-     */
-    private Map<String, String> getNotNullableAttr(String secType) {
-        Map<String, String> attrMap = new HashMap<>();
-        if (CodeSecTypeEnum.CODE_ATTR_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "灞炴�х爜娈靛悕绉�");
-        } else if (CodeSecTypeEnum.CODE_DATE_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "鏃ユ湡鐮佹鍚嶇О");
-            attrMap.put("codeDateFormatStr", "鏃ユ湡鏍煎紡");
-        } else if (CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "鍥哄畾鐮佹鍚嶇О");
-            attrMap.put("codeSecLengthType", "鐮佹闀垮害绫诲瀷");
-            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
-        } else if (CodeSecTypeEnum.CODE_LEVEL_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "灞傜骇鐮佹鍚嶇О");
-            attrMap.put("codeLevelType", "灞傜骇绫诲瀷");
-            attrMap.put("valueCutType", "瀛楃鎴彇绫诲瀷");
-        } else if (CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "寮曠敤鐮佹鍚嶇О");
-        } else if (CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "娴佹按鐮佹鍚嶇О");
-            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
-            attrMap.put("codeFillType", "缂栫爜琛ヤ綅鏂瑰紡");
-            attrMap.put("codeFillLength", "濉厖闀垮害");
-            attrMap.put("codeFillLimit", "娴佹按涓婇檺");
-            attrMap.put("codeFillFlag", "娴佹按鏄惁琛ョ爜");
-        } else if (CodeSecTypeEnum.CODE_VARIABLE_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "鍙彉鐮佹鍚嶇О");
-            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
-            attrMap.put("codeFillType", "缂栫爜琛ヤ綅鏂瑰紡");
-        } else if (CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equalsIgnoreCase(secType)) {
-            attrMap.put("name", "鍒嗙被鐮佹鍚嶇О");
-            attrMap.put("codeSecLengthType", "鐮佹闀垮害绫诲瀷");
-            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
-        } else {
-            attrMap = null;
-        }
-        return attrMap;
-    }
-
-    /**
-     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
-     *
-     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
-     * @return 鍒嗙被鐮佹鏍戠粨鏋�
-     */
-    @Override
-    public List<Tree> gridCodeClassifySecTree(String oid) {
-        VciParentQueryOption queryOption = new VciParentQueryOption(PARENT_FIELD_NAME);
-        queryOption.setfOid(oid);
-        queryOption.setLinkTypeFlag(false);
-        queryOption.setHasSelf(true);
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(CodeBasicSecDO.class);
-        wrapper.childQueryParent(queryOption);
-        List<CodeBasicSecDO> doList = codeBasicSecMapper.selectByWrapper(wrapper);
-        List<String> secOid = new ArrayList<>();
-        doList.forEach(o -> secOid.add(o.getOid()));
-        List<CodeClassifyValueVO> valueVOs = (List<CodeClassifyValueVO>) codeClassifyValueService.listCodeClassifyValueByOids(secOid);
-        TreeQueryObject treeQueryObject = new TreeQueryObject();
-        treeQueryObject.setMultipleSelect(false);
-        treeQueryObject.setShowCheckBox(false);
-        treeQueryObject.setQueryAllLevel(false);
-        treeQueryObject.setValueField("oid");
-        treeQueryObject.setTextField("name");
-        treeQueryObject.setQueryAllRev(false);
-        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_CLASSIFY_VALUE_FIELD_NAME);
-        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
-        return revisionModelUtil.doList2Trees(valueVOs,treeWrapperOptions,(CodeClassifyValueVO s) ->{
-            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
-            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
-                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
-        });
-    }
-
-    /**
-     * 鏍规嵁缂栫爜瑙勫垯鎵归噺鍒犻櫎鐮佹鍩烘湰淇℃伅
-     * @param codeRuleOid 缂栫爜瑙勫垯涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BatchCBO batchDeleteSecByCodeRuleOid(String codeRuleOid) {
-        VciBaseUtil.alertNotNull(codeRuleOid,"缂栫爜瑙勫垯涓婚敭");
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("pkcoderule",codeRuleOid);
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeBasicSecDO.class);
-        List<CodeBasicSecDO> deleteList = codeBasicSecMapper.selectByWrapper(wrapper);
-        if (CollectionUtils.isEmpty(deleteList)){
-            return new BatchCBO();
-        }
-        BatchCBO batchCBO = codeBasicSecMapper.batchDeleteByOids(deleteList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet()));
-        Set<ClientBusinessObject> deleteSet = new HashSet<>();
-        deleteSet.addAll(batchCBO.getDeleteCbos());
-        List<CodeBasicSecDO> fixedSecList = deleteList.stream().filter(sec -> {
-            return CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(sec.getSecType());
-        }).collect(Collectors.toList());
-        List<CodeBasicSecDO> classifySecList = deleteList.stream().filter(sec -> {
-            return CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equals(sec.getSecType());
-        }).collect(Collectors.toList());
-        Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet());
-        Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet());
-        if (!CollectionUtils.isEmpty(fixedSecOidSet)){
-            StringBuilder sb = new StringBuilder();
-            fixedSecOidSet.stream().forEach(oid -> {
-                sb.append("'").append(oid).append("',");
-            });
-            String inSql = sb.toString().substring(0,sb.toString().length()-1);
-            VciQueryWrapperForDO wrapperForValue = new VciQueryWrapperForDO(null,CodeFixedValueDO.class);
-            PageHelper ph = new PageHelper();
-            ph.setLimit(-1);
-            wrapperForValue.in("codefixedsecoid",inSql);
-            List<CodeFixedValueDO> fixedValueDOS = fixedValueMapper.selectByWrapper(wrapperForValue);
-            BatchCBO fixedCBO = fixedValueMapper.batchDeleteByOids(fixedValueDOS.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toSet()));
-            deleteSet.addAll(fixedCBO.getDeleteCbos());
-        }
-        if (!CollectionUtils.isEmpty(classifySecOidSet)){
-            StringBuilder sb = new StringBuilder();
-            classifySecOidSet.stream().forEach(oid -> {
-                sb.append("'").append(oid).append("',");
-            });
-            String inSql = sb.toString().substring(0,sb.toString().length()-1);
-            VciQueryWrapperForDO wrapperForValue = new VciQueryWrapperForDO(null,CodeClassifyValueDO.class);
-            PageHelper ph = new PageHelper();
-            ph.setLimit(-1);
-            wrapperForValue.in("codeclassifysecoid",inSql);
-            List<CodeClassifyValueDO> classifyValueDOS = codeClassifyValueMapper.selectByWrapper(wrapperForValue);
-            BatchCBO fixedCBO = codeClassifyValueMapper.batchDeleteByOids(classifyValueDOS.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toSet()));
-            deleteSet.addAll(fixedCBO.getDeleteCbos());
-        }
-        batchCBO.setDeleteCbos(deleteSet);
-        return batchCBO;
-    }
-
-    /**
-     * 涓婄Щ
-     *
-     * @param oid 涓婚敭
-     */
-    @Override
-    public void upOrderNum(String oid) {
-        CodeBasicSecDO secDO = selectByOid(oid);
-        BatchCBO batchCBO = new BatchCBO();
-        WebUtil.setPersistence(false);
-        if(secDO.getOrderNum() >1){
-            //绛変簬1鐨勬椂鍊欎笉鑳戒笂绉讳簡
-            //鎵炬瘮鑷繁灏忕殑
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("pkCodeRule",secDO.getPkCodeRule());
-            conditionMap.put("ordernum",String.valueOf(secDO.getOrderNum()-1));
-            List<CodeBasicSecDO> lastSecDOs = codeBasicSecMapper.selectByCondition(conditionMap,new PageHelper(-1));
-            if(!CollectionUtils.isEmpty(lastSecDOs)){
-                CodeBasicSecDO lastSec = lastSecDOs.get(0);
-                lastSec.setOrderNum(lastSec.getOrderNum()+1);
-                batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(lastSec));
-            }
-            secDO.setOrderNum(secDO.getOrderNum()-1);
-            batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(secDO));
-        }
-        WebUtil.setPersistence(true);
-        boService.persistenceBatch(batchCBO);
-    }
-
-    /**
-     * 涓嬬Щ
-     *
-     * @param oid 涓婚敭
-     */
-    @Override
-    public void downOrderNum(String oid) {
-        CodeBasicSecDO secDO = selectByOid(oid);
-        BatchCBO batchCBO = new BatchCBO();
-        WebUtil.setPersistence(false);
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("pkCodeRule",secDO.getPkCodeRule());
-        Long total = codeBasicSecMapper.countByCondition(conditionMap);
-        if(secDO.getOrderNum()  < total){
-            //灏忎簬鎬绘暟鐨勬椂鍊欐墠涓嬬Щ
-            conditionMap.put("ordernum",String.valueOf(secDO.getOrderNum()+1));
-            List<CodeBasicSecDO> lastSecDOs = codeBasicSecMapper.selectByCondition(conditionMap,new PageHelper(-1));
-            if(!CollectionUtils.isEmpty(lastSecDOs)){
-                CodeBasicSecDO lastSec = lastSecDOs.get(0);
-                lastSec.setOrderNum(lastSec.getOrderNum()-1);
-                batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(lastSec));
-            }
-            secDO.setOrderNum(secDO.getOrderNum()+1);
-            batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(secDO));
-        }
-        WebUtil.setPersistence(true);
-        boService.persistenceBatch(batchCBO);
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java
deleted file mode 100644
index a6b7620..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java
+++ /dev/null
@@ -1,322 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.BeanUtil;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springblade.code.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 涓绘暟鎹腑鐨勬寜閽墿灞曟湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeButtonServiceImpl implements CodeButtonServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeButtonDaoI codeButtonMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeButtonVO> gridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeButtonDO> doList = codeButtonMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeButtonVO> dataGrid=new DataGrid<CodeButtonVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeButtonDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeButtonMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButtonDO>  codeButtonDOs) throws VciBaseException{
-        List<CodeButtonVO> voList = new ArrayList<CodeButtonVO>();
-        if(!CollectionUtils.isEmpty(codeButtonDOs)){
-           for(CodeButtonDO s: codeButtonDOs){
-                CodeButtonVO vo =  codeButtonDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeButtonDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeButtonVO codeButtonDO2VO(CodeButtonDO codeButtonDO) throws VciBaseException{
-              CodeButtonVO vo = new CodeButtonVO();
-        if(codeButtonDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeButtonVO addSave(CodeButtonDTO codeButtonDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeButtonDO codeButtonDO = new CodeButtonDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDTO,codeButtonDO);
-        codeButtonMapper.insert(codeButtonDO);
-        return codeButtonDO2VO(codeButtonDO);
-    }
-
-    /**
-     * 淇敼涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeButtonVO editSave(CodeButtonDTO codeButtonDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeButtonDTO,"鏁版嵁瀵硅薄",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曚富閿�");
-         //灏咲TO杞崲涓篋O
-         CodeButtonDO codeButtonDO = selectByOid(codeButtonDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeButtonDTO,codeButtonDO);
-         codeButtonMapper.updateByPrimaryKey(codeButtonDO);
-         return codeButtonDO2VO(codeButtonDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeButtonDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeButtonDTO codeButtonDTO, CodeButtonDO codeButtonDO) {
-        CodeButtonDO buttonDO = new CodeButtonDO();
-        BeanUtil.convert(codeButtonDTO,buttonDO);
-        boService.checkTs(buttonDO);
-        if(!checkIsLinked(codeButtonDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-
-
-    /**
-     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeButton(CodeButtonDTO codeButtonDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeButtonDTO,"涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曠殑涓婚敭");
-        CodeButtonDO codeButtonDO = selectByOid(codeButtonDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeButtonDTO,codeButtonDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeButtonMapper.deleteByPrimaryKey(codeButtonDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
-    * @param oid 涓婚敭
-    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeButtonVO getObjectByOid(String oid) throws VciBaseException{
-        return codeButtonDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeButtonDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeButtonDO codeButtonDO = codeButtonMapper.selectByPrimaryKey(oid.trim());
-        if(codeButtonDO == null || StringUtils.isBlank(codeButtonDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeButtonDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeButtonDO> codeButtonDOList = listCodeButtonDOByOidCollections(oidCollections);
-        return codeButtonDO2VOs(codeButtonDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeButtonDO> listCodeButtonDOByOidCollections(Collection<String> oidCollections){
-        List<CodeButtonDO> codeButtonDOList = new ArrayList<CodeButtonDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeButtonDO> tempDOList =  codeButtonMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeButtonDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeButtonDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeButtonVO> refDataGridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeButton(conditionMap,pageHelper);
-    }
-
-    /**
-     * 鍚敤
-     *
-     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult enableCodeButton(CodeButtonDTO buttonDTO) {
-        return changeLcStatus(buttonDTO,false);
-    }
-
-    /**
-     * 鍋滅敤
-     *
-     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult disableCodeButton(CodeButtonDTO buttonDTO) {
-        return changeLcStatus(buttonDTO,true);
-    }
-
-    /**
-     * 淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬侊紝濡傚仠鐢ㄥ拰鍚敤
-     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s
-     * @param disable 鏄惁涓哄仠鐢�
-     * @return 鎵ц鐨勭粨鏋�
-     */
-    private BaseResult changeLcStatus(CodeButtonDTO buttonDTO, boolean disable){
-        VciBaseUtil.alertNotNull(buttonDTO,"鏁版嵁瀵硅薄",buttonDTO.getOid(),"涓婚敭");
-        CodeButtonDO buttonDO = selectByOid(buttonDTO.getOid());
-        CodeButtonDO outButtonDO = new CodeButtonDO();
-        BeanUtil.convert(buttonDTO,outButtonDO);
-        boService.checkTs(outButtonDO);
-        if(disable){
-            buttonDO.setLcStatus(FrameworkDataLCStatus.DISABLED.getValue());
-        }else{
-            buttonDO.setLcStatus(FrameworkDataLCStatus.ENABLED.getValue());
-        }
-        return (codeButtonMapper.updateLcStatus(buttonDO.getOid(),buttonDO.getLcStatus()) >0 )?(BaseResult.successMsg((disable?DISABLE_SUCCESS:ENABLE_SUCCESS))):(BaseResult.fail((disable?DISABLE_FAIL:ENABLE_FAIL)));
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java
deleted file mode 100644
index b9aeebb..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java
+++ /dev/null
@@ -1,357 +0,0 @@
-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.BeanUtil;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
-
-/**
- * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeClassifyProcessTempServiceImpl implements CodeClassifyProcessTempServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyProcessTempDaoI codeClassifyProcessTempMapper;
-
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeClassifyProcessTempDO> doList = codeClassifyProcessTempMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeClassifyProcessTempVO> dataGrid=new DataGrid<CodeClassifyProcessTempVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeClassifyProcessTempDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyProcessTempMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO> codeClassifyProcessTempDOs) throws VciBaseException{
-        List<CodeClassifyProcessTempVO> voList = new ArrayList<CodeClassifyProcessTempVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOs)){
-            codeClassifyProcessTempDOs.forEach(temp -> {
-                CodeClassifyProcessTempVO tempVO = codeClassifyProcessTempDO2VO(temp);
-                BeanUtilForVCI.copyPropertiesIgnoreCase(temp,tempVO);
-                voList.add(tempVO);
-            });
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTempDO codeClassifyProcessTempDO) throws VciBaseException{
-              CodeClassifyProcessTempVO vo = new CodeClassifyProcessTempVO();
-        if(codeClassifyProcessTempDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            //澶勭悊鍏宠仈鐨勬ā鏉垮睘鎬�
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getCodeprocessuse(),"妯℃澘娴佺▼鐨勭敤閫�");
-        if (StringUtils.isBlank(codeClassifyProcessTempDTO.getCodeprocessuse())){
-            throw new VciBaseException("妯℃澘娴佺▼鐢ㄩ�斾笉鑳戒负绌�");
-        }
-        Long count = countProcessTemplate(codeClassifyProcessTempDTO);
-        if(count > 0){
-            throw new VciBaseException("宸插瓨鍦ㄧ浉鍚岀殑娴佺▼妯℃澘");
-        }
-        //灏咲TO杞崲涓篋O
-        CodeClassifyProcessTempDO codeClassifyProcessTempDO = new CodeClassifyProcessTempDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
-        codeClassifyProcessTempMapper.insert(codeClassifyProcessTempDO);
-        //鍥犱负涓氬姟绫诲瀷鏈韩娌℃湁鎺у埗鐗堟湰锛屾墍鏈夊己鍒剁粰鐗堟湰revisionValue璁剧疆鍊硷紝骞冲彴涔熶細鍙樻垚绌恒�傘�傘�傘��
-        //鐗堟湰鍙蜂笉鑳戒娇鐢ㄩ粯璁ょ殑灞炴��
-        return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
-    }
-
-    /**
-     * 鑾峰彇娴佺▼妯℃澘鏄惁宸茬粡瀛樺湪浜�
-     * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
-     * @return 涓暟
-     */
-    private Long countProcessTemplate(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
-        String templateName = codeClassifyProcessTempDTO.getName();
-        if (StringUtils.isBlank(templateName)){
-            throw new VciBaseException("妯℃澘娴佺▼鍚嶇О涓嶈兘涓虹┖");
-        }
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codeProcessUse",codeClassifyProcessTempDTO.getCodeprocessuse());
-        conditionMap.put("id",codeClassifyProcessTempDTO.getId());
-        conditionMap.put("classifyTemplateOid", codeClassifyProcessTempDTO.getClassifyTemplateOid());
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyProcessTempDO.class);
-        Long count = codeClassifyProcessTempMapper.countByWrapper(wrapper);
-        return count;
-    }
-
-    /**
-     * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉夸富閿�",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getName(),"娴佺▼妯℃澘鐨勫悕绉�");
-         //灏咲TO杞崲涓篋O
-         CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
-         codeClassifyProcessTempMapper.updateByPrimaryKey(codeClassifyProcessTempDO);
-         return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyProcessTempDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO, CodeClassifyProcessTempDO codeClassifyProcessTempDO) {
-        CodeClassifyProcessTempDO tempDO = new CodeClassifyProcessTempDO();
-        BeanUtil.convert(codeClassifyProcessTempDTO,tempDO);
-        boService.checkTs(tempDO);
-        if(!checkIsLinked(codeClassifyProcessTempDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉跨殑涓婚敭");
-        CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeClassifyProcessTempMapper.deleteByPrimaryKey(codeClassifyProcessTempDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-    * @param oid 涓婚敭
-    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyProcessTempDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyProcessTempDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyProcessTempDO codeClassifyProcessTempDO = codeClassifyProcessTempMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyProcessTempDO == null || StringUtils.isBlank(codeClassifyProcessTempDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyProcessTempDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = listCodeClassifyProcessTempDOByOidCollections(oidCollections);
-        return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyProcessTempDO> listCodeClassifyProcessTempDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = new ArrayList<CodeClassifyProcessTempDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyProcessTempDO> tempDOList =  codeClassifyProcessTempMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyProcessTempDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyProcessTempDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeClassifyProcessTemp(conditionMap,pageHelper);
-    }
-
-    /**
-     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
-     *
-     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
-     * @return 鍙楀奖鍝嶇殑鍐呭
-     */
-    @Override
-    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
-        BatchCBO batchCBO = new BatchCBO();
-        if(StringUtils.isBlank(classifyTemplateOid)){
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("classifyTemplateOid",classifyTemplateOid);
-            List<CodeClassifyProcessTempDO> processTempDOS = codeClassifyProcessTempMapper.selectByCondition(conditionMap, new PageHelper(-1));
-            if(!CollectionUtils.isEmpty(processTempDOS)){
-                batchCBO.copyFromOther(codeClassifyProcessTempMapper.batchDeleteByOids(processTempDOS.stream().map(CodeClassifyProcessTempDO::getOid).collect(Collectors.toList())));
-            }
-        }
-        return batchCBO;
-    }
-
-    /**
-     * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
-     *
-     * @param codeTemplateOid 妯℃澘鐨勪富閿�
-     * @param processUse      鐢ㄩ��
-     * @return 妯℃澘鐨勪俊鎭�
-     */
-    @Override
-    public List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse) {
-        if(StringUtils.isBlank(codeTemplateOid) || StringUtils.isBlank(processUse)){
-            return new ArrayList<>();
-        }
-        Map<String,String> conditionMap =new HashMap<>();
-        conditionMap.put("classifyTemplateOid",codeTemplateOid);
-        conditionMap.put("codeprocessuse",processUse);
-        return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempMapper.selectByCondition(conditionMap,null));
-    }
-
-    @Override
-    public CodeClassifyProcessTempVO getProcessTempVOByName(String codeTemplateOid,String processName) {
-        if (StringUtils.isBlank(processName)){
-            return new CodeClassifyProcessTempVO();
-        }
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("classifyTemplateOid",codeTemplateOid);
-        conditionMap.put("name",processName);
-        return codeClassifyProcessTempDO2VO(codeClassifyProcessTempMapper.selectByCondition(conditionMap,null).get(0));
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java
deleted file mode 100644
index 326d0a0..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java
+++ /dev/null
@@ -1,1022 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
-import com.vci.starter.poi.bo.ReadExcelOption;
-import com.vci.starter.poi.bo.WriteExcelData;
-import com.vci.starter.poi.bo.WriteExcelOption;
-import com.vci.starter.poi.constant.ExcelLangCodeConstant;
-import com.vci.starter.poi.util.ExcelUtil;
-import com.vci.starter.revision.bo.TreeWrapperOptions;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.*;
-import com.vci.starter.web.util.*;
-import com.vci.starter.web.wrapper.VciParentQueryOption;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.pageModel.OsAttributeVO;
-import com.vci.web.pageModel.OsBtmTypeAttributeVO;
-import com.vci.web.pageModel.OsBtmTypeVO;
-import com.vci.web.service.OsAttributeServiceI;
-import com.vci.web.service.OsBtmServiceI;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.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;
-
-import javax.annotation.Resource;
-import java.io.File;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
-import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
-
-/**
- * 涓婚搴撳垎绫绘湇鍔�
- * @author weidy
- * @date 2022-01-20
- */
-@Service
-public class CodeClassifyServiceImpl implements CodeClassifyServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyDaoI codeClassifyMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-    /**
-     * 瑙勫垯鐨勬湇鍔�
-     */
-    @Autowired
-    private CodeRuleServiceI codeRuleService;
-
-    /**
-     * 鍏抽敭灞炴�х殑鏈嶅姟
-     */
-    @Autowired
-    private CodeKeyAttrRepeatRuleServiceI keyAttrRepeatRuleService;
-
-    /**
-     * 鏁版嵁闆嗘垚
-     */
-    @Autowired
-    private CodeDuckingServiceI codeDuckingServiceI;
-
-    /**
-     * 涓氬姟绫诲瀷鐨勬湇鍔�
-     */
-    @Autowired
-    private OsBtmServiceI btmService;
-
-    /**
-     * 灞炴�ф湇鍔�
-     */
-    @Autowired
-    private OsAttributeServiceI attributeService;
-
-    /**
-     * 鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
-
-    /**
-    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
-    */
-    public static  final String PARENT_FIELD_NAME = "parentCodeClassifyOid";
-    /**
-     * 鏌ヨ涓婚搴撳垎绫� 鏍�
-     * @param treeQueryObject 鏍戞煡璇㈠璞�
-     * @return 涓婚搴撳垎绫� 鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws VciBaseException {
-        List<CodeClassifyDO> doList =selectCodeClassifyDOByTree(treeQueryObject);
-        List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
-        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME.toLowerCase(Locale.ROOT));
-        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
-        List<Tree> tree= revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyVO s) ->{
-            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
-            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
-                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
-        });
-        Iterator var6 =  tree.listIterator();
-        while(var6.hasNext()){
-            Tree trees = (Tree) var6.next();
-            boolean checkHasChild=codeClassifyMapper.checkHasChild(trees.getOid());
-            if(checkHasChild){
-                trees.setLeaf(false);
-            }else{
-                trees.setLeaf(true);
-            }
-        }
-        return tree;
-    }
-
-    /**
-     * 涓婚搴撶殑鏍�
-     *
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 涓婚搴撴樉绀烘爲
-     */
-    @Override
-    public List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject) {
-        if(treeQueryObject == null){
-            treeQueryObject = new TreeQueryObject();
-        }
-        if(treeQueryObject.getConditionMap() == null){
-            treeQueryObject.setConditionMap(new HashMap<>());
-        }
-        treeQueryObject.getConditionMap().put(PARENT_FIELD_NAME, QueryOptionConstant.ISNULL);
-        return treeCodeClassify(treeQueryObject);
-    }
-
-    /**
-     * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
-     *
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
-     */
-    @Override
-    public List<CodeClassifyDO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject) {
-        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null,CodeClassifyDO.class);
-        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
-        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
-        queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
-        if(StringUtils.isBlank(treeQueryObject.getSort())) {
-            PageHelper pageHelper = new PageHelper(-1);
-            pageHelper.addDefaultAsc("id");
-            queryWrapperForDO.setPageHelper(pageHelper);
-        }
-        return codeClassifyMapper.selectByWrapper(queryWrapperForDO);
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO> codeClassifyDOs) throws VciBaseException{
-        List<CodeClassifyVO> voList = new ArrayList<CodeClassifyVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyDOs)){
-           for(CodeClassifyDO s: codeClassifyDOs){
-                CodeClassifyVO vo =  codeClassifyDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyVO codeClassifyDO2VO(CodeClassifyDO codeClassifyDO) throws VciBaseException{
-              CodeClassifyVO vo = new CodeClassifyVO();
-        if(codeClassifyDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyVO addSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeClassifyDO codeClassifyDO = new CodeClassifyDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyDO);
-        if(StringUtils.isNotBlank(codeClassifyDO.getParentCodeClassifyOid()) && StringUtils.isNotBlank(codeClassifyDO.getBtmTypeId())){
-            throw new VciBaseException("鍙湁鍦ㄩ《灞傜殑涓婚搴撳垎绫绘墠鑳借缃笟鍔$被鍨�");
-        }
-        BatchCBO cbo_insert = codeClassifyMapper.insert(codeClassifyDO);
-
-//        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊
-//        ClientBusinessObject[] clientBusinessObjects = cbo_insert.getCreateCboArray();
-//        if(clientBusinessObjects.length!=0);
-//        {
-//            codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_ADD,FRAMEWORK_DATA_ENABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO.getOid(), DateUtils.addHours(new Date(),1));
-//        }
-
-        return codeClassifyDO2VO(codeClassifyDO);
-    }
-
-    /**
-     * 淇敼涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public BaseResult editSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyDTO,"鏁版嵁瀵硅薄",codeClassifyDTO.getOid(),"涓婚搴撳垎绫讳富閿�");
-
-         //妫�鏌s
-         CodeClassifyDO codeClassifyDOCopyFromDTO = new CodeClassifyDO();
-         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyDOCopyFromDTO);
-         boolean tsBoolean = boService.checkTs(codeClassifyDOCopyFromDTO);
-         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
-             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
-         }
-
-         //灏咲TO杞崲涓篋O
-         CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyDTO,codeClassifyDO);
-         if(StringUtils.isNotBlank(codeClassifyDO.getParentCodeClassifyOid()) && StringUtils.isNotBlank(codeClassifyDO.getBtmTypeId())){
-             throw new VciBaseException("鍙湁鍦ㄩ《灞傜殑涓婚搴撳垎绫绘墠鑳借缃笟鍔$被鍨�");
-         }
-         codeClassifyMapper.updateByPrimaryKey(codeClassifyDO);
-
-//         //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆傚彧鏈夊惎鐢ㄧ姸鎬佺殑鍒嗙被鎵嶆帹閫�
-//         if(FRAMEWORK_DATA_ENABLED.equals(codeClassifyDO.getLcStatus()));
-//         {
-//             codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_EDIT,FRAMEWORK_DATA_ENABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO.getOid(), codeClassifyDTO.getTs());
-//         }
-
-         return BaseResult.success(codeClassifyDO2VO(codeClassifyDO));
-     }
-
-/**
- * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
- * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
- * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
- * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
- */
-@Override
-public BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
-    VciBaseUtil.alertNotNull(codeClassifyDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyDTO.getOid(),"涓婚敭");
-    CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
-    return checkIsCanDeleteForDO(codeClassifyDTO,codeClassifyDO);
-}
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyDTO codeClassifyDTO, CodeClassifyDO codeClassifyDO) {
-        CodeClassifyDO tsDO = new CodeClassifyDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,tsDO);
-        boService.checkTs(tsDO);
-        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
-        if(checkChildIsLinked(codeClassifyDO.getOid())){
-            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
-        }
-        return BaseResult.success(checkHasChild(codeClassifyDO.getOid()));
-    }
-    /**
-      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
-      *
-      * @param oid 涓婚敭
-      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
-      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
-      */
-    @Override
-    public boolean checkChildIsLinked(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        Map<String,String> childOids = codeClassifyMapper.selectAllLevelChildOid(oid.trim());
-        if(!CollectionUtils.isEmpty(childOids)){
-             for(String childOid: childOids.keySet()){
-                 if(!checkIsLinked(childOid)){
-                     return false;
-                 }
-             }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
-    *
-    * @param oid 涓婚敭
-    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
-    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    @Override
-    public boolean checkHasChild(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        return codeClassifyMapper.checkHasChild(oid.trim());
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎涓婚搴撳垎绫�
-     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassify(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyDTO,"涓婚搴撳垎绫绘暟鎹璞�",codeClassifyDTO.getOid(),"涓婚搴撳垎绫荤殑涓婚敭");
-        CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyDTO,codeClassifyDO);
-
-        //鍏堢畝绉版槸鍚︽湁鍏宠仈妯℃澘锛屾湁妯℃澘瑕佸厛鍒犻櫎
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateDO.class);
-        queryWrapper.addQueryMap("codeClassifyOid",codeClassifyDTO.getOid());
-        List<CodeClassifyTemplateDO> codeClassifyTemplateDOListHaveTemplate =  codeClassifyTemplateMapper.selectByWrapper(queryWrapper);
-        if(codeClassifyTemplateDOListHaveTemplate.size()>0){
-            return BaseResult.fail("鍒嗙被鍏宠仈妯℃澘锛岃鍏堝垹闄�!");
-        }
-
-        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
-        //1銆佹煡璇㈣鍒犻櫎鐨勭埗绫绘暟鎹�
-        List<CodeClassifyDO> deletes = new ArrayList<CodeClassifyDO>();
-        deletes.add(codeClassifyDO);
-
-        if(baseResult.isSuccess()) {
-                        //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
-            Map<String,String> childrenOids = codeClassifyMapper.selectAllLevelChildOid(codeClassifyDO.getOid().trim());
-            if (!CollectionUtils.isEmpty(childrenOids)) {
-                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids.keySet());
-                for(Collection<String> s : childrenCollections){
-
-                    //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
-                    //2銆佹煡璇㈣鍒犻櫎鐨勫瓙绫绘暟鎹�
-                    List<CodeClassifyDO>  codeClassifyDOList = codeClassifyMapper.selectByPrimaryKeyCollection(s);
-                    deletes.addAll(codeClassifyDOList);
-
-                    codeClassifyMapper.batchDeleteByOids(s);
-                }
-
-            }
-                    }else{
-            return baseResult;
-        }
-
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeClassifyMapper.deleteByPrimaryKey(codeClassifyDO.getOid());
-
-        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�
-        for (CodeClassifyDO codeClassifyDO1:deletes){
-            //codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_DELETE,FRAMEWORK_DATA_DISABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO1.getOid(), DateUtils.addHours(new Date(),1));//杩欓噷鏄綋鍓嶆椂闂�
-
-            //瀛樺偍瑕佸垹闄ょ殑鏁版嵁
-            codeDuckingServiceI.cacheDeleteData(codeClassifyDO1.getOid(), codeClassifyDO1);
-        }
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撳垎绫绘樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyDO codeClassifyDO = codeClassifyMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyDO == null || StringUtils.isBlank(codeClassifyDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撳垎绫绘樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyVO> listCodeClassifyByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyDO> codeClassifyDOList = listCodeClassifyDOByOidCollections(oidCollections);
-        return codeClassifyDO2VOs(codeClassifyDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyDO> listCodeClassifyDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyDO> codeClassifyDOList = new ArrayList<CodeClassifyDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyDO> tempDOList =  codeClassifyMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鏍� 涓婚搴撳垎绫�
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 涓婚搴撳垎绫绘樉绀烘爲
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
-        if(treeQueryObject == null){
-            treeQueryObject = new TreeQueryObject();
-        }
-        if(treeQueryObject.getConditionMap() == null){
-            treeQueryObject.setConditionMap(new HashMap<>());
-        }
-        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
-            treeQueryObject.getConditionMap().remove(LC_STATUS);
-        }
-        if(treeQueryObject.getExtandParamsMap() ==null || !treeQueryObject.getExtandParamsMap().containsKey(REFER_SHOW_DISABLED_QUERY_KEY)) {
-        }
-        treeQueryObject.getConditionMap().put(LC_STATUS, FRAMEWORK_DATA_ENABLED);
-        return treeCodeClassify(treeQueryObject);
-    }
-
-    /**
-     * 鍚敤銆佸仠鐢�
-     * @param oid 涓婚敭
-     * @param lcStatus 鐘舵��
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult updateLcStatus(String oid, String lcStatus){
-
-        //鏌ヨ淇敼鍓峵s
-        CodeClassifyDO codeClassifyDO_old = selectByOid(oid);//涓昏鏄负浜嗘煡璇s
-
-        //鍚敤銆佸仠鐢�
-        int u = codeClassifyMapper.updateLcStatus(oid,lcStatus);
-
-//        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
-//        if(u!=0) {
-//            codeDuckingServiceI.insertCache1(lcStatus,lcStatus,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, oid, codeClassifyDO_old.getTs());
-//        }
-        BaseResult baseResult = u==0?BaseResult.error("淇敼澶辫触锛�"):BaseResult.success("淇敼鎴愬姛");
-        return baseResult;
-    }
-
-    /**
-     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
-     * @param queryWrapper 鏌ヨ灏佽鍣�
-     * @return 鏁版嵁瀵硅薄
-     */
-    @Override
-    public List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
-        return codeClassifyMapper.selectByWrapper(queryWrapper);
-    }
-
-    /**
-     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鍒嗙被鐩稿叧鐨勬墍鏈変俊鎭�
-     *
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 鍒嗙被涓婄骇锛屼笅绾х殑淇℃伅
-     */
-    @Override
-    public CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid) {
-        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
-        CodeClassifyFullInfoBO fullInfo = new CodeClassifyFullInfoBO();
-        CodeClassifyDO classifyDO = selectByOid(codeClassifyOid);
-        //鏌ヨ涓婄骇
-        fullInfo.setCurrentClassifyVO(codeClassifyDO2VO(classifyDO));
-        fullInfo.setParentClassifyVOs(codeClassifyDO2VOs(codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid)));
-        if(!CollectionUtils.isEmpty(fullInfo.getParentClassifyVOs())){
-            fullInfo.setTopClassifyVO(fullInfo.getParentClassifyVOs().stream().filter(s->StringUtils.isBlank(s.getParentcodeclassifyoid())).findFirst().orElseGet(()->null));
-        }
-        return fullInfo;
-    }
-
-    /**
-     * 鑾峰彇褰撳墠鍒嗙被鐨勯《灞傚垎绫�
-     *
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 椤跺眰鍒嗙被鐨勪俊鎭�
-     */
-    @Override
-    public CodeClassifyVO getTopClassifyVO(String codeClassifyOid) {
-        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
-        List<CodeClassifyDO> classifyDOS = codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid);
-        if(!CollectionUtils.isEmpty(classifyDOS)){
-            CodeClassifyDO classifyDO = classifyDOS.stream().filter(s -> StringUtils.isBlank(s.getParentCodeClassifyOid())).findFirst().orElseGet(() -> null);
-            if(classifyDO!=null){
-                return codeClassifyDO2VO(classifyDO);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 缁熻瀛愯妭鐐圭殑涓暟
-     *
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 涓暟
-     */
-    @Override
-    public int countChildrenByClassifyOid(String codeClassifyOid) {
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("parentCodeClassifyOid",codeClassifyOid);
-        return codeClassifyMapper.countByCondition(conditionMap).intValue();
-    }
-
-    /**
-     * 鑾峰彇瀛愮骇鐨勪富棰樺簱鍒嗙被
-     *
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @param allLevel        鏄惁鎵�鏈夌殑灞傜骇
-     * @param fieldInPath 鍦ㄨ矾寰勪腑鐨勫瓧娈�
-     * @param enable 鏄惁鍙樉绀哄惎鐢�
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    @Override
-    public List<CodeClassifyVO> listChildrenClassify(String codeClassifyOid, boolean allLevel, String fieldInPath, boolean enable) {
-        if(allLevel){
-            List<CodeClassifyDO> classifyDOS = codeClassifyMapper.selectAllLevelChildHasPath(codeClassifyOid,fieldInPath,enable);
-            if(!CollectionUtils.isEmpty(classifyDOS)){
-                classifyDOS = classifyDOS.stream().filter(s->FRAMEWORK_DATA_ENABLED.equalsIgnoreCase(s.getLcStatus())).collect(Collectors.toList());
-            }
-            return codeClassifyDO2VOs(classifyDOS);
-        }else{
-            //鍙煡璇竴鏉★紝閭ath灏辨病蹇呰鏌ヨ浜�
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("parentcodeclassifyoid",codeClassifyOid);
-            if (enable){
-                conditionMap.put(VciQueryWrapperForDO.LC_STATUS_FIELD,FRAMEWORK_DATA_ENABLED);
-            }
-            return codeClassifyDO2VOs(codeClassifyMapper.selectByCondition(conditionMap,new PageHelper(-1)));
-        }
-    }
-
-    /**
-     * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
-     *
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    @Override
-    public List<CodeClassifyVO> listParentClassify(String codeClassifyOid){
-        List<CodeClassifyDO> classifyDOS = codeClassifyMapper.listParentClassify(codeClassifyOid);
-        return codeClassifyDO2VOs(classifyDOS);
-    }
-
-    /**
-     * 瀵煎嚭鍒嗙被
-     *
-     * @param oid 鍒嗙被涓婚敭
-     * @return excel鏂囦欢璺緞
-     */
-    @Override
-    public String exportClassify(String oid) {
-        VciBaseUtil.alertNotNull(oid,"鍒嗙被鐨勪富閿�");
-        CodeClassifyVO classifyVO = getObjectByOid(oid);
-        classifyVO.setDataLevel(0);
-        classifyVO.setPath(classifyVO.getId());
-        List<CodeClassifyVO> codeClassifyVOS = listChildrenClassify(oid, true, "id", false);
-        if(codeClassifyVOS ==null){
-            codeClassifyVOS = new ArrayList<>();
-        }
-        codeClassifyVOS.add(classifyVO);
-
-        //鏌ヨ涓�涓嬭鍒欑殑缂栧彿锛屽拰鍏抽敭灞炴�ч噸澶嶈鍒�
-        List<String> codeRuleOids = codeClassifyVOS.stream().filter(s -> StringUtils.isNotBlank(s.getCoderuleoid())).map(CodeClassifyVO::getCoderuleoid).collect(Collectors.toList());
-        Map<String, CodeRuleVO> ruleVOMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(codeRuleOids)){
-            VciBaseUtil.switchCollectionForOracleIn(codeRuleOids).stream().forEach(ruleOids->{
-                Collection<CodeRuleVO> ruleVOS = codeRuleService.listCodeRuleByOids(ruleOids);
-                ruleVOMap.putAll( Optional.ofNullable(ruleVOS).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)));
-            });
-        }
-        //鎵惧叧閿睘鎬ц鍒�
-        List<String> keyRuleOids = codeClassifyVOS.stream().filter(s -> StringUtils.isNotBlank(s.getCodekeyattrrepeatoid())).map(CodeClassifyVO::getCodekeyattrrepeatoid).collect(Collectors.toList());
-        Map<String, CodeKeyAttrRepeatRuleVO> keyRuleVOMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(keyRuleOids)){
-            VciBaseUtil.switchCollectionForOracleIn(keyRuleOids).stream().forEach(ruleOids->{
-                Collection<CodeKeyAttrRepeatRuleVO> ruleVOS = keyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByOids(ruleOids);
-                keyRuleVOMap.putAll( Optional.ofNullable(ruleVOS).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)));
-            });
-        }
-        //ok,鍐檈xcel
-        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + "瀵煎嚭鍒嗙被.xls";
-        try {
-            new File(excelName).createNewFile();
-        } catch (Throwable e) {
-            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
-        }
-        List<WriteExcelData> excelDataList = new ArrayList<>();
-        excelDataList.add(new WriteExcelData(0,0,"鍒嗙被缂栧彿"));
-        excelDataList.add(new WriteExcelData(0,1,"鍒嗙被鍚嶇О"));
-        excelDataList.add(new WriteExcelData(0,2,"涓氬姟绫诲瀷缂栧彿"));
-        excelDataList.add(new WriteExcelData(0,3,"涓氬姟绫诲瀷鍚嶇О"));
-        excelDataList.add(new WriteExcelData(0,4,"缂栫爜瑙勫垯缂栧彿"));
-        excelDataList.add(new WriteExcelData(0,5,"缂栫爜瑙勫垯鍚嶇О"));
-        excelDataList.add(new WriteExcelData(0,6,"鏌ラ噸瑙勫垯缂栧彿"));
-        excelDataList.add(new WriteExcelData(0,7,"鏌ラ噸瑙勫垯鍚嶇О"));
-        excelDataList.add(new WriteExcelData(0,8,"鍒嗙被璺緞"));
-        excelDataList.add(new WriteExcelData(0,9,"鐘舵��"));
-        excelDataList.add(new WriteExcelData(0,10,"鍒嗙被灞傜骇"));
-        excelDataList.add(new WriteExcelData(0,11,"鎻忚堪"));
-        for (int i = 0; i < codeClassifyVOS.size(); i++) {
-            CodeClassifyVO vo = codeClassifyVOS.get(i);
-            excelDataList.add(new WriteExcelData(i+1,0,vo.getId()));
-            excelDataList.add(new WriteExcelData(i+1,1,vo.getName()));
-            excelDataList.add(new WriteExcelData(i+1,2,vo.getBtmtypeid()));
-            excelDataList.add(new WriteExcelData(i+1,3,vo.getBtmtypename()));
-            excelDataList.add(new WriteExcelData(i+1,4,StringUtils.isNotBlank(vo.getCoderuleoid())?ruleVOMap.getOrDefault(vo.getCoderuleoid(),new CodeRuleVO()).getId():""));
-            excelDataList.add(new WriteExcelData(i+1,5,StringUtils.isNotBlank(vo.getCoderuleoid())?ruleVOMap.getOrDefault(vo.getCoderuleoid(),new CodeRuleVO()).getName():""));
-            excelDataList.add(new WriteExcelData(i+1,6,StringUtils.isNotBlank(vo.getCodekeyattrrepeatoid())?keyRuleVOMap.getOrDefault(vo.getCodekeyattrrepeatoid(),new CodeKeyAttrRepeatRuleVO()).getId():""));
-            excelDataList.add(new WriteExcelData(i+1,7,StringUtils.isNotBlank(vo.getCodekeyattrrepeatoid())?keyRuleVOMap.getOrDefault(vo.getCodekeyattrrepeatoid(),new CodeKeyAttrRepeatRuleVO()).getName():""));
-            excelDataList.add(new WriteExcelData(i+1,8,vo.getOid().equalsIgnoreCase(classifyVO.getOid())?vo.getPath():classifyVO.getPath() + vo.getPath()));
-            excelDataList.add(new WriteExcelData(i+1,9,FrameworkDataLCStatus.getTextByValue(vo.getLcStatus())));
-            excelDataList.add(new WriteExcelData(i+1,10,vo.getDataLevel()));
-            excelDataList.add(new WriteExcelData(i+1,11,vo.getDescription()));
-        }
-        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
-        ExcelUtil.writeDataToFile(excelName, excelOption);
-        return excelName;
-    }
-
-    /**
-     * 鍒涘缓瀵煎叆妯℃澘
-     *
-     * @return excel鏂囦欢璺緞
-     */
-    @Override
-    public String createImportExcel() {
-        //ok,鍐檈xcel
-        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + "鍒嗙被瀵煎叆妯℃澘.xls";
-        try {
-            new File(excelName).createNewFile();
-        } catch (Throwable e) {
-            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
-        }
-        List<WriteExcelData> excelDataList = new ArrayList<>();
-        WriteExcelData excelData = new WriteExcelData(0, 0, "鍒嗙被缂栧彿");
-        excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
-        excelDataList.add(excelData);
-        WriteExcelData excelData1 = new WriteExcelData(0, 1, "鍒嗙被鍚嶇О");
-        excelData1.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
-        excelDataList.add(excelData1);
-        excelDataList.add(new WriteExcelData(0,2,"涓氬姟绫诲瀷缂栧彿"));
-        excelDataList.add(new WriteExcelData(0,3,"缂栫爜瑙勫垯缂栧彿"));
-        excelDataList.add(new WriteExcelData(0,4,"鏌ラ噸瑙勫垯缂栧彿"));
-        WriteExcelData excelData2 = new WriteExcelData(0, 5, "鍒嗙被璺緞");
-        excelData2.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
-        excelDataList.add(excelData2);
-        excelDataList.add(new WriteExcelData(0,6,"鐘舵��"));
-        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
-        ExcelUtil.writeDataToFile(excelName, excelOption);
-        return excelName;
-    }
-
-    /**
-     * 瀵煎叆鍒嗙被
-     *
-     * @param file1 鏂囦欢鐨勪俊鎭�
-     * @return 閿欒鏂囦欢鐨勫湴鍧�
-     */
-    @Override
-    public void importClassify(File file1) {
-        VciBaseUtil.alertNotNull(file1,"excel鏂囦欢");
-        if(!file1.exists()){
-            throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file1.getPath()});
-        }
-        ReadExcelOption excelOption = new ReadExcelOption();
-        List<CodeClassifyPO> poList = null;
-        try{
-            poList = ExcelUtil.readDataObjectFromExcel(file1,CodeClassifyPO.class,excelOption,(value,po,fieldName)->{
-                po.setLcStatus(FrameworkDataLCStatus.getValueByText(po.getLcStatusText()));
-                if(StringUtils.isBlank(po.getLcStatusText())){
-                    po.setLcStatus(FrameworkDataLCStatus.ENABLED.getValue());
-                }
-            });
-        }catch (Exception e){
-            if(logger.isErrorEnabled()){
-                logger.error("璇诲彇excel鍐呭鐨勬椂鍊欏嚭鐜颁簡閿欒",e);
-            }
-            throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[]{},e);
-        }
-        //鍘婚櫎鏁磋閮芥槸绌虹殑鎯呭喌
-
-        if(CollectionUtils.isEmpty(poList)){
-            throw new VciBaseException(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
-        }
-
-        poList = poList.stream().filter(s->!(StringUtils.isBlank(s.getId()) && StringUtils.isBlank(s.getName()) && StringUtils.isBlank(s.getPath()))).collect(Collectors.toList());
-
-        List<CodeClassifyDO> classifyDOList = new ArrayList<>();
-        //鐪嬬湅璺緞鏄惁鏈夐噸澶�
-        Map<String/**璺緞**/, Long/**涓暟**/> pathCountMap = poList.stream().filter(s->StringUtils.isNotBlank(s.getPath())).collect(Collectors.groupingBy(s -> s.getPath(), Collectors.counting()));
-        List<String> repeatPaths = Optional.ofNullable(pathCountMap).orElse(new HashMap<>()).entrySet().stream().filter(entry -> entry.getValue() > 1).map(entry -> entry.getKey()).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(repeatPaths)){
-            //鏈夐噸澶嶇殑鍐呭
-            List<String> rowIndexList = new ArrayList<>();
-            poList.stream().forEach(po->{
-                if(repeatPaths.contains(po.getPath())){
-                    rowIndexList.add(po.getRowIndex());
-                }
-            });
-            throw new VciBaseException("璺緞鏈夐噸澶�,{0}",new String[]{rowIndexList.stream().collect(Collectors.joining(","))});
-        }
-
-        Map<String, CodeRuleVO> ruleVOMap = Optional.ofNullable(codeRuleService.listCodeRuleByIds(
-                poList.stream().filter(s->StringUtils.isNotBlank(s.getCodeRuleId())).map(CodeClassifyPO::getCodeRuleId).collect(Collectors.toList()))
-        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
-
-        Map<String,CodeKeyAttrRepeatRuleVO> keyRuleVOMap =Optional.ofNullable(keyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByIds(
-                poList.stream().filter(s->StringUtils.isNotBlank(s.getKeyRepeatRuleId())).map(CodeClassifyPO::getKeyRepeatRuleId).collect(Collectors.toList()))
-        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
-
-        Map<String, OsBtmTypeVO> btmVOMap = Optional.ofNullable(btmService.listBtmByIds(
-                poList.stream().filter(s -> StringUtils.isNotBlank(s.getBtmTypeId())).map(CodeClassifyPO::getBtmTypeId).collect(Collectors.toList()))
-        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
-
-        Map<String/**璺緞**/,String/**涓婚敭**/> oidPathMap = new HashMap<>();
-
-        //鎴戜滑闇�瑕佹煡璇㈡墍鏈夊凡缁忓瓨鍦ㄧ殑鍒嗙被锛屼富瑕佹槸璺緞锛岀敤鏉ュ垽鏂垎绫荤殑鏁版嵁
-        List<CodeClassifyDO> existClassifyDOs = codeClassifyMapper.selectAllLevelChildHasPath("", "id", false);
-        Map<String/**璺緞**/, CodeClassifyDO/**宸茬粡瀛樺湪鐨勬暟鎹�**/> pathDOMap = Optional.ofNullable(existClassifyDOs).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> {
-            String path = s.getPath();
-            if(StringUtils.isNotBlank(path) && path.startsWith("#")){
-                return path.substring(1);
-            }
-            return path;
-        }, t -> t));
-        poList.stream().forEach(po->{
-            CodeClassifyDO classifyDO = new CodeClassifyDO();
-            VciBaseUtil.alertNotNull(po.getId(),"鍒嗙被缂栧彿",po.getName(),"鍒嗙被鍚嶇О",po.getPath(),"鍒嗙被璺緞");
-            if(StringUtils.isNotBlank(po.getBtmTypeId()) && !btmVOMap.containsKey(po.getBtmTypeId().toLowerCase(Locale.ROOT))){
-                throw new VciBaseException("绗瑊0}琛岀殑涓氬姟绫诲瀷{1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(VciBaseUtil.getInt(po.getRowIndex())+1),po.getBtmTypeId()});
-            }
-            if(StringUtils.isNotBlank(po.getCodeRuleId()) && !ruleVOMap.containsKey(po.getCodeRuleId().toLowerCase(Locale.ROOT))){
-                throw new VciBaseException("绗瑊0}琛岀殑缂栫爜瑙勫垯{1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(po.getRowIndex()+1),po.getCodeRuleId()});
-            }
-            if(StringUtils.isNotBlank(po.getKeyRepeatRuleId()) && !keyRuleVOMap.containsKey(po.getKeyRepeatRuleId().toLowerCase(Locale.ROOT))){
-                throw new VciBaseException("绗瑊0}琛岀殑鍏抽敭灞炴�ф煡閲嶈鍒檣1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(po.getRowIndex()+1),po.getKeyRepeatRuleId()});
-            }
-            classifyDO.setOid(VciBaseUtil.getPk());
-            classifyDO.setId(po.getId());
-            classifyDO.setName(po.getName());
-            classifyDO.setDescription(po.getDescription());
-            oidPathMap.put(po.getPath(),classifyDO.getOid());
-            if(StringUtils.isNotBlank(po.getBtmTypeId())){
-                OsBtmTypeVO typeVO = btmVOMap.get(po.getBtmTypeId().toLowerCase(Locale.ROOT));
-                classifyDO.setBtmTypeId(typeVO.getId());
-                classifyDO.setBtmTypeName(typeVO.getName());
-            }
-            if(StringUtils.isNotBlank(po.getCodeRuleId())){
-                CodeRuleVO codeRuleVO = ruleVOMap.get(po.getCodeRuleId().toLowerCase(Locale.ROOT));
-                classifyDO.setCodeRuleOid(codeRuleVO.getOid());
-            }
-            if(StringUtils.isNotBlank(po.getKeyRepeatRuleId())){
-                CodeKeyAttrRepeatRuleVO repeatRuleVO = keyRuleVOMap.get(po.getKeyRepeatRuleId());
-                classifyDO.setCodeKeyAttrRepeatOid(repeatRuleVO.getOid());
-            }
-            classifyDO.setLcStatus(po.getLcStatus());
-            classifyDO.setPath(po.getPath());
-            classifyDOList.add(classifyDO);
-        });
-        //瑕佺湅瀛樺湪鐨勶紝淇敼璺緞瀵瑰簲鐨勪富閿�
-        Map<String/**璺緞**/,String/**涓婚敭**/> catchedOidPathMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(oidPathMap)){
-            oidPathMap.forEach((path,oid)->{
-                if(pathDOMap.containsKey(path)){
-                    //璇存槑瀛樺湪
-                    catchedOidPathMap.put(path,pathDOMap.get(path).getOid());
-                }else{
-                    catchedOidPathMap.put(path,oid);
-                }
-            });
-        }
-        List<CodeClassifyDO> addClassifyDOList = new ArrayList<>();
-        List<CodeClassifyDO> editClassifyDOList = new ArrayList<>();
-        classifyDOList.stream().forEach(classifyDO->{
-
-            //瑕佺湅涓婄骇鏄笉鏄瓨鍦ㄥ摝
-            String parentPath = classifyDO.getPath();
-            if(parentPath.contains("#")) {
-                parentPath = parentPath.substring(0, parentPath.lastIndexOf("#"));
-            }
-            if((!catchedOidPathMap.containsKey(parentPath) && !pathDOMap.containsKey(parentPath) )&& !classifyDO.getPath().equalsIgnoreCase(classifyDO.getId())){
-                throw new VciBaseException("鍒嗙被缂栧彿[{0}],鍒嗙被鍚嶇О[{1}]锛岃矾寰勪负[{2}]鐨勪笂绾у垎绫诲湪绯荤粺涓紝鍦ㄦ湰娆″鍏ョ殑鏁版嵁鍜岀郴缁熶腑鍧囨病鏈夋壘鍒�",new String[]{classifyDO.getId(),classifyDO.getName(),classifyDO.getPath()});
-            }
-            if (!classifyDO.getPath().equalsIgnoreCase(classifyDO.getId())){
-                //涓嶆槸椤剁骇鐨勬椂鍊欙紝瑕佽缃笂绾х殑涓婚敭
-
-                classifyDO.setParentCodeClassifyOid(catchedOidPathMap.containsKey(parentPath)?catchedOidPathMap.get(parentPath):pathDOMap.get(parentPath).getOid());
-            }
-            if(classifyDO.getPath().equalsIgnoreCase(classifyDO.getId()) && StringUtils.isBlank(classifyDO.getBtmTypeId())){
-                throw new VciBaseException("鍒嗙被缂栧彿[{0}],鍒嗙被鍚嶇О[{1}]锛屾槸椤跺眰鍒嗙被锛岄渶瑕佽缃笟鍔$被鍨嬬紪鍙�",new String[]{classifyDO.getId(),classifyDO.getName()});
-            }
-            if(pathDOMap.containsKey(classifyDO.getPath())){
-                //瀛樺湪锛岄渶瑕佷慨鏀瑰璞�
-                classifyDO.setOid(catchedOidPathMap.get(classifyDO.getPath()));
-                CodeClassifyDO classifyDOInDB = pathDOMap.get(classifyDO.getPath());
-                classifyDOInDB.setId(classifyDO.getId());
-                classifyDOInDB.setName(classifyDO.getName());
-                classifyDOInDB.setDescription(classifyDO.getDescription());
-                classifyDOInDB.setBtmTypeId(classifyDO.getBtmTypeId());
-                classifyDOInDB.setBtmTypeName(classifyDO.getBtmTypeName());
-                classifyDOInDB.setCodeRuleOid(classifyDO.getCodeRuleOid());
-                classifyDOInDB.setCodeRuleOidName(classifyDO.getCodeRuleOidName());
-                classifyDOInDB.setParentCodeClassifyOid(classifyDO.getParentCodeClassifyOid());
-                classifyDOInDB.setCodeKeyAttrRepeatOid(classifyDO.getCodeKeyAttrRepeatOid());
-                classifyDOInDB.setCodeKeyAttrRepeatOidName(classifyDO.getCodeKeyAttrRepeatOidName());
-                if(classifyDOInDB.getOrderNum() == null){
-                    classifyDOInDB.setOrderNum(0);
-                }
-                editClassifyDOList.add(classifyDOInDB);
-            }else{
-                //鏄柊鐨勶紝鐩存帴娣诲姞灏辫浜�
-                //鍒ゆ柇鍙锋�庝箞澶勭悊?
-                classifyDO.setOrderNum(0);
-                addClassifyDOList.add(classifyDO);
-            }
-        });
-        if(!CollectionUtils.isEmpty(editClassifyDOList)){
-            VciBaseUtil.switchCollectionForOracleIn(editClassifyDOList).stream().forEach(classifyDOs->{
-                codeClassifyMapper.batchUpdate(classifyDOs.stream().collect(Collectors.toList()));
-            });
-        }
-        if(!CollectionUtils.isEmpty(addClassifyDOList)){
-            revisionModelUtil.wrapperForBatchAdd(addClassifyDOList);
-            VciBaseUtil.switchCollectionForOracleIn(addClassifyDOList).stream().forEach(classifyDOs->{
-                codeClassifyMapper.batchInsert(classifyDOs.stream().collect(Collectors.toList()));
-            });
-        }
-
-    }
-
-    /**
-     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
-     *
-     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢
-     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
-     */
-    @Override
-    public DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject) {
-        if(baseQueryObject == null){
-            baseQueryObject = new BaseQueryObject();
-        }
-        if(baseQueryObject.getConditionMap() == null){
-            baseQueryObject.setConditionMap(new HashMap<>());
-        }
-        String classifyOid = baseQueryObject.getConditionMap().getOrDefault("codeClassifyOid","");
-        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
-        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
-        if(StringUtils.isBlank(classifyOid)){
-            return new DataGrid<>();
-        }
-        CodeClassifyVO topClassifyVO = getTopClassifyVO(classifyOid);
-        if(topClassifyVO == null || StringUtils.isBlank(topClassifyVO.getBtmtypeid())){
-            return new DataGrid<>();
-        }
-        List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService.listAttributeByBtmId(topClassifyVO.getBtmtypeid());
-        List<OsAttributeVO> attributeVOS = new ArrayList<>();
-        if(!CollectionUtils.isEmpty(unDefaultAttributes)){
-            unDefaultAttributes.stream().forEach(attr->{
-                OsAttributeVO attributeVO = new OsAttributeVO();
-                BeanUtil.convert(attr,attributeVO);
-                attributeVO.setAttributeDataType(attr.getAttrDataType());
-                attributeVO.setAttrLength(attr.getAttributeLength());
-                attributeVO.setBtmTypeId(attr.getReferBtmTypeId());
-                attributeVO.setBtmTypeName(attr.getReferBtmTypeName());
-                boolean add = true;
-                if(StringUtils.isNotBlank(id) && !attributeVO.getId().contains(id.replace("*",""))){
-                    add = false;
-                }
-                if(StringUtils.isNotBlank(name) && !attributeVO.getId().contains(name.replace("*",""))){
-                    add = false;
-                }
-                if(add){
-                    attributeVOS.add(attributeVO);
-                }
-            });
-        }
-        if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){
-            attributeService.getDefaultAttributeVOs().stream().forEach(attr->{
-                boolean add = true;
-                if(StringUtils.isNotBlank(id) && !attr.getId().contains(id.replace("*",""))){
-                    add = false;
-                }
-                if(StringUtils.isNotBlank(name) && !attr.getId().contains(name.replace("*",""))){
-                    add = false;
-                }
-                if(add){
-                    attributeVOS.add(attr);
-                }
-            });
-        }
-        DataGrid<OsAttributeVO> dataGrid = new DataGrid<>();
-        dataGrid.setData(attributeVOS);
-        dataGrid.setTotal(attributeVOS.size());
-        return dataGrid;
-    }
-
-    /**
-     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
-     *
-     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    @Override
-    public CodeClassifyVO getObjectByIdPath(String idPath) {
-        CodeClassifyDO classifyDO = codeClassifyMapper.selectByFieldPath(idPath, VciQueryWrapperForDO.ID_FIELD);
-        return codeClassifyDO2VO(classifyDO);
-    }
-    /**
-     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
-     *
-     * @param clsfNamePath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
-     * @return 鍒嗙被鐨勬樉绀哄璞�
-     */
-    @Override
-    public CodeClassifyVO getObjectByClsfNamePath(String clsfNamePath){
-        CodeClassifyDO classifyDO = codeClassifyMapper.selectByFieldPath(clsfNamePath, "name");
-        return codeClassifyDO2VO(classifyDO);
-    }
-
-    /***
-     * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
-     * @param codeClassifyId
-     * @param enable
-     * @return
-     */
-    @Override
-   public  List<CodeClassifyVO> getIdPathToNamePathByParentId(String codeClassifyId,boolean enable){
-
-        List<CodeClassifyDO> classifyDOs= codeClassifyMapper.getIdPathToNamePathByParentId(codeClassifyId,enable);
-        return codeClassifyDO2VOs(classifyDOs);
-
-   }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java
deleted file mode 100644
index 35e9895..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java
+++ /dev/null
@@ -1,295 +0,0 @@
-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.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 鏄犲皠瑙勫垯鐨勬槑缁嗘湇鍔�
- * @author weidy
- * @date 2022-03-10
- */
-@Service
-public class CodeClassifyTempMapItemServiceImpl implements CodeClassifyTempMapItemServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyTempMapItemDaoI codeClassifyTempMapItemMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-    /**
-     * 鍒嗙被妯℃澘灞炴�х殑鏈嶅姟
-     */
-    @Autowired
-    private CodeClassifyTemplateAttrServiceI attrService;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeClassifyTempMapItemDO> doList = codeClassifyTempMapItemMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeClassifyTempMapItemVO> dataGrid=new DataGrid<CodeClassifyTempMapItemVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            //濉厖鏄犲皠鏄庣粏涓垎绫绘ā鏉垮睘鎬х殑鍊�
-            List<String> attrOidList = doList.stream().map(CodeClassifyTempMapItemDO::getClassifyTemplateAttrOid).collect(Collectors.toList());
-            List<CodeClassifyTemplateAttrVO> attrVOS = (List<CodeClassifyTemplateAttrVO>) attrService.listCodeClassifyTemplateAttrByOids(attrOidList);
-            attrVOS.forEach(attr -> {
-                doList.stream().filter(item -> {
-                    return item.getClassifyTemplateAttrOid().equals(attr.getOid());
-                }).forEach(item -> {
-                    item.setClassifyAttrId(attr.getId());
-                    item.setClassifyAttrName(attr.getName());
-                });
-            });
-            dataGrid.setData(codeClassifyTempMapItemDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTempMapItemMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTempMapItemDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO>  codeClassifyTempMapItemDOs) throws VciBaseException{
-        List<CodeClassifyTempMapItemVO> voList = new ArrayList<CodeClassifyTempMapItemVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyTempMapItemDOs)){
-           for(CodeClassifyTempMapItemDO s: codeClassifyTempMapItemDOs){
-                CodeClassifyTempMapItemVO vo =  codeClassifyTempMapItemDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTempMapItemDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyTempMapItemVO codeClassifyTempMapItemDO2VO(CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) throws VciBaseException{
-              CodeClassifyTempMapItemVO vo = new CodeClassifyTempMapItemVO();
-        if(codeClassifyTempMapItemDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyTempMapItemVO addSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = new CodeClassifyTempMapItemDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
-        codeClassifyTempMapItemMapper.insert(codeClassifyTempMapItemDO);
-        return codeClassifyTempMapItemDO2VO(codeClassifyTempMapItemDO);
-    }
-
-    /**
-     * 淇敼鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeClassifyTempMapItemVO editSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"鏁版嵁瀵硅薄",codeClassifyTempMapItemDTO.getOid(),"鏄犲皠瑙勫垯鐨勬槑缁嗕富閿�");
-         //灏咲TO杞崲涓篋O
-         CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByOid(codeClassifyTempMapItemDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
-         codeClassifyTempMapItemMapper.updateByPrimaryKey(codeClassifyTempMapItemDO);
-         return codeClassifyTempMapItemDO2VO(codeClassifyTempMapItemDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyTempMapItemDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyTempMapItemDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO, CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) {
-            CodeClassifyTempMapItemDO tsDO = new CodeClassifyTempMapItemDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDTO,tsDO);
-        boService.checkTs(tsDO);
-        if(!checkIsLinked(codeClassifyTempMapItemDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassifyTempMapItem(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�",codeClassifyTempMapItemDTO.getOid(),"鏄犲皠瑙勫垯鐨勬槑缁嗙殑涓婚敭");
-        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByOid(codeClassifyTempMapItemDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeClassifyTempMapItemMapper.deleteByPrimaryKey(codeClassifyTempMapItemDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
-    * @param oid 涓婚敭
-    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyTempMapItemVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyTempMapItemDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyTempMapItemDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = codeClassifyTempMapItemMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyTempMapItemDO == null || StringUtils.isBlank(codeClassifyTempMapItemDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyTempMapItemDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOList = listCodeClassifyTempMapItemDOByOidCollections(oidCollections);
-        return codeClassifyTempMapItemDO2VOs(codeClassifyTempMapItemDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyTempMapItemDO> listCodeClassifyTempMapItemDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOList = new ArrayList<CodeClassifyTempMapItemDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyTempMapItemDO> tempDOList =  codeClassifyTempMapItemMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyTempMapItemDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyTempMapItemDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeClassifyTempMapItem(conditionMap,pageHelper);
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
deleted file mode 100644
index 983d2ee..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
+++ /dev/null
@@ -1,726 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.enumpck.VciFieldTypeEnum;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.*;
-import com.vci.starter.web.util.BeanUtil;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.util.VciDateUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.pageModel.OsBtmTypeAttributeVO;
-import com.vci.web.pageModel.UIFormReferVO;
-import com.vci.web.service.BdSelectInputCharServiceI;
-import com.vci.web.service.OsAttributeServiceI;
-import com.vci.web.service.OsBtmServiceI;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-/**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeClassifyTemplateAttrServiceImpl implements CodeClassifyTemplateAttrServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyTemplateAttrDaoI codeClassifyTemplateAttrMapper;
-
-    /**
-     * 妯℃澘鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
-
-    /**
-     * 妯℃澘鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private CodeTemplatePhaseServiceI codeTemplatePhaseServiceI;
-
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-    /**
-     * 鏌ヨ杩欎釜涓氬姟绫诲瀷鐨勬墍鏈夊睘鎬�
-     */
-    @Autowired
-    private OsBtmServiceI btmService;
-
-    /**
-     * 鍙�夊彲杈撴湇鍔�
-     */
-    @Autowired
-    private BdSelectInputCharServiceI charService;
-
-    /**
-     * 灞炴�х殑鏈嶅姟
-     */
-    @Autowired
-    private OsAttributeServiceI attributeService;
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        DataGrid<CodeClassifyTemplateAttrVO> dataGrid=new DataGrid<CodeClassifyTemplateAttrVO>();
-        //娌℃湁浼犻�掑弬鏁帮紝灏变笉鎵ц鏌ヨ閫昏緫
-        if(conditionMap.size()==0){
-            dataGrid.setData(new ArrayList<>());
-            dataGrid.setTotal(0);
-            return dataGrid;
-        }
-
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultAsc("ordernum");
-        List<CodeClassifyTemplateAttrDO> doList = codeClassifyTemplateAttrMapper.selectByCondition(conditionMap,pageHelper);
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateAttrMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttrDO>  codeClassifyTemplateAttrDOs) throws VciBaseException{
-        List<CodeClassifyTemplateAttrVO> voList = new ArrayList<CodeClassifyTemplateAttrVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOs)){
-           for(CodeClassifyTemplateAttrDO s: codeClassifyTemplateAttrDOs){
-                CodeClassifyTemplateAttrVO vo =  codeClassifyTemplateAttrDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) throws VciBaseException{
-              CodeClassifyTemplateAttrVO vo = new CodeClassifyTemplateAttrVO();
-        if(codeClassifyTemplateAttrDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributedatatype()));
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyTemplateAttrVO addSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttrDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-        codeClassifyTemplateAttrMapper.insert(codeClassifyTemplateAttrDO);
-        return codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO);
-    }
-
-    /**
-     * 鎵归噺娣诲姞
-     * @param codeClassifyTemplateAttrDTOs 鏁版嵁浼犺緭瀵硅薄
-     * @return 淇濆瓨鍚庣殑鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTemplateAttrVO> batchAddSave(List<CodeClassifyTemplateAttrDTO> codeClassifyTemplateAttrDTOs) throws VciBaseException{
-        if(CollectionUtils.isEmpty(codeClassifyTemplateAttrDTOs)){
-            return new ArrayList<>();
-        }
-
-        //鍙栨墍鏈夊睘鎬х殑鑻辨枃鍚嶇О锛岀涓変釜楠岃瘉闇�瑕佺敤鍒�
-        Map<String,CodeClassifyTemplateAttrDTO> attrDTOMap =codeClassifyTemplateAttrDTOs.stream().collect(Collectors.toMap(s->s.getId().toLowerCase(Locale.ROOT), t->t));
-
-        //鎵惧睘鎬т腑鏂囧悕瀛楅噸澶�
-        Map<String, Long> nameCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getName(), Collectors.counting()));
-        List<String> repeatNameList = nameCountMap.keySet().stream().filter(s -> nameCountMap.get(s) > 1).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(repeatNameList)){
-            throw new VciBaseException("妯℃澘灞炴�т腑鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatNameList.stream().collect(Collectors.joining(","))});
-        }
-        //鎵惧睘鎬ц嫳鏂囧悕瀛楅噸澶�
-        Map<String, Long> idCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getId().toLowerCase(Locale.ROOT), Collectors.counting()));
-        List<String> repeatIdList = idCountMap.keySet().stream().filter(s -> idCountMap.get(s) > 1).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(repeatIdList)){
-            throw new VciBaseException("妯℃澘灞炴�ц嫳鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatIdList.stream().collect(Collectors.joining(","))});
-        }
-
-        //妯℃澘oid
-        String CLASSIFYTEMPLATEOID = null;
-        //杞崲
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOInsert = new ArrayList<CodeClassifyTemplateAttrDO>();
-        List<String> prefix = new ArrayList<>();
-        List<String> suffix = new ArrayList<>();
-        List<String> dateFormates = new ArrayList<>();
-        for (CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO:codeClassifyTemplateAttrDTOs){
-            VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-            //灏咲TO杞崲涓篋O
-            CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttrDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-            codeClassifyTemplateAttrDOInsert.add(codeClassifyTemplateAttrDO);
-
-            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getPrefixValue())){
-                prefix.add(codeClassifyTemplateAttrDO.getPrefixValue());
-            }
-            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getSuffixValue())){
-                suffix.add(codeClassifyTemplateAttrDO.getSuffixValue());
-            }
-            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat())){
-                dateFormates.add(codeClassifyTemplateAttrDO.getCodeDateFormat());
-            }
-            //鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
-            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDO.getEnumString())){
-                throw new VciBaseException("{0}{1}灞炴�х殑鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-            }
-            //鍒嗙被娉ㄥ叆
-            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getClassifyInvokeAttr())
-             && !CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(codeClassifyTemplateAttrDO.getClassifyInvokeLevel())
-            && VciBaseUtil.getInt(codeClassifyTemplateAttrDO.getClassifyInvokeLevel()) < 0){
-                throw new VciBaseException("{0}{1}灞炴�х殑鏄垎绫绘敞鍏ワ紝浣嗘槸娉ㄥ叆灞傜骇涓嶈兘灏忎簬0!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-            }
-
-            //鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
-            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getReferConfig())&&!checkKVObj(codeClassifyTemplateAttrDO.getReferConfig())){
-                throw new VciBaseException("{0}{1}灞炴�х殑鍙傜収閰嶇疆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-            }
-            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat()) && !checkDateFormat(codeClassifyTemplateAttrDO.getCodeDateFormat())){
-                throw new VciBaseException("{0}{1}灞炴�х殑鏃堕棿鏍煎紡涓嶇鍚堣姹�",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-            }
-            //濡傛灉鏄粍鍚堣鍒欙紝閲岄潰浣跨敤鐨勫睘鎬т笉鑳界己澶憋紝涔熼兘寰楁樉绀�
-            String componentrule = codeClassifyTemplateAttrDTO.getComponentrule();
-            boolean isContainsDynamicParameter = PatternUtil.isContainsDynamicParameter(componentrule);
-            if(isContainsDynamicParameter){
-                List<String> userdAttrList =  PatternUtil.getKeyListByContent(componentrule);//鍖呭惈鐨勬墍鏈�${xxx}涓殑xxx
-                if(!CollectionUtils.isEmpty(userdAttrList)){
-                    String unExistAttr = userdAttrList.stream().filter(s -> !attrDTOMap.containsKey(s.toLowerCase(Locale.ROOT))).collect(Collectors.joining(","));
-                    if(StringUtils.isNotBlank(unExistAttr)){
-                          throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑涓嶅瓨鍦�!",new String[]{codeClassifyTemplateAttrDO.getName(), unExistAttr});
-                    }
-                    //瑕佺湅鐪嬭〃鍗曟槸鍚︽樉绀�
-                    String unFormDisplayAttr = userdAttrList.stream().filter(s -> !VciBaseUtil.getBoolean(attrDTOMap.getOrDefault(s.toLowerCase(Locale.ROOT),
-                            new CodeClassifyTemplateAttrDTO()).getFormdisplayflag())).collect(Collectors.joining(","));
-                    if(StringUtils.isNotBlank(unFormDisplayAttr)){
-                        throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑娌℃湁璁剧疆 琛ㄥ崟鏄剧ず ",new String[]{codeClassifyTemplateAttrDO.getName(),unFormDisplayAttr});
-                    }
-                }
-            }
-
-            if(CLASSIFYTEMPLATEOID==null){
-                CLASSIFYTEMPLATEOID = codeClassifyTemplateAttrDTO.getClassifytemplateoid();
-            }
-
-        }
-
-        //鎵ц鏁版嵁淇濆瓨鎿嶄綔
-        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-
-        //鍏堥兘鍒犱簡
-        VciQueryWrapperForDO deleteAttrWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-        deleteAttrWrapper.addQueryMap("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDODelete = codeClassifyTemplateAttrMapper.selectByWrapper(deleteAttrWrapper);
-
-        //oids
-        List<String> oids = new ArrayList<String>();
-        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDODelete){
-            oids.add(codeClassifyTemplateAttrDO.getOid());
-        }
-        BatchCBO batchCBOTemplateDelete = new BatchCBO();
-        if(!CollectionUtils.isEmpty(oids)){
-            batchCBOTemplateDelete = codeClassifyTemplateAttrMapper.batchDeleteByOids(oids);
-        }
-
-        //鍐嶆柊澧�
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
-            BatchCBO batchCBOTemplateAdd = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOInsert);
-            batchCBOTemplateDelete.copyFromOther(batchCBOTemplateAdd);
-        }
-
-        //璋冪敤闃舵
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
-            BatchCBO batchCBO0 = codeTemplatePhaseServiceI.codeTemplateAttrModifyTrigger(codeClassifyTemplateAttrDOInsert);
-            batchCBOTemplateDelete.copyFromOther(batchCBO0);
-        }
-
-        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-        //澶勭悊鍙緭鍙�夌殑瀛楃
-        if(!CollectionUtils.isEmpty(prefix)){
-            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"prefix",prefix,sessionInfo);
-        }
-        if(!CollectionUtils.isEmpty(suffix)){
-            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"suffix",suffix,sessionInfo);
-        }
-        if(!CollectionUtils.isEmpty(dateFormates)){
-            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"dateFormates",dateFormates,sessionInfo);
-        }
-
-        WebUtil.setPersistence(true);//鎵ц淇濆瓨
-        boService.persistenceBatch(batchCBOTemplateDelete);//涓�璧锋墽琛屼繚瀛�
-        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOInsert);
-    }
-
-    /**
-     * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public BaseResult editSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�т富閿�");
-
-         //鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
-         if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDTO.getEnumString())){
-             throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
-         }
-
-         //鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
-         if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getReferbtmid())&&!checkKVObj(codeClassifyTemplateAttrDTO.getReferbtmid())){
-             throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
-         }
-
-
-         //妫�鏌s
-         CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOCopyFromDTO = new CodeClassifyTemplateAttrDO();
-         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDOCopyFromDTO);
-         boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOCopyFromDTO);
-         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
-             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
-         }
-
-         //灏咲TO杞崲涓篋O
-         CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(codeClassifyTemplateAttrDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-         codeClassifyTemplateAttrMapper.updateByPrimaryKey(codeClassifyTemplateAttrDO);
-         return BaseResult.success(codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO));
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyTemplateAttrDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyTemplateAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO, CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) {
-        boService.checkTs(codeClassifyTemplateAttrDO);
-        if(!checkIsLinked(codeClassifyTemplateAttrDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassifyTemplateAttr(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�х殑涓婚敭");
-        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(codeClassifyTemplateAttrDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeClassifyTemplateAttrMapper.deleteByPrimaryKey(codeClassifyTemplateAttrDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-    * @param oid 涓婚敭
-    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyTemplateAttrVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyTemplateAttrDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyTemplateAttrDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = codeClassifyTemplateAttrMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyTemplateAttrDO == null || StringUtils.isBlank(codeClassifyTemplateAttrDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyTemplateAttrDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = listCodeClassifyTemplateAttrDOByOidCollections(oidCollections);
-        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyTemplateAttrDO> listCodeClassifyTemplateAttrDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = new ArrayList<CodeClassifyTemplateAttrDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyTemplateAttrDO> tempDOList =  codeClassifyTemplateAttrMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyTemplateAttrDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyTemplateAttrDOList;
-    }
-
-    /**
-     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
-    }
-
-    /**
-     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
-     * @param baseQueryObject
-     * @return
-     */
-    @Override
-    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
-        if(baseQueryObject.getConditionMap() == null){
-            baseQueryObject.setConditionMap(new HashMap<>());
-        }
-        DataGrid<OsBtmTypeAttributeVO> dataGrid=new DataGrid<OsBtmTypeAttributeVO>();
-        //妯℃澘oid
-        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
-        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
-        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
-
-        //娌℃湁oid涓嶆墽琛岄�昏緫
-        if(StringUtils.isBlank(templateAttrOid)){
-            dataGrid.setData(new ArrayList<>());
-            dataGrid.setTotal(0);
-            return dataGrid;
-        }
-
-        //鏌ヨ妯℃澘瀵硅薄
-        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(templateAttrOid);
-
-        //杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
-        List<OsBtmTypeAttributeVO> boAttrs = this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
-
-        //鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
-        if(boAttrs == null){
-            boAttrs = new ArrayList<>();
-        }
-        if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){
-            List<OsBtmTypeAttributeVO> finalBoAttrs = boAttrs;
-            attributeService.getDefaultAttributeVOs().stream().forEach(attr-> {
-                OsBtmTypeAttributeVO attributeVO = new OsBtmTypeAttributeVO();
-                BeanUtil.convert(attr, attributeVO);
-                if (VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(attributeVO.getId())) {
-                    attributeVO.setName("浼佷笟缂栫爜");
-                }
-                if ("name".equalsIgnoreCase(attributeVO.getId())) {
-                    attributeVO.setName("闆嗗洟鐮�");
-                }
-                attributeVO.setAttrDataType(attr.getAttributeDataType());
-                attributeVO.setAttributeLength(attr.getAttrLength());
-                attributeVO.setReferBtmTypeId(attr.getBtmTypeId());
-                attributeVO.setReferBtmTypeName(attr.getBtmTypeName());
-                finalBoAttrs.add(attributeVO);
-            });
-            boAttrs = finalBoAttrs;
-        }
-
-        //杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
-        List<String> btmOids = new ArrayList<String>();
-        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
-            btmOids.add(codeClassifyTemplateAttrDO.getId());
-        }
-
-        //杩囨护鎺夊凡缁忓瓨鍦ㄧ殑灞炴��
-        List<OsBtmTypeAttributeVO> boAttrss = new ArrayList<OsBtmTypeAttributeVO>();
-        for (OsBtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
-            if(!btmOids.contains(osBtmTypeAttributeVO.getId())){
-                //鐪嬬湅鏄笉鏄湁妯$硦鏌ヨ
-                boolean inSearch = true;
-                if(StringUtils.isNotBlank(name) && !osBtmTypeAttributeVO.getName().contains(name.replace("*",""))){
-                    inSearch = false;
-                }
-                if(StringUtils.isNotBlank(id) && !osBtmTypeAttributeVO.getId().contains(id.replace("*",""))){
-                    inSearch = false;
-                }
-                if(inSearch) {
-                    boAttrss.add(osBtmTypeAttributeVO);
-                }
-            }
-        }
-        dataGrid.setData(boAttrss);
-        dataGrid.setTotal(boAttrss.size());
-        return dataGrid;
-    }
-
-    /**
-     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
-     * @param baseQueryObject
-     * @return
-     */
-    @Override
-    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
-        DataGrid<OsBtmTypeAttributeVO> dataGrid=new DataGrid<OsBtmTypeAttributeVO>();
-        //妯℃澘oid
-        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
-
-        //娌℃湁oid涓嶆墽琛岄�昏緫
-        if(StringUtils.isBlank(templateAttrOid)){
-            dataGrid.setData(new ArrayList<>());
-            dataGrid.setTotal(0);
-            return dataGrid;
-        }
-
-        //鏌ヨ妯℃澘瀵硅薄
-        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(templateAttrOid);
-
-        //杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
-        List<OsBtmTypeAttributeVO> boAttrs = this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
-
-        //杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
-        List<String> btmOids = new ArrayList<String>();
-        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
-            btmOids.add(codeClassifyTemplateAttrDO.getId());
-        }
-
-        //杩囨护鎺夐櫎浜嗚嚜韬殑鍒殑灞炴��
-        List<OsBtmTypeAttributeVO> boAttrss = new ArrayList<OsBtmTypeAttributeVO>();
-        for (OsBtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
-            if(btmOids.contains(osBtmTypeAttributeVO.getId())){
-                boAttrss.add(osBtmTypeAttributeVO);
-            }
-        }
-        dataGrid.setData(boAttrss);
-        dataGrid.setTotal(boAttrss.size());
-        return dataGrid;
-    }
-    /**
-     * 鍚屾鍒板叾浠栨ā鏉�
-     * @param codeClassifyTemplateAttrDTO oid
-     * @return
-     */
-    @Override
-    public BaseResult copyto(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
-
-        String templateAttrOid = codeClassifyTemplateAttrDTO.getOid();
-
-        //鏌ヨ鍑烘潵瑕佸鍒剁殑瀵硅薄
-        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(templateAttrOid);
-        String id = codeClassifyTemplateAttrDO.getId();//鑻辨枃鍚嶇О
-        String classfyTemplateOid = codeClassifyTemplateAttrDO.getClassifyTemplateOid();
-
-        //鏌ヨ鍏朵粬id=id鐨勬ā鏉垮睘鎬�
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-        queryWrapper.addQueryMap("id",id);
-        //鎵�鏈塱d=id鐨勬ā鏉垮睘鎬�
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
-        //瑕佸垹闄ょ殑妯℃澘灞炴�х殑oids
-        List<String> deleteOids = new ArrayList<String>();
-        //瑕佷慨鏀圭殑妯℃澘灞炴�у璞�
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOListInsert = new ArrayList<CodeClassifyTemplateAttrDO>();
-        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOi:codeClassifyTemplateAttrDOList){
-            String oid = codeClassifyTemplateAttrDOi.getOid();
-            String templateOldOid = codeClassifyTemplateAttrDOi.getClassifyTemplateOid();
-
-            CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOInsert = new CodeClassifyTemplateAttrDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,codeClassifyTemplateAttrDOInsert);
-            codeClassifyTemplateAttrDOInsert.setOid(oid);
-            codeClassifyTemplateAttrDOInsert.setClassifyTemplateOid(templateOldOid);
-            codeClassifyTemplateAttrDOListInsert.add(codeClassifyTemplateAttrDOInsert);
-
-            deleteOids.add(codeClassifyTemplateAttrDOi.getOid());
-        }
-
-        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-
-        //鍒犻櫎
-        BatchCBO batchCBOTemplateAttrDelete = codeClassifyTemplateAttrMapper.batchDeleteByOids(deleteOids);
-
-        //鍐嶆柊澧�
-        BatchCBO batchCBOTemplateAttrInsert = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOListInsert);
-        batchCBOTemplateAttrDelete.copyFromOther(batchCBOTemplateAttrInsert);
-
-        WebUtil.setPersistence(true);//鎵ц淇濆瓨
-        boService.persistenceBatch(batchCBOTemplateAttrDelete);//涓�璧锋墽琛屼繚瀛�
-
-        return BaseResult.success();
-    }
-
-    /**
-     * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
-     *
-     * @param templateOidCollection 妯℃澘鐨勪富閿�
-     * @return 灞炴�х殑淇℃伅
-     */
-    @Override
-    public List<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection) {
-        if(CollectionUtils.isEmpty(templateOidCollection)){
-            return new ArrayList<>();
-        }
-        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
-        VciBaseUtil.switchCollectionForOracleIn(templateOidCollection).stream().forEach(templateOids->{
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOids.toArray(new String[0])) + ")");
-            PageHelper pageHelper = new PageHelper(-1);
-            pageHelper.addDefaultAsc("orderNum");
-            List<CodeClassifyTemplateAttrDO> attrDOS = codeClassifyTemplateAttrMapper.selectByCondition(conditionMap, pageHelper);
-            if(!CollectionUtils.isEmpty(attrDOS)){
-                attrDOList.addAll(attrDOS);
-            }
-        });
-        return codeClassifyTemplateAttrDO2VOs(attrDOList);
-    }
-
-    public boolean checkKVArr(String kvString){
-        boolean isKV = true;
-        try {
-            JSONObject.parseArray(kvString, KeyValue.class);
-        }catch (Exception e){
-            isKV=false;
-        }
-        return isKV;
-    }
-    public boolean checkKVObj(String kvString){
-        boolean isKV = true;
-        try {
-            JSONObject.parseObject(kvString, UIFormReferVO.class);
-        }catch (Exception e){
-            isKV=false;
-        }
-        return isKV;
-    }
-
-    /**
-     * 鏍¢獙鏃堕棿鏍煎紡
-     * @param dateFormat 鏃堕棿鏍煎紡
-     * @return true琛ㄧず鏍¢獙閫氳繃
-     */
-    public boolean checkDateFormat(String dateFormat){
-        try{
-            VciDateUtil.date2Str(new Date(),dateFormat);
-            return  true;
-        }catch (Throwable e){
-            return false;
-        }
-    }
-
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java
deleted file mode 100644
index a6c74f8..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java
+++ /dev/null
@@ -1,380 +0,0 @@
-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.BeanUtil;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springblade.code.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-/**
- * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeClassifyTemplateButtonServiceImpl implements CodeClassifyTemplateButtonServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyTemplateButtonDaoI codeClassifyTemplateButtonMapper;
-
-    /**
-     * 鎸夐挳鐨勬湇鍔�
-     */
-    @Autowired
-    private CodeButtonServiceI buttonService;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        final String[] classifyTemplateOid = {""};
-        if(conditionMap!=null){
-            conditionMap.forEach((key,value)->{
-                if("classifytemplateoid".equalsIgnoreCase(key)){
-                    classifyTemplateOid[0] = value;
-                }
-            });
-        }
-        if(StringUtils.isBlank(classifyTemplateOid[0])){
-            return new DataGrid<>();
-        }
-
-        List<CodeClassifyTemplateButtonDO> doList = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeClassifyTemplateButtonVO> dataGrid=new DataGrid<CodeClassifyTemplateButtonVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeClassifyTemplateButtonDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateButtonMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO>  codeClassifyTemplateButtonDOs) throws VciBaseException{
-       return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOs,false);
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException{
-        List<CodeClassifyTemplateButtonVO> voList = new ArrayList<CodeClassifyTemplateButtonVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOs)){
-            for(CodeClassifyTemplateButtonDO s: codeClassifyTemplateButtonDOs){
-                CodeClassifyTemplateButtonVO vo =  codeClassifyTemplateButtonDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        if(hasButtonVO && !CollectionUtils.isEmpty(voList)){
-            //鑾峰彇鎸夐挳鐨勬樉绀哄璞�
-            List<CodeButtonVO> buttonVOList = new ArrayList<>();
-            VciBaseUtil.switchCollectionForOracleIn(voList.stream().map(CodeClassifyTemplateButtonVO::getClassifybuttonoid).collect(Collectors.toList())).stream().forEach(buttonOids->{
-                buttonVOList.addAll(buttonService.listCodeButtonByOids(buttonOids));
-            });
-            Map<String, CodeButtonVO> buttonVOMap = Optional.ofNullable(buttonVOList).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
-            voList.stream().forEach(vo->{
-                vo.setButtonVO(buttonVOMap.getOrDefault(vo.getClassifybuttonoid(),null));
-            });
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) throws VciBaseException{
-              CodeClassifyTemplateButtonVO vo = new CodeClassifyTemplateButtonVO();
-        if(codeClassifyTemplateButtonDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyTemplateButtonVO addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getClassifytemplateoid(),"妯℃澘鐨勪富閿�");
-        //灏咲TO杞崲涓篋O
-        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = new CodeClassifyTemplateButtonDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
-        if(codeClassifyTemplateButtonDO.getOrderNum()== null){
-            //鏌ヨ鍏ㄩ儴
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("classifytemplateoid",codeClassifyTemplateButtonDTO.getClassifytemplateoid());
-            Long count = codeClassifyTemplateButtonMapper.countByCondition(conditionMap);
-            if(count == null){
-                count = 0L;
-            }
-            codeClassifyTemplateButtonDO.setOrderNum(Long.valueOf(count + 1L).intValue());
-        }
-        codeClassifyTemplateButtonMapper.insert(codeClassifyTemplateButtonDO);
-        return codeClassifyTemplateButtonDO2VO(codeClassifyTemplateButtonDO);
-    }
-
-    /**
-     * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeClassifyTemplateButtonVO editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽富閿�");
-         //灏咲TO杞崲涓篋O
-         CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
-         codeClassifyTemplateButtonMapper.updateByPrimaryKey(codeClassifyTemplateButtonDO);
-         return codeClassifyTemplateButtonDO2VO(codeClassifyTemplateButtonDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyTemplateButtonDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyTemplateButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO, CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) {
-        CodeClassifyTemplateButtonDO tsDO = new CodeClassifyTemplateButtonDO();
-        BeanUtil.convert(codeClassifyTemplateButtonDTO,tsDO);
-        boService.checkTs(tsDO);
-        if(!checkIsLinked(codeClassifyTemplateButtonDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽殑涓婚敭");
-        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeClassifyTemplateButtonMapper.deleteByPrimaryKey(codeClassifyTemplateButtonDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyTemplateButtonDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyTemplateButtonDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = codeClassifyTemplateButtonMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyTemplateButtonDO == null || StringUtils.isBlank(codeClassifyTemplateButtonDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyTemplateButtonDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = listCodeClassifyTemplateButtonDOByOidCollections(oidCollections);
-        return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyTemplateButtonDO> listCodeClassifyTemplateButtonDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = new ArrayList<CodeClassifyTemplateButtonDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyTemplateButtonDO> tempDOList =  codeClassifyTemplateButtonMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyTemplateButtonDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyTemplateButtonDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeClassifyTemplateButton(conditionMap,pageHelper);
-    }
-
-    /**
-     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
-     *
-     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    @Override
-    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
-        BatchCBO batchCBO = new BatchCBO();
-        if(StringUtils.isNotBlank(classifyTemplateOid)){
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("classifyTemplateOid",classifyTemplateOid);
-            List<CodeClassifyTemplateButtonDO> templateButtonDOS = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap, new PageHelper(-1));
-            if(!CollectionUtils.isEmpty(templateButtonDOS)){
-                batchCBO.copyFromOther(codeClassifyTemplateButtonMapper.batchDeleteByOids(templateButtonDOS.stream().map(CodeClassifyTemplateButtonDO::getOid).collect(Collectors.toList())));
-            }
-        }
-        return batchCBO;
-    }
-
-    /**
-     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
-     *
-     * @param templateOid 妯℃澘鐨勪富閿�
-     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
-     */
-    @Override
-    public List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid) {
-       return listButtonByTemplateOid(templateOid,false);
-    }
-
-    /**
-     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
-     *
-     * @param templateOid 妯℃澘鐨勪富閿�
-     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勬樉绀轰俊鎭�
-     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
-     */
-    @Override
-    public List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid, boolean hasButtonVO) {
-        if(StringUtils.isBlank(templateOid)){
-            return new ArrayList<>();
-        }
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("classifyTemplateOid",templateOid);
-        PageHelper pageHelper = new PageHelper(-1);
-        pageHelper.addDefaultAsc("orderNum");
-        List<CodeClassifyTemplateButtonDO> templateButtonDOS = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap, pageHelper);
-        return codeClassifyTemplateButtonDO2VOs(templateButtonDOS,hasButtonVO);
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java
deleted file mode 100644
index 4d1918d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java
+++ /dev/null
@@ -1,276 +0,0 @@
-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.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
-
-/**
- * 涓婚搴撴ā鏉挎槧灏勮鍒欐湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeClassifyTemplateMapServiceImpl implements CodeClassifyTemplateMapServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyTemplateMapDaoI codeClassifyTemplateMapMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeClassifyTemplateMapDO> doList = codeClassifyTemplateMapMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeClassifyTemplateMapVO> dataGrid=new DataGrid<CodeClassifyTemplateMapVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeClassifyTemplateMapDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateMapMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateMapDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOs) throws VciBaseException{
-        List<CodeClassifyTemplateMapVO> voList = new ArrayList<CodeClassifyTemplateMapVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateMapDOs)){
-           for(CodeClassifyTemplateMapDO s: codeClassifyTemplateMapDOs){
-                CodeClassifyTemplateMapVO vo =  codeClassifyTemplateMapDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateMapDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyTemplateMapVO codeClassifyTemplateMapDO2VO(CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) throws VciBaseException{
-              CodeClassifyTemplateMapVO vo = new CodeClassifyTemplateMapVO();
-        if(codeClassifyTemplateMapDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateMapDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-//            if(true){
-//                vo.setLcStatusText({lcStatusFullClassName}.getTextByValue(vo.getLcStatus()));
-//            }
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyTemplateMapVO addSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = new CodeClassifyTemplateMapDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
-        codeClassifyTemplateMapMapper.insert(codeClassifyTemplateMapDO);
-        return codeClassifyTemplateMapDO2VO(codeClassifyTemplateMapDO);
-    }
-
-    /**
-     * 淇敼涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeClassifyTemplateMapVO editSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateMapDTO.getOid(),"涓婚搴撴ā鏉挎槧灏勮鍒欎富閿�");
-         //灏咲TO杞崲涓篋O
-         CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByOid(codeClassifyTemplateMapDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
-         codeClassifyTemplateMapMapper.updateByPrimaryKey(codeClassifyTemplateMapDO);
-         return codeClassifyTemplateMapDO2VO(codeClassifyTemplateMapDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyTemplateMapDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyTemplateMapDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO, CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) {
-        if(!checkIsLinked(codeClassifyTemplateMapDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassifyTemplateMap(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�",codeClassifyTemplateMapDTO.getOid(),"涓婚搴撴ā鏉挎槧灏勮鍒欑殑涓婚敭");
-        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByOid(codeClassifyTemplateMapDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeClassifyTemplateMapMapper.deleteByPrimaryKey(codeClassifyTemplateMapDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
-    * @param oid 涓婚敭
-    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyTemplateMapVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyTemplateMapDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyTemplateMapDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = codeClassifyTemplateMapMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyTemplateMapDO == null || StringUtils.isBlank(codeClassifyTemplateMapDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyTemplateMapDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOList = listCodeClassifyTemplateMapDOByOidCollections(oidCollections);
-        return codeClassifyTemplateMapDO2VOs(codeClassifyTemplateMapDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyTemplateMapDO> listCodeClassifyTemplateMapDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOList = new ArrayList<CodeClassifyTemplateMapDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyTemplateMapDO> tempDOList =  codeClassifyTemplateMapMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyTemplateMapDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyTemplateMapDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeClassifyTemplateMap(conditionMap,pageHelper);
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java
deleted file mode 100644
index 643a696..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java
+++ /dev/null
@@ -1,1084 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.corba.common.VCIError;
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
-import com.vci.starter.revision.bo.TreeWrapperOptions;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.*;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciParentQueryOption;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.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;
-import org.springframework.util.CollectionUtils;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-import plm.bs.bom.clientobject.ClientBusinessObjectOperation;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-/**
- * 鍒嗙被妯℃澘瀵硅薄鏈嶅姟
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeClassifyTemplateServiceImpl implements CodeClassifyTemplateServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
-
-    /**
-     * 妯℃澘娴佺▼鎿嶄綔灞�
-     */
-    @Resource
-    private CodeClassifyProcessTempDaoI codeClassifyProcessTempDaoI;
-
-    /**
-     * 妯℃澘娴佺▼鎿嶄綔灞�
-     */
-    @Resource
-    private CodeTemplatePhaseDaoI codeTemplatePhaseDaoI;
-
-    /**
-     * 妯℃澘娴佺▼鎿嶄綔灞�
-     */
-    @Resource
-    private CodeClassifyTemplateButtonDaoI codeClassifyTemplateButtonDaoI;
-
-    /**
-     * 妯℃澘娴佺▼鎿嶄綔灞�
-     */
-    @Resource
-    private CodePhaseAttrDaoI codePhaseAttrDaoI;
-
-    /**
-     * 鍒嗙被
-     */
-    @Resource
-    private CodeClassifyDaoI codeClassifyDaoI;
-
-    /**
-     * 妯℃澘闃舵
-     */
-    @Resource
-    private CodeTemplatePhaseServiceI codeTemplatePhaseServiceI;
-
-    /**
-     * 妯℃澘娴佺▼
-     */
-    @Resource
-    private CodeClassifyProcessTempServiceI codeClassifyProcessTempServiceI;
-
-    /**
-     * 妯℃澘鎸夐挳
-     */
-    @Resource
-    private CodeClassifyTemplateButtonServiceI codeClassifyTemplateButtonServiceI;
-
-
-    /**
-     * 妯℃澘灞炴��
-     */
-    @Resource
-    private CodeClassifyTemplateAttrDaoI codeClassifyTemplateAttrDaoI;
-
-    /**
-     * 妯℃澘灞炴�х殑鏈嶅姟
-     */
-    @Lazy
-    @Autowired(required = false)
-    private CodeClassifyTemplateAttrServiceI templateAttrService;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
-    */
-    private static  final String PARENT_FIELD_NAME = "";
-    /**
-     * 鏌ヨ鍒嗙被妯℃澘瀵硅薄 鏍�
-     * @param treeQueryObject 鏍戞煡璇㈠璞�
-     * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject) throws VciBaseException{
-        List<CodeClassifyTemplateDO> doList =selectCodeClassifyTemplateDOByTree(treeQueryObject);
-        List<CodeClassifyTemplateVO> voList = codeClassifyTemplateDO2VOs(doList);
-        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
-        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
-        return revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyTemplateVO s) ->{
-            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
-            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
-                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
-        });
-    }
-    /**
-      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
-      *
-      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
-      */
-    @Override
-    public List<CodeClassifyTemplateDO> selectCodeClassifyTemplateDOByTree(TreeQueryObject treeQueryObject) {
-        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null,CodeClassifyTemplateDO.class);
-        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
-        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
-        queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
-        return codeClassifyTemplateMapper.selectByWrapper(queryWrapperForDO);
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs) throws VciBaseException{
-        return codeClassifyTemplateDO2VOs(codeClassifyTemplateDOs,false);
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasAttr 鏄惁鍖呭惈灞炴��
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs,boolean hasAttr) throws VciBaseException{
-        List<CodeClassifyTemplateVO> voList = new ArrayList<CodeClassifyTemplateVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateDOs)){
-            for(CodeClassifyTemplateDO s: codeClassifyTemplateDOs){
-                CodeClassifyTemplateVO vo =  codeClassifyTemplateDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        if(hasAttr){
-            //涓�涓垎绫婚噷闈㈡�讳笉鑳借秴杩�1000涓敓鏁堢殑鐗堟湰鍚э紒锛侊紒
-            VciBaseUtil.switchCollectionForOracleIn(voList.stream().map(CodeClassifyTemplateVO::getOid).collect(Collectors.toList())).forEach(tempOids->{
-                List<CodeClassifyTemplateAttrVO> attrVOList = templateAttrService.listCodeClassifyTemplateAttrByTemplateOids(tempOids);
-                if(!CollectionUtils.isEmpty(attrVOList)){
-                    Map<String, List<CodeClassifyTemplateAttrVO>> attrVOMap = attrVOList.stream().collect(Collectors.groupingBy(s -> s.getClassifytemplateoid()));
-                    voList.stream().forEach(templateVO->{
-                        if(attrVOMap.containsKey(templateVO.getOid())){
-                            templateVO.setAttributes(attrVOMap.get(templateVO.getOid()));
-                        }
-                    });
-                }
-            });
-
-        }
-        return voList;
-    }
-
-
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyTemplateDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyTemplateVO codeClassifyTemplateDO2VO(CodeClassifyTemplateDO codeClassifyTemplateDO) throws VciBaseException{
-              CodeClassifyTemplateVO vo = new CodeClassifyTemplateVO();
-        if(codeClassifyTemplateDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            vo.setLcStatusText(CodeClassifyTemplateLC.getTextByValue(vo.getLcStatus()));
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public BaseResult<CodeClassifyTemplateVO> addSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDO);
-
-        //鏌ヨ鍒嗙被浠ュ強涓婄骇鍒嗙被鐨勪笟鍔$被鍨媌tmtypeid銆乥tmtypename
-        List<CodeClassifyDO> codeClassifyDOList = codeClassifyDaoI.selectAllLevelParents(codeClassifyTemplateDTO.getCodeclassifyoid());
-
-        //鎵�鏈夊垎绫婚兘娌℃湁涓氬姟绫诲瀷锛岃繑鍥炴彁绀�
-        if(codeClassifyDOList.size()==0){
-            return BaseResult.fail("娣诲姞妯℃澘娣诲姞澶辫触,鍒嗙被鍜屼笂绾у垎绫婚兘娌℃湁鍏宠仈涓氬姟绫诲瀷锛�");
-        }
-
-        //璁剧疆btmtypeid鍜宯ame
-        CodeClassifyDO codeClassifyDO = codeClassifyDOList.get(0);
-        codeClassifyTemplateDO.setBtmTypeId(codeClassifyDO.getBtmTypeId());
-        codeClassifyTemplateDO.setBtmTypeName(codeClassifyDO.getBtmTypeName());
-        codeClassifyTemplateDO.setLcStatus(FRAMEWORK_RELEASE_EDITING);
-        codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
-        //榛樿娣诲姞妯℃澘灞炴��
-//        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
-
-//        CodeClassifyTemplateAttrDO codeAttr = new CodeClassifyTemplateAttrDO();
-//        codeAttr.setId("id");
-//        codeAttr.setName("浼佷笟缂栫爜");
-//        codeAttr.setAttributeDataType("VTString");
-//        codeAttr.setAttrTableWidth(150);
-//        codeAttr.setOrderNum(1);
-//        codeAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        codeAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        codeAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(codeAttr);
-//
-//
-//        CodeClassifyTemplateAttrDO groupAttr = new CodeClassifyTemplateAttrDO();
-//        groupAttr.setId("name");
-//        groupAttr.setName("闆嗗洟鐮�");
-//        groupAttr.setAttributeDataType("VTString");
-//        groupAttr.setAttrTableWidth(150);
-//        groupAttr.setOrderNum(2);
-//        groupAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        groupAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        groupAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(groupAttr);
-//
-//        CodeClassifyTemplateAttrDO descAttr = new CodeClassifyTemplateAttrDO();
-//        descAttr.setId("description");
-//        descAttr.setName("鎻忚堪");
-//        descAttr.setAttrTableWidth(150);
-//        descAttr.setAttributeDataType("VTString");
-//        descAttr.setOrderNum(3);
-//        descAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        descAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        descAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(descAttr);
-//
-//        CodeClassifyTemplateAttrDO statusAttr = new CodeClassifyTemplateAttrDO();
-//        statusAttr.setId("lcstatus");
-//        statusAttr.setName("鐘舵��");
-//        statusAttr.setAttrTableWidth(70);
-//        statusAttr.setOrderNum(4);
-//        statusAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        statusAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        statusAttr.setAttributeDataType("VTString");
-//        statusAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(statusAttr);
-//
-//
-//        CodeClassifyTemplateAttrDO secAttr = new CodeClassifyTemplateAttrDO();
-//        secAttr.setId("secretgrade");
-//        secAttr.setName("瀵嗙骇");
-//        secAttr.setAttrTableWidth(70);
-//        secAttr.setAttributeDataType(VciFieldTypeEnum.VTInteger.name());
-//        secAttr.setEnumId("Enumsecretgrade");
-//        secAttr.setEnumName("瀵嗙骇");
-//        secAttr.setOrderNum(4);
-//        secAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        secAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        secAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(secAttr);
-
-        return BaseResult.success(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
-    }
-
-    /**
-     * 淇敼鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public BaseResult editSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄涓婚敭");
-         //妫�鏌s
-         CodeClassifyTemplateDO codeClassifyTemplateDOCopyFromDTO = new CodeClassifyTemplateDO();
-         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
-         boolean tsBoolean = boService.checkTs(codeClassifyTemplateDOCopyFromDTO);
-         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
-             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
-         }
-
-         //灏咲TO杞崲涓篋O
-         CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
-         String lcstatus = codeClassifyTemplateDO.getLcStatus();
-         String versionvalue = codeClassifyTemplateDO.getVersionValue();
-
-         //鍙湁缂栬緫涓墠鑳戒慨鏀�
-         if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
-             return BaseResult.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳戒慨鏀癸紒");
-         }
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateDTO,codeClassifyTemplateDO);
-         //涓嶄慨鏀圭増鏈彿鍜岀姸鎬�
-         codeClassifyTemplateDO.setLcStatus(lcstatus);
-         codeClassifyTemplateDO.setVersionValue(versionvalue);
-         codeClassifyTemplateMapper.updateByPrimaryKey(codeClassifyTemplateDO);
-         return BaseResult.success(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
-     }
-
-    /**
-     * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
-     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult checkIsCanDelete(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyTemplateDTO.getOid(),"涓婚敭");
-        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
-        return checkIsCanDeleteForDO(codeClassifyTemplateDTO,codeClassifyTemplateDO);
-    }
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyTemplateDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyTemplateDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateDTO codeClassifyTemplateDTO, CodeClassifyTemplateDO codeClassifyTemplateDO) {
-        CodeClassifyTemplateDO codeClassifyTemplateDOCopyFromDTO = new CodeClassifyTemplateDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
-        boService.checkTs(codeClassifyTemplateDOCopyFromDTO);
-        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
-        if(checkChildIsLinked(codeClassifyTemplateDO.getOid())){
-            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
-        }
-        return BaseResult.success(checkHasChild(codeClassifyTemplateDO.getOid()));
-    }
-    /**
-      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
-      *
-      * @param oid 涓婚敭
-      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
-      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
-      */
-    @Override
-    public boolean checkChildIsLinked(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        List<String> childOids = codeClassifyTemplateMapper.selectAllLevelChildOid(oid.trim());
-        if(!CollectionUtils.isEmpty(childOids)){
-             for(String childOid: childOids){
-                 if(!checkIsLinked(childOid)){
-                     return false;
-                 }
-             }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
-    *
-    * @param oid 涓婚敭
-    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
-    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    @Override
-    public boolean checkHasChild(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        return codeClassifyTemplateMapper.countAllLevelChildOid(oid.trim()) > 0;
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
-     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassifyTemplate(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
-        checkIsCanDelete(codeClassifyTemplateDTO);
-        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄鐨勪富閿�");
-
-        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
-
-        //鍙湁缂栬緫涓墠鑳藉垹
-        if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
-            return BaseResult.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳藉垹闄わ紒");
-        }
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateDTO,codeClassifyTemplateDO);
-
-        //妯℃澘oid
-        String templateOid = codeClassifyTemplateDTO.getOid();
-
-        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-        BatchCBO batchCBO = new BatchCBO();
-
-        if(baseResult.isSuccess()) {
-            //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
-            List<String> childrenOids = codeClassifyTemplateMapper.selectAllLevelChildOid(codeClassifyTemplateDO.getOid().trim());
-            if (!CollectionUtils.isEmpty(childrenOids)) {
-                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids);
-                for (Collection<String> s : childrenCollections) {
-                    BatchCBO batchCBOi = codeClassifyTemplateMapper.batchDeleteByOids(s);
-                    batchCBO.copyFromOther(batchCBOi);
-                }
-            }
-        }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO_delete = codeClassifyTemplateMapper.deleteByPrimaryKey(codeClassifyTemplateDO.getOid());
-        batchCBO.copyFromOther(batchCBO_delete);
-
-        //鍒犻櫎妯℃澘灞炴��
-        VciQueryWrapperForDO templateQueryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-        templateQueryWrapper.addQueryMap("classifyTemplateOid",templateOid);
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(templateQueryWrapper);
-
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
-            List<String> templateAttrOids = new ArrayList<String>();
-            for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
-                templateAttrOids.add(codeClassifyTemplateAttrDO.getOid());
-            }
-            BatchCBO batchCBO_templateAttr_delete = codeClassifyTemplateAttrDaoI.batchDeleteByOids(templateAttrOids);
-            batchCBO.copyFromOther(batchCBO_templateAttr_delete);
-        }
-
-        //璋冪敤妯℃澘闃舵鏂规硶
-        BatchCBO batchCBO_phase = codeTemplatePhaseServiceI.codeTemplateDeleteTrigger(templateOid);
-        batchCBO.copyFromOther(batchCBO_phase);
-
-
-
-        //璋冪敤妯℃澘鎸夐挳鏂规硶
-        BatchCBO batchCBO_button = codeClassifyTemplateButtonServiceI.codeTemplateDeleteTrigger(templateOid);
-        batchCBO.copyFromOther(batchCBO_button);
-
-        //璋冪敤妯℃澘娴佺▼鏂规硶
-        BatchCBO batchCBO_process = codeClassifyProcessTempServiceI.codeTemplateDeleteTrigger(templateOid);
-        batchCBO.copyFromOther(batchCBO_process);
-
-        WebUtil.setPersistence(true);//鎵ц淇濆瓨
-        boService.persistenceBatch(batchCBO);//涓�璧锋墽琛屼繚瀛�
-
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
-    * @param oid 涓婚敭
-    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyTemplateVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyTemplateDO2VO(selectByOid(oid));
-    }
-
-    /**
-     * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄(鍖呭惈灞炴�э級
-     *
-     * @param oid 涓婚敭
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyTemplateVO getObjectHasAttrByOid(String oid) throws VciBaseException {
-        List<CodeClassifyTemplateDO> doList = new ArrayList<>();
-        doList.add(selectByOid(oid));
-        List<CodeClassifyTemplateVO> templateVOS = codeClassifyTemplateDO2VOs(doList, true);
-        return CollectionUtils.isEmpty(templateVOS)?null:templateVOS.get(0);
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyTemplateDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyTemplateDO == null || StringUtils.isBlank(codeClassifyTemplateDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyTemplateDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = listCodeClassifyTemplateDOByOidCollections(oidCollections);
-        return codeClassifyTemplateDO2VOs(codeClassifyTemplateDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyTemplateDO> listCodeClassifyTemplateDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = new ArrayList<CodeClassifyTemplateDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyTemplateDO> tempDOList =  codeClassifyTemplateMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyTemplateDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyTemplateDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
-        if(treeQueryObject == null){
-            treeQueryObject = new TreeQueryObject();
-        }
-        if(treeQueryObject.getConditionMap() == null){
-            treeQueryObject.setConditionMap(new HashMap<>());
-        }
-        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
-            treeQueryObject.getConditionMap().remove(LC_STATUS);
-        }
-        treeQueryObject.getConditionMap().put(LC_STATUS,CodeClassifyTemplateLC.RELEASED.getValue());
-        return treeCodeClassifyTemplate(treeQueryObject);
-    }
-
-    /**
-     * 鍒嗙被妯℃澘鍒楄〃
-     *
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper   鍒嗛〉瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        DataGrid<CodeClassifyTemplateVO> dataGrid=new DataGrid<CodeClassifyTemplateVO>();
-        //娌℃湁浼犲垎绫籭d锛屼笉鎵ц鏌ヨ閫昏緫锛岀洿鎺ヨ繑鍥�
-        if(conditionMap.size()==0){
-            dataGrid.setData(new ArrayList<>());
-            dataGrid.setTotal(0);
-            return dataGrid;
-        }
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("revisionSeq");
-        List<CodeClassifyTemplateDO> doList = codeClassifyTemplateMapper.selectByCondition(conditionMap,pageHelper);
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeClassifyTemplateDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鍚敤銆佸仠鐢�
-     * @param oid
-     * @param lcStatus
-     * @return
-     */
-    @Override
-    public BaseResult updateLcStatus( String oid, String lcStatus){
-
-        //鍋滅敤鐨勬椂鍊欙紝楠岃瘉妯℃澘鏄惁涓哄凡鍙戝竷
-        if(CodeClassifyTemplateLC.DISABLED.getValue().equals(lcStatus)){
-            CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(oid);
-            if(!CodeClassifyTemplateLC.RELEASED.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
-                return BaseResult.fail("妯℃澘鏈惎鐢紝涓嶈兘鍋滅敤锛�");
-            }
-        }
-        //鍚敤銆佸仠鐢�
-        int u = codeClassifyTemplateMapper.updateLcStatus(oid,lcStatus);
-
-        return u==0?BaseResult.error("淇敼澶辫触锛�"):BaseResult.success("淇敼鎴愬姛");
-    }
-
-    /**
-     * 鍗囩増
-     * @param codeClassifyDTO
-     */
-    @Override
-    public BaseResult Upgrade(CodeClassifyTemplateDTO codeClassifyDTO){
-
-        //鏃х殑妯℃澘oid
-        String templateOldOid = codeClassifyDTO.getOid();
-        //鍙湁宸插彂甯冪殑鎵嶈兘鍗囩増
-        CodeClassifyTemplateDO codeClassifyTemplateDOOld =  codeClassifyTemplateMapper.selectByPrimaryKey(templateOldOid);
-        if(!FRAMEWORK_RELEASE_RELEASED.equals(codeClassifyTemplateDOOld.getLcStatus())){
-            return BaseResult.fail("璇ユā鏉挎湭鍙戝竷锛屼笉鑳藉崌鐗堬紒");
-        }
-
-        ClientBusinessObjectOperation clientBusinessObjectOperation = new ClientBusinessObjectOperation();
-
-        //闇�瑕佹柊澧炵殑鍗囩骇妯℃澘
-        ClientBusinessObject clientBusinessObject_template = boService.selectCBOByOid(codeClassifyDTO.getOid(), "codeclstemplate");
-        ClientBusinessObject clientBusinessObject_template_insert = null;
-        try {
-            clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
-        }catch (VCIError e){
-            e.printStackTrace();
-            logger.error("===============>鍒嗙被妯℃澘-鍗囩増澶嶅埗鍑洪敊oid锛� "+templateOldOid+",mes"+e.error_message);
-            return BaseResult.error("鍗囩増鍑洪敊");
-        }
-
-
-        CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyTemplateDO);
-        WebUtil.copyValueToObjectFromCbos(clientBusinessObject_template_insert,codeClassifyTemplateDO);
-        //modify by weidy@2022-2-27
-        //鍗囩増鍚庝笉鑳戒娇鐢╥nsert鏂规硶锛屽洜涓洪偅涓案杩滄槸鏂板涓�鏉℃暟鎹紝
-        //涓婃柟鍏堜粠dto杞粰do锛岀劧鍚庢妸鍗囩増鐨勫垵濮嬪寲鐨勫睘鎬ф嫹璐濈粰do锛屾渶鍚庡啀浠巇o鎷疯礉鍒癱bo涓�
-        WebUtil.copyValueToCboFromObj(clientBusinessObject_template_insert,codeClassifyTemplateDO);
-        //鍗囩増杩囧悗鐨勬ā鏉縪id
-        String templateNewOid = codeClassifyTemplateDO.getOid();
-
-        //闇�瑕佸鍒剁殑妯℃澘灞炴��
-        //鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
-        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
-        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
-            String attrOid = VciBaseUtil.getPk();
-            codeClassifyTemplateAttrDO.setOid(attrOid);
-            codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
-        }
-
-        //澶嶅埗妯℃澘娴佺▼
-        List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
-
-        //澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
-        Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
-
-        List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//妯℃澘闃舵
-        List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
-
-        //澶嶅埗妯℃澘鎸夐挳
-        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
-
-        //涓�璧蜂繚瀛樻暟鎹�
-        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-        //淇濆瓨妯℃澘
-        BatchCBO batchCBOTemplate = new BatchCBO();
-        //batchCBO淇濆瓨鐨勬椂鍊欐病鏈夎兘澶熻嚜鍔╱pdate婧愭暟鎹殑isLastR
-        //batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
-        //浣跨敤saveRevisionBuisnessObject鍙互瑙e喅杩欎釜闂锛岃繖閲屽厛鏆傛椂鎵ц涓ゆ淇濆瓨
-        try {
-            clientBusinessObjectOperation.saveRevisionBuinessObject(clientBusinessObject_template_insert);
-        } catch (VCIError vciError) {
-            throw new VciBaseException("鍗囩増淇濆瓨鍑洪敊浜�",new String[0],vciError);
-        }
-        // end --modify by lihang @20220408
-        //codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
-        //淇濆瓨妯℃澘灞炴��
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)){
-            BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
-        }
-
-        //淇濆瓨妯℃澘娴佺▼
-        if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOList)) {
-            BatchCBO batchCBOTemplateProcessAttr = codeClassifyProcessTempDaoI.batchInsert(codeClassifyProcessTempDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplateProcessAttr);
-        }
-        //妯℃澘闃舵
-        if(!CollectionUtils.isEmpty(codeClassifyPhaseDOList)) {
-            BatchCBO batchCBOTemplatePhaseAttr = codeTemplatePhaseDaoI.batchInsert(codeClassifyPhaseDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttr);
-        }
-
-        //妯℃澘闃舵灞炴��
-        if(!CollectionUtils.isEmpty(codePhaseAttrDOList)) {
-            BatchCBO batchCBOTemplatePhaseAttrAttr = codePhaseAttrDaoI.batchInsert(codePhaseAttrDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttrAttr);
-        }
-
-        //妯℃澘鎸夐挳
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOList)) {
-            BatchCBO batchCBOTemplateButtonAttr = codeClassifyTemplateButtonDaoI.batchInsert(codeClassifyTemplateButtonDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplateButtonAttr);
-        }
-
-        WebUtil.setPersistence(true);//鎵ц淇濆瓨
-
-        boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
-
-        return BaseResult.success("鍗囩増鎴愬姛锛�");
-    }
-
-    @Override
-    public BaseResult copyTemplate(CodeClassifyTemplateDTO codeClassifyDTO){
-
-        //鏃х殑妯℃澘oid
-        String oldOid = codeClassifyDTO.getOid();
-        //鏂扮殑妯℃澘oid
-        String newOid = VciBaseUtil.getPk();
-        //鍒嗙被oid,澶嶅埗杩囨潵鐨勬柊鐨勫垎绫籵id
-        String codeClassifyOid = codeClassifyDTO.getCodeclassifyoid();
-
-        //澶嶅埗妯℃澘
-        CodeClassifyTemplateDO codeClassifyTemplateDO_old =  codeClassifyTemplateMapper.selectByPrimaryKey(oldOid);//鏃фā鏉�
-
-        //楠岃瘉锛屼笟鍔$被鍨嬫槸涓嶆槸涓�鑷�
-        CodeClassifyDO codeClassifyDO_old = codeClassifyDaoI.selectBtmOrParentBtm(codeClassifyTemplateDO_old.getCodeClassifyOid());
-        if(codeClassifyDO_old==null){
-            return BaseResult.fail("澶嶅埗鐨勬ā鏉挎墍灞炲垎绫讳互鍙婁笂绾ф病鏈変笟鍔$被鍨嬶紝璇烽噸鏂伴�夋嫨!");
-        }
-
-        //鎵惧綋鍓嶅垎绫讳笅鐨勪笟鍔$被鍨�
-        CodeClassifyDO codeClassifyDO_new = codeClassifyDaoI.selectBtmOrParentBtm(codeClassifyOid);
-        if(codeClassifyDO_new==null){
-            return BaseResult.fail("褰撳墠鍒嗙被娌℃湁涓氬姟绫诲瀷锛岃閲嶆柊閫夋嫨!");
-        }
-
-        if(!codeClassifyDO_old.getBtmTypeId().equals(codeClassifyDO_new.getBtmTypeId())){
-            return BaseResult.fail("閫夋嫨鐨勫垎绫诲拰褰撳墠鍒嗙被涓氬姟绫诲瀷涓嶄竴鑷达紝璇烽噸鏂伴�夋嫨!");
-        }
-
-        codeClassifyTemplateDO_old.setId(codeClassifyDTO.getId());//鑻辨枃鍚嶇О
-        codeClassifyTemplateDO_old.setName(codeClassifyDTO.getName());//涓枃鍚嶇О
-        codeClassifyTemplateDO_old.setDescription(codeClassifyDTO.getDescription());//鎻忚堪
-        codeClassifyTemplateDO_old.setCodeClassifyOid(codeClassifyOid);//鍒嗙被oid
-        codeClassifyTemplateDO_old.setOid(newOid);
-        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = new ArrayList<CodeClassifyTemplateDO>();
-        codeClassifyTemplateDOList.add(codeClassifyTemplateDO_old);
-
-        //澶嶅埗妯℃澘灞炴��
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = copyTemplateAttr(oldOid,newOid);
-
-        //澶嶅埗妯℃澘娴佺▼
-        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = copyTemplateProcess(oldOid,newOid);
-
-        //澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
-        Map  phase_attrMap = copyTemplatePhase_attr(oldOid,newOid);
-
-        List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//妯℃澘闃舵
-        List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
-
-        //澶嶅埗妯℃澘鎸夐挳
-        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(oldOid,newOid);
-
-        //涓�璧蜂繚瀛樻暟鎹�
-        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-        //淇濆瓨妯℃澘
-        BatchCBO batchCBOTemplate = codeClassifyTemplateMapper.batchInsert(codeClassifyTemplateDOList);
-        //淇濆瓨妯℃澘灞炴��
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
-            BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
-        }
-
-        //淇濆瓨妯℃澘娴佺▼
-        if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOList)) {
-            BatchCBO batchCBOTemplateProcessAttr = codeClassifyProcessTempDaoI.batchInsert(codeClassifyProcessTempDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplateProcessAttr);
-        }
-
-        //妯℃澘闃舵
-        if(!CollectionUtils.isEmpty(codeClassifyPhaseDOList)) {
-            BatchCBO batchCBOTemplatePhaseAttr = codeTemplatePhaseDaoI.batchInsert(codeClassifyPhaseDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttr);
-        }
-
-        //妯℃澘闃舵灞炴��
-        if(!CollectionUtils.isEmpty(codePhaseAttrDOList)) {
-            BatchCBO batchCBOTemplatePhaseAttrAttr = codePhaseAttrDaoI.batchInsert(codePhaseAttrDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttrAttr);
-        }
-
-        //妯℃澘鎸夐挳
-        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOList)) {
-            BatchCBO batchCBOTemplateButtonAttr = codeClassifyTemplateButtonDaoI.batchInsert(codeClassifyTemplateButtonDOList);
-            batchCBOTemplate.copyFromOther(batchCBOTemplateButtonAttr);
-        }
-
-
-        WebUtil.setPersistence(true);//鎵ц淇濆瓨
-
-        boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
-        return BaseResult.success("澶嶅埗鎴愬姛锛�");
-
-    }
-
-    /**
-     * 浣跨敤涓婚搴撶殑鍒嗙被涓婚敭锛岃幏鍙栫敓鏁堢殑妯℃澘
-     *
-     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
-     * @param hasAttribute    鏄惁鍖呭惈灞炴��
-     * @return 妯℃澘鐨勪俊鎭�
-     */
-    @Override
-    public List<CodeClassifyTemplateVO> listReleaseTemplateByClassifyOid(String codeClassifyOid, boolean hasAttribute) {
-        VciBaseUtil.alertNotNull(codeClassifyOid,"涓婚搴撳垎绫讳富閿�");
-        List<CodeClassifyTemplateDO> templateDOS = selectOnlyTemplateByClassifyOid(codeClassifyOid);
-        if(CollectionUtils.isEmpty(templateDOS)){
-            throw new VciBaseException("褰撳墠鍒嗙被锛屼互鍙婂叾涓婄骇鍒嗙被閮芥病鏈夎缃ā鏉�");
-        }
-        List<CodeClassifyTemplateVO> templateVOList = codeClassifyTemplateDO2VOs(templateDOS, true);
-        return sortTemplateByRevision(templateVOList);
-    }
-
-    /**
-     * 鐢ㄦā鏉跨殑鐗堟湰鏉ユ帓搴�
-     * @param templateVOList 妯℃澘鐨勬樉绀哄璞�
-     * @return 鎺掑簭鍚庣殑鍒楄〃
-     */
-    @Override
-    public List<CodeClassifyTemplateVO> sortTemplateByRevision(List<CodeClassifyTemplateVO> templateVOList){
-        if(!CollectionUtils.isEmpty(templateVOList) && templateVOList.size() >1){
-            //鑾峰彇鐗堟湰鍙锋渶澶х殑閭d釜
-            templateVOList = templateVOList.stream().sorted((o1,o2)->
-                Integer.valueOf(o1.getRevisionSeq()).compareTo(Integer.valueOf(o2.getRevisionValue()))
-            ).collect(Collectors.toList());
-        }
-        return templateVOList;
-    }
-
-    /**
-     * 鏍¢獙瀛愬垎绫绘槸鍚︾浉鍚岀殑妯℃澘
-     *
-     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
-     * @return true琛ㄧず鐩稿悓
-     */
-    @Override
-    public boolean checkChildHasSameTemplate(String codeClassifyOid) {
-        Map<String/**妯℃澘鐨勪富閿�**/,String/**鍒嗙被鐨勪富閿�**/> childHasTemplateMap =codeClassifyTemplateMapper.selectChildHasReleaseTemplate(codeClassifyOid);
-        if(!CollectionUtils.isEmpty(childHasTemplateMap) && childHasTemplateMap.values().stream().collect(Collectors.toSet()).size()>1){
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     *鏍规嵁鐖跺垎绫籭d鍘绘煡鎵惧彾瀛愯妭鐐圭殑妯℃澘锛屽鏋滄病鏌ュ埌鍒欒涓烘ā鏉垮湪涓婂眰寤虹珛锛屽垯鏍规嵁鍒嗙被鍘绘煡褰撳墠妯℃澘
-     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
-     * @return
-     */
-    @Override
-    public List<CodeClassifyTemplateVO> childTemplates(String codeClassifyOid){
-        List<CodeClassifyTemplateVO> codeClassifyTemplateVOList=new ArrayList<>();
-        Map<String/**妯℃澘鐨勪富閿�**/,String/**鍒嗙被鐨勪富閿�**/> childHasTemplateMap =codeClassifyTemplateMapper.selectChildHasReleaseTemplate(codeClassifyOid);
-        Set<String> templateOid = childHasTemplateMap.keySet();
-        List<CodeClassifyTemplateDO>  classifyTemplateDOS=new ArrayList<>();
-        if(!CollectionUtils.isEmpty(templateOid)) {
-            classifyTemplateDOS= this.listCodeClassifyTemplateDOByOidCollections(templateOid);
-        }else{
-            classifyTemplateDOS=selectOnlyTemplateByClassifyOid(codeClassifyOid);
-        }
-        List<CodeClassifyTemplateVO> templateVOList = codeClassifyTemplateDO2VOs(classifyTemplateDOS, true);
-        if(!CollectionUtils.isEmpty(templateVOList)){
-            codeClassifyTemplateVOList.addAll(templateVOList);
-        }
-        return codeClassifyTemplateVOList;
-    }
-    /**
-     * 浣跨敤鍒嗙被涓婚敭閫掑綊鏌ヨ
-     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-     * @return 妯℃澘鐨勬暟鎹璞�
-     */
-    private List<CodeClassifyTemplateDO> selectOnlyTemplateByClassifyOid(String codeClassifyOid){
-        //1.鐩存帴鏌ヨ锛岀湅鐪嬭繖涓垎绫讳笅闈㈡湁娌℃湁鍙戝竷鐘舵�佺殑妯℃澘
-        //2.濡傛灉娌℃湁锛屽垯寰�涓婃壘鍒嗙被鐨勫唴瀹癸紝杩欎釜鍒嗙被灞傜骇涓嶄細澶锛屾墍浠ョ洿鎺ラ�掑綊鍗冲彲
-        //3.濡傛灉鍒嗙被涓嬮潰娣诲姞浜嗘ā鏉匡紝浣嗘槸娌℃湁鍙戝竷锛屽垯璇存槑妯℃澘鍙兘杩樺湪缂栬緫鐨勭姸鎬侊紝渚濈劧浣跨敤涓婄骇鍒嗙被
-
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codeClassifyOid",codeClassifyOid);
-        conditionMap.put("lcstatus",CodeClassifyTemplateLC.RELEASED.getValue());
-        List<CodeClassifyTemplateDO> templateDOS = codeClassifyTemplateMapper.selectByCondition(conditionMap, new PageHelper(-1));
-        if(CollectionUtils.isEmpty(templateDOS)){
-            //閫掑綊鎵句笂绾х殑妯℃澘
-            CodeClassifyDO classifyDO = codeClassifyDaoI.selectByPrimaryKey(codeClassifyOid);
-            if(StringUtils.isBlank(classifyDO.getParentCodeClassifyOid())){
-                //璇存槑宸茬粡鏄《浜嗭紝涔熸病鎵惧埌鐨勮瘽锛岄偅灏辫繑鍥炰簡
-                return null;
-            }
-            return selectOnlyTemplateByClassifyOid(classifyDO.getParentCodeClassifyOid());
-        }else{
-            return templateDOS;
-        }
-    }
-
-    /**
-     * 澶嶅埗妯℃澘锛屾ā鏉垮睘鎬�
-     * @param templateOldOid
-     * @param templateNewOid
-     * @param codeClassifyDTO 妯℃澘鍚嶇О锛屾ā鏉跨紪鍙凤紝鎻忚堪
-     * @return map tamplate:(List<CodeClassifyTemplateDO>) templateAttr:(List<CodeClassifyTemplateAttrDO>)
-     */
-    public Map copyTemplate_attr(String templateOldOid,String templateNewOid,String codeckassfyOid,CodeClassifyTemplateDTO codeClassifyDTO){
-        templateNewOid = templateNewOid==null?VciBaseUtil.getPk():VciBaseUtil.getPk();
-        VciQueryWrapperForDO codeClassifyTemplateQuery = new VciQueryWrapperForDO(CodeClassifyTemplateDO.class);
-        codeClassifyTemplateQuery.addQueryMap("oid",templateOldOid);
-        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = codeClassifyTemplateMapper.selectByWrapper(codeClassifyTemplateQuery);
-        for (CodeClassifyTemplateDO codeClassifyTemplateDO:codeClassifyTemplateDOList){
-            codeClassifyTemplateDO.setOid(templateNewOid);
-            codeClassifyTemplateDO.setCodeClassifyOid(codeckassfyOid);
-            codeClassifyTemplateDO.setId(codeClassifyDTO.getId());
-            codeClassifyTemplateDO.setName(codeClassifyDTO.getName());
-            codeClassifyTemplateDO.setDescription(codeClassifyDTO.getDescription());
-
-        }
-
-        //澶嶅埗妯℃澘灞炴��
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = copyTemplateAttr(templateOldOid,templateNewOid);
-        Map template_attrMap = new HashMap();
-        template_attrMap.put("tamplate",codeClassifyTemplateDOList);
-        template_attrMap.put("templateAttr",codeClassifyTemplateAttrDOList);
-        return template_attrMap;
-    }
-
-    /**
-     * 澶嶅埗妯℃澘灞炴��
-     */
-    public List<CodeClassifyTemplateAttrDO> copyTemplateAttr(String templateOldOid,String templateNewOid){
-        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
-        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
-        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
-            String attrOid = VciBaseUtil.getPk();
-            codeClassifyTemplateAttrDO.setOid(attrOid);
-            codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
-        }
-        return codeClassifyTemplateAttrDOList;
-    }
-
-    /**
-     * 澶嶅埗妯℃澘娴佺▼
-     */
-    public List<CodeClassifyProcessTempDO> copyTemplateProcess(String templateOldOid,String templateNewOid){
-        VciQueryWrapperForDO processWrapper = new VciQueryWrapperForDO(CodeClassifyProcessTempDO.class);
-        processWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
-        List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = codeClassifyProcessTempDaoI.selectByWrapper(processWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
-        for (CodeClassifyProcessTempDO codeClassifyProcessTempDO:codeClassifyProcessTempDOList){
-            String newOid = VciBaseUtil.getPk();
-            codeClassifyProcessTempDO.setOid(newOid);
-            //codeClassifyProcessTempDO.setCodeClassifyOid(templateNewOid);
-            codeClassifyProcessTempDO.setClassifyTemplateOid(templateNewOid);
-            //modify by lihang - @20220406 璁剧疆妯℃澘涓婚敭浣嶇疆鍑洪敊锛屽鑷村崌鐗堢殑妯℃澘涓殑娴佺▼鏄┖鐨勩��
-        }
-        return codeClassifyProcessTempDOList;
-    }
-
-    /**
-     * 澶嶅埗妯℃澘闃舵锛屾ā鏉垮睘鎬�
-     * @param templateOldOid
-     * @param templateNewOid
-     * @return map phase:(List<CodeTemplatePhaseDO>) phaseAttr:(List<CodePhaseAttrDO>)
-     */
-    public Map copyTemplatePhase_attr(String templateOldOid,String templateNewOid){
-        //妯℃澘闃舵
-        VciQueryWrapperForDO phaseWrapper = new VciQueryWrapperForDO(CodeTemplatePhaseDO.class);
-        phaseWrapper.addQueryMap("codeClassifyTemplateOid",templateOldOid);
-        List<CodeTemplatePhaseDO>  codeClassifyPhaseDOList = codeTemplatePhaseDaoI.selectByWrapper(phaseWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
-        Map<String,String> phaseKeyMap = new HashMap<String,String>();//闇�瑕佸鍒剁殑妯℃澘闃舵灞炴��,key:value,妯℃澘闃舵鑰乷id:妯℃澘灞炴�ф柊oid
-        List<String> phaseOidList = new ArrayList<String>();
-        for (CodeTemplatePhaseDO codeTemplatePhaseDO:codeClassifyPhaseDOList){
-            String oldoid = codeTemplatePhaseDO.getOid();
-            String newOid = VciBaseUtil.getPk();
-            codeTemplatePhaseDO.setOid(newOid);
-            codeTemplatePhaseDO.setCodeClassifyTemplateOid(templateNewOid);
-            phaseKeyMap.put(oldoid,newOid);
-            phaseOidList.add(oldoid);
-        }
-
-        //妯℃澘闃舵鐨勫睘鎬�
-        List<CodePhaseAttrDO> codePhaseAttrDOList = new ArrayList<CodePhaseAttrDO>();
-        if(!CollectionUtils.isEmpty(phaseOidList)){//size()==0涓嬭竟鏂规硶浼氭姤閿�
-            Map<String,String> conditionMap =  new HashMap<>();
-            conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])) + ")");
-            codePhaseAttrDOList = codePhaseAttrDaoI.selectByCondition(conditionMap,new PageHelper(-1));
-        }
-        for (CodePhaseAttrDO codePhaseAttrDO:codePhaseAttrDOList){
-            String oldPhaseoid = codePhaseAttrDO.getCodePhaseOid();
-            String newOid = VciBaseUtil.getPk();
-            codePhaseAttrDO.setOid(newOid);
-            codePhaseAttrDO.setCodePhaseOid(phaseKeyMap.get(oldPhaseoid));
-        }
-        Map phaseMap = new HashMap();
-        phaseMap.put("phase",codeClassifyPhaseDOList);
-        phaseMap.put("phaseAttr",codePhaseAttrDOList);
-        return phaseMap;
-    }
-
-    /**
-     * 澶嶅埗妯℃澘鎸夐挳
-     */
-    public List<CodeClassifyTemplateButtonDO> copyTemplateButton(String templateOldOid,String templateNewOid){
-        VciQueryWrapperForDO buttonWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateButtonDO.class);
-        buttonWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
-        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = codeClassifyTemplateButtonDaoI.selectByWrapper(buttonWrapper);
-        for (CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO:codeClassifyTemplateButtonDOList){
-            String newOid = VciBaseUtil.getPk();
-            codeClassifyTemplateButtonDO.setOid(newOid);
-            codeClassifyTemplateButtonDO.setClassifyTemplateOid(templateNewOid);
-        }
-        return codeClassifyTemplateButtonDOList;
-    }
-
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java
deleted file mode 100644
index 17b09b4..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java
+++ /dev/null
@@ -1,479 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
-import com.vci.starter.revision.bo.TreeWrapperOptions;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.pagemodel.Tree;
-import com.vci.starter.web.pagemodel.TreeQueryObject;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciParentQueryOption;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.LC_STATUS;
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-/**
- * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeClassifyValueServiceImpl implements CodeClassifyValueServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeClassifyValueDaoI codeClassifyValueMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-    /**
-     * 鐮佹鐨勪俊鎭�
-     */
-    @Autowired
-    private CodeBasicSecDaoI basicSecMapper;
-
-    /**
-    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
-    */
-    private static  final String PARENT_FIELD_NAME = "parentClassifyValueOid";
-    /**
-     * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
-     * @param treeQueryObject 鏍戞煡璇㈠璞�
-     * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
-     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException{
-       // List<CodeClassifyValueDO> doList =selectCodeClassifyValueDOByTree(treeQueryObject);
-        List<CodeClassifyValueDO> doList =selectCodeClassifyValueDO4Tree(treeQueryObject);
-        List<CodeClassifyValueVO> voList = codeClassifyValueDO2VOs(doList);
-        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
-        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
-        return revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyValueVO s) ->{
-            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
-            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
-                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
-        });
-    }
-    /**
-      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
-      *
-      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
-      */
-    @Override
-    public List<CodeClassifyValueDO> selectCodeClassifyValueDOByTree(TreeQueryObject treeQueryObject) {
-        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(treeQueryObject.getConditionMap(),CodeClassifyValueDO.class);
-        PageHelper ph = new PageHelper();
-        ph.addDefaultAsc("ordernum");
-        queryWrapperForDO.setPageHelper(ph);
-        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
-        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
-        //queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
-        parentQueryOption.setHasSelf(true);
-        queryWrapperForDO.childQueryParent(parentQueryOption);
-        return codeClassifyValueMapper.selectByWrapper(queryWrapperForDO);
-    }
-
-    private List<CodeClassifyValueDO> selectCodeClassifyValueDO4Tree(TreeQueryObject treeQueryObject){
-        Map<String, String> conditionMap = treeQueryObject.getConditionMap();
-        String currentSecOid = conditionMap.get("codeclassifysecoid");
-        String sql = "select oid from PLATFORMBTM_CODEBASICSEC start with  oid = '"+currentSecOid+"' connect by prior PARENTCLASSIFYSECOID = OID";
-        List<ClientBusinessObject> targetParentList = boService.queryBySql(sql, new HashMap<>());
-        Set<String> secOidList = targetParentList.stream().map(ClientBusinessObject::getOid).collect(Collectors.toSet());
-        conditionMap.clear();
-        StringBuilder oidStrBuilder = new StringBuilder();
-        secOidList.forEach(oid -> oidStrBuilder.append("'").append(oid).append("',"));
-        String oidStr = oidStrBuilder.toString().substring(0,oidStrBuilder.toString().length() -1);
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(null,CodeClassifyValueDO.class);
-        PageHelper ph = new PageHelper();
-        ph.addDefaultAsc("ordernum");
-        ph.setLimit(-1);
-        wrapper.setPageHelper(ph);
-        wrapper.in("codeclassifysecoid",oidStr);
-        return codeClassifyValueMapper.selectByWrapper(wrapper);
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeClassifyValueDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeClassifyValueVO> codeClassifyValueDO2VOs(Collection<CodeClassifyValueDO>  codeClassifyValueDOs) throws VciBaseException{
-        List<CodeClassifyValueVO> voList = new ArrayList<CodeClassifyValueVO>();
-        if(!CollectionUtils.isEmpty(codeClassifyValueDOs)){
-           for(CodeClassifyValueDO s: codeClassifyValueDOs){
-                CodeClassifyValueVO vo =  codeClassifyValueDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeClassifyValueDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeClassifyValueVO codeClassifyValueDO2VO(CodeClassifyValueDO codeClassifyValueDO) throws VciBaseException{
-              CodeClassifyValueVO vo = new CodeClassifyValueVO();
-        if(codeClassifyValueDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeClassifyValueVO addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //娣诲姞瀵圭爜鍊煎瓙鐖剁骇鐨勫垽鏂�
-        if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentclassifyvalueoid())){
-            String parentclassifyvalueoid = codeClassifyValueDTO.getParentclassifyvalueoid();
-            String codeclassifysecoid = codeClassifyValueDTO.getCodeclassifysecoid();
-            CodeClassifyValueDO parentDO = codeClassifyValueMapper.selectByPrimaryKey(parentclassifyvalueoid);
-            if (parentDO.getCodeClassifySecOid().equalsIgnoreCase(codeclassifysecoid)){
-                throw new VciBaseException("涓嶅厑璁稿湪鐖剁爜鍊间腑鐩存帴娣诲姞瀛愮爜鍊�");
-            }
-        }
-        //灏咲TO杞崲涓篋O
-        CodeClassifyValueDO codeClassifyValueDO = new CodeClassifyValueDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDTO,codeClassifyValueDO);
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codeclassifysecoid", codeClassifyValueDO.getCodeClassifySecOid());
-        conditionMap.put("parentclassifyvalueoid",codeClassifyValueDO.getParentClassifyValueOid());
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
-        List<CodeClassifyValueDO> existList = codeClassifyValueMapper.selectByWrapper(wrapper);
-        codeClassifyValueDO.setOrderNum(existList.size() + 1);
-        codeClassifyValueMapper.insert(codeClassifyValueDO);
-        return codeClassifyValueDO2VO(codeClassifyValueDO);
-    }
-
-    /**
-     * 淇敼鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeClassifyValueVO editSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鏁版嵁瀵硅薄",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊间富閿�");
-         //灏咲TO杞崲涓篋O
-         CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeClassifyValueDTO,codeClassifyValueDO);
-         codeClassifyValueMapper.updateByPrimaryKey(codeClassifyValueDO);
-         return codeClassifyValueDO2VO(codeClassifyValueDO);
-     }
-
-/**
- * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
- * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
- * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
- * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
- */
-@Override
-public BaseResult checkIsCanDelete(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
-    VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyValueDTO.getOid(),"涓婚敭");
-    CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
-    return checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
-}
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeClassifyValueDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeClassifyValueDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeClassifyValueDTO codeClassifyValueDTO, CodeClassifyValueDO codeClassifyValueDO) {
-        //boService.checkTs(codeClassifyValueDTO);
-        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
-        if(checkChildIsLinked(codeClassifyValueDO.getOid())){
-            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
-        }
-        return BaseResult.success(checkHasChild(codeClassifyValueDO.getOid()));
-    }
-    /**
-      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
-      *
-      * @param oid 涓婚敭
-      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
-      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
-      */
-    @Override
-    public boolean checkChildIsLinked(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        List<String> childOids = codeClassifyValueMapper.selectAllLevelChildOid(oid.trim());
-        if(!CollectionUtils.isEmpty(childOids)){
-             for(String childOid: childOids){
-                 if(!checkIsLinked(childOid)){
-                     return false;
-                 }
-             }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
-    *
-    * @param oid 涓婚敭
-    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
-    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    @Override
-    public boolean checkHasChild(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        return codeClassifyValueMapper.countAllLevelChildOid(oid.trim()) > 0;
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
-     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeClassifyValue(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊肩殑涓婚敭");
-        CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
-        if(baseResult.isSuccess()) {
-                        //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
-            List<String> childrenOids = codeClassifyValueMapper.selectAllLevelChildOid(codeClassifyValueDO.getOid().trim());
-            if (!CollectionUtils.isEmpty(childrenOids)) {
-                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids);
-                for(Collection<String> s : childrenCollections){
-                    codeClassifyValueMapper.batchDeleteByOids(s);
-                }
-            }
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeClassifyValueMapper.deleteByPrimaryKey(codeClassifyValueDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
-    * @param oid 涓婚敭
-    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeClassifyValueVO getObjectByOid(String oid) throws VciBaseException{
-        return codeClassifyValueDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeClassifyValueDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeClassifyValueDO codeClassifyValueDO = codeClassifyValueMapper.selectByPrimaryKey(oid.trim());
-        if(codeClassifyValueDO == null || StringUtils.isBlank(codeClassifyValueDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeClassifyValueDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeClassifyValueVO> listCodeClassifyValueByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeClassifyValueDO> codeClassifyValueDOList = listCodeClassifyValueDOByOidCollections(oidCollections);
-        return codeClassifyValueDO2VOs(codeClassifyValueDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeClassifyValueDO> listCodeClassifyValueDOByOidCollections(Collection<String> oidCollections){
-        List<CodeClassifyValueDO> codeClassifyValueDOList = new ArrayList<CodeClassifyValueDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeClassifyValueDO> tempDOList =  codeClassifyValueMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeClassifyValueDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeClassifyValueDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
-     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
-     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
-        if(treeQueryObject == null){
-            treeQueryObject = new TreeQueryObject();
-        }
-        if(treeQueryObject.getConditionMap() == null){
-            treeQueryObject.setConditionMap(new HashMap<>());
-        }
-        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
-            treeQueryObject.getConditionMap().remove(LC_STATUS);
-        }
-                return treeCodeClassifyValue(treeQueryObject);
-    }
-
-    /**
-     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
-     *
-     * @param classifySecOid         鐮佹鐨勪富閿�
-     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
-     * @return 鍒嗙被鐮佸�肩殑鍐呭
-     */
-    @Override
-    public List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid) {
-        if(StringUtils.isBlank(classifySecOid)){
-            return new ArrayList<>();
-        }
-        CodeBasicSecDO secDO = basicSecMapper.selectByPrimaryKey(classifySecOid);
-        if(secDO == null || StringUtils.isBlank(secDO.getOid())){
-            throw new VciBaseException("鐮佹鐨勫唴瀹瑰湪绯荤粺涓笉瀛樺湪");
-        }
-        if(StringUtils.isNotBlank(secDO.getParentClassifySecOid()) && StringUtils.isBlank(parentClassifyValueOid)){
-            return new ArrayList<>();
-            //鍥犱负鏈変笂绾у垎绫荤殑鏃跺�欙紝蹇呴』鍏堥�夋嫨涓婄骇鍒嗙被鐨勫唴瀹�
-        }
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codeClassifySecOid",classifySecOid);
-        if(StringUtils.isNotBlank(parentClassifyValueOid)){
-            conditionMap.put("parentClassifyValueOid",parentClassifyValueOid);
-        }
-        PageHelper pageHelper = new PageHelper(-1);
-        pageHelper.addDefaultAsc("ordernum");
-        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByCondition(conditionMap, pageHelper);
-        return codeClassifyValueDO2VOs(valueDOList);
-    }
-
-    /**
-     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
-     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult batchDeleteBySecOid(String codeclassifysecoid) {
-        VciBaseUtil.alertNotNull(codeclassifysecoid,"鍒嗙被鐮佹鐨勪富閿�");
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codeClassifySecOid",codeclassifysecoid);
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
-        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByWrapper(wrapper);
-        codeClassifyValueMapper.batchDeleteByOids(valueDOList.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toList()));
-        return BaseResult.success();
-    }
-
-    /**
-     * 鎵归噺娣诲姞鍒嗙被鐮佹鐨勭爜鍊笺�備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
-     * @param dtoList 鍒嗙被鐮佹鐨勭爜鍊煎垪琛�
-     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult batchSave4Order(List<CodeClassifyValueDTO> dtoList, String codeclassifysecoid) {
-        VciBaseUtil.alertNotNull(codeclassifysecoid,"鍒嗙被鐮佹涓婚敭");
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codeClassifySecOid",codeclassifysecoid);
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
-        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByWrapper(wrapper);
-        List<CodeClassifyValueDO> updateList = new ArrayList<>();
-        dtoList.forEach(dto -> {
-            if( StringUtils.isNotBlank( dto.getOid() )){
-                List<CodeClassifyValueDO> collect = valueDOList.stream().filter(value -> {
-                    return dto.getOid().equals(value.getOid());
-                }).collect(Collectors.toList());
-                collect.forEach(ccv -> {
-                    ccv.setOrderNum(dto.getOrdernum());
-                    ccv.setId(dto.getId());
-                    ccv.setName(dto.getName());
-                    updateList.add(ccv);
-                });
-            }
-        });
-        codeClassifyValueMapper.batchUpdate(updateList);
-        return BaseResult.success();
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java
deleted file mode 100644
index 96c720e..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java
+++ /dev/null
@@ -1,1103 +0,0 @@
-package org.springblade.code.service.impl;
-
-
-import cn.hutool.json.XML;
-import com.alibaba.fastjson.JSONObject;
-import com.vci.starter.web.enumpck.UserSecretEnum;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.pagemodel.SessionInfo;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.redis.RedisService;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.PlatformClientUtil;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.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;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-
-import javax.annotation.Resource;
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
-import static org.springblade.code.constant.MdmDuckingConstant.*;
-import static org.springblade.code.utils.DateUtils.DATE_TO_STRING_DETAIAL_PATTERN;
-
-/**
- * 涓婚搴撻泦鎴愭湇鍔�
- * @author wangyi
- * @date 2022-03-20
- */
-@Service
-public class CodeDuckingServiceImpl implements CodeDuckingServiceI {
-
-    /**
-     * 鏃ュ織
-     */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
-     */
-    @Resource
-    private DockingTaskDaoI dockingTaskDaoI;
-
-    /**
-     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
-     */
-    @Resource
-    private DockingDataDaoI dockingDataDaoI;
-
-    /**
-     * 闆嗘垚鏃ュ織鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private DockingLogeDaoI dockingLogeDaoI;
-
-    /**
-     * 闆嗘垚鎺ュ彛head鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private SysIntHeaderDaoI sysIntHeaderDaoI;
-
-    /**
-     * 妯℃澘灞炴�ф暟鎹搷浣滃眰
-     */
-    @Resource
-    private CodeClassifyDaoI codeClassifyDaoI;
-
-
-    /**
-     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-     */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-     * 缂撳瓨鏈嶅姟
-     */
-    @Autowired
-    private RedisService redisService;
-
-    /**
-     * 鏁版嵁鏈嶅姟
-     */
-    @Autowired(required = false)
-    @Lazy
-    private MdmEngineServiceI mdmEngineServiceI;
-
-    /**
-     * 缂栫爜棰勭敵璇锋湇鍔�
-     */
-    @Autowired(required = false)
-    @Lazy
-    private DockingPreApplyDataServiceI dockingPreApplyDataServiceI;
-
-    /**
-     * 瑕佹帹閫佺郴缁熺殑鏈嶅姟
-     */
-    @Autowired
-    private SysIntInfoServiceI sysIntInfoServiceI;
-
-    /**
-     * 鍒嗙被鏈嶅姟
-     */
-    @Autowired
-    private CodeClassifyServiceI codeClassifyServiceI;
-
-
-    @Value("${docking.tuhao:tuhao}")
-    public String tuhao;
-
-    @Value("${docking.tranTemp:D:\\PLT-2022\\web\\tranTemp}")
-    public String tranTemp;
-
-    @Value("${docking.preXmlTemp:D:\\PLT-2022\\web\\preXmlTemp}")
-    public String preXmlTemp;
-
-    /**
-     * 浜屻��1銆�2銆�3銆�4銆�
-     * 澶勭悊棰勭敵璇锋暟鎹�
-     * @param xmlDatas
-     * @return 鎺ユ敹鐨剎mlDate
-     */
-    @Override
-    public String applicateCode(String xmlDatas){
-
-        long start = System.currentTimeMillis();
-
-        Map<String,Object> datasMap = null;
-
-        //瑙f瀽xmlData
-        try {
-            datasMap = XmlUtil.readPreXmlData(xmlDatas);
-        }catch (Exception e){
-            logger.info("鎺ユ敹棰勭敵璇锋暟鎹紝瑙f瀽xmlData澶辫触锛寈mlDatas: "+xmlDatas+",e: "+e.getMessage());
-            e.printStackTrace();
-            //杩斿洖鎻愮ず
-            return XmlUtil.writePreBackXmlData(XML_CODE_FAIL,"瑙f瀽xmlData澶辫触,e: "+e.getMessage(),null);
-        }
-
-        List<XmlData> xmlDataList = Collections.synchronizedList(new ArrayList<XmlData>());
-        String systemid = datasMap.getOrDefault(XML_SYSTEMID,"").toString();
-        List<Map<String,Object>> dataMapList = (ArrayList<Map<String,Object>>)datasMap.get(XML_DATAS);
-
-        //璁板綍杩欐鏁版嵁淇℃伅,骞朵笖鎶妜mldata鍐欏叆鏂囦欢
-        String currentDate = DateUtils.getCurrentDate(DATE_TO_STRING_DETAIAL_PATTERN);
-        File preXmlFile = new File(preXmlTemp+ File.separator+systemid+"-"+currentDate+".xml");
-
-        try {
-            FileUtils.write(preXmlFile, xmlDatas);
-        }catch (Exception e){
-            logger.error(currentDate+" 鎺ユ敹"+systemid+"绯荤粺棰勭敵璇锋暟鎹紝鍐欏叆鏂囦欢澶辫触锛乪:"+e.getMessage()+",xmlDatas: "+xmlDatas);
-            e.printStackTrace();
-        }
-
-        //澶勭悊姣忎竴鏉$敵璇风殑鏁版嵁
-        ExecutorService pool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()+1);
-
-        SessionInfo sessionInfo = WebUtil.getSessionInfo();
-        CountDownLatch countDownLatch = new CountDownLatch(dataMapList.size());
-        for (int i =0;i<dataMapList.size();i++){
-            Map<String,Object> dataMap = dataMapList.get(i);
-            pool.execute(()-> {
-                String unique = dataMap.getOrDefault(XML_UNIQUE,"").toString();
-                String type = dataMap.getOrDefault(XML_TYPE,"").toString();
-
-                //瑕佹彃鍏ョ殑data
-                DockingPreApplyDataDTO dockingPreApplyDataDO = new DockingPreApplyDataDTO();
-                //瑕佹彃鍏ョ殑datainfo
-                List<DockingPreApplyDataInfoDTO> dockingPreApplyDataInfoDOList = new ArrayList<DockingPreApplyDataInfoDTO>();
-                XmlData xmlData_ = new XmlData();
-
-                try {
-                    WebUtil.setSessionInfo(sessionInfo);
-
-                    String num = "";
-                    String datacode = "";
-                    String datamsg = "";
-                    String datamsglog = "";
-
-                    //state=400锛屽鐞嗘垚鍔燂紝娌℃湁鎵惧埌缂栫爜
-                    datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏈煡璇㈠埌瀵瑰簲缂栫爜锛岃祴鐮佸悗鎺ㄩ�佺紪鐮佷俊鎭�";
-                    datacode = XML_STATE_400;
-                    XmlData xmlData = new XmlData();
-                    xmlData.setState(XML_STATE_400);
-                    xmlData.setMsg(datamsg);
-                    xmlData.setUnique(unique);
-                    xmlData.setNum(null);
-                    logger.info(datamsg+"锛宒ata: "+dataMap.get(unique)+",num: ");
-                    xmlData_ = xmlData;
-
-                    //濡傛灉鏄疢PM闆嗘垚杩囨潵鐨勬暟鎹紝unique浣滀负鍥惧彿鏌ヨ
-                    if(XML_SYSTEMID_MPM.equals(systemid)&& StringUtils.isNotEmpty(unique)) {
-
-                        //1銆佸厛鏌ヨ杩欎釜unique鏍规嵁鍥惧彿鏌ヨ锛屾湁鏁版嵁灏卞氨杩斿洖
-                        Map conditonMap = new HashMap();
-                        conditonMap.put("tuhao",unique);
-//                        conditonMap.put("lcstatus",FRAMEWORK_RELEASE_RELEASED);
-                        List<ClientBusinessObject> clientBusinessObjectList = boService.queryCBO(type,conditonMap);
-
-                        if(clientBusinessObjectList.size()>0) {
-                            num = clientBusinessObjectList.get(0).getId();
-                            String lcstatus = clientBusinessObjectList.get(0).getLcStatus();
-                            datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏈煡璇㈠埌瀵瑰簲缂栫爜锛岃祴鐮佸悗鎺ㄩ�佺紪鐮佷俊鎭�";
-                            if(FRAMEWORK_RELEASE_RELEASED.equals(lcstatus)) {
-                                datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏌ヨ缂栫爜鎴愬姛";
-                                datamsglog = datamsg+"锛宒ata: " + dataMap.get(unique) + ",num: " + num;
-                                datacode = XML_STATE_200;
-
-                            }else if(FRAMEWORK_RELEASE_SUBMIT.equals(lcstatus)){
-                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:宸叉彁浜わ紝data: " + dataMap.get(unique) + ",num: " + num;
-                                datacode = XML_STATE_400;
-
-                            }else if(FRAMEWORK_RELEASE_AUDITING.equals(lcstatus)){
-                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:瀹℃牳涓紝data: " + dataMap.get(unique) + ",num: " + num;
-                                datacode = XML_STATE_400;
-
-                            }else if(FRAMEWORK_RELEASE_EDITING.equals(lcstatus)){
-                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:缂栬緫涓紝data: " + dataMap.get(unique) + ",num: " + num;
-                                datacode = XML_STATE_400;
-
-                            }else if(FRAMEWORK_DATA_DISABLED.equals(lcstatus)){
-                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:鍋滅敤锛宒ata: " + dataMap.get(unique) + ",num: " + num;
-                                datacode = XML_STATE_400;
-                            }
-                            xmlData.setState(datacode);
-                            xmlData.setMsg(datamsg);
-                            xmlData.setUnique(unique);
-                            xmlData.setNum(num);
-                            logger.info(datamsglog);
-                            xmlData_ = xmlData;
-                        }
-                    }
-                    dockingPreApplyDataDO.setNum(num);
-                    dockingPreApplyDataDO.setDatacode(datacode);
-                    dockingPreApplyDataDO.setDatamsg(datamsg);
-
-                    //2銆佹牴鎹畊nique鏌ヨDockingPreApplyDataDO锛屾湁鏁版嵁灏变慨鏀瑰埆鐨勬墍鏈夌殑usedflag=false,璁剧疆杩欎釜涓簍rue
-                    //3銆佸啀鎻掑叆DockingPreApplyDataDO鍜孌ockingPreApplyDataInfoDO
-                    //鍏跺疄锛�2銆佸拰3銆佽繖涓ゆ鍦╠ockingPreApplyDataServiceI.addSaveDataAndInfo锛堬級杩欎釜鏂规硶涓竴璧峰仛浜�
-
-                    String dataoid = redisService.getUUIDEveryDay();
-//                    String dataoid = "1";
-                    dockingPreApplyDataDO.setOid(dataoid);
-                    dockingPreApplyDataDO.setPreapplyoid("1");
-                    dockingPreApplyDataDO.setUniquecode(unique);
-                    dockingPreApplyDataDO.setType(type);
-                    dockingPreApplyDataDO.setSystemid(systemid);
-
-                    Object attro = dataMap.get(XML_PROS);
-
-                    //瑕佹彃鍏ョ殑datainfo
-                    List<Map<String,String>> attrList = null;
-                    if (attro == null) {
-                        attrList = new ArrayList<Map<String,String>>();
-                    }else {
-                        attrList = (ArrayList<Map<String,String>>)attro;
-                    }
-
-                    String mpm_model = null;
-                    String mpm_parttype = null;
-                    String mpm_unit = null;
-                    for (Map<String, String> attrMap : attrList) {
-                        String datainfooid = redisService.getUUIDEveryDay();
-//                      datainfooid = "1";
-                        String key = attrMap.getOrDefault(XML_KEY,"");
-                        String mean = attrMap.getOrDefault(XML_MEAN,"");
-                        String text = attrMap.getOrDefault(XML_TEXT,"");
-
-                        DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDO = new DockingPreApplyDataInfoDTO();
-                        dockingPreApplyDataInfoDO.setDataoid(dataoid);
-                        dockingPreApplyDataInfoDO.setOid(datainfooid);
-                        dockingPreApplyDataInfoDO.setKey(key);
-                        dockingPreApplyDataInfoDO.setValue(text);
-                        dockingPreApplyDataInfoDO.setMean(mean);
-                        dockingPreApplyDataInfoDOList.add(dockingPreApplyDataInfoDO);
-
-                        //鍙栦笁涓��
-                        if(XML_MPM_MODEL.equals(key)){//鍙朚PM瑙勬牸
-                            mpm_model = text;
-                            dockingPreApplyDataDO.setModel(mpm_model);
-                        }
-                        if(XML_MPM_PARTTYPE.equals(key)){//鍙朚PM闆朵欢鍨嬪彿
-                            mpm_parttype = text;
-                            dockingPreApplyDataDO.setParttype(mpm_parttype);
-                        }
-                        if(XML_MPM_UNIT.equals(key)){//鍗曚綅
-                            mpm_unit = text;
-                            dockingPreApplyDataDO.setUnit(mpm_unit);
-                        }
-                    }
-
-                    dockingPreApplyDataServiceI.addSaveDataAndInfo(dockingPreApplyDataDO, dockingPreApplyDataInfoDOList);
-
-                } catch (Exception e) {
-                    String datamsg = "鎺ユ敹棰勭敵璇锋暟鎹け璐ワ紒锛宒ata: "+dataMap.get(unique)+",e: "+e.getMessage();
-                    XmlData xmlData = new XmlData();
-                    xmlData.setState(XML_STATE_500);
-                    xmlData.setMsg(datamsg);
-                    xmlData.setUnique(unique);
-                    xmlData.setNum(null);
-                    logger.error(datamsg+".dockingPreApplyDataDO锛� "+dockingPreApplyDataDO+",dockingPreApplyDataInfoDOList: "+dockingPreApplyDataInfoDOList);
-                    xmlData_ = xmlData;
-
-                    e.printStackTrace();
-                }finally {
-                    xmlDataList.add(xmlData_);
-                    countDownLatch.countDown();
-                }
-            });
-        }
-
-        //绛夊緟鎵�鏈夌嚎绋嬫墽琛屽畬鎴�
-        try {
-            countDownLatch.await();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-        String backXmlData = XmlUtil.writePreBackXmlData(XML_CODE_SUCCESS,"鎺ユ敹棰勭敵璇锋暟鎹垚鍔燂紒",xmlDataList);
-
-
-        long end = System.currentTimeMillis();
-
-        //鎷兼帴杩斿洖鐨剎mlData
-        int dataMapSise = dataMapList.size();
-        int xmlDataSise = xmlDataList.size();
-        System.out.println("========================dataMapSise锛� "+dataMapSise+",xmlDataSise:"+xmlDataSise);
-
-        System.out.println("========================澶勭悊棰勭敵璇锋暟鎹竴鍏辫�楁椂 "+(end-start)/1000+"绉�");
-        return backXmlData;
-    }
-
-    /**
-     * 鍥涖��1銆�2銆�3
-     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
-     */
-    @Override
-    public void insertCache2(){
-
-        initSysadmin();
-
-        //sysintinfo鏌ヨ瑕佹帹閫佺殑涓婚搴撳拰鐩稿叧绯荤粺淇℃伅
-        Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("usedflag","true");
-        List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
-
-        //distinct鍑轰富棰樺簱btmname,瀛樺偍key-value缁撴瀯鐨勫垎绫绘暟鎹紝杩欓噷鐨勫垎绫绘槸涓婚搴搑oot鑺傜偣
-        Set<String> btmtypeidSet = new HashSet<>();
-        Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//key=classifyoid,value=list<map>
-        for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
-            btmtypeidSet.add(sysIntInfoVOi.getBtmTypeId());
-            List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
-            if(SysIntInfoVOListi==null){
-                SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
-            }
-            SysIntInfoVOListi.add(sysIntInfoVOi);
-            sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
-        }
-
-        //鏌ヨdockingdata:oid,classifyoid,btmid,btmoid,sendtype,classifyid,classifyname
-//        List<Map> dataList = getDockingDatas();
-        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
-        queryWrapperForDO.addQueryMap("sendflag","false");
-        List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
-
-        for (DockingDataDO mapi:dataList){
-
-            WebUtil.setPersistence(false);
-            BatchCBO batchCBO = new BatchCBO();
-
-            String dataoid = mapi.getOid();//data瀵硅薄鐨刼id
-            String classifyoid = mapi.getClassifyoid();
-            String id = mapi.getId();
-            String uniquecode = mapi.getUniquecode();
-            String btmid = mapi.getBtmid();
-            String btmoid = mapi.getBtmoid();
-            String sendtype = mapi.getSendtype();
-            String classifyid = mapi.getClassifyid();
-            String classifyname = mapi.getClassifyname();
-
-            //璁剧疆uniquecode
-            if(StringUtils.isEmpty(uniquecode)){
-                uniquecode = getTuhao(btmoid);//鏌ヨ鍥惧彿
-                if(StringUtils.isNotEmpty(uniquecode)) {
-                    updateDockingDatasUniqueCode(dataoid, uniquecode);
-                }
-            }
-            List<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
-            String rootClassifyoid = "";
-            String pushType="1";
-            if(DOCKING_DEFAULT_CLASSIFY.equalsIgnoreCase(classifyoid)){//杩欎釜瀵瑰簲sysintinfo涓殑涓婚搴搃d锛屽鏋滄槸鍒嗙被鏁版嵁锛屽氨鏄疍OCKING_DEFAULT_CLASSIFY=CODECLASSIFY
-                rootClassifyoid = DOCKING_DEFAULT_CLASSIFY;
-                //鍒ゆ柇鏄惁灞炰簬鍒嗙被鏍�,濡傛灉鏄粍缁囥�佷汉鍛樸�侀檮褰曚箣绫荤殑涓嶇敓鎴愪换鍔�,骞朵笖鑷姩娓呴櫎杩欎釜data
-                boolean iswupin = codeClassifyDaoI.isWupin(btmoid);
-                if(!"TakeBack".equals(sendtype)&&!iswupin){
-                    boolean u = delteDockingData(dataoid);
-                    logger.error("闆嗘垚data鍒犻櫎闈炲垎绫籨ata澶辫触锛乨ataoid:"+dataoid);
-                    continue;
-                }
-                pushType="2";
-                rootClassifyoid=btmoid;
-            }else {
-               /* CodeClassifyDO rootClassify = codeClassifyDaoI.getRootClassify(classifyoid);//root鍒嗙被
-                if(rootClassify==null){
-                    continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
-                }
-                rootClassifyoid = rootClassify.getOid();*/
-                rootClassifyoid=classifyoid;
-            }
-
-            List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(rootClassifyoid);
-            if(CollectionUtils.isEmpty(parentLeveDO)){
-                continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
-            }
-            Map<String, CodeClassifyDO> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
-            String finalPushType = pushType;
-            oidCodeclassifyDOMap.keySet().forEach(oid->{
-                if(sysIntInfoDOMap.containsKey(oid)){
-                    List<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
-                    sysIntInfoDOS.stream().forEach(sysIntInfoDO -> {
-                        String sysPushType= sysIntInfoDO.getPushType();
-                        if(sysPushType.equalsIgnoreCase(finalPushType)){
-                            effectiveSysIntInfoVOs.add(sysIntInfoDO);
-                        }
-                    });
-
-
-                }
-            });
-            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
-                continue;
-            }
-            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
-            for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
-               // String sysinfoclassifyoid = sysIntInfoVOi.getClassifyoid();//intinfo鐨刢lassifyoid
-               // if(!rootClassifyoid.equals(sysinfoclassifyoid)){
-               //     continue;
-              //  }
-                DockingTaskDO dockingTaskDO = new DockingTaskDO();
-                String oid=redisService.getUUIDEveryDay();
-               // logger.error("===================================================oid: "+redisService.getUUIDEveryDay());
-                dockingTaskDO.setOid(oid);
-                dockingTaskDO.setSendflag(SEND_FLAG_FALSE);
-                dockingTaskDO.setId(id);//缂栫爜
-                dockingTaskDO.setUniquecode(uniquecode);
-                dockingTaskDO.setBtmoid(btmoid);//鏁版嵁oid
-                dockingTaskDO.setBtmid(btmid);//鏁版嵁涓氬姟绫诲瀷id
-                dockingTaskDO.setClassifyid(classifyid);//鏁版嵁鍦ㄥ垎绫籭d
-                dockingTaskDO.setClassifyoid(classifyoid);//鏁版嵁鎵�鍦ㄥ垎绫籵id
-                dockingTaskDO.setClassifyname(classifyname);//鏁版嵁鎵�鍦ㄥ垎绫诲悕绉�
-                dockingTaskDO.setSendtype(sendtype);//鏁版嵁鎺ㄩ�佺被鍨�
-                dockingTaskDO.setDataoid(dataoid);
-
-                //intinfo
-                dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo鐨刼id
-                dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//绯荤粺oid
-                dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//绯荤粺缂栫爜
-                dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//绯荤粺name
-
-                dockingTaskDO_insert.add(dockingTaskDO);
-            }
-
-            BatchCBO bi = null;
-            if(dockingTaskDO_insert.size()!=0) {
-                bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
-                batchCBO.copyFromOther(bi);
-            }
-
-            WebUtil.setPersistence(true);
-            boService.persistenceBatch(batchCBO);
-
-            //dockingTaskDaoI.updateByPrimaryKey鏂规硶鎶ラ敊浜嗭紝鎵�浠ユ墜鍐欎簡杩欎釜
-            boolean u = updateDockingDatasSendFlag(dataoid,SEND_FLAG_TRUE);
-            if(!u){
-                logger.error("闆嗘垚data鍒嗚В浠诲姟澶辫触锛乨ataoid:"+dataoid);
-                continue;
-            }
-
-        }
-    }
-
-    /**
-     * 鍥涖��3銆�
-     * 1銆�
-     */
-    @Override
-    public void sendData3(){
-
-        initSysadmin();
-
-        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
-        queryWrapper.addQueryMap("sendFlag", MdmDuckingConstant.SEND_FLAG_FALSE);
-        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
-
-        //姣忎釜task渚濇鎵ц鎺ㄩ��
-        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
-
-            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
-            WebUtil.setPersistence(false);
-            BatchCBO batchCBO = new BatchCBO();
-
-            String paramString = null;
-
-            //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
-            String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
-            String systemcode = dockingTaskDO.getSystemcode();
-            String systemname = dockingTaskDO.getSystemname();
-            String systemoid = dockingTaskDO.getSystemoid();
-            String dataid = dockingTaskDO.getId();//缂栫爜
-            String uniquecode = dockingTaskDO.getUniquecode();//uniquecode
-
-            //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
-            SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
-            String url = sysIntInfoVO.getRequesturl();//url
-            String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
-            String paramType = sysIntInfoVO.getParamtype();//xml/json
-            String returnType = sysIntInfoVO.getReturntype();//xml/json
-            String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//涓昏鏄痺ebservice鐨勬柟娉曞悕
-            String namespace = sysIntInfoVO.getNamespace();//namespace
-            String soapaction = sysIntInfoVO.getSoapaction();//soapaction
-            String targName = sysIntInfoVO.getTargName();//targName
-            String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice鏄痗xf/axis
-
-            //鏌ヨparam
-            List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(systeminfooid);
-            //鏌ヨheader
-            List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(systeminfooid);
-
-            //鏌ヨ瑕佹帹閫佺殑鏁版嵁
-            String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁oid
-            String btmid = dockingTaskDO.getBtmid();//鏁版嵁btmid
-            String classifyoid = dockingTaskDO.getClassifyoid();
-            String classifyid = dockingTaskDO.getClassifyid();
-            String classifyname= dockingTaskDO.getClassifyname();
-            String sendtype = dockingTaskDO.getSendtype();
-
-            //缁勮鏁版嵁
-            XmlData xmlData = new XmlData();
-            xmlData.setSendtype(sendtype);
-
-            if(!DOCKING_DEFAULT_CLASSIFY.equals(btmid)) {
-                xmlData.setType(btmid);
-            }
-
-            String ret_xml = null;
-            String id = null;
-            String name = null;
-            String idpath = null;
-            String namepath = null;
-            //琛ㄧず鏄垎绫讳俊鎭暟鎹�
-            if(DOCKING_DEFAULT_CLASSIFY.equals(btmid)){
-                xmlData.setNamepath("");
-                xmlData.setIdpath("");
-                xmlData.setNum("");
-
-                CodeClassifyDO codeClassifyDO = null;
-                try {
-                    codeClassifyDO = codeClassifyDaoI.selectByPrimaryKey(btmoid);
-                }catch (Exception e){
-
-                }
-
-                String classifyoid_parent = "";
-                int orderNum = 0;
-                if(codeClassifyDO==null){//鏌ヤ笉鍒版暟鎹紝璇存槑琚垹闄や簡锛屼粠DOCKING_CACHE2_DELETE鍙�
-                    CodeClassifyDO codeClassifyDOJson = (CodeClassifyDO)redisService.getCacheObject(DOCKING_CACHE2_DELETE+btmoid);
-
-                    if(codeClassifyDOJson==null){
-                        BatchCBO insertLoge = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,"",url,"涓绘暟鎹郴缁熸湭鏌ヨ鍒板垹闄ょ殑鏁版嵁锛屾湭鎵ц鎺ㄩ�併��");
-                        batchCBO.copyFromOther(insertLoge);
-                        WebUtil.setPersistence(true);
-                        boService.persistenceBatch(batchCBO);
-                    }
-                    id = codeClassifyDOJson.getId();
-                    name = codeClassifyDOJson.getName();
-                    orderNum = codeClassifyDOJson.getOrderNum();
-                    classifyoid_parent = codeClassifyDOJson.getParentCodeClassifyOid();
-                }else {
-                    id = codeClassifyDO.getId();
-                    name = codeClassifyDO.getName();
-                    orderNum = codeClassifyDO.getOrderNum();
-                    classifyoid_parent = codeClassifyDO.getParentCodeClassifyOid();
-                }
-
-                //鐖剁骇,idpath,namepath,鍒嗙被鏁版嵁瑙嗗浘涓病鏈夋煡璇㈠嚭璺緞锛岄渶瑕佹墜鍔ㄥ幓鏌ヨ
-                CodeClassifyDO codeClassifyDO_parent = null;
-                try {
-                    codeClassifyDO_parent = codeClassifyDaoI.selectByPrimaryKey(classifyoid_parent);
-                    xmlData.setParentId(codeClassifyDO_parent.getId());
-
-                    //idpath,namepath
-
-                    List<CodeClassifyDO> codeClassifyDOList = codeClassifyDaoI.listParentClassify(codeClassifyDO_parent.getOid());
-                    for (int i=codeClassifyDOList.size()-1;i>=0;i--){
-                        CodeClassifyDO codeClassifyDOi=codeClassifyDOList.get(i);
-                        String idi = codeClassifyDOi.getId();
-                        String namei = codeClassifyDOi.getName();
-                        idpath = idpath==null?idi:idpath+"#"+idi;
-                        namepath = namepath==null?namei:namepath+"#"+namei;
-                    }
-                }catch (Exception e){
-
-                }
-
-                idpath = idpath==null?id:idpath+"#"+id;
-                namepath = namepath==null?name:namepath+"#"+name;
-
-                //鏌ヨ鍒嗙被璺緞
-                xmlData.setName(name);
-                xmlData.setNamepath(namepath);
-                xmlData.setIdpath(idpath);
-                xmlData.setId(id);
-                xmlData.setOrderNum(orderNum);
-
-                List<XmlData> xmlDataList = new ArrayList<XmlData>();
-                xmlDataList.add(xmlData);
-                ret_xml = XmlUtil.writeSendXmlData_classify(xmlDataList);//xml鏍煎紡鏁版嵁
-            }else {
-                Map<String, String> data = null;
-                try {
-                    //琛ㄧず鏄富鏁版嵁
-                    CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
-                    BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
-
-                    if (baseResult == null) {
-                        JSONObject josni = redisService.getCacheObject(DOCKING_CACHE2_DELETE + btmoid);
-                        data = (Map) josni;
-                    } else {
-                        data = baseResult.getObj();
-                    }
-                }catch (Throwable e){
-                    BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"鏈煡璇㈠埌鐩稿簲鏁版嵁锛�");
-                    batchCBO.copyFromOther(failCbo);
-                    continue;
-                }
-
-                //澶勭悊璁¢噺鍗曚綅绛夎浆鎹�
-//                data = tran(data);
-
-                //濡傛灉鏄泦鎴恊rp閮ㄩ棬鏁版嵁闆嗘垚锛宲arentcode=null寤虹珛涓�绾ч儴闂�,鏃犱汉鏈烘瘮杈冨彧鏈夐儴闂紝娌℃湁绉戝,鎵�浠ョ郴缁熺殑绉戝鍏跺疄灏辨槸浠栦滑鐨勯儴闂�
-                if("organization".equals(btmid.toLowerCase())){
-                    String materialclassify = data.get("materialclassify");
-                    if("绉戝".equals(materialclassify)){
-                        data.put("parentcode","");
-                    }
-                }
-                //鏁版嵁杞崲d
-                String tran_xml = null;
-                try {
-                    //D:\MDM_important\PLT-2022\web\tranTemp\+绯荤粺鍚嶇О,浼氬幓鎵捐繖涓枃浠惰鍙栨暟鎹浆鎹俊鎭�
-                    tran_xml = FileUtils.readFileToString(new File(tranTemp+File.separator+systemcode+".xml"),"utf-8");
-                }catch (IOException e){
-                    e.printStackTrace();
-                }
-                if(StringUtils.isNotEmpty(tran_xml)){
-                    //閫氳繃tran_xml瀵筪ata鏁版嵁杞崲
-                    Map<String,Object> tran_map = null;
-                    try {
-                        tran_map = XmlUtil.readTranXml(tran_xml,btmid);
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                    if(tran_map!=null){//璇诲彇鍒拌繖涓猙tmid璁剧疆鐨勮浆鎹㈠叧绯讳簡鎵嶅仛澶勭悊
-                        for (String key:tran_map.keySet()){//key=materialtype
-                            Object data_pro_mapo = tran_map.get(key);//data_pro_map
-                            if(data_pro_mapo!=null){//杩欎釜鍊艰缃浆鎹簡鎵嶅鐞�
-                                Map<String,String> data_pro_map = (Map<String,String>)data_pro_mapo;
-                                String mdm_value = data.get(key);
-                                String system_value = data_pro_map.get(mdm_value);
-                                if(StringUtils.isNotEmpty(mdm_value)){
-                                    data.put(key,system_value);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                String unique = null;
-                List<Pro> pros = new ArrayList<Pro>();
-                String codeclassifyoid = null;
-                for (String key:data.keySet()){
-                    Pro pro = new Pro();
-                    pro.setKey(key);
-                    pro.setMean("");
-                    pro.setValue(data.getOrDefault(key,""));
-                    pros.add(pro);
-                    if(tuhao.equals(key)){
-                        unique = data.getOrDefault(key,"");
-                    }
-                    if("oid".equals(key)){
-                        codeclassifyoid = data.getOrDefault(key,"");
-                    }
-                }
-                xmlData.setNum(data.getOrDefault("id",""));
-                xmlData.setPros(pros);
-                xmlData.setUnique(unique);
-
-                //鏌ヨ鍒嗙被璺緞,涓绘暟鎹湪瑙嗗浘涓凡缁忔煡璇㈠嚭浜嗚矾寰勶紝鍙笉杩囨槸,闂撮殧鐨�
-                namepath = classifyname.replaceAll(",","#");
-                idpath = classifyid.replaceAll(",","#");
-
-                xmlData.setNamepath(namepath);
-                xmlData.setIdpath(idpath);
-
-                List<XmlData> xmlDataList = new ArrayList<XmlData>();
-                xmlDataList.add(xmlData);
-                ret_xml = XmlUtil.writeSendXmlData(xmlDataList);//xml鏍煎紡鏁版嵁
-            }
-
-            //鍒囨崲xml/json
-            String sendString = null;
-            String backString = null;
-            if(paramType.equals(DATATYPE_JSON)){
-                sendString = XML.toJSONObject(ret_xml).toString();
-            }else {
-                sendString = ret_xml;
-            }
-            logger.info("绯荤粺锛�"+systemcode);
-            logger.info("鎺ュ彛鍦板潃:"+url);
-            logger.info("鎺ュ彛鍑芥暟:"+interfaceFunction);
-            logger.info("鎺ュ彛浼犻�掑弬鏁�:"+sendString);
-            //鎺ㄩ�佹暟鎹�
-            try {
-                if (type.equals(URLTYPE_GET)) {//GET璇锋眰
-                    String sendurl = url + "?" + PARAM_XMLDATA + "=" + sendString;
-                    //鎷兼帴param
-                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
-                        sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
-                    }
-                    paramString=sendurl;
-                    backString = HttpUtils.get(sendurl);
-                } else if (type.equals(URLTYPE_POST)) {//POST璇锋眰
-                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
-                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
-                    }
-                    paramString=params.toString();
-                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
-                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
-                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
-                    }
-                    backString = HttpUtils.post(url, params, headers);
-                } else if (type.equals(URLTYPE_WEBSERVICE)) {//webserver璇锋眰
-                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
-                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
-                    }
-                    paramString=sendString;
-                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
-                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
-                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
-                    }
-                    backString = WsErpClientUtil.sendMsg(url, namespace, soapaction,interfaceFunction,targName, paramString, 10000);
-                } else {//corba鎺ュ彛
-
-                }
-                paramString=sendString;
-            }catch (Exception e){
-                e.printStackTrace();
-                BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"鎺ㄩ�佹暟鎹け璐ワ紒");
-                batchCBO.copyFromOther(failCbo);
-            }
-            logger.info("鎺ュ彛杩斿洖鍙傛暟:"+backString);
-            //瑙f瀽杩旇繕鍙傛暟
-            try {
-                BackXml backXml = null;
-                if(returnType.equals(DATATYPE_JSON)){
-                    backXml = XmlUtil.readSendJsonData(backString);//鐩墠鍙鍙栦富鏁版嵁json杩斿洖淇℃伅
-                }else {
-                    if(DOCKING_DEFAULT_CLASSIFY.equals(btmid)){
-                        backXml = XmlUtil.readSendXmlData_classify(backString);//鍒嗙被xml杩斿洖淇℃伅
-                    }else {
-                        backXml = XmlUtil.readSendXmlData(backString);//涓绘暟鎹畑ml杩斿洖淇℃伅
-                    }
-                }
-                List<XmlData> datas = backXml.getDatas();
-                boolean isSend = false;
-                for (XmlData xmlDatai:datas){
-                    String xml_datacode = xmlDatai.getState();
-                    String xml_datamsg = xmlDatai.getMsg();
-                    if(XML_DATACODE_200.equals(xml_datacode)){
-                        BatchCBO insertLoge = taskSuccess(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
-                        batchCBO.copyFromOther(insertLoge);
-                        isSend = true;
-                    }else if(XML_DATACODE_500.equals(xml_datacode)){
-                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
-                        batchCBO.copyFromOther(failCbo);
-                    }else if("true".equals(xml_datacode.toLowerCase())){
-                        BatchCBO insertLoge = taskSuccess(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
-                        batchCBO.copyFromOther(insertLoge);
-                        isSend = true;
-                    }else if("false".equals(xml_datacode)){
-                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
-                        batchCBO.copyFromOther(failCbo);
-                    }else{
-                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"杩旇繕xml鏍煎紡涓嶆纭紝缂哄皯code!");
-                        batchCBO.copyFromOther(failCbo);
-                    }
-                }
-
-                //鍏ㄩ兘鎺ユ敹鎴愬姛鐨勬儏鍐典笅,淇敼dockingtask sendflag涓哄凡鍙戦��
-                if(isSend) {
-                    dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
-                    BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
-                    batchCBO.copyFromOther(updateTask);
-                }
-
-            }catch (Exception e){
-                e.printStackTrace();
-                BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"瑙f瀽杩旇繕鏁版嵁澶辫触锛�");
-                batchCBO.copyFromOther(failCbo);
-            }
-
-            //姣忎竴涓猼ask涓�涓簨鐗�
-            WebUtil.setPersistence(true);
-            boService.persistenceBatch(batchCBO);
-
-        }
-    }
-
-    public static Map<String,String> tranMap = new HashMap<String,String>();
-    public Map<String,String> tran(Map<String,String> data){
-        if(tranMap.isEmpty()){
-//            tranMap.put("jiliangdw","jiliangdwname");
-        }
-
-        for (String key:tranMap.keySet()){
-            String tran_key = tranMap.get(key);
-            String tran_key_value = data.get(tran_key);
-            if(StringUtils.isNotEmpty(tran_key_value)){
-                data.put(key,tran_key_value);
-            }
-        }
-        data.put("shifoupihaoguanli","0");
-        return data;
-    }
-
-    /**
-     * 瀹氭椂浠诲姟鎺ㄩ��
-     */
-    @Override
-    public void DockingScheduing(){
-        //data 2 task
-        insertCache2();
-
-        //鎺ㄩ�佹暟鎹�
-        sendData3();
-    }
-
-    /**
-     * 鏁版嵁鍒犻櫎鐨勬椂鍊欙紝缂撳瓨鍒皉edis
-     * @param oid
-     */
-    @Override
-    public void cacheDeleteData(String oid,Object obj){
-        logger.info("鍒犻櫎鏁版嵁鎻掑叆redis,key: "+DOCKING_CACHE2_DELETE+",oid: "+oid+",obj: "+obj);
-        redisService.setCacheObject(DOCKING_CACHE2_DELETE + oid, obj);
-    }
-
-    @Override
-    public DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        pageHelper.addDefaultAsc("sendflag");
-        List<DockingDataDO> doList = dockingDataDaoI.selectByCondition(conditionMap,pageHelper);
-
-        DataGrid<DockingDataDO> dataGrid=new DataGrid<DockingDataDO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(doList);
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingDataDaoI.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    @Override
-    public DataGrid<DockingTaskDO> gridTask(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        pageHelper.addDefaultAsc("sendflag");
-        List<DockingTaskDO> doList = dockingTaskDaoI.selectByCondition(conditionMap,pageHelper);
-
-        DataGrid<DockingTaskDO> dataGrid=new DataGrid<DockingTaskDO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(doList);
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingTaskDaoI.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    @Override
-    public DataGrid<DockingLogeDO> gridLoge(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<DockingLogeDO> doList = dockingLogeDaoI.selectByCondition(conditionMap,pageHelper);
-
-        DataGrid<DockingLogeDO> dataGrid=new DataGrid<DockingLogeDO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(doList);
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingLogeDaoI.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    @Override
-    public DataGrid<SysIntHeaderDO> gridHeader(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<SysIntHeaderDO> doList = sysIntHeaderDaoI.selectByCondition(conditionMap,pageHelper);
-
-        DataGrid<SysIntHeaderDO> dataGrid=new DataGrid<SysIntHeaderDO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(doList);
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(sysIntHeaderDaoI.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-    /**
-     * 鎺ㄩ�佹垚鍔�,鎻掑叆dockingtask锛屽悓鏃惰褰昹oge
-     * @param systemcode
-     * @param systemname
-     * @param systemoid
-     * @param paramString
-     * @param url
-     */
-    public BatchCBO taskSuccess(String systemcode,String systemname,String systemoid,String classifyoid,String classifyid,String classifyname,String id,String uniquecode,String paramString,String url,String msg){
-        String oid=redisService.getUUIDEveryDay();
-        DockingLogeDO dockingLogeDO = new DockingLogeDO();
-        dockingLogeDO.setOid(oid);
-        dockingLogeDO.setSystemcode(systemcode);
-        dockingLogeDO.setSystemname(systemname);
-        dockingLogeDO.setSystemoid(systemoid);
-        dockingLogeDO.setClassifyoid(classifyoid);
-        dockingLogeDO.setClassifyid(classifyid);
-        dockingLogeDO.setClassifyname(classifyname);
-        dockingLogeDO.setId(id);
-        dockingLogeDO.setUniquecode(uniquecode);
-       /** if(paramString.length()>100){
-            paramString = paramString.substring(0,100);
-        }***/
-        dockingLogeDO.setParamstring(paramString);
-        dockingLogeDO.setType(DATA_LOGE_OUT);
-
-//        dockingLogeDO.setReturnstring(retString);
-        dockingLogeDO.setMsg(msg);
-        dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_TRUE);
-        BatchCBO insert = dockingLogeDaoI.insert(dockingLogeDO);
-        logger.info("闆嗘垚鎺ㄩ�佹暟鎹垚鍔�,systemcode:"+systemcode+",systemname:"+systemcode+",url:"+url+",param:"+paramString);
-        return insert;
-    }
-
-    /**
-     * 鎺ㄩ�佸け璐�,鎻掑叆dockingtask锛屽悓鏃惰褰昹oge
-     * @param systemcode
-     * @param systemname
-     * @param systemoid
-     * @param paramString
-     * @param url
-     */
-    public BatchCBO taskFail(String systemcode,String systemname,String systemoid,String classifyoid,String classifyid,String classifyname,String id,String uniquecode,String paramString,String url,String msg){
-        String oid=redisService.getUUIDEveryDay();
-        DockingLogeDO dockingLogeDO = new DockingLogeDO();
-        dockingLogeDO.setOid(oid);
-        dockingLogeDO.setSystemcode(systemcode);
-        dockingLogeDO.setSystemname(systemname);
-        dockingLogeDO.setSystemoid(systemoid);
-        dockingLogeDO.setClassifyoid(classifyoid);
-        dockingLogeDO.setClassifyid(classifyid);
-        dockingLogeDO.setClassifyname(classifyname);
-        dockingLogeDO.setId(id);
-        dockingLogeDO.setUniquecode(uniquecode);
-       /** if(StringUtils.isNotEmpty(paramString)&&paramString.length()>100){
-            paramString = paramString.substring(0,100);
-        }***/
-        dockingLogeDO.setParamstring(paramString);
-        dockingLogeDO.setType(DATA_LOGE_OUT);
-
-        dockingLogeDO.setMsg(msg);
-        dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_FALSE);
-        BatchCBO insert = dockingLogeDaoI.insert(dockingLogeDO);
-
-        logger.error("闆嗘垚鎺ㄩ�佹暟鎹け璐�,systemcode:"+systemcode+",systemname:"+systemcode+",url:"+url+",param:"+paramString+",e:"+msg);
-        return insert;
-    }
-    public void initSysadmin(){
-        SessionInfo sessionInfo = new SessionInfo();
-        sessionInfo.setUserId("sysAdmin");
-        sessionInfo.setUserName("绯荤粺绠$悊鍛�");
-        sessionInfo.setIp(WebUtil.getLocalIp());
-        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
-        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
-        WebUtil.setSessionInfo(sessionInfo);
-    }
-
-    /**
-     * dockingdata鏌ヨ闇�瑕佹帹閫佺殑鏁版嵁
-     * @return
-     */
-    public List<Map> getDockingDatas(){
-        String sql = "select oid,id,classifyoid,btmid,btmoid,sendtype,classifyid,classifyname from PLATFORMBTM_codedockingDATA where sendflag = 'false'";
-        List<Map> datas = boService.queryBySqlForMap(sql,null);
-        return datas;
-    }
-
-    /**
-     * dockingdata鍒犻櫎
-     * @return
-     */
-    public boolean delteDockingData(String oid){
-        boolean u = false;
-        String sql = "delete from PLATFORMBTM_codedockingDATA where oid = '"+oid+"'";
-        try {
-            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
-        }catch (Exception e){
-
-        }
-        return u;
-    }
-
-    /**
-     * 鏌ヨ鍥惧彿
-     * @return
-     */
-    public String getTuhao(String oid){
-        String tuhao = "";
-        String sql = "select tuhao from PLATFORMBTM_wupin where oid = '"+oid+"'";
-        List<Map> datas = boService.queryBySqlForMap(sql,null);
-        if(datas!=null&&datas.size()!=0){
-            tuhao = datas.get(0).getOrDefault("tuhao","").toString();
-        }
-        return tuhao;
-    }
-
-    @Autowired
-    private PlatformClientUtil platformClientUtil;
-    /**
-     * dockingdata鏍规嵁oid淇敼sendflag
-     * @param oid
-     * @param sendflag
-     * @return
-     */
-    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
-        boolean u=false;
-        String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
-        try {
-            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
-        }catch (Exception e){
-
-        }
-        return u;
-    }
-
-    public boolean updateDockingDatasUniqueCode(String oid,String uniquecode){
-        boolean u=false;
-        String sql = "update PLATFORMBTM_codedockingdata set uniquecode = '"+uniquecode+"' where oid='"+oid+"'";
-        try {
-            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
-        }catch (Exception e){
-
-        }
-        return u;
-    }
-
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java
deleted file mode 100644
index b1f3a19..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java
+++ /dev/null
@@ -1,636 +0,0 @@
-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.enumpck.UserSecretEnum;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.SessionInfo;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.redis.RedisService;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.PlatformClientUtil;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.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;
-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 org.springblade.code.constant.MdmDuckingConstant.*;
-
-
-/**
- * 涓婚搴撻泦鎴愭湇鍔�
- * @author wangyi
- * @date 2022-03-20
- */
-@Service
-public class CodeDuckingSyncServiceImpl implements CodeDuckingSyncServiceI {
-
-    /**
-     * 鏃ュ織
-     */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
-     */
-    @Resource
-    private DockingTaskDaoI dockingTaskDaoI;
-
-    /**
-     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
-     */
-    @Resource
-    private DockingDataDaoI dockingDataDaoI;
-
-    /**
-     * 闆嗘垚鏃ュ織鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private DockingLogeDaoI dockingLogeDaoI;
-
-    /**
-     * 妯℃澘灞炴�ф暟鎹搷浣滃眰
-     */
-    @Resource
-    private CodeClassifyDaoI codeClassifyDaoI;
-
-    /**
-     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-     */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-     * 缂撳瓨鏈嶅姟
-     */
-    @Autowired
-    private RedisService redisService;
-
-    /**
-     * 鏁版嵁鏈嶅姟
-     */
-    @Autowired(required = false)
-    @Lazy
-    private MdmEngineServiceI mdmEngineServiceI;
-
-
-    /**
-     * 瑕佹帹閫佺郴缁熺殑鏈嶅姟
-     */
-    @Autowired
-    private SysIntInfoServiceI sysIntInfoServiceI;
-
-    @Value("${dataSyncPush.dataParamName:xmlData}")
-    public String DATA_PARAM_NAME;
-
-    /**
-     * 瀹氭椂浠诲姟鎺ㄩ��
-     */
-    @Override
-    public void DockingDataSyncScheduing(){
-       // insertCache2();
-        initPushDataTaks(1);
-        sendpushDataForService();
-    }
-
-    /**
-     * 鍒嗙被瀹氭椂浠诲姟鎺ㄩ��
-     */
-    @Override
-    public void DockingClassSyncScheduing(){
-        initPushDataTaks(2);//鍒嗙被鎺ㄩ��
-        sendpushClsfForService();
-    }
-
-    /**
-     * 鎵嬪姩鎺ㄩ�佷负瀹屾垚鐨勬暟鎹�
-     * @param oids
-     * @return
-     */
-    @Override
-    public BaseResult sendData(String oids) {
-        VciBaseUtil.alertNotNull(oids,"绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄",oids,"绯荤粺闆嗘垚鍩虹淇℃伅鐨勪富閿�");
-        List<String> dockingTaskOidList=new ArrayList<>();
-        dockingTaskOidList= VciBaseUtil.str2List(oids);
-        List<DockingTaskDO> newDockingTaskDOs= this.dockingTaskDaoI.selectByPrimaryKeyCollection(dockingTaskOidList);
-        Map<String,List<DockingTaskDO>> typeDockingTaskDOMap=new HashMap<>();
-        newDockingTaskDOs.stream().forEach(newDockingTaskDO->{
-           String btmId=newDockingTaskDO.getBtmid();
-           if(btmId.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
-               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
-               if(CollectionUtils.isEmpty(dockingTaskDOList)){
-                   dockingTaskDOList=new ArrayList<>();
-               }
-               dockingTaskDOList.add(newDockingTaskDO);
-               typeDockingTaskDOMap.put(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT),dockingTaskDOList);
-           }else{
-               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get("data");
-               if(CollectionUtils.isEmpty(dockingTaskDOList)){
-                   dockingTaskDOList=new ArrayList<>();
-               }
-               dockingTaskDOList.add(newDockingTaskDO);
-               typeDockingTaskDOMap.put("data",dockingTaskDOList);
-           }
-        });
-        typeDockingTaskDOMap.keySet().forEach(type->{
-           List<DockingTaskDO> DockingTaskDO=typeDockingTaskDOMap.get(type);
-           if(!CollectionUtils.isEmpty(DockingTaskDO)){
-               if(type.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
-                   this.sendpushClsfForService(DockingTaskDO);
-               }else{
-                   this.sendpushDataForService(DockingTaskDO);
-               }
-           }
-        });
-       return  BaseResult.successMsg("鎵嬪姩鎺ㄩ�佸畬鎴�,璇锋牳瀵规槸鍚︽帹閫佹垚鍔�");
-    }
-    /***
-     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
-     * @param type
-     */
-    private void initPushDataTaks(int type){
-        initSysadmin();
-        //sysintinfo鏌ヨ瑕佹帹閫佺殑涓婚搴撳拰鐩稿叧绯荤粺淇℃伅
-        Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("usedflag","true");
-        conditionMap.put("pushType",type==2?"2":"1") ;//2鏄唬琛ㄥ垎绫绘帹閫侊紝1鏄唬琛ㄦ暟鎹帹閫�
-
-        List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
-        if(CollectionUtils.isEmpty(sysIntInfoVOList)){
-            String title=type==2?"鍒嗙被鎺ㄩ��":"鏁版嵁鎺ㄩ��";
-            logger.info("info->鎵�鏈夐泦鎴愮郴缁燂紝鏈煡璇㈠埌鐩稿叧鐨勩��"+title+"銆戠殑鎺ュ彛閰嶇疆淇℃伅锛岄厤缃�");
-            return;
-        }
-        Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//key=classifyoid,value=list<map>
-        for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
-            List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
-            if(SysIntInfoVOListi==null){
-                SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
-            }
-            SysIntInfoVOListi.add(sysIntInfoVOi);
-            sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
-        }
-        //鏍规嵁绫诲瀷鍘绘煡璇㈤渶瑕侀泦鎴愮殑鍒嗙被鎴栬�呮暟鎹�
-        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
-        queryWrapperForDO.addQueryMap("sendflag","false");
-        if(type==2){
-            queryWrapperForDO.addQueryMap("btmTypeId",DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
-        }else {
-            queryWrapperForDO.addQueryMap("btmTypeId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT)) + ")");
-        }
-        List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
-
-        for (DockingDataDO mapi:dataList){
-            WebUtil.setPersistence(false);
-            BatchCBO batchCBO = new BatchCBO();
-            String dataoid = mapi.getOid();//data瀵硅薄鐨刼id
-            String classifyoid = mapi.getClassifyoid();
-            String id = mapi.getId();
-            String uniquecode = mapi.getUniquecode();
-            String btmid = mapi.getBtmid();
-            String btmoid = mapi.getBtmoid();
-            String sendtype = mapi.getSendtype();
-            String classifyid = mapi.getClassifyid();
-            String classifyname = mapi.getClassifyname();
-            String curentClassOid=null;
-            if(type==2){
-                curentClassOid=btmoid;
-            }else{
-                curentClassOid=classifyoid;
-            }
-            List<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
-           //鏍规嵁褰撳墠鏁版嵁鐨刬d锛屾煡璇㈣幏鍙栧摢浜涚郴缁熼渶瑕佸仛闆嗘垚
-            List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(curentClassOid);
-            if(CollectionUtils.isEmpty(parentLeveDO)){
-                continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
-            }
-            Map<String, CodeClassifyDO> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
-
-            oidCodeclassifyDOMap.keySet().forEach(oid->{
-                if(sysIntInfoDOMap.containsKey(oid)){
-                    List<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
-                    effectiveSysIntInfoVOs.addAll(sysIntInfoDOS);
-                }
-            });
-            //濡傛灉鏍¢獙鐨勭郴缁熸帴鍙d俊鎭笉瀛樺湪锛屽垯鏁版嵁涓嶄笉寰�淇℃伅閲屾帹閫�
-            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
-                continue;
-            }
-            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
-            for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
-                DockingTaskDO dockingTaskDO = new DockingTaskDO();
-                dockingTaskDO.setOid(redisService.getUUIDEveryDay());
-                dockingTaskDO.setSendflag(SEND_FLAG_FALSE);
-                dockingTaskDO.setId(id);//缂栫爜
-                dockingTaskDO.setUniquecode(uniquecode);
-                dockingTaskDO.setBtmoid(btmoid);//鏁版嵁oid
-                dockingTaskDO.setBtmid(btmid);//鏁版嵁涓氬姟绫诲瀷id
-                dockingTaskDO.setClassifyid(classifyid);//鏁版嵁鍦ㄥ垎绫籭d
-                dockingTaskDO.setClassifyoid(classifyoid);//鏁版嵁鎵�鍦ㄥ垎绫籵id
-                dockingTaskDO.setClassifyname(classifyname);//鏁版嵁鎵�鍦ㄥ垎绫诲悕绉�
-                dockingTaskDO.setSendtype(sendtype);//鏁版嵁鎺ㄩ�佺被鍨�
-                dockingTaskDO.setDataoid(dataoid);
-
-                //intinfo
-                dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo鐨刼id
-                dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//绯荤粺oid
-                dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//绯荤粺缂栫爜
-                dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//绯荤粺name
-                dockingTaskDO_insert.add(dockingTaskDO);
-            }
-
-            BatchCBO bi = null;
-            if(dockingTaskDO_insert.size()!=0) {
-                bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
-                batchCBO.copyFromOther(bi);
-            }
-            WebUtil.setPersistence(true);
-            boService.persistenceBatch(batchCBO);
-            //dockingTaskDaoI.updateByPrimaryKey鏂规硶鎶ラ敊浜嗭紝鎵�浠ユ墜鍐欎簡杩欎釜
-            boolean u = updateDockingDatasSendFlag(dataoid,SEND_FLAG_TRUE);
-            if(!u){
-                logger.error("闆嗘垚data鍒嗚В浠诲姟澶辫触锛乨ataoid:"+dataoid);
-                continue;
-            }
-
-        }
-    }
-    private void sendpushDataForService (){
-        initSysadmin();
-        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
-        queryWrapper.addQueryMap("sendFlag", MdmDuckingConstant.SEND_FLAG_FALSE);
-        queryWrapper.addQueryMap("btmId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT)) + ")");
-        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
-        sendpushDataForService(dockingTaskDOS);
-    }
-    /***
-     * 鍙戦�佺紪鐮佷富鏁版嵁
-     */
-    private void sendpushDataForService (List<DockingTaskDO> dockingTaskDOS){
-
-        //姣忎釜task渚濇鎵ц鎺ㄩ��
-        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
-            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
-            WebUtil.setPersistence(false);
-            BatchCBO batchCBO = new BatchCBO();
-            String paramString="";
-            String sendString="";
-            String backString="";
-            try {
-                //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
-                String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
-                String classifyoid = dockingTaskDO.getClassifyoid();
-                //鏌ヨ瑕佹帹閫佺殑鏁版嵁
-                String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁btmid
-                //琛ㄧず鏄富鏁版嵁
-                CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
-                BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
-                List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
-                Map<String/**鑻辨枃鍚嶇О**/, String/**涓枃鍚嶇О**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
-                Map<String, String> data = new HashMap<>();
-                if (baseResult == null) {
-                    JSONObject josni = redisService.getCacheObject(DOCKING_CACHE2_DELETE + btmoid);
-                    data = (Map) josni;
-                } else {
-                    data = baseResult.getObj();
-                }
-                List<NodeProDTO> nodeProDTOS = new ArrayList<>();
-                Map<String, String> finalData = data;
-                attrIdNameMap.keySet().forEach(field -> {
-                    String outName = attrIdNameMap.get(field);
-                    if (finalData.containsKey(field)) {
-                        String Value = finalData.get(field);
-                        NodeProDTO nodeProDTO = new NodeProDTO();
-                        nodeProDTO.setFiledName(field);
-                        nodeProDTO.setOutname(outName);
-                        nodeProDTO.setFiledValue(Value);
-                        nodeProDTOS.add(nodeProDTO);
-                    }
-                });
-
-                String[] classCodeLeves = dockingTaskDO.getClassifyid().split(",");
-                NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
-                NodedataDTO nodeDataDTO = new NodedataDTO();
-                NodeObjectDTO nodeObjectDTO = new NodeObjectDTO();
-                nodeObjectDTO.setCode(dockingTaskDO.getId());//璁剧疆缂栫爜
-                nodeObjectDTO.setClassCode(classCodeLeves[0]);
-                nodeObjectDTO.setStatus(data.get("lcstatus"));
-                nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]);
-                nodeObjectDTO.setPro(nodeProDTOS);
-                List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
-                nodeObjectDTOS.add(nodeObjectDTO);
-                nodeDataDTO.setObject(nodeObjectDTOS);
-                nodeJosnDTO.setData(nodeDataDTO);
-                //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
-                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
-                String paramType = sysIntInfoVO.getParamtype();//xml/json
-                if (paramType.equals(DATATYPE_JSON)) {
-                    Object object = JSONObject.toJSON(nodeJosnDTO);
-                    sendString = object.toString();
-                } else {
-                    //缁勭粐杩斿洖鎺ュ彛淇℃伅
-                    XStream xStream = new XStream(new DomDriver());
-                    xStream.processAnnotations(NodedataDTO.class);
-                    xStream.autodetectAnnotations(true);
-                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
-                }
-                //璋冪敤鎺ュ彛
-                callInterface(sendString,sysIntInfoVO, dockingTaskDO, batchCBO);
-            }catch (Throwable e){
-                e.printStackTrace();
-            }finally {
-                //姣忎竴涓猼ask涓�涓簨鐗�
-                WebUtil.setPersistence(true);
-                boService.persistenceBatch(batchCBO);
-            }
-        }
-    }
-    public void sendpushClsfForService(){
-        initSysadmin();
-        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
-        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
-        queryWrapper.addQueryMap("btmId",DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT));
-        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
-        sendpushClsfForService(dockingTaskDOS);
-    }
-    /***
-     * 鍙戦�佸垎绫绘暟鎹�
-     */
-    private void sendpushClsfForService(List<DockingTaskDO> dockingTaskDOS){
-        //姣忎釜task渚濇鎵ц鎺ㄩ��
-        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
-            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
-            WebUtil.setPersistence(false);
-            BatchCBO batchCBO = new BatchCBO();
-            String paramString="";
-            String sendString="";
-            String backString="";
-            //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
-            String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
-            try {
-                //鏌ヨ瑕佹帹閫佺殑鏁版嵁
-                String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁btmid
-                JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO();
-                CodeClassifyDO codeClassifyDO=codeClassifyDaoI.selectByPrimaryKey(btmoid);
-                List<NodeClassifyDTO>nodeClassifyDTOList=new ArrayList<>();
-                NodeClassifyDTO nodeClassifyDTO=new NodeClassifyDTO();
-                nodeClassifyDTO.setClassCode(codeClassifyDO.getId());//鍒嗙被浠e彿
-                nodeClassifyDTO.setDescription(codeClassifyDO.getDescription());//鍒嗙被鎻忚堪
-                nodeClassifyDTO.setFullPathName(codeClassifyDO.getPath());//鍏ㄨ矾寰�
-                nodeClassifyDTO.setLcStatus(codeClassifyDO.getLcStatus());//鐘舵��
-              //  CodeClassifyDO parentClassDo=codeClassifyDaoI.selectByPrimaryKey(codeClassifyDO.getParentCodeClassifyOid());
-                nodeClassifyDTO.setPid(codeClassifyDO.getId());//鐖秈d鑺傜偣
-                nodeClassifyDTO.setId(codeClassifyDO.getOid());//鍒嗙被oid
-                nodeClassifyDTO.setName(codeClassifyDO.getName());//鍒嗙被鍚嶇О
-                nodeClassifyDTOList.add(nodeClassifyDTO);
-                NodeLibraryDTO nodeLibraryDTO=new NodeLibraryDTO();
-                nodeLibraryDTO.setClassify(nodeClassifyDTOList);
-                CodeClassifyDO rootClassify=codeClassifyDaoI.getRootClassify(btmoid);
-                nodeLibraryDTO.setId(rootClassify.getOid());
-                nodeLibraryDTO.setName(rootClassify.getName());
-                NodeDataDTO nodeDataDTO=new NodeDataDTO();
-                nodeDataDTO.setLibrary(nodeLibraryDTO);
-                jsonRootDataDTO.setData(nodeDataDTO);
-
-                //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
-                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
-                String paramType = sysIntInfoVO.getParamtype();//xml/json
-                if(paramType.equals(DATATYPE_JSON)){
-                    Object object = JSONObject.toJSON(jsonRootDataDTO);
-                    sendString = object.toString();
-                }else{
-                    //缁勭粐杩斿洖鎺ュ彛淇℃伅
-                    XStream xStream = new XStream(new DomDriver());
-                    xStream.processAnnotations(NodeDataDTO.class);
-                    xStream.autodetectAnnotations(true);
-                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
-                }
-                //璋冪敤鎺ュ彛
-                callInterface(sendString,sysIntInfoVO,dockingTaskDO,batchCBO);
-            }catch (Throwable e){
-                e.printStackTrace();
-            }finally {
-                //姣忎竴涓猼ask涓�涓簨鐗�
-                WebUtil.setPersistence(true);
-                boService.persistenceBatch(batchCBO);
-            }
-        }
-    }
-
-    /***
-     * 璋冪敤鎺ュ彛
-     * @param sysIntInfoVO
-     * @throws Throwable
-     */
-    private void callInterface(String  sendString , SysIntInfoVO sysIntInfoVO,DockingTaskDO dockingTaskDO,BatchCBO batchCBO) throws  Throwable{
-        String paramString = "";
-
-        String backString = "";
-        String msg="";
-        String url = sysIntInfoVO.getRequesturl();//url
-        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
-        try {
-
-            String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
-            String paramType = sysIntInfoVO.getParamtype();//xml/json
-            String returnType = sysIntInfoVO.getReturntype();//xml/json
-            String requestmethod= sysIntInfoVO.getRequestmethod();
-            String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//涓昏鏄痺ebservice鐨勬柟娉曞悕
-            String namespace = sysIntInfoVO.getNamespace();//namespace
-            String soapaction = sysIntInfoVO.getSoapaction();//soapaction
-            String targName = sysIntInfoVO.getTargName();//targName
-            String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice鏄痗xf/axis
-            //鏌ヨparam
-            List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(sysIntInfoVO.getOid());
-            //鏌ヨheader
-            List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(sysIntInfoVO.getOid());
-            if(type.equals(URLTYPE_HTTP)) {
-                if (requestmethod.equals(URLTYPE_GET)) {//GET璇锋眰
-                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
-                    //鎷兼帴param
-                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
-                        sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
-                    }
-                    paramString = sendurl;
-                    backString = HttpUtils.get(sendurl);
-                } else if (requestmethod.equals(URLTYPE_POST)) {//POST璇锋眰
-                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
-                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
-                    }
-                    params.add(DATA_PARAM_NAME,sendString);
-                    paramString = params.toString();
-                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
-                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
-                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
-                    }
-                    backString = HttpUtils.post(url, params, headers);
-                }
-                if(backString.startsWith("\"")){
-                    backString=backString.substring(backString.indexOf("\"")+1);
-                }
-                if(backString.endsWith("\"")){
-                    backString=backString.substring(0,backString.lastIndexOf("\""));
-                }
-                if(backString.contains("\n")){
-                    String res="\n";
-                    backString=  backString.replaceAll(res,"");
-                }
-                if(backString.contains("\\")){
-                    String res="\\\\\"";
-                    backString=  backString.replaceAll(res,"\"").trim();
-                }
-            }else if (type.equals(URLTYPE_WEBSERVICE)) {//webserver璇锋眰
-                MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-                for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
-                    params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
-                }
-                paramString = sendString;
-                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
-                for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
-                    headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
-                }
-                backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000);
-
-            } else {//corba鎺ュ彛
-                //paramString=sendString;
-                //  backString = jacorbClient.getBOFactoryService().sendCode(sendString);
-            }
-
-            ResultJsonDTO resultJsonDTO = new ResultJsonDTO();
-            if(returnType.equals(DATATYPE_JSON)){
-                resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class);
-            }else {
-                //缁勭粐杩斿洖鎺ュ彛淇℃伅
-                XStream xStream = new XStream(new DomDriver());
-                xStream.processAnnotations(ResultNodeDataDTO.class);
-                xStream.autodetectAnnotations(true);
-                ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString);
-                resultJsonDTO.setData(resultNodeDataDTO);
-            }
-            ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
-            resultNodeObjectDTOS=resultNodeDataDTO.getObject();
-
-        }catch (Throwable e){
-            msg="璋冪敤鎺ュ彛澶辫触:"+e;
-            e.printStackTrace();
-         //   throw  new Throwable("璋冪敤鎺ュ彛澶辫触:"+e);
-            ResultNodeObjectDTO   resultNodeObjectDTO=new ResultNodeObjectDTO();
-            resultNodeObjectDTO.setErroid("1");
-            resultNodeObjectDTO.setMsg(msg);
-            resultNodeObjectDTO.setCode(sysIntInfoVO.getPushType().equalsIgnoreCase("2")?dockingTaskDO.getClassifyid():dockingTaskDO.getId());
-            resultNodeObjectDTO.setOid(dockingTaskDO.getBtmoid());
-            resultNodeObjectDTOS.add(resultNodeObjectDTO);
-        }finally {
-            boolean isSend = false;
-            for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){
-                String erroid = resultNodeObjectDTO.getErroid();
-                msg = resultNodeObjectDTO.getMsg();
-                if("0".equals(erroid)){
-                    isSend = true;
-                }else if("1".equals(erroid)){
-                    isSend=false;
-                }else{
-                    isSend=false;
-                }
-                DockingLogeDO dockingLogeDO = new DockingLogeDO();
-                String oid=redisService.getUUIDEveryDay();
-                dockingLogeDO.setOid(oid);
-                dockingLogeDO.setSystemcode(dockingTaskDO.getSystemcode());
-                dockingLogeDO.setSystemname(dockingTaskDO.getSystemname());
-                dockingLogeDO.setSystemoid(dockingTaskDO.getSystemoid());
-                dockingLogeDO.setClassifyoid(dockingTaskDO.getClassifyoid());
-                dockingLogeDO.setClassifyid(dockingTaskDO.getClassifyid());
-                dockingLogeDO.setClassifyname(dockingTaskDO.getClassifyname());
-                dockingLogeDO.setId(dockingTaskDO.getId());
-                dockingLogeDO.setUniquecode(dockingTaskDO.getUniquecode());
-                dockingLogeDO.setParamstring(paramString);
-                dockingLogeDO.setReturnstring(backString);
-                dockingLogeDO.setInterfacestatus(isSend?"true":"false");
-                dockingLogeDO.setType(DATA_LOGE_OUT);
-                dockingLogeDO.setMsg(msg);
-                logger.error("闆嗘垚鎺ㄩ�佹暟鎹�,systemcode:"+dockingTaskDO.getSystemcode()+",systemname:"+dockingTaskDO.getSystemname()+",url:"+url+",param:"+paramString+",e:"+msg);
-                BatchCBO dockingLogeDOBo = dockingLogeDaoI.insert(dockingLogeDO);
-                batchCBO.copyFromOther(dockingLogeDOBo);
-            }
-            //鍏ㄩ兘鎺ユ敹鎴愬姛鐨勬儏鍐典笅,淇敼dockingtask sendflag涓哄凡鍙戦��
-            if(isSend) {
-                dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
-                BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
-                batchCBO.copyFromOther(updateTask);
-            }
-        }
-    }
-    public void initSysadmin(){
-        SessionInfo sessionInfo = new SessionInfo();
-        sessionInfo.setUserId("sysAdmin");
-        sessionInfo.setUserName("绯荤粺绠$悊鍛�");
-        sessionInfo.setIp(WebUtil.getLocalIp());
-        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
-        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
-        WebUtil.setSessionInfo(sessionInfo);
-    }
-
-    @Autowired
-    private PlatformClientUtil platformClientUtil;
-    /**
-     * dockingdata鏍规嵁oid淇敼sendflag
-     * @param oid
-     * @param sendflag
-     * @return
-     */
-    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
-        boolean u=false;
-        String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
-        try {
-            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
-        }catch (Exception e){
-
-        }
-        return u;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java
deleted file mode 100644
index d2bb07b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java
+++ /dev/null
@@ -1,375 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeFixedValueServiceImpl implements CodeFixedValueServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeFixedValueDaoI codeFixedValueMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeFixedValueVO> gridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultAsc("ordernum");
-        if(conditionMap == null){
-            conditionMap = new HashMap<>();
-        }
-        String secOid = conditionMap.getOrDefault("codefixedsecoid", "");
-        if(StringUtils.isBlank(secOid)){
-            return new DataGrid<>();
-        }
-        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeFixedValueVO> dataGrid=new DataGrid<CodeFixedValueVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeFixedValueDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeFixedValueMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeFixedValueDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeFixedValueVO> codeFixedValueDO2VOs(Collection<CodeFixedValueDO>  codeFixedValueDOs) throws VciBaseException{
-        List<CodeFixedValueVO> voList = new ArrayList<CodeFixedValueVO>();
-        if(!CollectionUtils.isEmpty(codeFixedValueDOs)){
-           for(CodeFixedValueDO s: codeFixedValueDOs){
-                CodeFixedValueVO vo =  codeFixedValueDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeFixedValueDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeFixedValueVO codeFixedValueDO2VO(CodeFixedValueDO codeFixedValueDO) throws VciBaseException{
-              CodeFixedValueVO vo = new CodeFixedValueVO();
-        if(codeFixedValueDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeFixedValueVO addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeFixedValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeFixedValueDO codeFixedValueDO = new CodeFixedValueDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDTO,codeFixedValueDO);
-        codeFixedValueMapper.insert(codeFixedValueDO);
-        return codeFixedValueDO2VO(codeFixedValueDO);
-    }
-
-    /**
-     * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeFixedValueVO editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeFixedValueDTO,"鏁版嵁瀵硅薄",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊间富閿�");
-         //灏咲TO杞崲涓篋O
-         CodeFixedValueDO codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeFixedValueDTO,codeFixedValueDO);
-         codeFixedValueMapper.updateByPrimaryKey(codeFixedValueDO);
-         return codeFixedValueDO2VO(codeFixedValueDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeFixedValueDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeFixedValueDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeFixedValueDTO codeFixedValueDTO, CodeFixedValueDO codeFixedValueDO) {
-        //boService.checkTs(codeFixedValueDTO);
-        if(!checkIsLinked(codeFixedValueDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
-     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeFixedValue(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeFixedValueDTO,"鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊肩殑涓婚敭");
-        CodeFixedValueDO codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeFixedValueDTO,codeFixedValueDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeFixedValueMapper.deleteByPrimaryKey(codeFixedValueDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
-    * @param oid 涓婚敭
-    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeFixedValueVO getObjectByOid(String oid) throws VciBaseException{
-        return codeFixedValueDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeFixedValueDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeFixedValueDO codeFixedValueDO = codeFixedValueMapper.selectByPrimaryKey(oid.trim());
-        if(codeFixedValueDO == null || StringUtils.isBlank(codeFixedValueDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeFixedValueDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeFixedValueVO> listCodeFixedValueByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeFixedValueDO> codeFixedValueDOList = listCodeFixedValueDOByOidCollections(oidCollections);
-        return codeFixedValueDO2VOs(codeFixedValueDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeFixedValueDO> listCodeFixedValueDOByOidCollections(Collection<String> oidCollections){
-        List<CodeFixedValueDO> codeFixedValueDOList = new ArrayList<CodeFixedValueDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeFixedValueDO> tempDOList =  codeFixedValueMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeFixedValueDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeFixedValueDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeFixedValue(conditionMap,pageHelper);
-    }
-
-    /**
-     * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
-     *
-     * @param secOidCollection 鐮佹鐨勪富閿�
-     * @return 鐮佸�兼樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭鐜颁簡閿欒浼氭姏鍑哄紓甯�
-     */
-    @Override
-    public Map<String, List<CodeFixedValueVO>> listCodeFixedValueBySecOids(Collection<String> secOidCollection) throws VciBaseException {
-        if(CollectionUtils.isEmpty(secOidCollection)){
-            return  new HashMap<>();
-        }
-        List<CodeFixedValueVO> voList = new ArrayList<>();
-        VciBaseUtil.switchCollectionForOracleIn(secOidCollection).forEach(secOids->{
-            Map<String,String> conditionMap = new HashMap<>();
-            conditionMap.put("codefixedsecoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(secOids.toArray(new String[0])) + ")");
-            PageHelper pageHelper = new PageHelper(-1);
-            pageHelper.addDefaultAsc("ordernum");
-            List<CodeFixedValueDO> valueDOS = codeFixedValueMapper.selectByCondition(conditionMap, pageHelper);
-            voList.addAll(codeFixedValueDO2VOs(Optional.ofNullable(valueDOS).orElseGet(() -> new ArrayList<>())));
-        });
-        return voList.stream().collect(Collectors.groupingBy(CodeFixedValueVO::getCodefixedsecoid));
-    }
-
-    /**
-     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
-     * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
-     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid) {
-        VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codefixedsecoid",codefixedsecoid);
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeFixedValueDO.class);
-        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByWrapper(wrapper);
-        List<CodeFixedValueDO> updateList = new ArrayList<>();
-        List<String> deleteOidList = new ArrayList<>();
-        dtoList.forEach(dto -> {
-            if (StringUtils.isNotBlank(dto.getOid())){
-                List<CodeFixedValueDO> valueDOList = doList.stream().filter(value -> {
-                    return value.getOid().equals(dto.getOid());
-                }).collect(Collectors.toList());
-                valueDOList.forEach(valueDO -> {
-                    valueDO.setId(dto.getId());
-                    valueDO.setName(dto.getName());
-                    valueDO.setOrderNum(dto.getOrdernum());
-                    updateList.add(valueDO);
-                });
-            }else{
-                throw new VciBaseException("鍥哄畾鐮佹涓婚敭涓嶈兘涓虹┖");
-            }
-        });
-        if (doList.size() != dtoList.size()){
-            List<String> oidList = dtoList.stream().map(CodeFixedValueDTO::getOid).collect(Collectors.toList());
-            List<CodeFixedValueDO> deleteList = new ArrayList<>();
-            for (CodeFixedValueDO value : doList) {
-                if (!oidList.contains(value.getOid())){
-                    deleteList.add(value);
-                }
-            }
-            deleteOidList = deleteList.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toList());
-        }
-        WebUtil.setPersistence(false);
-        BatchCBO batchCBO = codeFixedValueMapper.batchUpdate(updateList);
-        if (!CollectionUtils.isEmpty(deleteOidList)) {
-            BatchCBO batchDeleteByOids = codeFixedValueMapper.batchDeleteByOids(deleteOidList);
-            batchCBO.setDeleteCbos(batchDeleteByOids.getDeleteCbos());
-        }
-        WebUtil.setPersistence(true);
-        boService.persistenceBatch(batchCBO);
-        return BaseResult.success();
-    }
-
-    /**
-     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
-     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult<CodeFixedValueVO> batchDeleteBySecOid(String codefixedsecoid) {
-        VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codefixedvalueoid",codefixedsecoid);
-        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeFixedValueDO.class);
-        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByWrapper(wrapper);
-        codeFixedValueMapper.batchDeleteByOids(doList.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toList()));
-        return BaseResult.success();
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java
deleted file mode 100644
index 0cad475..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java
+++ /dev/null
@@ -1,342 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.BeanUtil;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springblade.code.bo.CodeClassifyFullInfoBO;
-import org.springblade.code.dao.CodeKeyAttrRepeatRuleDaoI;
-import org.springblade.code.dto.CodeKeyAttrRepeatRuleDTO;
-import org.springblade.code.model.CodeKeyAttrRepeatRuleDO;
-import org.springblade.code.service.CodeKeyAttrRepeatRuleServiceI;
-import org.springblade.code.vo.pagemodel.CodeClassifyVO;
-import org.springblade.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏈嶅姟
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeKeyAttrRepeatRuleServiceImpl implements CodeKeyAttrRepeatRuleServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeKeyAttrRepeatRuleDaoI codeKeyAttrRepeatRuleMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeKeyAttrRepeatRuleDO> doList = codeKeyAttrRepeatRuleMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeKeyAttrRepeatRuleVO> dataGrid=new DataGrid<CodeKeyAttrRepeatRuleVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeKeyAttrRepeatRuleDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeKeyAttrRepeatRuleMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeKeyAttrRepeatRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeKeyAttrRepeatRuleVO> codeKeyAttrRepeatRuleDO2VOs(Collection<CodeKeyAttrRepeatRuleDO>  codeKeyAttrRepeatRuleDOs) throws VciBaseException{
-        List<CodeKeyAttrRepeatRuleVO> voList = new ArrayList<CodeKeyAttrRepeatRuleVO>();
-        if(!CollectionUtils.isEmpty(codeKeyAttrRepeatRuleDOs)){
-           for(CodeKeyAttrRepeatRuleDO s: codeKeyAttrRepeatRuleDOs){
-                CodeKeyAttrRepeatRuleVO vo =  codeKeyAttrRepeatRuleDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeKeyAttrRepeatRuleDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleDO2VO(CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) throws VciBaseException{
-              CodeKeyAttrRepeatRuleVO vo = new CodeKeyAttrRepeatRuleVO();
-        if(codeKeyAttrRepeatRuleDO != null) {
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeKeyAttrRepeatRuleDO, vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeKeyAttrRepeatRuleVO addSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = new CodeKeyAttrRepeatRuleDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
-        codeKeyAttrRepeatRuleMapper.insert(codeKeyAttrRepeatRuleDO);
-        return codeKeyAttrRepeatRuleDO2VO(codeKeyAttrRepeatRuleDO);
-    }
-
-    /**
-     * 淇敼鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeKeyAttrRepeatRuleVO editSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"鏁版嵁瀵硅薄",codeKeyAttrRepeatRuleDTO.getOid(),"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯涓婚敭");
-         //灏咲TO杞崲涓篋O
-         CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByOid(codeKeyAttrRepeatRuleDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
-         codeKeyAttrRepeatRuleMapper.updateByPrimaryKey(codeKeyAttrRepeatRuleDO);
-         return codeKeyAttrRepeatRuleDO2VO(codeKeyAttrRepeatRuleDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeKeyAttrRepeatRuleDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeKeyAttrRepeatRuleDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO, CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) {
-        CodeKeyAttrRepeatRuleDO repeatRuleDO = new CodeKeyAttrRepeatRuleDO();
-        BeanUtil.convert(codeKeyAttrRepeatRuleDTO,repeatRuleDO);
-        boService.checkTs(repeatRuleDO);
-        if(!checkIsLinked(codeKeyAttrRepeatRuleDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeKeyAttrRepeatRule(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄",codeKeyAttrRepeatRuleDTO.getOid(),"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鐨勪富閿�");
-        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByOid(codeKeyAttrRepeatRuleDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
-        if(baseResult.isSuccess()) {
-        }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeKeyAttrRepeatRuleMapper.deleteByPrimaryKey(codeKeyAttrRepeatRuleDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-    * @param oid 涓婚敭
-    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeKeyAttrRepeatRuleVO getObjectByOid(String oid) throws VciBaseException{
-        return codeKeyAttrRepeatRuleDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeKeyAttrRepeatRuleDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = codeKeyAttrRepeatRuleMapper.selectByPrimaryKey(oid.trim());
-        if(codeKeyAttrRepeatRuleDO == null || StringUtils.isBlank(codeKeyAttrRepeatRuleDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeKeyAttrRepeatRuleDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = listCodeKeyAttrRepeatRuleDOByOidCollections(oidCollections);
-        return codeKeyAttrRepeatRuleDO2VOs(codeKeyAttrRepeatRuleDOList);
-    }
-
-    /**
-     * 缂栧彿鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
-     *
-     * @param idCollections 缂栧彿闆嗗悎
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
-     */
-    @Override
-    public Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByIds(List<String> idCollections) {
-        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = listCodeKeyAttrRepeatRuleDOByIdCollections(idCollections);
-        return codeKeyAttrRepeatRuleDO2VOs(codeKeyAttrRepeatRuleDOList);
-    }
-
-    /**
-     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-     * @param idCollections 缂栧彿鐨勯泦鍚�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    private List<CodeKeyAttrRepeatRuleDO> listCodeKeyAttrRepeatRuleDOByIdCollections(Collection<String> idCollections){
-        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = new ArrayList<CodeKeyAttrRepeatRuleDO>();
-        if(!CollectionUtils.isEmpty(idCollections)){
-            Collection<Collection<String>> idCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
-            for(Collection<String> ids: idCollectionsList){
-                List<CodeKeyAttrRepeatRuleDO> tempDOList =  codeKeyAttrRepeatRuleMapper.selectByIdCollection(ids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                    codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeKeyAttrRepeatRuleDOList;
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeKeyAttrRepeatRuleDO> listCodeKeyAttrRepeatRuleDOByOidCollections(Collection<String> oidCollections){
-        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = new ArrayList<CodeKeyAttrRepeatRuleDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeKeyAttrRepeatRuleDO> tempDOList =  codeKeyAttrRepeatRuleMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeKeyAttrRepeatRuleDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeKeyAttrRepeatRule(conditionMap,pageHelper);
-    }
-
-    /**
-     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭潵鑾峰彇鍏抽敭灞炴�у垽鏂鍒欑殑鍐呭
-     *
-     * @param classifyFullInfo 涓婚搴撳垎绫荤殑鍏ㄩ儴淇℃伅
-     * @return 瑙勫垯鐨勬樉绀哄璞�
-     */
-    @Override
-    public CodeKeyAttrRepeatRuleVO getRuleByClassifyFullInfo(CodeClassifyFullInfoBO classifyFullInfo) {
-        VciBaseUtil.alertNotNull(classifyFullInfo,"涓婚搴撳垎绫荤殑淇℃伅");
-        String keyAttrRuleOid = classifyFullInfo.getCurrentClassifyVO().getCodekeyattrrepeatoid();
-        if(StringUtils.isBlank(keyAttrRuleOid)){
-            //鎴戜滑鏍规嵁涓婄骇鐨勫垎绫伙紝鎸夌収灞傜骇鍊掑簭鎺掑垪
-            if(!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())){
-                //鏈変笂绾у垎绫荤殑鎯呭喌涓嬫墠鍘绘煡璇�
-                List<CodeClassifyVO> sortedClassifyVO = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList());
-                for(int i = sortedClassifyVO.size() -1;i>=0;i--){
-                    CodeClassifyVO record = sortedClassifyVO.get(i);
-                    if(StringUtils.isNotBlank(record.getCodekeyattrrepeatoid())){
-                        keyAttrRuleOid = record.getCodekeyattrrepeatoid();
-                        break;
-                    }
-                }
-            }
-        }
-        if(StringUtils.isNotBlank(keyAttrRuleOid)){
-           return getObjectByOid(keyAttrRuleOid);
-        }
-        //鍏抽敭灞炴�х殑瑙勫垯鍙互涓虹┖锛屼负绌虹殑鏃跺�欏氨浠h〃涓嶆帶鍒讹紝
-        return null;
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java
deleted file mode 100644
index a3524ad..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java
+++ /dev/null
@@ -1,299 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.BeanUtil;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 闃舵鐨勫睘鎬ф湇鍔�
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodePhaseAttrServiceImpl implements CodePhaseAttrServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodePhaseAttrDaoI codePhaseAttrMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑闃舵鐨勫睘鎬�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodePhaseAttrDO> doList = codePhaseAttrMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodePhaseAttrVO> dataGrid=new DataGrid<CodePhaseAttrVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codePhaseAttrDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codePhaseAttrMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codePhaseAttrDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO>  codePhaseAttrDOs) throws VciBaseException{
-        List<CodePhaseAttrVO> voList = new ArrayList<CodePhaseAttrVO>();
-        if(!CollectionUtils.isEmpty(codePhaseAttrDOs)){
-           for(CodePhaseAttrDO s: codePhaseAttrDOs){
-                CodePhaseAttrVO vo =  codePhaseAttrDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codePhaseAttrDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodePhaseAttrVO codePhaseAttrDO2VO(CodePhaseAttrDO codePhaseAttrDO) throws VciBaseException{
-              CodePhaseAttrVO vo = new CodePhaseAttrVO();
-        if(codePhaseAttrDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codePhaseAttrDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodePhaseAttrVO addSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codePhaseAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodePhaseAttrDO codePhaseAttrDO = new CodePhaseAttrDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codePhaseAttrDTO,codePhaseAttrDO);
-        codePhaseAttrMapper.insert(codePhaseAttrDO);
-        return codePhaseAttrDO2VO(codePhaseAttrDO);
-    }
-
-    /**
-     * 淇敼闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodePhaseAttrVO editSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codePhaseAttrDTO,"鏁版嵁瀵硅薄",codePhaseAttrDTO.getOid(),"闃舵鐨勫睘鎬т富閿�");
-         //灏咲TO杞崲涓篋O
-         CodePhaseAttrDO codePhaseAttrDO = selectByOid(codePhaseAttrDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codePhaseAttrDTO,codePhaseAttrDO);
-         codePhaseAttrMapper.updateByPrimaryKey(codePhaseAttrDO);
-         return codePhaseAttrDO2VO(codePhaseAttrDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codePhaseAttrDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codePhaseAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodePhaseAttrDTO codePhaseAttrDTO, CodePhaseAttrDO codePhaseAttrDO) {
-        CodePhaseAttrDO tsDO = new CodePhaseAttrDO();
-        BeanUtil.convert(codePhaseAttrDTO,tsDO);
-        boService.checkTs(tsDO);
-        if(!checkIsLinked(codePhaseAttrDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎闃舵鐨勫睘鎬�
-     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodePhaseAttr(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codePhaseAttrDTO,"闃舵鐨勫睘鎬ф暟鎹璞�",codePhaseAttrDTO.getOid(),"闃舵鐨勫睘鎬х殑涓婚敭");
-        CodePhaseAttrDO codePhaseAttrDO = selectByOid(codePhaseAttrDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codePhaseAttrDTO,codePhaseAttrDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codePhaseAttrMapper.deleteByPrimaryKey(codePhaseAttrDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
-    * @param oid 涓婚敭
-    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodePhaseAttrVO getObjectByOid(String oid) throws VciBaseException{
-        return codePhaseAttrDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodePhaseAttrDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodePhaseAttrDO codePhaseAttrDO = codePhaseAttrMapper.selectByPrimaryKey(oid.trim());
-        if(codePhaseAttrDO == null || StringUtils.isBlank(codePhaseAttrDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codePhaseAttrDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodePhaseAttrVO> listCodePhaseAttrByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodePhaseAttrDO> codePhaseAttrDOList = listCodePhaseAttrDOByOidCollections(oidCollections);
-        return codePhaseAttrDO2VOs(codePhaseAttrDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodePhaseAttrDO> listCodePhaseAttrDOByOidCollections(Collection<String> oidCollections){
-        List<CodePhaseAttrDO> codePhaseAttrDOList = new ArrayList<CodePhaseAttrDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodePhaseAttrDO> tempDOList =  codePhaseAttrMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codePhaseAttrDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codePhaseAttrDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodePhaseAttr(conditionMap,pageHelper);
-    }
-
-    /**
-     * 浣跨敤妯℃澘涓婚敭鍜岄樁娈电紪鍙疯幏鍙栧寘鍚殑灞炴��
-     *
-     * @param templateOid 妯℃澘鐨勭紪鍙�
-     * @param phaseId     闃舵鐨勭紪鍙�
-     * @return 灞炴�х殑鑻辨枃鍚嶇О
-     */
-    @Override
-    public List<String> listAttrByTemplateOidAndPhaseId(String templateOid, String phaseId) {
-        if(StringUtils.isBlank(templateOid)|| StringUtils.isBlank(phaseId)){
-            return new ArrayList<>();
-        }
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(select oid from "+
-                VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE) +
-                " where codeClassifyTemplateOid ='" + templateOid + "' and lower(name) ='" + phaseId.trim().toLowerCase(Locale.ROOT) + "')");
-        PageHelper pageHelper = new PageHelper(-1);
-        List<CodePhaseAttrDO> attrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, pageHelper);
-        return CollectionUtils.isEmpty(attrDOS)?new ArrayList<>():attrDOS.stream().map(CodePhaseAttrDO::getId).collect(Collectors.toList());
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java
deleted file mode 100644
index d5d1042..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java
+++ /dev/null
@@ -1,277 +0,0 @@
-package org.springblade.code.service.impl;
-
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.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.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 鐩镐技鏌ヨ瑙勫垯鏈嶅姟
- * @author weidy
- * @date 2022-04-10
- */
-@Service
-public class CodeResembleRuleServiceImpl implements CodeResembleRuleServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeResembleRuleDaoI codeResembleRuleMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑鐩镐技鏌ヨ瑙勫垯
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeResembleRuleDO> doList = codeResembleRuleMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeResembleRuleVO> dataGrid=new DataGrid<CodeResembleRuleVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeResembleRuleDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeResembleRuleMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeResembleRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO>  codeResembleRuleDOs) throws VciBaseException{
-        List<CodeResembleRuleVO> voList = new ArrayList<CodeResembleRuleVO>();
-        if(!CollectionUtils.isEmpty(codeResembleRuleDOs)){
-           for(CodeResembleRuleDO s: codeResembleRuleDOs){
-                CodeResembleRuleVO vo =  codeResembleRuleDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRuleDO codeResembleRuleDO) throws VciBaseException{
-              CodeResembleRuleVO vo = new CodeResembleRuleVO();
-        if(codeResembleRuleDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-                         vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeResembleRuleDO codeResembleRuleDO = new CodeResembleRuleDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,codeResembleRuleDO);
-        codeResembleRuleMapper.insert(codeResembleRuleDO);
-        return codeResembleRuleDO2VO(codeResembleRuleDO);
-    }
-
-    /**
-     * 淇敼鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeResembleRuleDTO,"鏁版嵁瀵硅薄",codeResembleRuleDTO.getOid(),"鐩镐技鏌ヨ瑙勫垯涓婚敭");
-         //灏咲TO杞崲涓篋O
-         CodeResembleRuleDO codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeResembleRuleDTO,codeResembleRuleDO);
-         codeResembleRuleMapper.updateByPrimaryKey(codeResembleRuleDO);
-         return codeResembleRuleDO2VO(codeResembleRuleDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeResembleRuleDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeResembleRuleDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeResembleRuleDTO codeResembleRuleDTO, CodeResembleRuleDO codeResembleRuleDO) {
-            CodeResembleRuleDO tsDO = new CodeResembleRuleDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,tsDO);
-        boService.checkTs(tsDO);
-        if(!checkIsLinked(codeResembleRuleDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
-     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄",codeResembleRuleDTO.getOid(),"鐩镐技鏌ヨ瑙勫垯鐨勪富閿�");
-        CodeResembleRuleDO codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeResembleRuleDTO,codeResembleRuleDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeResembleRuleMapper.deleteByPrimaryKey(codeResembleRuleDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
-    * @param oid 涓婚敭
-    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeResembleRuleVO getObjectByOid(String oid) throws VciBaseException{
-        return codeResembleRuleDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeResembleRuleDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeResembleRuleDO codeResembleRuleDO = codeResembleRuleMapper.selectByPrimaryKey(oid.trim());
-        if(codeResembleRuleDO == null || StringUtils.isBlank(codeResembleRuleDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeResembleRuleDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeResembleRuleDO> codeResembleRuleDOList = listCodeResembleRuleDOByOidCollections(oidCollections);
-        return codeResembleRuleDO2VOs(codeResembleRuleDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeResembleRuleDO> listCodeResembleRuleDOByOidCollections(Collection<String> oidCollections){
-        List<CodeResembleRuleDO> codeResembleRuleDOList = new ArrayList<CodeResembleRuleDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeResembleRuleDO> tempDOList =  codeResembleRuleMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeResembleRuleDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeResembleRuleDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeResembleRule(conditionMap,pageHelper);
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java
deleted file mode 100644
index 443dd6a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java
+++ /dev/null
@@ -1,683 +0,0 @@
-package org.springblade.code.service.impl;
-
-
-import com.vci.corba.common.VCIError;
-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.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.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;
-import plm.bs.bom.clientobject.ClientBusinessObject;
-import plm.bs.bom.clientobject.ClientBusinessObjectOperation;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
-
-/**
- * 涓绘暟鎹紪鐮佽鍒欐湇鍔�
- *
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeRuleServiceImpl implements CodeRuleServiceI {
-
-    /**
-     * 鏃ュ織
-     */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-     * 鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private CodeRuleDaoI codeRuleMapper;
-
-    /**
-     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-     */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-     * 瀵硅薄鐨勬搷浣�
-     */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-    /**
-     * 涓婚搴撳垎绫绘暟鎹搷浣滃眰
-     */
-    @Autowired
-    private CodeClassifyServiceI codeClassifyService;
-
-    /**
-     * 鐮佹鍩虹淇℃伅鏈嶅姟
-     */
-    @Autowired
-    private CodeBasicSecServiceI codeBasicSecService;
-
-    /**
-     * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private CodeBasicSecDaoI codeBasicSecMapper;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹紪鐮佽鍒�
-     *
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper   鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeRuleVO> gridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeRuleDO> doList = codeRuleMapper.selectByCondition(conditionMap, pageHelper);
-        DataGrid<CodeRuleVO> dataGrid = new DataGrid<CodeRuleVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeRuleDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeRuleMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs) throws VciBaseException {
-        return codeRuleDO2VOs(codeRuleDOs, false);
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @param hasSec      鏄惁鍖呭惈鐮佹
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs, boolean hasSec) throws VciBaseException {
-        List<CodeRuleVO> voList = new ArrayList<CodeRuleVO>();
-        if (!CollectionUtils.isEmpty(codeRuleDOs)) {
-            for (CodeRuleDO s : codeRuleDOs) {
-                CodeRuleVO vo = codeRuleDO2VO(s);
-                if (vo != null) {
-                    voList.add(vo);
-                }
-            }
-            if (hasSec) {
-                List<CodeBasicSecVO> secVOList = codeBasicSecService.listCodeBasicSecByRuleOids(voList.stream().map(CodeRuleVO::getOid).collect(Collectors.toList()));
-                if (!CollectionUtils.isEmpty(secVOList)) {
-                    Map<String, List<CodeBasicSecVO>> secVOMap = secVOList.stream().collect(Collectors.groupingBy(CodeBasicSecVO::getPkCodeRule));
-                    voList.stream().forEach(vo -> {
-                        vo.setSecVOList(secVOMap.getOrDefault(vo.getOid(), new ArrayList<>()));
-                    });
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeRuleDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO) throws VciBaseException {
-        CodeRuleVO vo = new CodeRuleVO();
-        if (codeRuleDO != null) {
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDO, vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            vo.setLcStatusText(CodeRuleLC.getTextByValue(vo.getLcStatus()));
-
-        }
-        return vo;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     *
-     * @param codeRuleDO 瑙勫垯鐨勬暟鎹璞�
-     * @param hasSec     鏄惁鏌ヨ鐮佹
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    public CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO, boolean hasSec) throws VciBaseException {
-        CodeRuleVO vo = new CodeRuleVO();
-        if (codeRuleDO != null) {
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDO, vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-            vo.setLcStatusText(CodeRuleLC.getTextByValue(vo.getLcStatus()));
-            if (hasSec) {
-                //鏌ヨ鐮佹
-                vo.setSecVOList(codeBasicSecService.listCodeBasicSecByRuleOid(vo.getOid()));
-            }
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞涓绘暟鎹紪鐮佽鍒�
-     *
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeRuleVO addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException {
-        VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeRuleDO codeRuleDO = new CodeRuleDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
-        codeRuleMapper.insert(codeRuleDO);
-        return codeRuleDO2VO(codeRuleDO);
-    }
-
-    /**
-     * 淇敼涓绘暟鎹紪鐮佽鍒�
-     *
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeRuleVO editSave(CodeRuleDTO codeRuleDTO) throws VciBaseException {
-        VciBaseUtil.alertNotNull(codeRuleDTO, "鏁版嵁瀵硅薄", codeRuleDTO.getOid(), "涓绘暟鎹紪鐮佽鍒欎富閿�");
-        if (!checkEditDelStatus(codeRuleDTO.getLcStatus())) {
-            throw new VciBaseException("缂栫爜瑙勫垯宸插彂甯冿紝涓嶅厑璁哥紪杈戞垨鍒犻櫎");
-        }
-        //灏咲TO杞崲涓篋O
-        CodeRuleDO codeRuleDO = selectByOid(codeRuleDTO.getOid());
-        revisionModelUtil.copyFromDTOIgnore(codeRuleDTO, codeRuleDO);
-        codeRuleMapper.updateByPrimaryKey(codeRuleDO);
-        return codeRuleDO2VO(codeRuleDO);
-    }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     *
-     * @param codeRuleDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeRuleDO  鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeRuleDTO codeRuleDTO, CodeRuleDO codeRuleDO) {
-        boService.checkTs(codeRuleDTO);
-        if (!checkIsLinked(codeRuleDO.getOid())) {
-            return BaseResult.success();
-        } else {
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE, new String[]{""});
-        }
-    }
-
-    /**
-     * 鏍¢獙鏄惁琚紩鐢�
-     *
-     * @param oid 涓婚敭
-     * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    private boolean checkIsLinked(String oid) throws VciBaseException {
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
-     *
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException {
-        VciBaseUtil.alertNotNull(codeRuleDTO, "涓绘暟鎹紪鐮佽鍒欐暟鎹璞�", codeRuleDTO.getOid(), "涓绘暟鎹紪鐮佽鍒欑殑涓婚敭");
-        CodeRuleDO codeRuleDO = selectByOid(codeRuleDTO.getOid());
-        //BaseResult baseResult = checkIsCanDeleteForDO(codeRuleDTO,codeRuleDO);
-        // if(baseResult.isSuccess()) {
-        //             }else{
-        //     return baseResult;
-        // }
-        if (!checkEditDelStatus(codeRuleDO.getLcStatus())) {
-            return BaseResult.fail("缂栫爜瑙勫垯宸插彂甯冿紝涓嶅厑璁哥紪杈戞垨鍒犻櫎");
-        } else {
-            if (isAlreadyInUse(codeRuleDO.getOid())) {
-                return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄わ紒");
-            }
-        }
-        Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("codeRuleOid", codeRuleDTO.getOid());
-        List<CodeAllCodeDO> codeDOList = boService.queryObject(CodeAllCodeDO.class, conditionMap);
-        if (!CollectionUtils.isEmpty(codeDOList)) {
-            return BaseResult.fail("缂栫爜瑙勫垯宸茬敓鎴愮紪鐮侊紝涓嶅厑璁稿垹闄�");
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        WebUtil.setPersistence(false);
-        BatchCBO batchCBO = codeBasicSecService.batchDeleteSecByCodeRuleOid(codeRuleDO.getOid());
-        BatchCBO mainCBO = codeRuleMapper.deleteByPrimaryKey(codeRuleDO.getOid());
-        WebUtil.setPersistence(true);
-        Set<ClientBusinessObject> deleteSet = new HashSet<>();
-        deleteSet.addAll(batchCBO.getDeleteCbos());
-        deleteSet.addAll(mainCBO.getDeleteCbos());
-        batchCBO.setDeleteCbos(deleteSet);
-        boService.persistenceBatch(batchCBO);
-        return (batchCBO != null && batchCBO.getDeleteCbos() != null && batchCBO.getDeleteCbos().size() > 0) ? BaseResult.successMsg(DELETE_SUCCESS) : BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-     * 鏍¢獙缂栫爜瑙勫垯鐨勭姸鎬佹槸鍚﹀彲浠ョ紪杈戞垨鍒犻櫎
-     *
-     * @param lcStatus 缂栫爜瑙勫垯
-     * @return true琛ㄧず鍙互缂栬緫鎴栧垹闄わ紝false琛ㄧず涓嶅彲浠�
-     */
-    @Override
-    public boolean checkEditDelStatus(String lcStatus) {
-        if (CodeRuleLC.RELEASED.getValue().equals(lcStatus) || CodeRuleLC.DISABLED.getValue().equals(lcStatus)) {
-            return false;
-        }
-        return true;
-    }
-
-
-    /**
-     * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
-     *
-     * @param oid 涓婚敭
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeRuleVO getObjectByOid(String oid) throws VciBaseException {
-        return codeRuleDO2VO(selectByOid(oid));
-    }
-
-    /**
-     * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-     *
-     * @param oid 涓婚敭
-     * @return 鏁版嵁瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    private CodeRuleDO selectByOid(String oid) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oid, "涓婚敭");
-        CodeRuleDO codeRuleDO = codeRuleMapper.selectByPrimaryKey(oid.trim());
-        if (codeRuleDO == null || StringUtils.isBlank(codeRuleDO.getOid())) {
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeRuleDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
-     *
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeRuleDO> codeRuleDOList = listCodeRuleDOByOidCollections(oidCollections);
-        return codeRuleDO2VOs(codeRuleDOList);
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
-     *
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @param hasSec         鏄惁鍖呭惈鐮佹
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections, boolean hasSec) throws VciBaseException {
-        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeRuleDO> codeRuleDOList = listCodeRuleDOByOidCollections(oidCollections);
-        return codeRuleDO2VOs(codeRuleDOList, true);
-    }
-
-    /**
-     * 浣跨敤缂栧彿鐨勯泦鍚堣幏鍙栬鍒欑殑鍐呭
-     *
-     * @param idCollection 缂栧彿鐨勯泦鍚�
-     * @return 瑙勫垯鐨勫唴瀹�
-     */
-    @Override
-    public List<CodeRuleVO> listCodeRuleByIds(Collection<String> idCollection) {
-        return codeRuleDO2VOs(listCodeRuleDOByIdCollections(idCollection));
-    }
-
-    /**
-     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-     *
-     * @param oidCollections 涓婚敭鐨勯泦鍚�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    private List<CodeRuleDO> listCodeRuleDOByOidCollections(Collection<String> oidCollections) {
-        List<CodeRuleDO> codeRuleDOList = new ArrayList<CodeRuleDO>();
-        if (!CollectionUtils.isEmpty(oidCollections)) {
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for (Collection<String> oids : oidCollectionsList) {
-                List<CodeRuleDO> tempDOList = codeRuleMapper.selectByPrimaryKeyCollection(oids);
-                if (!CollectionUtils.isEmpty(tempDOList)) {
-                    codeRuleDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return codeRuleDOList;
-    }
-
-    /**
-     * 浣跨敤缂栧彿闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-     *
-     * @param idCollections 缂栧彿鐨勯泦鍚�
-     * @return 鏁版嵁瀵硅薄鍒楄〃
-     */
-    private List<CodeRuleDO> listCodeRuleDOByIdCollections(Collection<String> idCollections) {
-        List<CodeRuleDO> codeRuleDOList = new ArrayList<CodeRuleDO>();
-        if (!CollectionUtils.isEmpty(idCollections)) {
-            Collection<Collection<String>> idCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
-            for (Collection<String> ids : idCollectionsList) {
-                List<CodeRuleDO> tempDOList = codeRuleMapper.selectByIdCollection(ids);
-                if (!CollectionUtils.isEmpty(tempDOList)) {
-                    codeRuleDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return codeRuleDOList;
-    }
-
-
-    /**
-     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
-     *
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper   鍒嗛〉鍜屾帓搴�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeRuleVO> refDataGridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (conditionMap == null) {
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeRule(conditionMap, pageHelper);
-    }
-
-    /**
-     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
-     *
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @return 涓婚搴撳垎绫讳娇鐢ㄥ埌璇ョ紪鐮佽鍒欑殑鎵�鏈夐泦鍚�
-     */
-    @Override
-    public Collection<CodeClassifyVO> listUseRangeInCodeClassify(String oid) {
-        Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("codeRuleOid", oid);
-        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyDO.class);
-        List<CodeClassifyDO> dos = codeClassifyService.selectByWrapper(queryWrapper);
-        return codeClassifyService.codeClassifyDO2VOs(dos);
-    }
-
-    /**
-     * 妫�楠岀紪鐮佽鍒欐槸鍚﹀凡缁忚浣跨敤
-     *
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @return true琛ㄧず宸茬粡浣跨敤锛宖alse琛ㄧず鏈浣跨敤
-     */
-    @Override
-    public boolean isAlreadyInUse(String oid) {
-        Collection<CodeClassifyVO> codeClassifyVOS = listUseRangeInCodeClassify(oid);
-        if (codeClassifyVOS.size() > 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
-     *
-     * @param oid    缂栫爜瑙勫垯涓婚敭
-     * @param update enable:鍚敤 disable:鍋滅敤 release:鍙戝竷
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult updateStatus(String oid, String update) {
-        int count = 0;
-        CodeRuleDO codeRuleDO = selectByOid(oid);
-        if ("enable".equalsIgnoreCase(update)) {
-            if (!CodeRuleLC.DISABLED.getValue().equals(codeRuleDO.getLcStatus())) {
-                return BaseResult.fail("闈炲仠鐢ㄧ姸鎬佺殑缂栫爜瑙勫垯鏃犻渶鐐瑰嚮鍚敤");
-            }
-            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.RELEASED.getValue());
-        } else if ("disable".equalsIgnoreCase(update)) {
-            if (!CodeRuleLC.RELEASED.getValue().equals(codeRuleDO.getLcStatus())) {
-                return BaseResult.fail("闈炲彂甯冪姸鎬佺殑缂栫爜瑙勫垯鏃犳硶鍋滅敤");
-            }
-            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.DISABLED.getValue());
-        } else if ("release".equalsIgnoreCase(update)) {
-            if (!CodeRuleLC.EDITING.getValue().equals(codeRuleDO.getLcStatus())) {
-                return BaseResult.fail("闈炵紪杈戠姸鎬佺殑缂栫爜瑙勫垯鏃犳硶鍙戝竷");
-            }
-            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.RELEASED.getValue());
-        } else {
-            return BaseResult.fail("鏆備笉鏀寔鐨勬搷浣滅被鍨�");
-        }
-        if (count > 0) {
-            return BaseResult.success();
-        } else {
-            return BaseResult.fail("鏇存柊鐘舵�佸け璐�");
-        }
-    }
-
-    /**
-     * 鍏嬮殕缂栫爜瑙勫垯
-     *
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     */
-    public BaseResult cloneCodeRule_v1(CodeRuleDTO codeRuleDTO) {
-        VciBaseUtil.alertNotNull(codeRuleDTO.getOid(), "缂栫爜瑙勫垯涓婚敭");
-        ClientBusinessObjectOperation operation = new ClientBusinessObjectOperation();
-        Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("pkCodeRule", codeRuleDTO.getOid());
-        List<CodeBasicSecDO> basicSecDOS = boService.queryObject(CodeBasicSecDO.class, conditionMap);
-        List<String> secOidList = new ArrayList<>();
-        for (CodeBasicSecDO secDO : basicSecDOS) {
-            secOidList.add(secDO.getOid());
-        }
-        List<ClientBusinessObject> cboList = new ArrayList<>();
-        try {
-            ClientBusinessObject templateCbo = operation.readBusinessObjectById(codeRuleDTO.getOid(), MdmBtmTypeConstant.CODE_RULE);
-            ClientBusinessObject codeRuleCbo = operation.initBusinessObject(templateCbo.getBtmName());
-            String curOid = codeRuleCbo.getOid();
-            String curRevisionId = codeRuleCbo.getRevisionid();
-            String curNameOid = codeRuleCbo.getNameoid();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(templateCbo, codeRuleCbo);
-            codeRuleCbo.setOid(curOid);
-            codeRuleCbo.setRevisionid(curRevisionId);
-            codeRuleCbo.setNameoid(curNameOid);
-            codeRuleCbo.setId(templateCbo.getId() + "_copy");
-            codeRuleCbo.setName(templateCbo.getName() + "_copy");
-            if (!CollectionUtils.isEmpty(secOidList)) {
-                ClientBusinessObject[] secCboArr = operation.readBusinessObjectById(secOidList.toArray(new String[0]), MdmBtmTypeConstant.CODE_BASIC_SEC);
-                for (ClientBusinessObject cbo : secCboArr) {
-                    ClientBusinessObject newSecCbo = operation.initBusinessObject(cbo.getBtmName());
-                    String newSecCboOid = newSecCbo.getOid();
-                    String newSecCboRevisionId = newSecCbo.getRevisionid();
-                    String newSecCboNameOid = newSecCbo.getNameoid();
-                    BeanUtilForVCI.copyPropertiesIgnoreCase(cbo, newSecCbo);
-                    newSecCbo.setOid(newSecCboOid);
-                    newSecCbo.setRevisionid(newSecCboRevisionId);
-                    newSecCbo.setNameoid(newSecCboNameOid);
-                    newSecCbo.setId(newSecCbo.getId() + "_copy");
-                    newSecCbo.setName(newSecCbo.getName() + "_copy");
-                    newSecCbo.setAttributeValue("pkCodeRule", codeRuleCbo.getOid());
-                    cboList.add(newSecCbo);
-                }
-            }
-            cboList.add(codeRuleCbo);
-            ClientBusinessObject[] saveList = operation.batchSaveCreateBuinessObject(cboList.toArray(new ClientBusinessObject[0]));
-            if (saveList.length == 0) {
-                return BaseResult.fail("鍏嬮殕鍑洪敊浜嗏�︹��");
-            }
-        } catch (VCIError vciError) {
-            vciError.printStackTrace();
-        }
-        return BaseResult.success();
-    }
-
-    /**
-     * 鍏嬮殕缂栫爜瑙勫垯
-     *
-     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
-     */
-    @Override
-    public BaseResult cloneCodeRule(CodeRuleDTO codeRuleDTO) {
-        VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        CodeRuleDO codeRuleDO = new CodeRuleDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
-        WebUtil.setPersistence(false);
-        BatchCBO batchInsertCBO = codeRuleMapper.insert(codeRuleDO);
-        List<CodeBasicSecDTO> secList = codeRuleDTO.getElements();
-        secList.forEach(codeBasicSecDTO -> {
-            codeBasicSecDTO.setPkCodeRule(codeRuleDO.getOid());
-            KeyValue attrKv = codeBasicSecService.checkAttrNullableBySecType(codeBasicSecDTO);
-            if (!"success".equals(attrKv.getKey())) {
-                throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
-            }
-            CodeBasicSecDO codeBasicSecDO = new CodeBasicSecDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
-            codeBasicSecDO.setOid("");
-            codeBasicSecDO.setRevisionOid("");
-            codeBasicSecDO.setNameOid("");
-            BatchCBO cbo = codeBasicSecMapper.insert(codeBasicSecDO);
-            batchInsertCBO.addCreateCbo(cbo.getCreateCboArray()[0]);
-        });
-        boService.persistenceBatch(batchInsertCBO);
-        return BaseResult.success();
-    }
-
-    /**
-     * 浣跨敤涓婚敭鑾峰彇缂栫爜瑙勫垯鐨勫唴瀹�
-     *
-     * @param oid 涓婚敭
-     * @return 瑙勫垯鐨勬樉绀哄璞�
-     */
-    @Override
-    public CodeRuleVO getObjectHasSecByOid(String oid) {
-        CodeRuleDO ruleDO = selectByOid(oid);
-        return codeRuleDO2VO(ruleDO, true);
-    }
-
-    /**
-     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
-     *
-     * @param oid 缂栫爜瑙勫垯涓婚敭
-     * @return 鎵ц缁撴灉
-     */
-    @Override
-    public BaseResult clearAllCode(String oid) {
-        WebUtil.alertNotNull(oid, "缂栫爜瑙勫垯涓婚敭");
-        Map<String, String> conditionMap = new HashMap<>();
-        conditionMap.put("codeRuleOid", oid);
-        List<CodeAllCodeDO> codeDOList = boService.queryObject(CodeAllCodeDO.class, conditionMap);
-        if (CollectionUtils.isEmpty(codeDOList)) {
-            return BaseResult.fail("褰撳墠缂栫爜瑙勫垯娌℃湁鐢熸垚缂栫爜,鏃犻渶娓呯┖");
-        }
-        //鏄惁闇�瑕佽繘琛宐tm涓嶇粺涓�鐨勫垽鏂�?
-        String btmType = codeDOList.get(0).getCreateCodeBtm();
-        /*boolean flag = codeDOList.stream().anyMatch(s -> !StringUtils.equalsIgnoreCase(btmType, s.getCreateCodeBtm()));
-        if (flag) {
-            return BaseResult.fail("褰撳墠缂栫爜瑙勫垯鐢熸垚缂栫爜鍦ㄤ笉鍚岀被鍨嬩笅浣跨敤杩�");
-        }*/
-        //澶氱绫诲瀷涓嬬殑鏌ヨ
-        Set<String> btmTypeSet = codeDOList.stream().filter(s -> {
-            return !StringUtils.equalsIgnoreCase(btmType, s.getCreateCodeBtm());
-        }).map(s -> s.getCreateCodeBtm()).collect(Collectors.toSet());
-        List<ClientBusinessObject> businessDataList = new ArrayList<>();
-        if (btmTypeSet.size() > 1) {
-            for (String btm : btmTypeSet) {
-                String sql = "select COUNT(w.OID) from PLATFORMBTM_" + btm + "  w\n" +
-                        "join PLATFORMBTM_" + MdmBtmTypeConstant.CODE_ALL_CODE + " c on w.OID = c.CREATECODEOID\n" +
-                        "where c.CREATECODEBTM = '" + btm + "' and c.CODERULEOID = '" + oid + "'" +
-                        "and w.ISLASTR = '1' and w.ISLASTV = '1'";
-                List<ClientBusinessObject> businessData = boService.queryByOnlySql(sql);
-                businessDataList.addAll(businessData);
-            }
-        }else {
-            String sql = "select COUNT(w.OID) from PLATFORMBTM_" + btmType + "  w\n" +
-                    "join PLATFORMBTM_" + MdmBtmTypeConstant.CODE_ALL_CODE + " c on w.OID = c.CREATECODEOID\n" +
-                    "where c.CREATECODEBTM = '" + btmType + "' and c.CODERULEOID = '" + oid + "'" +
-                    "and w.ISLASTR = '1' and w.ISLASTV = '1'";
-            List<ClientBusinessObject> businessData = boService.queryByOnlySql(sql);
-            businessDataList.addAll(businessData);
-        }
-        if (CollectionUtils.isEmpty(businessDataList) || StringUtils.isBlank(businessDataList.get(0).getAttributeValue("COUNT(w.OID)"))) {
-            //鏃犳晥鏌ヨ
-            return BaseResult.fail("鏌ヨ澶辫触");
-        } else if (!StringUtils.equalsIgnoreCase("0", businessDataList.get(0).getAttributeValue("COUNT(w.OID)"))) {
-            return BaseResult.fail("缂栫爜瑙勫垯鐢熸垚鐨勭紪鐮佸凡鍦ㄤ笟鍔℃暟鎹腑搴旂敤锛屼笉鍏佽娓呯┖");
-        }
-        //娌℃湁鏁版嵁锛屽彲浠ュ畨鍏ㄥ垹闄�
-        WebUtil.setPersistence(false);
-        //鍒犻櫎鐮佸�艰〃涓殑鏁版嵁锛屼絾涓嶅锛屽鏋滄湁娴佹按鐨勭爜娈碉紝闇�瑕侀噸鏂拌绠楁祦姘�
-        conditionMap.clear();
-        conditionMap.put("codeRuleOid", oid);
-        List<ClientBusinessObject> serialValueList = boService.queryCBO("codeserialvalue", conditionMap);
-        BatchCBO batchCBO = boService.batchDelete(codeDOList);
-        batchCBO.getDeleteCbos().addAll(serialValueList);
-        WebUtil.setPersistence(true);
-        boService.persistenceBatch(batchCBO);
-        return BaseResult.success();
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java
deleted file mode 100644
index 20ce987..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.springblade.code.service.impl;
-
-
-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;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 娴佹按绠楁硶鐨勬湇鍔�
- * @author weidy
- * @date 2022-2-17
- */
-@Service
-public class CodeSerialAlgorithmServiceImpl implements CodeSerialAlgorithmServiceI {
-    /**
-     * 鑾峰彇娴佹按绠楁硶鐨勫垪琛�
-     *
-     * @return 娴佹按绠楁硶鐨勪俊鎭�
-     */
-    @Override
-    public DataGrid<CodeSerialAlgorithmVO> gridSerialAlgorithm() {
-        //浣跨敤涓婚敭鍘绘壂鎻�
-        String[] beanNames = ApplicationContextProvider.getApplicationContext().getBeanNamesForAnnotation(MdmSerialAlgorithm.class);
-        List<CodeSerialAlgorithmVO> voList = new ArrayList<>();
-        if(beanNames!=null && beanNames.length>0){
-            for(String beanName : beanNames){
-                Object bean = ApplicationContextProvider.getApplicationContext().getBean(beanName);
-                if(bean!=null){
-                    CodeSerialAlgorithmVO algorithmVO = new CodeSerialAlgorithmVO();
-                    Advised advised = (Advised)bean;
-                    Class<?> targetClass = advised.getTargetSource().getTargetClass();
-                    algorithmVO.setClassFullName(targetClass.getName());
-                    MdmSerialAlgorithm serialAlgorithm = targetClass.getDeclaredAnnotation(MdmSerialAlgorithm.class);
-                    if(serialAlgorithm==null){
-                        serialAlgorithm = targetClass.getAnnotation(MdmSerialAlgorithm.class);
-                    }
-                    if(serialAlgorithm !=null) {
-                        algorithmVO.setName(serialAlgorithm.text());
-                        algorithmVO.setDescription(serialAlgorithm.description());
-                        algorithmVO.setId(serialAlgorithm.value());
-                        if(StringUtils.isBlank(algorithmVO.getId())){
-                            algorithmVO.setId(beanName);
-                        }
-                        voList.add(algorithmVO);
-                    }
-                }
-            }
-        }
-        DataGrid<CodeSerialAlgorithmVO> dataGrid = new DataGrid<>();
-        dataGrid.setData(voList);
-        dataGrid.setTotal(voList.size());
-        return dataGrid;
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java
deleted file mode 100644
index 6cd157b..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java
+++ /dev/null
@@ -1,276 +0,0 @@
-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.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
-
-/**
- * 鍚屼箟璇嶉厤缃湇鍔�
- * @author weidy
- * @date 2022-02-17
- */
-@Service
-public class CodeSynonymServiceImpl implements CodeSynonymServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeSynonymDaoI codeSynonymMapper;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑鍚屼箟璇嶉厤缃�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeSynonymDO> doList = codeSynonymMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeSynonymVO> dataGrid=new DataGrid<CodeSynonymVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeSynonymDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeSynonymMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeSynonymDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO> codeSynonymDOs) throws VciBaseException{
-        List<CodeSynonymVO> voList = new ArrayList<CodeSynonymVO>();
-        if(!CollectionUtils.isEmpty(codeSynonymDOs)){
-           for(CodeSynonymDO s: codeSynonymDOs){
-                CodeSynonymVO vo =  codeSynonymDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeSynonymDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeSynonymVO codeSynonymDO2VO(CodeSynonymDO codeSynonymDO) throws VciBaseException{
-              CodeSynonymVO vo = new CodeSynonymVO();
-        if(codeSynonymDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-
-        }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeSynonymVO addSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeSynonymDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-        //灏咲TO杞崲涓篋O
-        CodeSynonymDO codeSynonymDO = new CodeSynonymDO();
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDTO,codeSynonymDO);
-        codeSynonymMapper.insert(codeSynonymDO);
-        return codeSynonymDO2VO(codeSynonymDO);
-    }
-
-    /**
-     * 淇敼鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeSynonymVO editSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeSynonymDTO,"鏁版嵁瀵硅薄",codeSynonymDTO.getOid(),"鍚屼箟璇嶉厤缃富閿�");
-         //灏咲TO杞崲涓篋O
-         CodeSynonymDO codeSynonymDO = selectByOid(codeSynonymDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeSynonymDTO,codeSynonymDO);
-         codeSynonymMapper.updateByPrimaryKey(codeSynonymDO);
-         return codeSynonymDO2VO(codeSynonymDO);
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeSynonymDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeSynonymDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeSynonymDTO codeSynonymDTO, CodeSynonymDO codeSynonymDO) {
-            CodeSynonymDO tsDO = new CodeSynonymDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDTO,tsDO);
-        boService.checkTs(tsDO);
-        if(!checkIsLinked(codeSynonymDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎鍚屼箟璇嶉厤缃�
-     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeSynonym(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeSynonymDTO,"鍚屼箟璇嶉厤缃暟鎹璞�",codeSynonymDTO.getOid(),"鍚屼箟璇嶉厤缃殑涓婚敭");
-        CodeSynonymDO codeSynonymDO = selectByOid(codeSynonymDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeSynonymDTO,codeSynonymDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        BatchCBO batchCBO = codeSynonymMapper.deleteByPrimaryKey(codeSynonymDO.getOid());
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
-    * @param oid 涓婚敭
-    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeSynonymVO getObjectByOid(String oid) throws VciBaseException{
-        return codeSynonymDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeSynonymDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeSynonymDO codeSynonymDO = codeSynonymMapper.selectByPrimaryKey(oid.trim());
-        if(codeSynonymDO == null || StringUtils.isBlank(codeSynonymDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeSynonymDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeSynonymVO> listCodeSynonymByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeSynonymDO> codeSynonymDOList = listCodeSynonymDOByOidCollections(oidCollections);
-        return codeSynonymDO2VOs(codeSynonymDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeSynonymDO> listCodeSynonymDOByOidCollections(Collection<String> oidCollections){
-        List<CodeSynonymDO> codeSynonymDOList = new ArrayList<CodeSynonymDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeSynonymDO> tempDOList =  codeSynonymMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeSynonymDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeSynonymDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeSynonymVO> refDataGridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeSynonym(conditionMap,pageHelper);
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java
deleted file mode 100644
index a4129b5..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java
+++ /dev/null
@@ -1,507 +0,0 @@
-package org.springblade.code.service.impl;
-
-
-import com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.starter.web.constant.QueryOptionConstant;
-import com.vci.starter.web.exception.VciBaseException;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.util.BeanUtil;
-import com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.service.WebBoServiceI;
-import com.vci.web.util.WebUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.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;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
-
-/**
- * 妯℃澘闃舵鏈嶅姟
- * @author weidy
- * @date 2022-01-24
- */
-@Service
-public class CodeTemplatePhaseServiceImpl implements CodeTemplatePhaseServiceI {
-
-    /**
-    * 鏃ュ織
-    */
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    /**
-    * 鏁版嵁鎿嶄綔灞�
-    */
-    @Resource
-    private CodeTemplatePhaseDaoI codeTemplatePhaseMapper;
-
-    /**
-     * 妯℃澘灞炴�х殑鏈嶅姟
-     */
-    @Autowired
-    private CodeClassifyTemplateAttrServiceI tempAttrService;
-
-    /**
-    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
-    */
-    @Autowired
-    private WebBoServiceI boService;
-
-    /**
-    * 瀵硅薄鐨勬搷浣�
-    */
-    @Autowired
-    private RevisionModelUtil revisionModelUtil;
-
-    /**
-     * 闃舵鐨勫睘鎬�
-     */
-    @Autowired
-    private CodePhaseAttrServiceI phaseAttrService;
-
-    /**
-     * 鏁版嵁鎿嶄綔灞�
-     */
-    @Resource
-    private CodePhaseAttrDaoI codePhaseAttrMapper;
-
-
-    /**
-     * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if (pageHelper == null) {
-            pageHelper = new PageHelper(-1);
-        }
-        pageHelper.addDefaultDesc("createTime");
-        List<CodeTemplatePhaseDO> doList = codeTemplatePhaseMapper.selectByCondition(conditionMap,pageHelper);
-        DataGrid<CodeTemplatePhaseVO> dataGrid=new DataGrid<CodeTemplatePhaseVO>();
-        if (!CollectionUtils.isEmpty(doList)) {
-            dataGrid.setData(codeTemplatePhaseDO2VOs(doList));
-            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeTemplatePhaseMapper.countByCondition(conditionMap))));
-        }
-        return dataGrid;
-    }
-
-    /**
-     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO>  codeTemplatePhaseDOs) throws VciBaseException{
-        List<CodeTemplatePhaseVO> voList = new ArrayList<CodeTemplatePhaseVO>();
-        if(!CollectionUtils.isEmpty(codeTemplatePhaseDOs)){
-           for(CodeTemplatePhaseDO s: codeTemplatePhaseDOs){
-                CodeTemplatePhaseVO vo =  codeTemplatePhaseDO2VO(s);
-                if(vo != null){
-                    voList.add(vo);
-                }
-            }
-        }
-        return voList;
-    }
-
-    /**
-     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
-     * @return 鏄剧ず瀵硅薄
-     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public  CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhaseDO codeTemplatePhaseDO) throws VciBaseException{
-              CodeTemplatePhaseVO vo = new CodeTemplatePhaseVO();
-        if(codeTemplatePhaseDO != null){
-            BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDO,vo);
-            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
-                    }
-        return vo;
-    }
-
-    /**
-     * 澧炲姞妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-    @Override
-    public CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
-        //灏咲TO杞崲涓篋O
-        CodeTemplatePhaseDO codeTemplatePhaseDO = new CodeTemplatePhaseDO();
-        codeTemplatePhaseDO.setOid(VciBaseUtil.getPk());
-        BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDTO,codeTemplatePhaseDO);
-        WebUtil.setPersistence(false);
-        BatchCBO batchCBO = codeTemplatePhaseMapper.insert(codeTemplatePhaseDO);
-        List<CodePhaseAttrDO> attrDOList = new ArrayList<>();
-        codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
-            CodePhaseAttrDO attrDO = new CodePhaseAttrDO();
-            BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
-            attrDO.setOid(VciBaseUtil.getPk());
-            attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
-            attrDOList.add(attrDO);
-        });
-        BatchCBO attrCBO = codePhaseAttrMapper.batchInsert(attrDOList);
-        batchCBO.copyFromOther(attrCBO);
-        WebUtil.setPersistence(true);
-        boService.persistenceBatch(batchCBO);
-        return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
-    }
-
-    /**
-     * 淇敼妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
-     * @return 鎵ц缁撴灉
-     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-     */
-     @Override
-     public CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
-         VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵涓婚敭",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
-         //灏咲TO杞崲涓篋O
-         CodeTemplatePhaseDO codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
-         revisionModelUtil.copyFromDTOIgnore(codeTemplatePhaseDTO,codeTemplatePhaseDO);
-         WebUtil.setPersistence(false);
-         BatchCBO batchCBO = codeTemplatePhaseMapper.updateByPrimaryKey(codeTemplatePhaseDO);
-         //鎶婁互鍓嶇殑鍒犻櫎
-         List<CodePhaseAttrDO> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
-         if(!CollectionUtils.isEmpty(phaseAttrDOS)){
-             BatchCBO delCBO = codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList()));
-             batchCBO.copyFromOther(delCBO);
-         }
-         List<CodePhaseAttrDO> attrDOList = new ArrayList<>();
-         codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
-             CodePhaseAttrDO attrDO = new CodePhaseAttrDO();
-             BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
-             attrDO.setOid(VciBaseUtil.getPk());
-             attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
-             attrDOList.add(attrDO);
-         });
-         BatchCBO attrCBO = codePhaseAttrMapper.batchInsert(attrDOList);
-         batchCBO.copyFromOther(attrCBO);
-         WebUtil.setPersistence(true);
-         boService.persistenceBatch(batchCBO);
-         return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
-     }
-
-    /**
-     * 浣跨敤闃舵涓婚敭鑾峰彇鍖呭惈鐨勫睘鎬�
-     * @param codePhaseOid 闃舵鐨勪富閿�
-     * @return 鍖呭惈灞炴�х殑鏁版嵁瀵硅薄
-     */
-     private List<CodePhaseAttrDO> listPhaseAttrDOByPhaseOid(String codePhaseOid){
-         Map<String,String> conditionMap = new HashMap<>();
-         conditionMap.put("codePhaseOid",codePhaseOid);
-         List<CodePhaseAttrDO> phaseAttrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
-         return phaseAttrDOS;
-     }
-
-
-    /**
-     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-     * @param codeTemplatePhaseDTO 鏁版嵁浼犺緭瀵硅薄
-     * @param codeTemplatePhaseDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-     */
-    private BaseResult checkIsCanDeleteForDO(CodeTemplatePhaseDTO codeTemplatePhaseDTO, CodeTemplatePhaseDO codeTemplatePhaseDO) {
-        CodeTemplatePhaseDO tsDO = new CodeTemplatePhaseDO();
-        BeanUtil.convert(codeTemplatePhaseDTO,tsDO);
-        boService.checkTs(tsDO);
-        if(!checkIsLinked(codeTemplatePhaseDO.getOid())) {
-            return BaseResult.success();
-        }else{
-            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
-        }
-    }
-
-    /**
-    * 鏍¢獙鏄惁琚紩鐢�
-    * @param oid 涓婚敭
-    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-    */
-    private boolean checkIsLinked(String oid) throws VciBaseException{
-        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-        return false;
-    }
-
-    /**
-     * 鍒犻櫎妯℃澘闃舵
-     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
-     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-     */
-    @Override
-    public BaseResult deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
-        VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"妯℃澘闃舵鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵鐨勪富閿�");
-        CodeTemplatePhaseDO codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
-        BaseResult baseResult = checkIsCanDeleteForDO(codeTemplatePhaseDTO,codeTemplatePhaseDO);
-        if(baseResult.isSuccess()) {
-                    }else{
-            return baseResult;
-        }
-        //鎵ц鍒犻櫎鎿嶄綔
-        WebUtil.setPersistence(false);
-        BatchCBO batchCBO = codeTemplatePhaseMapper.deleteByPrimaryKey(codeTemplatePhaseDO.getOid());
-        //闇�瑕佸垹闄ゅ睘鎬�
-        List<CodePhaseAttrDO> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
-        if(!CollectionUtils.isEmpty(phaseAttrDOS)) {
-            BatchCBO deleteCBO = codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList()));
-            batchCBO.copyFromOther(deleteCBO);
-        }
-        WebUtil.setPersistence(true);
-        boService.persistenceBatch(batchCBO);
-        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
-    }
-
-    /**
-     * 妯℃澘淇敼瑙﹀彂鍔熻兘
-     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    @Override
-    public BatchCBO codeTemplateAttrModifyTrigger(List<CodeClassifyTemplateAttrDO> attrDOList){
-        //灞炴�т慨鏀圭殑鏃跺�欙紝闇�瑕佸悓姝ヤ慨鏀瑰搴斿睘鎬х殑鍚嶇О
-        BatchCBO batchCBO = new BatchCBO();
-        List<CodePhaseAttrDO> phaseAttrDOS =listLinkAttrDOByTemplateAttrDOS(attrDOList);
-        if(!CollectionUtils.isEmpty(phaseAttrDOS)){
-            //璇存槑鏈夊睘鎬�,鎴戜滑鍘绘浛鎹竴涓�
-            Map<String, CodeClassifyTemplateAttrDO> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
-            phaseAttrDOS.stream().forEach(phaseAttrDO->{
-                if(attrDOMap.containsKey(phaseAttrDO.getId())){
-                    CodeClassifyTemplateAttrDO attrDO = attrDOMap.get(phaseAttrDO.getId());
-                    phaseAttrDO.setId(attrDO.getId());
-                    phaseAttrDO.setName(attrDO.getName());
-                    phaseAttrDO.setAttributeGroup(attrDO.getAttributeGroup());
-                }
-            });
-            BatchCBO updateCBO = codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
-            batchCBO.copyFromOther(updateCBO);
-        }
-        return batchCBO;
-    }
-
-    /**
-     * 浣跨敤妯℃澘鐨勫睘鎬ц幏鍙栭樁娈典腑鍖呭惈鐨勫睘鎬у唴瀹�
-     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
-     * @return 闃舵閲岀殑灞炴�ф暟鎹璞�
-     */
-    private List<CodePhaseAttrDO> listLinkAttrDOByTemplateAttrDOS(List<CodeClassifyTemplateAttrDO> attrDOList){
-        if(!CollectionUtils.isEmpty(attrDOList)) {
-            //鏌ヨ杩欎釜妯℃澘閲屽寘鍚殑鎵�鏈夐樁娈电殑杩欎簺灞炴��
-            //鍥犱负oracle閲岃〃鐨勫瓧娈典笉鑳借秴杩�1000涓紝鎵�浠ユ垜浠繖閲岄粯璁ゅ睘鎬т釜鏁版槸灏忎簬1000鐨勶紱
-            Map<String, String> conditionMap = new HashMap<>();
-            conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + attrDOList.get(0).getClassifyTemplateOid() + "')");
-            conditionMap.put("id", QueryOptionConstant.IN + "(" +  VciBaseUtil.toInSql(attrDOList.stream().map(CodeClassifyTemplateAttrDO::getId).collect(Collectors.toList()).toArray(new String[0])) + ")");
-            return codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
-        }else{
-            return new ArrayList<>();
-        }
-    }
-
-    /**
-     * 闃舵鐨勮〃鍚�
-     * @return 琛ㄥ悕
-     */
-    private String getPhaseTable(){
-        return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE);
-    }
-
-    /**
-     * 闃舵灞炴�х殑琛ㄥ悕
-     * @return 琛ㄥ悕
-     */
-    private String getPhaseAttrTable(){
-        return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_PHASE_ATTR);
-    }
-
-    /**
-     * 妯℃澘灞炴�у垹闄ょ殑鏃跺�欒Е鍙�
-     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    @Override
-    public BatchCBO codeTemplateAttrDeleteTrigger(List<CodeClassifyTemplateAttrDO> attrDOList){
-        BatchCBO batchCBO = new BatchCBO();
-        List<CodePhaseAttrDO> phaseAttrDOS =listLinkAttrDOByTemplateAttrDOS(attrDOList);
-        if(!CollectionUtils.isEmpty(phaseAttrDOS)){
-            //灞炴�ц鍒犻櫎鐨勬椂鍊欙紝闃舵閲岄潰涔熶竴鏍疯琚垹闄�
-            batchCBO.copyFromOther(codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList())));
-        }
-        return batchCBO;
-    }
-
-    /**
-     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
-     *
-     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
-     * @return 鍙楀奖鍝嶇殑鏁版嵁
-     */
-    @Override
-    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
-        BatchCBO batchCBO = new BatchCBO();
-        Map<String,String> conditionMap = new HashMap<>();
-        conditionMap.put("codeClassifyTemplateOid",classifyTemplateOid);
-        List<CodeTemplatePhaseDO> templatePhaseDOS = codeTemplatePhaseMapper.selectByCondition(conditionMap, new PageHelper(-1));
-        conditionMap.clear();
-        if(!CollectionUtils.isEmpty(templatePhaseDOS)) {
-            batchCBO.copyFromOther(codeTemplatePhaseMapper.batchDeleteByOids(templatePhaseDOS.stream().map(CodeTemplatePhaseDO::getOid).collect(Collectors.toList())));
-            conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + classifyTemplateOid + "')");
-            List<CodePhaseAttrDO> phaseAttrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
-            if(!CollectionUtils.isEmpty(phaseAttrDOS)){
-                batchCBO.copyFromOther(codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList())));
-            }
-        }
-        return batchCBO;
-    }
-
-    /**
-    * 涓婚敭鑾峰彇妯℃澘闃舵
-    * @param oid 涓婚敭
-    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-    */
-    @Override
-    public  CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException{
-        return codeTemplatePhaseDO2VO(selectByOid(oid));
-    }
-
-    /**
-    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-    * @param oid 涓婚敭
-    * @return  鏁版嵁瀵硅薄
-    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-    */
-    private CodeTemplatePhaseDO selectByOid(String oid) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oid,"涓婚敭");
-        CodeTemplatePhaseDO codeTemplatePhaseDO = codeTemplatePhaseMapper.selectByPrimaryKey(oid.trim());
-        if(codeTemplatePhaseDO == null || StringUtils.isBlank(codeTemplatePhaseDO.getOid())){
-            throw new VciBaseException(DATA_OID_NOT_EXIST);
-        }
-        return codeTemplatePhaseDO;
-    }
-
-    /**
-     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
-     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
-     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-     */
-    @Override
-    public Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException{
-        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-        List<CodeTemplatePhaseDO> codeTemplatePhaseDOList = listCodeTemplatePhaseDOByOidCollections(oidCollections);
-        return codeTemplatePhaseDO2VOs(codeTemplatePhaseDOList);
-    }
-
-    /**
-    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-    * @param oidCollections 涓婚敭鐨勯泦鍚�
-    * @return 鏁版嵁瀵硅薄鍒楄〃
-    */
-    private List<CodeTemplatePhaseDO> listCodeTemplatePhaseDOByOidCollections(Collection<String> oidCollections){
-        List<CodeTemplatePhaseDO> codeTemplatePhaseDOList = new ArrayList<CodeTemplatePhaseDO>();
-        if(!CollectionUtils.isEmpty(oidCollections)){
-            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-            for(Collection<String> oids: oidCollectionsList){
-                List<CodeTemplatePhaseDO> tempDOList =  codeTemplatePhaseMapper.selectByPrimaryKeyCollection(oids);
-                if(!CollectionUtils.isEmpty(tempDOList)){
-                        codeTemplatePhaseDOList.addAll(tempDOList);
-                }
-            }
-        }
-        return  codeTemplatePhaseDOList;
-    }
-
-
-
-    /**
-     * 鍙傜収妯℃澘闃舵鍒楄〃
-     * @param conditionMap 鏌ヨ鏉′欢
-     * @param pageHelper 鍒嗛〉鍜屾帓搴�
-     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
-     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-     */
-    @Override
-    public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        return gridCodeTemplatePhase(conditionMap,pageHelper);
-    }
-
-    /**
-     * 闃舵涓嶅寘鍚殑灞炴��
-     *
-     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
-     * @param pageHelper   鍒嗛〉瀵硅薄
-     * @return 灞炴�х殑淇℃伅
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) {
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        if(!conditionMap.containsKey("classifyTemplateOid")){
-            return new DataGrid<>("娌℃湁妯℃澘鐨勪富閿�");
-        }
-        //闇�瑕佸垽鏂樁娈电殑涓婚敭鏄惁瀛樺湪
-        String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
-        if(StringUtils.isNotBlank(codePhaseOid)){
-            //鎺掗櫎闃舵涓婁娇鐢ㄧ殑
-            conditionMap.remove("codePhaseOid");
-            conditionMap.put("id", QueryOptionConstant.NOTIN + "(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
-        }
-        return tempAttrService.gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
-    }
-
-    /**
-     * 闃舵鍖呭惈鐨勫睘鎬�
-     *
-     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
-     * @param pageHelper   鍒嗛〉瀵硅薄
-     * @return 灞炴�х殑淇℃伅
-     */
-    @Override
-    public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) {
-        if(conditionMap == null){
-            conditionMap = new HashMap<String, String>();
-        }
-        String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
-        if(StringUtils.isBlank(codePhaseOid)){
-            return new DataGrid<>();
-        }
-        conditionMap.remove("codePhaseOid");
-        CodeTemplatePhaseDO phaseDO = selectByOid(codePhaseOid);
-        conditionMap.put("id",QueryOptionConstant.IN + "(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
-        conditionMap.put("classifyTemplateOid",phaseDO.getCodeClassifyTemplateOid());
-        return tempAttrService.gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
-    }
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java
deleted file mode 100644
index ca63ecc..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java
+++ /dev/null
@@ -1,275 +0,0 @@
-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
deleted file mode 100644
index ccd0a87..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataServiceImpl.java
+++ /dev/null
@@ -1,1116 +0,0 @@
-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
deleted file mode 100644
index 99e4da7..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreAttrMappingSeviceImpl.java
+++ /dev/null
@@ -1,529 +0,0 @@
-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
deleted file mode 100644
index c027e6d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmEngineServiceImpl.java
+++ /dev/null
@@ -1,2753 +0,0 @@
-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
deleted file mode 100644
index 6a19628..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmIOServiceImpl.java
+++ /dev/null
@@ -1,4012 +0,0 @@
-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
deleted file mode 100644
index 2cf4f33..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmProductCodeServiceImpl.java
+++ /dev/null
@@ -1,741 +0,0 @@
-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
deleted file mode 100644
index bdeaf08..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntAuthorityServiceImpl.java
+++ /dev/null
@@ -1,288 +0,0 @@
-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
deleted file mode 100644
index b45ffd9..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntBaseServiceImpl.java
+++ /dev/null
@@ -1,283 +0,0 @@
-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
deleted file mode 100644
index 3b250e1..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntInfoServiceImpl.java
+++ /dev/null
@@ -1,1091 +0,0 @@
-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
deleted file mode 100644
index 5bd4fb8..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/UniversalInterfaceImpl.java
+++ /dev/null
@@ -1,913 +0,0 @@
-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/AttributeMapConfig.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java
deleted file mode 100644
index 5e9b8df..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.springblade.code.utils;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-@ConfigurationProperties(prefix="attrconfig")
-@Component
-public class AttributeMapConfig {
-    private Map<String,String> system_attrmap;
-    /**
-     * WRJ涓绘暟鎹笌MPM鏋氫妇鍊兼槧灏勯厤缃�
-     */
-    private Map<String, List<EnumVO>> mpmEnumMap;
-    public Map<String, String> getSystem_attrmap() {
-        return system_attrmap;
-    }
-    public void setSystem_attrmap(Map<String, String> system_attrmap) {
-        this.system_attrmap = system_attrmap;
-    }
-
-    public void setMpmEnumMap(Map<String, List<EnumVO>> mpmEnumMap) {
-        this.mpmEnumMap = mpmEnumMap;
-    }
-
-    public Map<String, List<EnumVO>> getMpmEnumMap() {
-        return mpmEnumMap;
-    }
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java
deleted file mode 100644
index a9b0de6..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.springblade.code.utils;
-
-import java.util.List;
-
-public class BackXml{
-    private List<XmlData> datas;
-    public String state;//鍏跺疄灏辨槸datacode锛屼篃鏄痗ode
-    public String msg;//鍏跺疄灏辨槸datamsg
-
-    public List<XmlData> getDatas() {
-        return datas;
-    }
-
-    public void setDatas(List<XmlData> datas) {
-        this.datas = datas;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    @Override
-    public String toString() {
-        return "BackXml{" +
-                "datas=" + datas +
-                ", state='" + state + '\'' +
-                ", msg='" + msg + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java
deleted file mode 100644
index fa59d49..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java
+++ /dev/null
@@ -1,527 +0,0 @@
-package org.springblade.code.utils;
-
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-/**
- * yyyy-MM-dd HH:mm:ss
- *
- */
-public class DateUtils {
-
-    /** 骞�-鏈�-鏃� 鏃�:鍒�:绉� 鏄剧ず鏍煎紡 */
-    // 澶囨敞:濡傛灉浣跨敤澶у啓HH鏍囪瘑浣跨敤24灏忔椂鏄剧ず鏍煎紡,濡傛灉浣跨敤灏忓啓hh灏辫〃绀轰娇鐢�12灏忔椂鍒舵牸寮忋��
-    public static String DATE_TO_STRING_DETAIAL_PATTERN = "yyyy-MM-dd HH:mm:ss";
-
-    /** 骞�-鏈�-鏃� 鏄剧ず鏍煎紡 */
-    public static String DATE_TO_STRING_SHORT_PATTERN = "yyyy-MM-dd";
-
-    /**
-     * 鎶婃棩鏈熷瓧绗︿覆鏍煎紡鍖栨垚鏃ユ湡绫诲瀷锛岄粯璁yyy-MM-dd HH:mm:ss
-     * @param dateStr
-     * @return
-     */
-    public static Date convert2Date(String dateStr) {
-        return convert2Date(dateStr,DATE_TO_STRING_DETAIAL_PATTERN);
-    }
-
-    /**
-     * 鎶婃棩鏈熷瓧绗︿覆鏍煎紡鍖栨垚鏃ユ湡绫诲瀷
-     * @param dateStr
-     * @param format
-     * @return
-     */
-    public static Date convert2Date(String dateStr, String format) {
-        SimpleDateFormat simple = new SimpleDateFormat(format);
-        try {
-            simple.setLenient(false);
-            return simple.parse(dateStr);
-        } catch (Exception e) {
-            return  null;
-        }
-    }
-
-
-    /**
-     * 鎶婃棩鏈熺被鍨嬫牸寮忓寲鎴愬瓧绗︿覆
-     * @param date
-     * @param format
-     * @return
-     */
-    public static String convert2String(Date date, String format) {
-        SimpleDateFormat formater = new SimpleDateFormat(format);
-        try {
-            return formater.format(date);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    /**
-     * 杞瑂ql鐨則ime鏍煎紡
-     * @param date
-     * @return
-     */
-    public static java.sql.Timestamp convertSqlTime(Date date){
-        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
-        return timestamp;
-    }
-
-    /**
-     * 杞瑂ql鐨勬棩鏈熸牸寮�
-     * @param date
-     * @return
-     */
-    public static java.sql.Date convertSqlDate(Date date){
-        java.sql.Date Datetamp = new java.sql.Date(date.getTime());
-        return Datetamp;
-    }
-
-
-    /**
-     * 鑾峰彇褰撳墠鏃ユ湡,榛樿yyyy-MM-dd HH:mm:ss
-     * @return
-     */
-    public static String getCurrentDate() {
-        return getCurrentDate(DATE_TO_STRING_DETAIAL_PATTERN);
-    }
-
-    /**
-     * 鑾峰彇褰撳墠鏃ユ湡
-     * @param format
-     * @return
-     */
-    public static String getCurrentDate(String format) {
-        return new SimpleDateFormat(format).format(new Date());
-    }
-
-    /**
-     * 鑾峰彇鏃堕棿鎴�
-     * @return
-     */
-    public static long getTimestamp()
-    {
-        return System.currentTimeMillis();
-    }
-
-    /**
-     * 鏃堕棿瀛楃涓茶浆鏃堕棿鎴�
-     */
-    public static long stringToTimestamp(String str){
-        long time = 0;
-        try {
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            Date date = simpleDateFormat.parse(str);
-            time = date.getTime();
-        }catch (Exception e){
-
-        }
-        return time;
-    }
-
-    /**
-     * 鑾峰彇鏈堜唤鐨勫ぉ鏁�
-     * @param year
-     * @param month
-     * @return
-     */
-    public static int getDaysOfMonth(int year, int month) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.set(year, month - 1, 1);
-        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
-    }
-
-    /**
-     * 鑾峰彇鏃ユ湡鐨勫勾
-     * @param date
-     * @return
-     */
-    public static int getYear(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        return calendar.get(Calendar.YEAR);
-    }
-
-    /**
-     * 鑾峰彇鏃ユ湡鐨勬湀
-     * @param date
-     * @return
-     */
-    public static int getMonth(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        return calendar.get(Calendar.MONTH) + 1;
-    }
-
-    /**
-     * 鑾峰彇鏃ユ湡鐨勬棩
-     * @param date
-     * @return
-     */
-    public static int getDay(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        return calendar.get(Calendar.DATE);
-    }
-
-    /**
-     * 鑾峰彇鏃ユ湡鐨勬椂
-     * @param date
-     * @return
-     */
-    public static int getHour(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        return calendar.get(Calendar.HOUR);
-    }
-
-    /**
-     * 鑾峰彇鏃ユ湡鐨勫垎绉�
-     * @param date
-     * @return
-     */
-    public static int getMinute(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        return calendar.get(Calendar.MINUTE);
-    }
-
-    /**
-     * 鑾峰彇鏃ユ湡鐨勭
-     * @param date
-     * @return
-     */
-    public static int getSecond(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        return calendar.get(Calendar.SECOND);
-    }
-
-    /**
-     * 鑾峰彇鏄熸湡鍑�
-     * @param date
-     * @return
-     */
-    public static int getWeekDay(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
-        return dayOfWeek-1;
-    }
-
-    /**
-     * 鑾峰彇鍝竴骞村叡鏈夊灏戝懆
-     * @param year
-     * @return
-     */
-    public static int getMaxWeekNumOfYear(int year) {
-        Calendar c = new GregorianCalendar();
-        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
-        return getWeekNumOfYear(c.getTime());
-    }
-
-    /**
-     * 鍙栧緱鏌愬ぉ鏄竴骞翠腑鐨勫灏戝懆
-     * @param date
-     * @return
-     */
-    public static int getWeekNumOfYear(Date date) {
-        Calendar c = new GregorianCalendar();
-        c.setFirstDayOfWeek(Calendar.MONDAY);
-        c.setMinimalDaysInFirstWeek(7);
-        c.setTime(date);
-        return c.get(Calendar.WEEK_OF_YEAR);
-    }
-
-    /**
-     * 鍙栧緱鏌愬ぉ鎵�鍦ㄥ懆鐨勭涓�澶�
-     * @param date
-     * @return
-     */
-    public static Date getFirstDayOfWeek(Date date) {
-        Calendar c = new GregorianCalendar();
-        c.setFirstDayOfWeek(Calendar.MONDAY);
-        c.setTime(date);
-        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
-        return c.getTime();
-    }
-
-    /**
-     * 鍙栧緱鏌愬ぉ鎵�鍦ㄥ懆鐨勬渶鍚庝竴澶�
-     * @param date
-     * @return
-     */
-    public static Date getLastDayOfWeek(Date date) {
-        Calendar c = new GregorianCalendar();
-        c.setFirstDayOfWeek(Calendar.MONDAY);
-        c.setTime(date);
-        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
-        return c.getTime();
-    }
-
-    /**
-     * 鍙栧緱鏌愬勾鏌愬懆鐨勭涓�澶� 瀵逛簬浜ゅ弶:2008-12-29鍒�2009-01-04灞炰簬2008骞寸殑鏈�鍚庝竴鍛�,2009-01-05涓�2009骞寸涓�鍛ㄧ殑绗竴澶�
-     * @param year
-     * @param week
-     * @return
-     */
-    public static Date getFirstDayOfWeek(int year, int week) {
-        Calendar calFirst = Calendar.getInstance();
-        calFirst.set(year, 0, 7);
-        Date firstDate = getFirstDayOfWeek(calFirst.getTime());
-
-        Calendar firstDateCal = Calendar.getInstance();
-        firstDateCal.setTime(firstDate);
-
-        Calendar c = new GregorianCalendar();
-        c.set(Calendar.YEAR, year);
-        c.set(Calendar.MONTH, Calendar.JANUARY);
-        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
-
-        Calendar cal = (GregorianCalendar) c.clone();
-        cal.add(Calendar.DATE, (week - 1) * 7);
-        firstDate = getFirstDayOfWeek(cal.getTime());
-
-        return firstDate;
-    }
-
-    /**
-     * 鍙栧緱鏌愬勾鏌愬懆鐨勬渶鍚庝竴澶� 瀵逛簬浜ゅ弶:2008-12-29鍒�2009-01-04灞炰簬2008骞寸殑鏈�鍚庝竴鍛�, 2009-01-04涓�
-     * 2008骞存渶鍚庝竴鍛ㄧ殑鏈�鍚庝竴澶�
-     * @param year
-     * @param week
-     * @return
-     */
-    public static Date getLastDayOfWeek(int year, int week) {
-        Calendar calLast = Calendar.getInstance();
-        calLast.set(year, 0, 7);
-        Date firstDate = getLastDayOfWeek(calLast.getTime());
-
-        Calendar firstDateCal = Calendar.getInstance();
-        firstDateCal.setTime(firstDate);
-
-        Calendar c = new GregorianCalendar();
-        c.set(Calendar.YEAR, year);
-        c.set(Calendar.MONTH, Calendar.JANUARY);
-        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
-
-        Calendar cal = (GregorianCalendar) c.clone();
-        cal.add(Calendar.DATE, (week - 1) * 7);
-        Date lastDate = getLastDayOfWeek(cal.getTime());
-
-        return lastDate;
-    }
-
-
-    private static Date add(Date date, int calendarField, int amount) {
-        if (date == null) {
-            throw new IllegalArgumentException("The date must not be null");
-        } else {
-            Calendar c = Calendar.getInstance();
-            c.setTime(date);
-            c.add(calendarField, amount);
-            return c.getTime();
-        }
-    }
-
-    /*
-     * 1鍒欎唬琛ㄧ殑鏄骞翠唤鎿嶄綔锛� 2鏄鏈堜唤鎿嶄綔锛� 3鏄鏄熸湡鎿嶄綔锛� 5鏄鏃ユ湡鎿嶄綔锛� 11鏄灏忔椂鎿嶄綔锛� 12鏄鍒嗛挓鎿嶄綔锛� 13鏄绉掓搷浣滐紝
-     * 14鏄姣鎿嶄綔
-     */
-
-    /**
-     * 澧炲姞骞�
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addYears(Date date, int amount) {
-        return add(date, 1, amount);
-    }
-
-    /**
-     * 澧炲姞鏈�
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addMonths(Date date, int amount) {
-        return add(date, 2, amount);
-    }
-
-    /**
-     * 澧炲姞鍛�
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addWeeks(Date date, int amount) {
-        return add(date, 3, amount);
-    }
-
-    /**
-     * 澧炲姞澶�
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addDays(Date date, int amount) {
-        return add(date, 5, amount);
-    }
-
-    /**
-     * 澧炲姞鏃�
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addHours(Date date, int amount) {
-        return add(date, 11, amount);
-    }
-
-    /**
-     * 澧炲姞鍒�
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addMinutes(Date date, int amount) {
-        return add(date, 12, amount);
-    }
-
-    /**
-     * 澧炲姞绉�
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addSeconds(Date date, int amount) {
-        return add(date, 13, amount);
-    }
-
-    /**
-     * 澧炲姞姣
-     * @param date
-     * @param amount
-     * @return
-     */
-    public static Date addMilliseconds(Date date, int amount) {
-        return add(date, 14, amount);
-    }
-
-
-
-    /**
-     * time宸�
-     * @param before
-     * @param after
-     * @return
-     */
-    public static long diffTimes(Date before, Date after){
-        return after.getTime() - before.getTime();
-    }
-
-    /**
-     * 绉掑樊
-     * @param before
-     * @param after
-     * @return
-     */
-    public static long diffSecond(Date before, Date after){
-        return (after.getTime() - before.getTime())/1000;
-    }
-
-    /**
-     * 鍒嗙宸�
-     * @param before
-     * @param after
-     * @return
-     */
-    public static int diffMinute(Date before, Date after){
-        return (int)(after.getTime() - before.getTime())/1000/60;
-    }
-
-    /**
-     * 鏃跺樊
-     * @param before
-     * @param after
-     * @return
-     */
-    public static int diffHour(Date before, Date after){
-        return (int)(after.getTime() - before.getTime())/1000/60/60;
-    }
-
-    /**
-     * 澶╂暟宸�
-     * @param before
-     * @param after
-     * @return
-     */
-    public static int diffDay(Date before, Date after) {
-        return Integer.parseInt(String.valueOf(((after.getTime() - before.getTime()) / 86400000)));
-    }
-
-    /**
-     * 鏈堝樊
-     * @param before
-     * @param after
-     * @return
-     */
-    public static int diffMonth(Date before, Date after){
-        int monthAll=0;
-        int yearsX = diffYear(before,after);
-        Calendar c1 = Calendar.getInstance();
-        Calendar c2 = Calendar.getInstance();
-        c1.setTime(before);
-        c2.setTime(after);
-        int monthsX = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
-        monthAll=yearsX*12+monthsX;
-        int daysX =c2.get(Calendar.DATE) - c1.get(Calendar.DATE);
-        if(daysX>0){
-            monthAll=monthAll+1;
-        }
-        return monthAll;
-    }
-
-    /**
-     * 骞村樊
-     * @param before
-     * @param after
-     * @return
-     */
-    public static int diffYear(Date before, Date after) {
-        return getYear(after) - getYear(before);
-    }
-
-    /**
-     * 璁剧疆23:59:59
-     * @param date
-     * @return
-     */
-    public static Date setEndDay(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.set(Calendar.HOUR_OF_DAY, 23);
-        calendar.set(Calendar.MINUTE, 59);
-        calendar.set(Calendar.SECOND, 59);
-        return calendar.getTime();
-    }
-
-    /**
-     * 璁剧疆00:00:00
-     * @param date
-     * @return
-     */
-    public static Date setStartDay(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.set(Calendar.HOUR_OF_DAY, 00);
-        calendar.set(Calendar.MINUTE, 00);
-        calendar.set(Calendar.SECOND, 00);
-        return calendar.getTime();
-    }
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java
deleted file mode 100644
index 58ea4cc..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.springblade.code.utils;
-
-public class EnumVO{
-    /***
-     *
-     */
-    private String enumText;
-    private String enumValue;
-
-    public String getEnumText() {
-        return enumText;
-    }
-
-    public void setEnumText(String enumText) {
-        this.enumText = enumText;
-    }
-
-    public String getEnumValue() {
-        return enumValue;
-    }
-
-    public void setEnumValue(String enumValue) {
-        this.enumValue = enumValue;
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java
deleted file mode 100644
index aeb2952..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package org.springblade.code.utils;
-
-import org.springframework.http.*;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * http璇锋眰宸ュ叿绫�
- *
- * @since 2020-03-25
- */
-public class HttpUtils {
-
-    //Content-Type鐨刱ey
-    public static String CONTENT_TYPE = "Content-Type";
-    //json鏁版嵁
-    public static String CONTENT_TYPE_JSON = MediaType.APPLICATION_JSON_VALUE;
-    public static String CONTENT_TYPE_JSON_UTF8 = MediaType.APPLICATION_JSON_UTF8_VALUE;
-
-    //琛ㄥ崟鏍煎紡,榛樿
-    public static String CONTENT_TYPE_TEXT = MediaType.APPLICATION_FORM_URLENCODED_VALUE;
-
-    /**
-     * get璇锋眰
-     *
-     * @param url
-     * @return
-     */
-    public static String get(String url) {
-        return get(url, null);
-    }
-
-    /**
-     * get璇锋眰
-     *
-     * @param url
-     * @param headers 璇锋眰澶�
-     * @return
-     */
-    public static String get(String url, MultiValueMap<String, String> headers) {
-        return request(url, null, headers, HttpMethod.GET);
-    }
-
-    /**
-     * post璇锋眰
-     *
-     * @param url
-     * @param params 璇锋眰鍙傛暟
-     * @return
-     */
-    public static String post(String url, MultiValueMap<String, String> params) {
-        return post(url, params, null);
-    }
-
-    /**
-     * post璇锋眰
-     *
-     * @param url
-     * @param params  璇锋眰鍙傛暟
-     * @param headers 璇锋眰澶�
-     * @return
-     */
-    public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
-        return request(url, params, headers, HttpMethod.POST);
-    }
-
-    /**
-     * put璇锋眰
-     *
-     * @param url
-     * @param params 璇锋眰鍙傛暟
-     * @return
-     */
-    public static String put(String url, MultiValueMap<String, String> params) {
-        return put(url, params, null);
-    }
-
-    /**
-     * put璇锋眰
-     *
-     * @param url
-     * @param params  璇锋眰鍙傛暟
-     * @param headers 璇锋眰澶�
-     * @return
-     */
-    public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
-        return request(url, params, headers, HttpMethod.PUT);
-    }
-
-    /**
-     * delete璇锋眰
-     *
-     * @param url
-     * @param params 璇锋眰鍙傛暟
-     * @return
-     */
-    public static String delete(String url, MultiValueMap<String, String> params) {
-        return delete(url, params, null);
-    }
-
-    /**
-     * delete璇锋眰
-     *
-     * @param url
-     * @param params  璇锋眰鍙傛暟
-     * @param headers 璇锋眰澶�
-     * @return
-     */
-    public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
-        return request(url, params, headers, HttpMethod.DELETE);
-    }
-
-    /**
-     * 琛ㄥ崟璇锋眰
-     *
-     * @param url
-     * @param params  璇锋眰鍙傛暟
-     * @param headers 璇锋眰澶�
-     * @param method  璇锋眰鏂瑰紡
-     * @return
-     */
-    public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
-        if (params == null) {
-            params = new LinkedMultiValueMap<>();
-        }
-        return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
-    }
-
-    /**
-     * http璇锋眰
-     *
-     * @param url
-     * @param params    璇锋眰鍙傛暟
-     * @param headers   璇锋眰澶�
-     * @param method    璇锋眰鏂瑰紡
-     * @param mediaType 鍙傛暟绫诲瀷
-     * @return
-     */
-    public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
-        if (url == null || url.trim().isEmpty()) {
-            return null;
-        }
-        RestTemplate client = new RestTemplate();
-        // header
-        HttpHeaders httpHeaders = new HttpHeaders();
-        if (headers != null) {
-            httpHeaders.addAll(headers);
-        }
-        // 鎻愪氦鏂瑰紡锛氳〃鍗曘�乯son
-        httpHeaders.setContentType(mediaType);
-        HttpEntity<Object> httpEntity = new HttpEntity(params, httpHeaders);
-        ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
-        return response.getBody();
-    }
-
-    public static MultiValueMap<String, String> set_params_headers(String key,String value,MultiValueMap<String, String> map){
-        if(map==null){
-            map = new LinkedMultiValueMap<>();
-        }
-        map.add(key,value);
-        return map;
-    }
-    /**
-     * 鑾峰彇ip
-     * @param request
-     * @return
-     */
-    public static String getIpAddressFromRequest(HttpServletRequest request){
-        String ip = request.getHeader("X-Forwarded-For");
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("Proxy-Client-IP");
-        }
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("WL-Proxy-Client-IP");
-        }
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("HTTP_CLIENT_IP");
-        }
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
-        }
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getRemoteAddr();
-        }
-        if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") >-1) {
-            //0:0:0:0:0:0:0:1鏄湰鏈哄湪璁块棶
-            ip = "127.0.0.1";
-        }
-        return ip;
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java
deleted file mode 100644
index ce153c0..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.springblade.code.utils;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import de.odysseus.staxon.json.JsonXMLConfig;
-import de.odysseus.staxon.json.JsonXMLConfigBuilder;
-import de.odysseus.staxon.json.JsonXMLOutputFactory;
-import org.apache.commons.lang3.StringUtils;
-
-import javax.xml.stream.XMLEventReader;
-import javax.xml.stream.XMLEventWriter;
-import javax.xml.stream.XMLInputFactory;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class Json2XmlUtil {
-
-    /**
-     * @Description: xml convert to json
-     */
-    public static String XmlToJson(String xmlString){
-
-        StringReader input = new StringReader(xmlString);
-        StringWriter output = new StringWriter();
-        try {
-            JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(true).autoPrimitive(true).prettyPrint(true).build();
-            XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(input);
-            XMLEventWriter writer = new JsonXMLOutputFactory(config).createXMLEventWriter(output);
-            writer.add(reader);
-            reader.close();
-            writer.close();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                output.close();
-                input.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        return output.toString();
-    }
-
-    public static String replaceBlank(String jsonString) {
-        if(StringUtils.isEmpty(jsonString)){
-            return jsonString;
-        }
-        Pattern p = Pattern.compile("\\s*|\t|\r|\n");
-        Matcher m = p.matcher(jsonString);
-        String dest = m.replaceAll("");
-        return dest;
-    }
-
-    public static String jsontoxml(JSONObject jo, String gt) {
-        StringBuffer xmlStr = new StringBuffer();
-        Iterator<Map.Entry<String, Object>> iter = jo.entrySet().iterator();
-        while (iter.hasNext()) {
-            Map.Entry<String, Object> entry = (Map.Entry<String, Object>) iter.next();
-            String key = entry.getKey().toString();
-            String val = entry.getValue().toString();
-            //鍊奸潪绌�
-            if (StringUtils.isNotEmpty(val)) {
-                //JSON瀵硅薄
-                if (val.substring(0, 1).equals("{")) {
-                    xmlStr.append(gt);
-                    xmlStr.append("<");
-                    xmlStr.append(key);
-                    xmlStr.append(">");
-                    xmlStr.append(jsontoxml(JSONObject.parseObject(val), gt + ""));
-                    xmlStr.append(gt);
-                    xmlStr.append("</");
-                    xmlStr.append(key);
-                    xmlStr.append(">");
-                }
-                //JSON鏁扮粍
-                else if (val.substring(0, 1).equals("[")) {
-                    JSONArray ja = JSONArray.parseArray(val);
-                    for (int i = 0; i < ja.size(); i++) {
-                        JSONObject jo2 = new JSONObject();
-                        jo2.put(key, ja.getJSONObject(i));
-                        xmlStr.append(jsontoxml(jo2, gt + ""));
-                    }
-                }
-                //JSON鍊�
-                else {
-                    xmlStr.append(gt);
-                    xmlStr.append("<");
-                    xmlStr.append(key);
-                    xmlStr.append(">");
-                    xmlStr.append(val);
-                    xmlStr.append("</");
-                    xmlStr.append(key);
-                    xmlStr.append(">");
-                }
-            }
-            //鍊间负绌�
-            else{
-                xmlStr.append(gt);
-                xmlStr.append("<");
-                xmlStr.append(key);
-                xmlStr.append(">");
-                xmlStr.append("");
-                xmlStr.append("</");
-                xmlStr.append(key);
-                xmlStr.append(">");
-            }
-        }
-        return xmlStr.toString();
-    }
-
-    public static String jsonToXml(JSONObject jo0) {
-        String xml = jsontoxml(jo0, "");
-        return xml;
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java
deleted file mode 100644
index 72b4d7d..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.springblade.code.utils;
-
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class PatternUtil {
-
-    //*${xxx}*
-    public static Pattern dynamic = Pattern.compile(".*\\$\\{([a-z]+)\\}.*");
-    public static Pattern dynamicLimitCount = Pattern.compile("\\$\\{([a-z]+)\\}");
-    /**
-     * 鍒ゆ柇鍐呭涓槸鍚﹀寘鍚姩鎬佸弬鏁�(${key}褰㈠紡鐨�)
-     *
-     * @param content 瑕佸垽鏂殑鍐呭
-     * @return
-     */
-    public static boolean isContainsDynamicParameter(String content) {
-        if(StringUtils.isBlank(content)){
-            return false;
-        }
-        return dynamic.matcher(content).matches();
-    }
-
-    /**
-     * 鎸夌収鍔ㄦ�佸唴瀹圭殑鍙傛暟鍑虹幇椤哄簭,灏嗗弬鏁版斁鍒癓ist涓�
-     *
-     * @param content
-     * @return
-     */
-    public static List<String> getKeyListByContent(String content) {
-        if(StringUtils.isBlank(content)){
-            return new ArrayList<>();
-        }
-        Set<String> paramSet = new LinkedHashSet<>();
-        Matcher m = dynamicLimitCount.matcher(content);
-        while (m.find()) {
-            paramSet.add(m.group(1));
-        }
-        return new ArrayList<>(paramSet);
-    }
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java
deleted file mode 100644
index ccbc71f..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.springblade.code.utils;
-
-public class Pro{
-    public String key;
-    public String mean;
-    public String value;
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    public String getMean() {
-        return mean;
-    }
-
-    public void setMean(String mean) {
-        this.mean = mean;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    @Override
-    public String toString() {
-        return "Pro{" +
-                "key='" + key + '\'' +
-                ", mean='" + mean + '\'' +
-                ", value='" + value + '\'' +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java
deleted file mode 100644
index e935e63..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.springblade.code.utils;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.commons.lang3.StringUtils;
-
-public class WsAxis2ClientUtil {
-
-    /**
-     * axis2璋冪敤瀹㈡埛绔�
-     *
-     * @param url                   璇锋眰鏈嶅姟鍦板潃
-     * @param nameSpace             鍛藉悕绌洪棿
-     * @param method                鏂规硶鍚�
-     * @param tarName                鍙傛暟鍚嶇О
-     * @param xmlData                璇锋眰鎶ユ枃
-     * @param timeOutInMilliSeconds 瓒呮椂鏃堕棿
-     * @return String 绫诲瀷鐨勫搷搴旀姤鎭�
-     */
-    public static String sendMsg(String url, String nameSpace,String soapAction, String method, String tarName, String xmlData, long timeOutInMilliSeconds) throws Exception {
-        ServiceClient serviceClient = new ServiceClient();
-        Options option = new Options();
-        option.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-        option.setTransportInProtocol(Constants.TRANSPORT_HTTP);
-
-        // 鍊间负targetNamespace+methodName
-        if(StringUtils.isEmpty(soapAction)){
-            soapAction = nameSpace+method;
-        }
-        option.setAction(soapAction);
-
-        EndpointReference epfs = new EndpointReference(url);
-        option.setTo(epfs);
-        serviceClient.setOptions(option);
-
-        OMFactory fac = OMAbstractFactory.getOMFactory();
-        OMNamespace namespaceOM = fac.createOMNamespace(nameSpace, "");
-        OMElement element = fac.createOMElement(method, namespaceOM);
-        OMElement theCityCode = fac.createOMElement(tarName, namespaceOM);
-        theCityCode.setText(xmlData);
-        element.addChild(theCityCode);
-//        OMElement theUserID = fac.createOMElement("theUserID ", namespace);
-//        theUserID.setText("");
-//        element.addChild(theUserID);
-
-        OMElement resultOM = serviceClient.sendReceive(element);
-
-        String result = resultOM.getFirstElement().getText();
-        System.out.println(result);
-        return result;
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java
deleted file mode 100644
index 2c23c8a..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.springblade.code.utils;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.commons.lang3.StringUtils;
-
-public class WsErpClientUtil {
-
-    /**
-     * axis2璋冪敤瀹㈡埛绔�
-     *
-     * @param url                   璇锋眰鏈嶅姟鍦板潃
-     * @param nameSpace             鍛藉悕绌洪棿
-     * @param method                鏂规硶鍚�
-     * @param tarName                鍙傛暟鍚嶇О
-     * @param xmlData                璇锋眰鎶ユ枃
-     * @param timeOutInMilliSeconds 瓒呮椂鏃堕棿
-     * @return String 绫诲瀷鐨勫搷搴旀姤鎭�
-     */
-    public static String sendMsg(String url, String nameSpace,String soapAction, String method, String tarName, String xmlData, long timeOutInMilliSeconds) throws Exception {
-        ServiceClient serviceClient = new ServiceClient();
-        Options option = new Options();
-        option.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-        option.setTransportInProtocol(Constants.TRANSPORT_HTTP);
-
-        // 鍊间负targetNamespace+methodName
-        if(StringUtils.isEmpty(soapAction)){
-            soapAction = nameSpace+method;
-        }
-        option.setAction(soapAction);
-
-        EndpointReference epfs = new EndpointReference(url);
-        option.setTo(epfs);
-        serviceClient.setOptions(option);
-
-        OMFactory fac = OMAbstractFactory.getOMFactory();
-        OMNamespace namespaceOM = fac.createOMNamespace(nameSpace, "");
-        OMElement element = fac.createOMElement(method, namespaceOM);
-        OMElement theCityCode = fac.createOMElement(tarName, namespaceOM);
-        theCityCode.setText(xmlData);
-        element.addChild(theCityCode);
-//        OMElement theUserID = fac.createOMElement("theUserID ", namespace);
-//        theUserID.setText("");
-//        element.addChild(theUserID);
-
-        OMElement resultOM = serviceClient.sendReceive(element);
-
-        String result = resultOM.getFirstElement().getText();
-        System.out.println(result);
-        return result;
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java
deleted file mode 100644
index 0db27e5..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package org.springblade.code.utils;
-
-import java.util.List;
-
-public class XmlData{
-    public String unique;
-    public String type;//鍒嗙被缂栧彿
-    public String sendtype;//鎺ㄩ�佹暟鎹被鍨�
-    public String state;//鍏跺疄灏辨槸datacode锛屼篃鏄痗ode
-    public String msg;//鍏跺疄灏辨槸datamsg
-    public String num;
-    public String namepath;
-    public String name;
-    public String idpath;
-    public String id;
-    public Integer orderNum;
-    public String parentId;
-    public List<Pro> pros;
-
-
-    public String getUnique() {
-        return unique;
-    }
-
-    public void setUnique(String unique) {
-        this.unique = unique;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public String getNum() {
-        return num;
-    }
-
-    public void setNum(String num) {
-        this.num = num;
-    }
-
-    public String getNamepath() {
-        return namepath;
-    }
-
-    public void setNamepath(String namepath) {
-        this.namepath = namepath;
-    }
-
-    public String getIdpath() {
-        return idpath;
-    }
-
-    public void setIdpath(String idpath) {
-        this.idpath = idpath;
-    }
-
-    public List<Pro> getPros() {
-        return pros;
-    }
-
-    public String getSendtype() {
-        return sendtype;
-    }
-
-    public void setSendtype(String sendtype) {
-        this.sendtype = sendtype;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public void setPros(List<Pro> pros) {
-        this.pros = pros;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public int getOrderNum() {
-        return orderNum;
-    }
-
-    public void setOrderNum(int orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    public String getParentId() {
-        return parentId;
-    }
-
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
-    }
-
-    @Override
-    public String toString() {
-        return "XmlData{" +
-                "unique='" + unique + '\'' +
-                ", type='" + type + '\'' +
-                ", sendtype='" + sendtype + '\'' +
-                ", state='" + state + '\'' +
-                ", msg='" + msg + '\'' +
-                ", num='" + num + '\'' +
-                ", namepath='" + namepath + '\'' +
-                ", name='" + name + '\'' +
-                ", idpath='" + idpath + '\'' +
-                ", id='" + id + '\'' +
-                ", orderNum='" + orderNum + '\'' +
-                ", parentId='" + parentId + '\'' +
-                ", pros=" + pros +
-                '}';
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java
deleted file mode 100644
index c108432..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java
+++ /dev/null
@@ -1,770 +0,0 @@
-package org.springblade.code.utils;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import org.apache.commons.lang3.StringUtils;
-import org.dom4j.Attribute;
-import org.dom4j.Document;
-import org.dom4j.DocumentHelper;
-import org.dom4j.Element;
-import org.dom4j.io.OutputFormat;
-import org.dom4j.io.XMLWriter;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.code.constant.MdmDuckingConstant.*;
-
-
-public class XmlUtil {
-    /*
-    绗竴鐗堟湰
-     */
-    public static Map<String,Object> readPreXml_bak(String xmlData) throws Exception{
-
-        Map<String,Object> datasMap = new HashMap<String,Object>();
-
-        Document document = DocumentHelper.parseText(xmlData);
-        Element datas_element = document.getRootElement();
-        Attribute datas_systemid_attr = datas_element.attribute(XML_SYSTEMID);
-        String systemid = datas_systemid_attr==null?"":datas_systemid_attr.getValue();//systemid
-
-        List<Element> data_elements = datas_element.elements(XML_DATA);
-        List<Map<String,Object>> dataMapList = new ArrayList<Map<String,Object>>();
-        for (Element data_element:data_elements){
-            Map<String,Object> dataMap = new HashMap<String,Object>();
-
-            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
-            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
-
-            Attribute data_type_attr = data_element.attribute(XML_TYPE);
-            String type = data_type_attr==null?"":data_type_attr.getValue();//type
-
-            Element pro_elements = data_element.element(XML_PROS);
-            List<Element> attrs_elements = pro_elements.elements(XML_ATTR);
-
-            List<Map<String,String>> attrList = new ArrayList<Map<String,String>>();
-            for (Element attr_element:attrs_elements){
-                Map<String,String> attrMap = new HashMap<String,String>();
-
-                Attribute attr_key_attr = attr_element.attribute(XML_KEY);
-                String attr_key = attr_key_attr==null?"":attr_key_attr.getValue();//key
-
-                Attribute attr_mean_attr = attr_element.attribute(XML_MEAN);
-                String attr_mean = attr_mean_attr==null?"":attr_mean_attr.getValue();//mean
-
-                String attr_text = attr_element.getText();
-
-                attrMap.put(XML_KEY,attr_key);
-                attrMap.put(XML_MEAN,attr_mean);
-                attrMap.put(XML_TEXT,attr_text);
-                attrList.add(attrMap);
-            }
-            dataMap.put(XML_UNIQUE,unique);
-            dataMap.put(XML_TYPE,type);
-            dataMap.put(XML_ATTR,attrList);
-
-            dataMapList.add(dataMap);
-
-            datasMap.put(XML_SYSTEMID,systemid);
-            datasMap.put(XML_DATAS,dataMapList);
-        }
-        return datasMap;
-    }
-
-    public static String writePreBackXmlData_bak(String code,String msg,List<XmlData> xmlDataList){
-        String xmlString = null;
-        try {
-            Document document = DocumentHelper.createDocument();
-            document.setXMLEncoding("UTF-8");
-            Element root = document.addElement(XML_DATAS);
-            root.addAttribute(XML_CODE, code);
-            root.addAttribute(XML_MSG, msg);
-            if(xmlDataList!=null) {
-                for (XmlData xmlData : xmlDataList) {
-                    if(xmlData==null){
-                        continue;
-                    }
-                    Element data_element = root.addElement(XML_DATA);
-                    data_element.addAttribute(XML_UNIQUE, xmlData.getUnique());
-                    data_element.addAttribute(XML_STATE, xmlData.getState());
-                    data_element.addAttribute(XML_MSG, xmlData.getMsg());
-                    data_element.addAttribute(XML_NUM, xmlData.getNum());
-                }
-            }
-            OutputFormat format = OutputFormat.createPrettyPrint();
-            XMLWriter writer = new XMLWriter(format);
-            writer.write(document);
-            xmlString=document.asXML();
-        } catch (Exception e) {
-            // TODO: handle exception
-        }
-        return xmlString;
-    }
-
-    /*
-    鏍规嵁閮ㄩ暱宸茬粡淇敼鐨勭涓�鐗�
-    <object>
-        <systemid>MPM</systemid>
-        <datas>
-            <data>
-                <unique>oa0001</unique>
-                <type>wupin</type>
-                <pros>
-                    <pro>
-                        <key>code01</key>
-                        <mean>鎵�灞炵粨鏋�</mean>
-                        <value>娓╁害璋冭妭鍣�1</value>
-                    </pro>
-                    <pro>
-                        <key>code02</key>
-                        <mean>涓昏鍔熻兘</mean>
-                        <value>瀵肩數杩炴帴1</value>
-                    </pro>
-                </pros>
-            </data>
-            <data>
-                <unique>oa0002</unique>
-                <type>wupin</type>
-                <pros>
-                    <pro>
-                        <key>code01</key>
-                        <mean>鎵�灞炵粨鏋�</mean>
-                        <value>娓╁害璋冭妭鍣�2</value>
-                    </pro>
-                    <pro>
-                        <key>code02</key>
-                        <mean>涓昏鍔熻兘</mean>
-                        <value>瀵肩數杩炴帴2</value>
-                    </pro>
-                </pros>
-            </data>
-        </datas>
-    </object>
-     */
-    public static Map<String,Object> readPreXml1(String xmlData) throws Exception{
-
-        Map<String,Object> datasMap = new HashMap<String,Object>();
-
-        Document document = DocumentHelper.parseText(xmlData);
-        Element object_element = document.getRootElement();
-        Element system_element = object_element.element(XML_SYSTEMID);
-        String systemid = system_element.getText();
-        Element datas_element = object_element.element(XML_DATAS);
-        List<Element> data_elements = datas_element.elements(XML_DATA);
-        List<Map<String,Object>> datasList = new ArrayList<Map<String,Object>>();
-        for (Element data_element:data_elements){
-            Map<String,Object> dataMap = new HashMap<String,Object>();
-
-            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
-            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
-
-            Attribute data_type_attr = data_element.attribute(XML_TYPE);
-            String type = data_type_attr==null?"":data_type_attr.getValue();//type
-
-            Element pros_elements = data_element.element(XML_PROS);
-            List<Element> pro_elements = pros_elements.elements(XML_PRO);
-
-            List<Map<String,String>> proList = new ArrayList<Map<String,String>>();
-            for (Element pro_element:pro_elements){
-                Map<String,String> proMap = new HashMap<String,String>();
-
-                Element pro_key_element = pro_element.element(XML_KEY);
-                String pro_key = pro_key_element==null?"":pro_key_element.getText();//key
-
-                Element pro_mean_element = pro_element.element(XML_MEAN);
-                String pro_mean = pro_mean_element==null?"":pro_mean_element.getText();//mean
-
-                String pro_text = pro_element.getText();
-
-                proMap.put(XML_KEY,pro_key);
-                proMap.put(XML_MEAN,pro_mean);
-                proMap.put(XML_TEXT,pro_text);
-                proList.add(proMap);
-            }
-            dataMap.put(XML_UNIQUE,unique);
-            dataMap.put(XML_TYPE,type);
-            dataMap.put(XML_PROS,proList);
-
-            datasList.add(dataMap);
-
-            datasMap.put(XML_SYSTEMID,systemid);
-            datasMap.put(XML_DATAS,datasList);
-        }
-        return datasMap;
-    }
-
-    /*
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object>
-        <msg>澶勭悊鎴愬姛</msg>
-        <code>200</code>
-        <datas>
-            <data>
-                <unique>oa0001</unique>
-                <datacode>200</datacode>
-                <datamsg>鏍规嵁鍥惧彿鏌ヨ缂栫爜鎴愬姛锛�</datamsg>
-                <num>OA-0002-01</num>
-            </data>
-            <data>
-                <unique>oa0002</unique>
-                <datacode>400</datacode>
-                <datamsg>鎺ユ敹鏁版嵁鎴愬姛锛�</datamsg>
-                <num/>
-            </data>
-            <data>
-                <unique>oa0003</unique>
-                <datacode>500</datacode>
-                <datamsg>鎺ユ敹鏁版嵁澶辫触锛屽弬鏁扮己灏憉nique锛�</datamsg>
-                <num/>
-            </data>
-        </datas>
-    </object>
-     */
-    public static String writePreBackXmlData1(String code,String msg,List<XmlData> xmlDataList){
-        String xmlString = null;
-        try {
-            Document document = DocumentHelper.createDocument();
-            document.setXMLEncoding("UTF-8");
-            Element object_element = document.addElement(XML_OBJECT);
-
-            Element code_element = object_element.addElement(XML_CODE);
-            code_element.setText(code);
-
-            Element msg_element = object_element.addElement(XML_MSG);
-            msg_element.setText(msg);
-
-            if(xmlDataList!=null) {
-                for (XmlData xmlData : xmlDataList) {
-                    if(xmlData==null){
-                        continue;
-                    }
-                    Element data_element = object_element.addElement(XML_DATA);
-
-                    Element unique_element = data_element.addElement(XML_UNIQUE);
-                    unique_element.setText(xmlData.getUnique());
-
-                    Element datacode_element = data_element.addElement(XML_DATACODE);
-                    datacode_element.setText(xmlData.getState());
-
-                    Element datacmsg_element = data_element.addElement(XML_DATAMSG);
-                    datacmsg_element.setText(xmlData.getMsg());
-
-                    Element num_element = data_element.addElement(XML_NUM);
-                    num_element.setText(xmlData.getNum());
-                }
-            }
-            OutputFormat format = OutputFormat.createPrettyPrint();
-            XMLWriter writer = new XMLWriter(format);
-            writer.write(document);
-            xmlString=document.asXML();
-        } catch (Exception e) {
-            // TODO: handle exception
-        }
-        return xmlString;
-    }
-
-    /*
-    閮ㄩ暱浜茶嚜鍔ㄦ墜淇敼鐨勭増鏈�
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object systemid="MPM">
-        <datas>
-            <data unique="oa0001" type="wupin">
-                <props>
-                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�1" />
-                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩數杩炴帴1" />
-                </props>
-            </data>
-            <data unique="oa0002" type="wupin">
-                <props>
-                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�2" />
-                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩數杩炴帴2" />
-                </props>
-            </data>
-        </datas>
-    </object>
-     */
-    public static Map<String,Object> readPreXmlData(String xmlData) throws Exception{
-
-        Map<String,Object> datasMap = new HashMap<String,Object>();
-
-        Document document = DocumentHelper.parseText(xmlData);
-        Element object_element = document.getRootElement();
-
-        Attribute systemid_attr = object_element.attribute(XML_SYSTEMID);
-        String systemid = systemid_attr.getValue();
-
-        Element datas_element = object_element.element(XML_DATAS);
-        List<Element> data_elements = datas_element.elements(XML_DATA);
-        List<Map<String,Object>> datasList = new ArrayList<Map<String,Object>>();
-        for (Element data_element:data_elements){
-            Map<String,Object> dataMap = new HashMap<String,Object>();
-
-            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
-            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
-
-            Attribute data_type_attr = data_element.attribute(XML_TYPE);
-            String type = data_type_attr==null?"":data_type_attr.getValue();//type
-
-            Element pros_elements = data_element.element(XML_PROS);
-            List<Element> pro_elements = pros_elements.elements(XML_PRO);
-
-            List<Map<String,String>> proList = new ArrayList<Map<String,String>>();
-            for (Element pro_element:pro_elements){
-                Map<String,String> proMap = new HashMap<String,String>();
-
-                Attribute pro_key_attr = pro_element.attribute(XML_KEY);
-                String pro_key = pro_key_attr==null?"":pro_key_attr.getValue();//key
-
-                pro_key = pro_key.toLowerCase();//鍏ㄩ兘杞崲涓哄皬鍐�
-
-                Attribute pro_mean_attr = pro_element.attribute(XML_MEAN);
-                String pro_mean = pro_mean_attr==null?"":pro_mean_attr.getValue();//mean
-
-                Attribute pro_value_attr = pro_element.attribute(XML_VALUE);
-                String pro_value = pro_value_attr==null?"":pro_value_attr.getValue();//mean
-
-                proMap.put(XML_KEY,pro_key);
-                proMap.put(XML_MEAN,pro_mean);
-                proMap.put(XML_TEXT,pro_value);
-                proList.add(proMap);
-            }
-            dataMap.put(XML_UNIQUE,unique);
-            dataMap.put(XML_TYPE,type);
-            dataMap.put(XML_PROS,proList);
-
-            datasList.add(dataMap);
-
-            datasMap.put(XML_SYSTEMID,systemid);
-            datasMap.put(XML_DATAS,datasList);
-        }
-        return datasMap;
-    }
-
-    /*
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object>
-        <msg>澶勭悊鎴愬姛</msg>
-        <code>200</code>
-        <datas>
-            <data unique="oa0001" state="200" num="OA-0002-01">
-                <msg>鏍规嵁鍥惧彿鏌ヨ缂栫爜鎴愬姛锛�</msg>
-            </data>
-            <data unique="oa0002" state="400" num="">
-                <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
-            </data>
-        </datas>
-    </object>
-     */
-    public static String writePreBackXmlData(String code,String msg,List<XmlData> xmlDataList){
-        String xmlString = null;
-        try {
-            Document document = DocumentHelper.createDocument();
-            document.setXMLEncoding("UTF-8");
-            Element object_element = document.addElement(XML_OBJECT);
-
-            Element code_element = object_element.addElement(XML_CODE);
-            code_element.setText(code);
-
-            Element msg_element = object_element.addElement(XML_MSG);
-            msg_element.setText(msg);
-
-            Element datas_element = object_element.addElement(XML_DATAS);
-
-            if(xmlDataList!=null) {
-                for (XmlData xmlData : xmlDataList) {
-                    if(xmlData==null){
-                        continue;
-                    }
-                    Element data_element = datas_element.addElement(XML_DATA);
-
-                    data_element.addAttribute(XML_UNIQUE,xmlData.getUnique());
-                    data_element.addAttribute(XML_STATE,xmlData.getState());
-                    data_element.addAttribute(XML_NUM,xmlData.getNum());
-
-                    Element datamsg_element = data_element.addElement(XML_MSG);
-                    datamsg_element.setText(xmlData.getMsg());
-                }
-            }
-            OutputFormat format = OutputFormat.createPrettyPrint();
-            XMLWriter writer = new XMLWriter(format);
-            writer.write(document);
-            xmlString=document.asXML();
-        } catch (Exception e) {
-            // TODO: handle exception
-        }
-        return xmlString;
-    }
-
-    /*
-    涓绘暟鎹帹閫佺殑xmlData鏍煎紡
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object>
-        <datas>
-            <data unique="oa0002" type="wupin" state="3" num="01020000003">
-                <namepath>鐗╁搧#鎴愬搧鍙婇檮浠�</namepath>
-                <idpath>wuping#cpjfj</idpath>
-                <props>
-                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�2" />
-                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩嚎杩炴帴2" />
-                </props>
-            </data>
-        </datas>
-    </object>
-     */
-    public static String writeSendXmlData(List<XmlData> xmlDataList) {
-        String xmlString = null;
-        try {
-            Document document = DocumentHelper.createDocument();
-            document.setXMLEncoding("UTF-8");
-            Element object_element = document.addElement(XML_OBJECT);
-
-            Element datas_element = object_element.addElement(XML_DATAS);
-
-            if (xmlDataList != null) {
-                for (XmlData xmlData : xmlDataList) {
-                    if (xmlData == null) {
-                        continue;
-                    }
-                    Element data_element = datas_element.addElement(XML_DATA);
-                    data_element.addAttribute(XML_UNIQUE, xmlData.getUnique());
-                    data_element.addAttribute(XML_TYPE, xmlData.getType());
-                    data_element.addAttribute(XML_STATE, xmlData.getSendtype());
-
-                    Element pros_element = data_element.addElement(XML_PROS);
-                    List<Pro> pros = xmlData.getPros();
-                    String lcstatue = null;
-                    String id = null;
-                    for (Pro pro : pros) {
-                        if("lcstatus".equals(pro.getKey())){
-                            lcstatue = pro.getValue();
-                        }
-                        if("id".equals(pro.getKey())){
-                            id = pro.getValue();
-                        }
-                        Element pro_element = pros_element.addElement(XML_PRO);
-                        pro_element.addAttribute(XML_KEY, pro.getKey());
-                        pro_element.addAttribute(XML_VALUE, pro.getValue());
-                        pro_element.addAttribute(XML_MEAN, pro.getKey());
-                    }
-                    if(StringUtils.isNotEmpty(lcstatue)){
-                        data_element.addAttribute(XML_STATE, lcstatue);
-                    }
-                    if(StringUtils.isNotEmpty(id)){
-                        data_element.addAttribute(XML_NUM, id);
-                    }
-
-                    Element pro_namepath_element = data_element.addElement(XML_NAMEPATH);
-                    pro_namepath_element.setText(xmlData.getNamepath());
-
-                    Element pro_idpath_element = data_element.addElement(XML_IDPATH);
-                    pro_idpath_element.setText(xmlData.getIdpath());
-                }
-            }
-            OutputFormat format = OutputFormat.createPrettyPrint();
-            XMLWriter writer = new XMLWriter(format);
-            writer.write(document);
-            xmlString = document.asXML();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return xmlString;
-    }
-
-    /*
-    鍒嗙被鏁版嵁鎺ㄩ�佺殑xmlData鏍煎紡
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object>
-        <datas>
-            <data>
-                <id>shoutao</id>
-                <idpath>wuping#shoutao</idpath>
-                <name>鎵嬪</name>
-                <namepath>鐗╁搧#鎵嬪</namepath>
-                <orderNum>2</orderNum>
-                <parentId>wuping</parentId>
-            </data>
-        </datas>
-     </object>
-     */
-    public static String writeSendXmlData_classify(List<XmlData> xmlDataList) {
-        String xmlString = null;
-        try {
-            Document document = DocumentHelper.createDocument();
-            document.setXMLEncoding("UTF-8");
-            Element object_element = document.addElement(XML_OBJECT);
-
-            Element datas_element = object_element.addElement(XML_DATAS);
-
-            if (xmlDataList != null) {
-                for (XmlData xmlData : xmlDataList) {
-                    if (xmlData == null) {
-                        continue;
-                    }
-                    Element data_element = datas_element.addElement(XML_DATA);
-
-                    Element pro_name_element = data_element.addElement(XML_NAME);
-                    pro_name_element.setText(xmlData.getName());
-
-                    Element pro_namepath_element = data_element.addElement(XML_NAMEPATH);
-                    pro_namepath_element.setText(xmlData.getNamepath());
-
-                    Element pro_id_element = data_element.addElement(XML_ID);
-                    pro_id_element.setText(xmlData.getId());
-
-                    Element pro_idpath_element = data_element.addElement(XML_IDPATH);
-                    pro_idpath_element.setText(xmlData.getIdpath());
-
-                    Element pro_ordernum_element = data_element.addElement(XML_ORDERNUM);
-                    pro_ordernum_element.setText(xmlData.getOrderNum()+"");
-
-                    Element pro_parentid_element = data_element.addElement(XML_PARENTID);
-                    pro_parentid_element.setText(xmlData.getParentId()==null?"":xmlData.getParentId());
-
-                    Element pro_state_element = data_element.addElement(XML_STATE);
-                    pro_state_element.setText(xmlData.getSendtype());
-                }
-            }
-            OutputFormat format = OutputFormat.createPrettyPrint();
-            XMLWriter writer = new XMLWriter(format);
-            writer.write(document);
-            xmlString = document.asXML();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return xmlString;
-    }
-
-    /*
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object>
-        <msg>澶勭悊鎴愬姛</msg>
-        <code>200</code>
-        <datas>
-        <data unique="oa0001" state="200" num="01020000001">
-            <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
-        </data>
-        </datas>
-    </object>
-     */
-    public static BackXml readSendXmlData(String xmlData) throws Exception{
-
-        BackXml backXml = new BackXml();
-        Document document = DocumentHelper.parseText(xmlData);
-        Element object_element = document.getRootElement();
-
-        Element code_element = object_element.element(XML_CODE);
-        String code = code_element.getText();
-
-        Element msg_element = object_element.element(XML_MSG);
-        String msg = msg_element.getText();
-
-        Element datas_element = object_element.element(XML_DATAS);
-
-        List<Element> data_elements = datas_element.elements(XML_DATA);
-        List<XmlData> datasList = new ArrayList<XmlData>();
-        for (Element data_element:data_elements){
-            XmlData xmlData_return = new XmlData();
-
-            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
-            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
-
-            Attribute data_state_attr = data_element.attribute(XML_STATE);
-            String state = data_state_attr==null?"":data_state_attr.getValue();//state
-
-            Attribute data_num_attr = data_element.attribute(XML_NUM);
-            String num = data_num_attr==null?"":data_num_attr.getValue();//num
-
-            Element data_msg_elements = data_element.element(XML_MSG);
-            String datamsg = data_msg_elements==null?"":data_msg_elements.getText();//msg
-
-            xmlData_return.setUnique(unique);
-            xmlData_return.setState(state);
-            xmlData_return.setNum(num);
-            xmlData_return.setMsg(datamsg);
-            datasList.add(xmlData_return);
-        }
-        backXml.setState(code);
-        backXml.setMsg(msg);
-        backXml.setDatas(datasList);
-        return backXml;
-    }
-
-    /*
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object>
-        <msg>鎺ㄩ�佹垚鍔�</msg>
-        <code>200</code>
-        <datas>
-            <data>
-                <idpath>wuping#shoutao</idpath>
-                <state>true</state>
-            </data>
-            <data>
-                <idpath>wuping#fanghufu</idpath>
-                <state>false</state>
-            </data>
-        </datas>
-    </object>
-     */
-    public static BackXml readSendXmlData_classify(String xmlData) throws Exception{
-
-        BackXml backXml = new BackXml();
-        Document document = DocumentHelper.parseText(xmlData);
-        Element object_element = document.getRootElement();
-
-        Element code_element = object_element.element(XML_CODE);
-        String code = code_element.getText();
-
-        Element msg_element = object_element.element(XML_MSG);
-        String msg = msg_element.getText();
-
-        Element datas_element = object_element.element(XML_DATAS);
-
-        List<Element> data_elements = datas_element.elements(XML_DATA);
-        List<XmlData> datasList = new ArrayList<XmlData>();
-        for (Element data_element:data_elements){
-            XmlData xmlData_return = new XmlData();
-
-            Element data_idpath_elements = data_element.element(XML_IDPATH);
-            String idpath = data_idpath_elements.getText();
-
-            Element data_state_elements = data_element.element(XML_STATE);
-            String state = data_state_elements.getText();
-
-            Element xml_msg_elements = data_element.element(XML_MSG);
-            String xml_msg = xml_msg_elements.getText();
-
-            xmlData_return.setIdpath(idpath);
-            xmlData_return.setMsg(xml_msg);
-            xmlData_return.setState(state);
-
-            datasList.add(xmlData_return);
-        }
-        backXml.setState(code);
-        backXml.setMsg(msg);
-        backXml.setDatas(datasList);
-        return backXml;
-    }
-
-    /*
-    <?xml version="1.0" encoding="UTF-8"?>
-    <object>
-        <msg>澶勭悊鎴愬姛</msg>
-        <code>200</code>
-        <datas>
-        <data unique="oa0001" state="200" num="01020000001">
-            <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
-        </data>
-        </datas>
-    </object>
-     */
-    public static BackXml readSendJsonData(String jsonData) throws Exception{
-
-        BackXml backXml = new BackXml();
-        JSONObject json_root = JSONObject.parseObject(jsonData);
-        String code = json_root.getString(XML_CODE);
-        String msg = json_root.getString(XML_MSG);
-        Object datas_obj = json_root.get(XML_DATAS);
-
-        List<XmlData> datasList = new ArrayList<XmlData>();
-        if(datas_obj!=null){
-            JSONArray datas_arr = (JSONArray)datas_obj;
-            for (Object data_obj:datas_arr){
-                XmlData xmlData_return = new XmlData();
-
-                JSONObject data_json = (JSONObject)data_obj;
-                String unique = data_json.getString(XML_UNIQUE);
-                String state = data_json.getString(XML_STATE);
-                String num = data_json.getString(XML_NUM);
-                String datamsg = data_json.getString(XML_MSG);
-
-                xmlData_return.setUnique(unique);
-                xmlData_return.setState(state);
-                xmlData_return.setNum(num);
-                xmlData_return.setMsg(datamsg);
-                datasList.add(xmlData_return);
-            }
-        }
-
-        backXml.setState(code);
-        backXml.setMsg(msg);
-        backXml.setDatas(datasList);
-        return backXml;
-    }
-
-    //璇诲彇鏁版嵁杞崲xml鏁版嵁涓簃ap
-    /*
-<?xml version="1.0" encoding="UTF-8"?>
-<object>
-<datas>
-<data type="wupin">
-<props>
-<prop key="materialtype">
-<prop_tran mdmkey="1001" mdmvalue="鏉愭枡" systemkey="" tranvalue=""/>
-<prop_tran mdmkey="1002" mdmvalue="鎴愬搧" systemkey="" tranvalue=""/>
-<prop_tran mdmkey="1003" mdmvalue="鏈虹墿鏂�" systemkey="" tranvalue=""/>
-<prop_tran mdmkey="1004" mdmvalue="缁间繚" systemkey="" tranvalue=""/>
-<prop_tran mdmkey="1005" mdmvalue="璧勪骇" systemkey="" tranvalue=""/>
-</prop>
-</props>
-</data>
-</datas>
-</object>
-     */
-    public static Map<String,Object> readTranXml(String tran_xml,String btmid) throws Exception{
-        Map<String,Object> retMap = new HashMap<String,Object>();
-        if(StringUtils.isEmpty(btmid)){
-            return retMap;
-        }
-        Document document = DocumentHelper.parseText(tran_xml);
-        Element object_element = document.getRootElement();
-
-        Element datas_element = object_element.element(XML_DATAS);
-
-        List<Element> data_elements = datas_element.elements(XML_DATA);
-        for (Element data_element:data_elements){
-
-            Attribute data_type_attr = data_element.attribute(XML_TYPE);
-            String data_type = data_type_attr==null?"":data_type_attr.getValue();
-            if(!btmid.equals(data_type)){
-                continue;
-            }
-
-            Element data_pros_elements = data_element.element(XML_PROS);
-            List<Element> data_pro_elements = data_pros_elements.elements(XML_PRO);
-            for (Element data_pro_element:data_pro_elements) {
-                Map<String,String> data_pro_map = new HashMap<String,String>();
-                Attribute xml_type_attr = data_pro_element.attribute(XML_KEY);//materialtype
-                String xml_type = xml_type_attr==null?"":xml_type_attr.getValue();
-
-                List<Element>prop_tran_elements = data_pro_element.elements(XML_PRO_TRAN);//prop_tran
-                for (Element prop_tran_element:prop_tran_elements) {
-                    Attribute mdm_key_attr = prop_tran_element.attribute(XML_MDMKEY);
-                    String mdm_key = mdm_key_attr==null?"":mdm_key_attr.getValue();
-
-                    Attribute mdm_value_attr = prop_tran_element.attribute(XML_MDMVALUE);
-                    String mdm_value = mdm_value_attr==null?"":mdm_value_attr.getValue();
-
-                    Attribute system_key_attr = prop_tran_element.attribute(XML_SYSTEMKEY);
-                    String system_key = system_key_attr==null?"":system_key_attr.getValue();
-
-                    Attribute system_value_attr = prop_tran_element.attribute(XML_SYSTEMVALUE);
-                    String system_value = system_value_attr==null?"":system_value_attr.getValue();
-
-//                  data_pro_map.put(XML_MDMKEY,mdm_key);
-//                  data_pro_map.put(XML_MDMVALUE,mdm_value);
-//                  data_pro_map.put(XML_SYSTEMKEY,system_key);
-//                  data_pro_map.put(XML_SYSTEMVALUE,system_value);
-                    data_pro_map.put(mdm_key,system_key);
-                    data_pro_map.put(mdm_value,system_value);
-                }
-                retMap.put(xml_type,data_pro_map);
-            }
-
-        }
-        return retMap;
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java
deleted file mode 100644
index d7a37cf..0000000
--- a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.springblade.code.utils;
-
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-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;
-
-public class gennerAttrMapUtil {
-    @Autowired
-    private AttributeMapConfig attributeMapConfig;
-    private static  String fileName="";
-    private static gennerAttrMapUtil newInstance=null;
-    public static gennerAttrMapUtil getNewInstance() {
-        if(newInstance==null){
-            newInstance=new gennerAttrMapUtil();
-        }
-        return newInstance;
-    }
-
-    /****
-     * 鑾峰彇
-     * @param systemId
-     */
-    public LibraryDO gennerAttrMapBySystem(String systemId, Map<String, String> system_attrmap) throws Throwable{
-        if(StringUtils.isBlank(systemId)){
-            throw new Throwable("绯荤粺鏍囪瘑涓虹┖");
-        }
-        LibraryDO rootDataVO=new LibraryDO();
-        if(system_attrmap.containsKey(systemId)){
-           String path=system_attrmap.get(systemId);
-           String attributeMapData=  LocalFileUtil.readContentForFile(path);
-           XStream xStream = new XStream(new DomDriver());
-           xStream.processAnnotations(LibraryDO.class);
-           xStream.autodetectAnnotations(true);
-            rootDataVO = (LibraryDO) xStream.fromXML(attributeMapData);
-
-        }
-        return rootDataVO;
-    }
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/pom.xml b/Source/BladeX/blade-service/blade-desk/pom.xml
deleted file mode 100644
index b7da9d5..0000000
--- a/Source/BladeX/blade-service/blade-desk/pom.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <parent>
-        <groupId>org.springblade</groupId>
-        <artifactId>blade-service</artifactId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-desk</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-desk-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-user-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-flow-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <!--Oss-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-oss</artifactId>
-        </dependency>
-        <!--MinIO-->
-        <dependency>
-            <groupId>io.minio</groupId>
-            <artifactId>minio</artifactId>
-        </dependency>
-        <!--QiNiu-->
-        <dependency>
-            <groupId>com.qiniu</groupId>
-            <artifactId>qiniu-java-sdk</artifactId>
-        </dependency>
-        <!--<dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-transaction</artifactId>
-        </dependency>-->
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
deleted file mode 100644
index b4b88ed..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
-
-/**
- * Desk鍚姩鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class DeskApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_DESK_NAME, DeskApplication.class, args);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/DashBoardController.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/DashBoardController.java
deleted file mode 100644
index 2f1dbfe..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/DashBoardController.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package org.springblade.desk.controller;
-
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 棣栭〉
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@Api(value = "棣栭〉", tags = "棣栭〉")
-public class DashBoardController {
-
-	/**
-	 * 娲昏穬鐢ㄦ埛
-	 */
-	@GetMapping("/dashboard/activities")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "娲昏穬鐢ㄦ埛", notes = "娲昏穬鐢ㄦ埛")
-	public R activities() {
-		List<Map<String, Object>> list = new ArrayList<>();
-
-		Map<String, Object> map1 = new HashMap<>(16);
-		map1.put("id", "trend-1");
-		map1.put("updatedAt", "2019-01-01");
-		map1.put("user", Kv.create().set("name", "鏇蹭附涓�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
-		map1.put("group", Kv.create().set("name", "楂橀�兼牸璁捐澶╁洟").set("link", "http://github.com/"));
-		map1.put("project", Kv.create().set("name", "鍏湀杩唬").set("link", "http://github.com/"));
-		map1.put("template", "鍦� @{group} 鏂板缓椤圭洰 @{project}");
-		list.add(map1);
-
-		Map<String, Object> map2 = new HashMap<>(16);
-		map2.put("id", "trend-2");
-		map2.put("updatedAt", "2019-01-01");
-		map2.put("user", Kv.create().set("name", "浠樺皬灏�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
-		map2.put("group", Kv.create().set("name", "楂橀�兼牸璁捐澶╁洟").set("link", "http://github.com/"));
-		map2.put("project", Kv.create().set("name", "涓冩湀鏈堣凯浠�").set("link", "http://github.com/"));
-		map2.put("template", "鍦�  @{group} 鏂板缓椤圭洰 @{project}");
-		list.add(map2);
-
-		return R.data(list);
-	}
-
-	/**
-	 * 鐢ㄦ埛淇℃伅
-	 */
-	@GetMapping("/dashboard/info")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鐢ㄦ埛淇℃伅", notes = "鐢ㄦ埛淇℃伅")
-	public R info() {
-		Map<String, Object> map = new HashMap<>(16);
-		map.put("id", "trend-1");
-		map.put("updatedAt", "2019-01-01");
-		map.put("user", Kv.create().set("name", "鏇蹭附涓�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
-		map.put("group", Kv.create().set("name", "楂橀�兼牸璁捐澶╁洟").set("link", "http://github.com/"));
-		map.put("project", Kv.create().set("name", "鍏湀杩唬").set("link", "http://github.com/"));
-		map.put("template", "鍦� @{group} 鏂板缓椤圭洰 @{project}");
-		return R.data(map);
-	}
-
-	/**
-	 * 绛惧悕淇℃伅
-	 */
-	@PostMapping("/dashboard/sign")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "绛惧悕淇℃伅", notes = "绛惧悕淇℃伅")
-	public R sign() {
-		Map<String, Object> map = new HashMap<>(16);
-		map.put("user", Kv.create().set("name", "鏇蹭附涓�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
-		return R.data(map);
-	}
-
-	/**
-	 * 鑾峰彇娑堟伅
-	 */
-	@GetMapping("/notice/notices")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "娑堟伅", notes = "娑堟伅")
-	public R notices() {
-		List<Map<String, String>> list = new ArrayList<>();
-		Map<String, String> map1 = new HashMap<>(16);
-		map1.put("logo", "https://spring.io/img/homepage/icon-spring-framework.svg");
-		map1.put("title", "SpringBoot");
-		map1.put("description", "鐜板湪鐨剋eb椤圭洰鍑犱箮閮戒細鐢ㄥ埌spring妗嗘灦锛岃�岃浣跨敤spring闅惧厤闇�瑕侀厤缃ぇ閲忕殑xml閰嶇疆鏂囦欢锛岃�� springboot鐨勫嚭鐜拌В   鍐充簡杩欎竴闂锛屼竴涓」鐩敋鑷充笉鐢ㄩ儴缃插埌鏈嶅姟鍣ㄤ笂鐩存帴寮�璺戯紝鐪熷儚springboot鎵�璇达細鈥渏ust run鈥濄��");
-		map1.put("member", "Chill");
-		map1.put("href", "http://spring.io/projects/spring-boot");
-		list.add(map1);
-
-		Map<String, String> map2 = new HashMap<>(16);
-		map2.put("logo", "https://spring.io/img/homepage/icon-spring-cloud.svg");
-		map2.put("title", "SpringCloud");
-		map2.put("description", "SpringCloud鏄熀浜嶴pringBoot鐨勪竴鏁村瀹炵幇寰湇鍔$殑妗嗘灦銆備粬鎻愪緵浜嗗井鏈嶅姟寮�鍙戞墍闇�鐨勯厤缃鐞嗐�佹湇鍔″彂鐜般�佹柇璺櫒銆佹櫤鑳借矾鐢便�佸井浠g悊銆佹帶鍒舵�荤嚎銆佸叏灞�閿併�佸喅绛栫珵閫夈�佸垎甯冨紡浼氳瘽鍜岄泦缇ょ姸鎬佺鐞嗙瓑缁勪欢銆�");
-		map2.put("member", "Chill");
-		map2.put("href", "http://spring.io/projects/spring-cloud");
-		list.add(map2);
-
-		Map<String, String> map3 = new HashMap<>(16);
-		map3.put("logo", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1546359961068&di=05ff9406e6675ca9a58a525a7e7950b9&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D575314515%2C4268715674%26fm%3D214%26gp%3D0.jpg");
-		map3.put("title", "Mybatis");
-		map3.put("description", "MyBatis 鏄竴娆句紭绉�鐨勬寔涔呭眰妗嗘灦锛屽畠鏀寔瀹氬埗鍖� SQL銆佸瓨鍌ㄨ繃绋嬩互鍙婇珮绾ф槧灏勩�侻yBatis 閬垮厤浜嗗嚑涔庢墍鏈夌殑 JDBC 浠g爜鍜屾墜鍔ㄨ缃弬鏁颁互鍙婅幏鍙栫粨鏋滈泦銆侻yBatis 鍙互浣跨敤绠�鍗曠殑 XML 鎴栨敞瑙f潵閰嶇疆鍜屾槧灏勫師鐢熶俊鎭紝灏嗘帴鍙e拰 Java 鐨� POJOs(Plain Old Java Objects,鏅�氱殑 Java瀵硅薄)鏄犲皠鎴愭暟鎹簱涓殑璁板綍銆�");
-		map3.put("member", "Chill");
-		map3.put("href", "http://www.mybatis.org/mybatis-3/getting-started.html");
-		list.add(map3);
-
-		Map<String, String> map4 = new HashMap<>(16);
-		map4.put("logo", "https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png");
-		map4.put("title", "React");
-		map4.put("description", "React 璧锋簮浜� Facebook 鐨勫唴閮ㄩ」鐩紝鍥犱负璇ュ叕鍙稿甯傚満涓婃墍鏈� JavaScript MVC 妗嗘灦锛岄兘涓嶆弧鎰忥紝灏卞喅瀹氳嚜宸卞啓涓�濂楋紝鐢ㄦ潵鏋惰Instagram 鐨勭綉绔欍�傚仛鍑烘潵浠ュ悗锛屽彂鐜拌繖濂椾笢瑗垮緢濂界敤锛屽氨鍦�2013骞�5鏈堝紑婧愪簡銆�");
-		map4.put("member", "Chill");
-		map4.put("href", "https://reactjs.org/");
-		list.add(map4);
-
-		Map<String, String> map5 = new HashMap<>(16);
-		map5.put("logo", "https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png");
-		map5.put("title", "Ant Design");
-		map5.put("description", "铓傝殎閲戞湇浣撻獙鎶�鏈儴缁忚繃澶ч噺鐨勯」鐩疄璺靛拰鎬荤粨锛屾矇娣�鍑鸿璁¤瑷� Ant Design锛岃繖鍙笉鍗曠函鍙槸璁捐鍘熷垯銆佹帶浠惰鑼冨拰瑙嗚灏哄锛岃繕閰嶅鏈夊墠绔唬鐮佸疄鐜版柟妗堛�備篃灏辨槸璇撮噰鐢ˋnt Design鍚庯紝UI璁捐鍜屽墠绔晫闈㈢爺鍙戝彲鍚屾瀹屾垚锛屾晥鐜囧ぇ澶ф彁鍗囥��");
-		map5.put("member", "Chill");
-		map5.put("href", "https://ant.design/docs/spec/introduce-cn");
-		list.add(map5);
-
-		Map<String, String> map6 = new HashMap<>(16);
-		map6.put("logo", "https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png");
-		map6.put("title", "Ant Design Pro");
-		map6.put("description", "Ant Design Pro 鏄竴涓紒涓氱骇寮�绠卞嵆鐢ㄧ殑涓悗鍙板墠绔�/璁捐瑙e喅鏂规銆傜鍚堥樋閲岃拷姹傜殑'鏁忔嵎鐨勫墠绔�+寮哄ぇ鐨勪腑鍙�'鐨勬�濇兂銆�");
-		map6.put("member", "Chill");
-		map6.put("href", "https://pro.ant.design");
-		list.add(map6);
-
-		return R.data(list);
-	}
-
-	/**
-	 * 鑾峰彇鎴戠殑娑堟伅
-	 */
-	@GetMapping("/notice/my-notices")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "娑堟伅", notes = "娑堟伅")
-	public R myNotices() {
-		List<Map<String, String>> list = new ArrayList<>();
-		Map<String, String> map1 = new HashMap<>(16);
-		map1.put("id", "000000001");
-		map1.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png");
-		map1.put("title", "浣犳敹鍒颁簡 14 浠芥柊鍛ㄦ姤");
-		map1.put("datetime", "2018-08-09");
-		map1.put("type", "notification");
-		list.add(map1);
-
-		Map<String, String> map2 = new HashMap<>(16);
-		map2.put("id", "000000002");
-		map2.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png");
-		map2.put("title", "浣犳帹鑽愮殑 鏇插Ξ濡� 宸查�氳繃绗笁杞潰璇�");
-		map2.put("datetime", "2018-08-08");
-		map2.put("type", "notification");
-		list.add(map2);
-
-
-		Map<String, String> map3 = new HashMap<>(16);
-		map3.put("id", "000000003");
-		map3.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg");
-		map3.put("title", "鏇蹭附涓� 璇勮浜嗕綘");
-		map3.put("description", "鎻忚堪淇℃伅鎻忚堪淇℃伅鎻忚堪淇℃伅");
-		map3.put("datetime", "2018-08-07");
-		map3.put("type", "message");
-		map3.put("clickClose", "true");
-		list.add(map3);
-
-
-		Map<String, String> map4 = new HashMap<>(16);
-		map4.put("id", "000000004");
-		map4.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg");
-		map4.put("title", "鏈卞亸鍙� 鍥炲浜嗕綘");
-		map4.put("description", "杩欑妯℃澘鐢ㄤ簬鎻愰啋璋佷笌浣犲彂鐢熶簡浜掑姩锛屽乏渚ф斁銆庤皝銆忕殑澶村儚");
-		map4.put("type", "message");
-		map4.put("datetime", "2018-08-07");
-		map4.put("clickClose", "true");
-		list.add(map4);
-
-
-		Map<String, String> map5 = new HashMap<>(16);
-		map5.put("id", "000000005");
-		map5.put("title", "浠诲姟鍚嶇О");
-		map5.put("description", "浠诲姟闇�瑕佸湪 2018-01-12 20:00 鍓嶅惎鍔�");
-		map5.put("extra", "鏈紑濮�");
-		map5.put("status", "todo");
-		map5.put("type", "event");
-		list.add(map5);
-
-		return R.data(list);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java
deleted file mode 100644
index 85639be..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.controller;
-
-import lombok.AllArgsConstructor;
-import org.springblade.common.cache.CacheNames;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.desk.entity.ProcessLeave;
-import org.springblade.desk.service.ILeaveService;
-import org.springblade.system.user.cache.UserCache;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@RequestMapping("/process/leave")
-@AllArgsConstructor
-public class LeaveController extends BladeController implements CacheNames {
-
-	private final ILeaveService leaveService;
-
-	/**
-	 * 璇︽儏
-	 *
-	 * @param businessId 涓婚敭
-	 */
-	@GetMapping("detail")
-	public R<ProcessLeave> detail(Long businessId) {
-		ProcessLeave detail = leaveService.getById(businessId);
-		detail.getFlow().setAssigneeName(UserCache.getUser(detail.getCreateUser()).getName());
-		return R.data(detail);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 *
-	 * @param leave 璇峰亣淇℃伅
-	 */
-	@PostMapping("start-process")
-	public R startProcess(@RequestBody ProcessLeave leave) {
-		return R.status(leaveService.startProcess(leave));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java
deleted file mode 100644
index 2270900..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.BladePage;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.TenantDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.desk.entity.Notice;
-import org.springblade.desk.feign.INoticeClient;
-import org.springblade.desk.service.INoticeService;
-import org.springblade.desk.vo.NoticeVO;
-import org.springblade.desk.wrapper.NoticeWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.Map;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@TenantDS
-@RestController
-@RequestMapping("notice")
-@AllArgsConstructor
-@Api(value = "鐢ㄦ埛鍗氬", tags = "鍗氬鎺ュ彛")
-public class NoticeController extends BladeController {
-
-	private final INoticeService noticeService;
-
-	private final INoticeClient noticeClient;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆notice")
-	public R<NoticeVO> detail(Notice notice) {
-		Notice detail = noticeService.getOne(Condition.getQueryWrapper(notice));
-		return R.data(NoticeWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "category", value = "鍏憡绫诲瀷", paramType = "query", dataType = "integer"),
-		@ApiImplicitParam(name = "title", value = "鍏憡鏍囬", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
-	public R<IPage<NoticeVO>> list(@ApiIgnore @RequestParam Map<String, Object> notice, Query query) {
-		NoticeWrapper.build().noticeQuery(notice);
-		IPage<Notice> pages = noticeService.page(Condition.getPage(query), Condition.getQueryWrapper(notice, Notice.class));
-		return R.data(NoticeWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 澶氳〃鑱斿悎鏌ヨ鑷畾涔夊垎椤�
-	 */
-	@GetMapping("/page")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "category", value = "鍏憡绫诲瀷", paramType = "query", dataType = "integer"),
-		@ApiImplicitParam(name = "title", value = "鍏憡鏍囬", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
-	public R<IPage<NoticeVO>> page(@ApiIgnore NoticeVO notice, Query query) {
-		IPage<NoticeVO> pages = noticeService.selectNoticePage(Condition.getPage(query), notice);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆notice")
-	public R save(@RequestBody Notice notice) {
-		return R.status(noticeService.save(notice));
-	}
-
-	/**
-	 * 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆notice")
-	public R update(@RequestBody Notice notice) {
-		return R.status(noticeService.updateById(notice));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆notice")
-	public R submit(@RequestBody Notice notice) {
-		return R.status(noticeService.saveOrUpdate(notice));
-	}
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆notice")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎") @RequestParam String ids) {
-		boolean temp = noticeService.deleteLogic(Func.toLongList(ids));
-		return R.status(temp);
-	}
-
-	/**
-	 * 杩滅▼璋冪敤鍒嗛〉鎺ュ彛
-	 */
-	@GetMapping("/top")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鍒嗛〉杩滅▼璋冪敤", notes = "浼犲叆current,size")
-	public R<BladePage<Notice>> top(@ApiParam(value = "褰撳墠椤�") @RequestParam Integer current, @ApiParam(value = "姣忛〉鏄剧ず鏉℃暟") @RequestParam Integer size) {
-		BladePage<Notice> page = noticeClient.top(current, size);
-		return R.data(page);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java
deleted file mode 100644
index 67dc1a6..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.flow.core.entity.FlowEntity;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 璇峰亣娴佺▼瀹炰綋绫�
- *
- * @author Chill
- */
-@Data
-@TableName("pl_wf_process_leave")
-@EqualsAndHashCode(callSuper = true)
-public class ProcessLeave extends FlowEntity {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 娴佺▼瀹氫箟id
-	 */
-	private String processDefinitionId;
-	/**
-	 * 娴佺▼瀹炰緥id
-	 */
-	private String processInstanceId;
-	/**
-	 * 璇峰亣寮�濮嬫椂闂�
-	 */
-	private Date startTime;
-	/**
-	 * 璇峰亣缁撴潫鏃堕棿
-	 */
-	private Date endTime;
-	/**
-	 * 璇峰亣鐞嗙敱
-	 */
-	private String reason;
-	/**
-	 * 瀹℃壒浜�
-	 */
-	private String taskUser;
-	/**
-	 * 娴佺▼鐢宠鏃堕棿
-	 */
-	private Date applyTime;
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/feign/NoticeClient.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/feign/NoticeClient.java
deleted file mode 100644
index c612d8f..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/feign/NoticeClient.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.feign;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.BladePage;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.desk.entity.Notice;
-import org.springblade.desk.service.INoticeService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * Notice Feign
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore()
-@RestController
-@AllArgsConstructor
-public class NoticeClient implements INoticeClient {
-
-	private final INoticeService service;
-
-	@Override
-	@GetMapping(TOP)
-	public BladePage<Notice> top(Integer current, Integer size) {
-		Query query = new Query();
-		query.setCurrent(current);
-		query.setSize(size);
-		IPage<Notice> page = service.page(Condition.getPage(query));
-		return BladePage.of(page);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.java
deleted file mode 100644
index 461bf4f..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.desk.entity.ProcessLeave;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface LeaveMapper extends BaseMapper<ProcessLeave> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.xml b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.xml
deleted file mode 100644
index 37e86b8..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.desk.mapper.LeaveMapper">
-
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.java
deleted file mode 100644
index 22443e5..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.desk.entity.Notice;
-import org.springblade.desk.vo.NoticeVO;
-
-import java.util.List;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface NoticeMapper extends BaseMapper<Notice> {
-
-	/**
-	 * 鍓峃鏉℃暟鎹�
-	 *
-	 * @param number 鏁伴噺
-	 * @return List<Notice>
-	 */
-	List<Notice> topList(Integer number);
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page   鍒嗛〉
-	 * @param notice 瀹炰綋
-	 * @return List<NoticeVO>
-	 */
-	List<NoticeVO> selectNoticePage(IPage page, NoticeVO notice);
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml
deleted file mode 100644
index 8992089..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.desk.mapper.NoticeMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="noticeResultMap" type="org.springblade.desk.entity.Notice">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="release_time" property="releaseTime"/>
-        <result column="title" property="title"/>
-        <result column="content" property="content"/>
-    </resultMap>
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="noticeVOResultMap" type="org.springblade.desk.vo.NoticeVO">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="release_time" property="releaseTime"/>
-        <result column="title" property="title"/>
-        <result column="content" property="content"/>
-    </resultMap>
-
-    <select id="topList" resultMap="noticeResultMap">
-        select * from pl_org_notice limit #{number}
-    </select>
-
-    <select id="selectNoticePage" resultMap="noticeVOResultMap">
-        SELECT
-        n.*,
-        d.dict_value AS categoryName
-        FROM
-        pl_org_notice n
-        LEFT JOIN ( SELECT * FROM pl_sys_dict WHERE CODE = 'notice' ) d ON n.category = d.dict_key
-        WHERE
-        n.is_deleted = 0 and n.tenant_id = #{notice.tenantId}
-        <if test="notice.title!=null">
-            and n.title like concat(concat('%', #{notice.title}), '%')
-        </if>
-        <if test="notice.category!=null">
-            and n.category = #{notice.category}
-        </if>
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java
deleted file mode 100644
index 59be4e4..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.desk.entity.ProcessLeave;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface ILeaveService extends BaseService<ProcessLeave> {
-
-	/**
-	 * 寮�鍚祦绋�
-	 *
-	 * @param leave 璇峰亣瀹炰綋
-	 * @return boolean
-	 */
-	boolean startProcess(ProcessLeave leave);
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/INoticeService.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/INoticeService.java
deleted file mode 100644
index aff42c8..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/INoticeService.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.desk.entity.Notice;
-import org.springblade.desk.vo.NoticeVO;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface INoticeService extends BaseService<Notice> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 * @param page
-	 * @param notice
-	 * @return
-	 */
-	IPage<NoticeVO> selectNoticePage(IPage<NoticeVO> page, NoticeVO notice);
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java
deleted file mode 100644
index 155e168..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.service.impl;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.desk.entity.ProcessLeave;
-import org.springblade.desk.mapper.LeaveMapper;
-import org.springblade.desk.service.ILeaveService;
-import org.springblade.flow.core.constant.ProcessConstant;
-import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.feign.IFlowClient;
-import org.springblade.flow.core.utils.FlowUtil;
-import org.springblade.flow.core.utils.TaskUtil;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class LeaveServiceImpl extends BaseServiceImpl<LeaveMapper, ProcessLeave> implements ILeaveService {
-
-	private final IFlowClient flowClient;
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	// @GlobalTransactional
-	public boolean startProcess(ProcessLeave leave) {
-		String businessTable = FlowUtil.getBusinessTable(ProcessConstant.LEAVE_KEY);
-		if (Func.isEmpty(leave.getId())) {
-			// 淇濆瓨leave
-			leave.setApplyTime(DateUtil.now());
-			save(leave);
-			// 鍚姩娴佺▼
-			Kv variables = Kv.create()
-				.set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName())
-				.set("taskUser", TaskUtil.getTaskUser(leave.getTaskUser()))
-				.set("days", DateUtil.between(leave.getStartTime(), leave.getEndTime()).toDays());
-			R<BladeFlow> result = flowClient.startProcessInstanceById(leave.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(leave.getId())), variables);
-			if (result.isSuccess()) {
-				log.debug("娴佺▼宸插惎鍔�,娴佺▼ID:" + result.getData().getProcessInstanceId());
-				// 杩斿洖娴佺▼id鍐欏叆leave
-				leave.setProcessInstanceId(result.getData().getProcessInstanceId());
-				updateById(leave);
-			} else {
-				throw new ServiceException("寮�鍚祦绋嬪け璐�");
-			}
-		} else {
-
-			updateById(leave);
-		}
-		return true;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/NoticeServiceImpl.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/NoticeServiceImpl.java
deleted file mode 100644
index 685c597..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/NoticeServiceImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.desk.entity.Notice;
-import org.springblade.desk.mapper.NoticeMapper;
-import org.springblade.desk.service.INoticeService;
-import org.springblade.desk.vo.NoticeVO;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class NoticeServiceImpl extends BaseServiceImpl<NoticeMapper, Notice> implements INoticeService {
-
-	@Override
-	public IPage<NoticeVO> selectNoticePage(IPage<NoticeVO> page, NoticeVO notice) {
-		// 鑻ヤ笉浣跨敤mybatis-plus鑷甫鐨勫垎椤垫柟娉曪紝鍒欎笉浼氳嚜鍔ㄥ甫鍏enantId锛屾墍浠ユ垜浠渶瑕佽嚜琛屾敞鍏�
-		notice.setTenantId(AuthUtil.getTenantId());
-		return page.setRecords(baseMapper.selectNoticePage(page, notice));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java
deleted file mode 100644
index 5fa07f5..0000000
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.desk.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.desk.entity.Notice;
-import org.springblade.desk.vo.NoticeVO;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.enums.DictEnum;
-
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Notice鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class NoticeWrapper extends BaseEntityWrapper<Notice, NoticeVO> {
-
-	public static NoticeWrapper build() {
-		return new NoticeWrapper();
-	}
-
-	@Override
-	public NoticeVO entityVO(Notice notice) {
-		NoticeVO noticeVO = Objects.requireNonNull(BeanUtil.copy(notice, NoticeVO.class));
-		String dictValue = DictCache.getValue(DictEnum.NOTICE, noticeVO.getCategory());
-		noticeVO.setCategoryName(dictValue);
-		return noticeVO;
-	}
-
-	/**
-	 * 鏌ヨ鏉′欢澶勭悊
-	 */
-	public void noticeQuery(Map<String, Object> notice) {
-		// 姝ゅ満鏅粎鍦� pg鏁版嵁搴� map绫诲瀷浼犲弬鐨勬儏鍐典笅闇�瑕佸鐞嗭紝entity浼犲弬宸茬粡鍖呭惈鏁版嵁绫诲瀷锛屽垯鏃犻渶鍏冲績
-		// 閽堝 pg鏁版嵁搴� int绫诲瀷瀛楁鏌ヨ闇�瑕佸己杞殑澶勭悊绀轰緥
-		String searchKey = "category";
-		if (Func.isNotEmpty(notice.get(searchKey))) {
-			// 鏁版嵁搴撳瓧娈典负int绫诲瀷锛岃缃�"="鏌ヨ锛屽叿浣撴煡璇㈠弬鏁拌瑙� @org.springblade.core.mp.support.SqlKeyword
-			notice.put(searchKey.concat("_equal"), Func.toInt(notice.get(searchKey)));
-			// 榛樿"like"鏌ヨ锛宲g鏁版嵁搴� 鍦烘櫙浼氭姤閿欙紝鎵�浠ュ皢鍏跺垹闄�
-			notice.remove(searchKey);
-		}
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-omd/pom.xml b/Source/BladeX/blade-service/blade-omd/pom.xml
deleted file mode 100644
index 40d7c15..0000000
--- a/Source/BladeX/blade-service/blade-omd/pom.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <parent>
-        <groupId>org.springblade</groupId>
-        <artifactId>blade-service</artifactId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-omd</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-omd-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-flow-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-
-        <!--Oss-->
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-oss</artifactId>
-        </dependency>
-        <!--MinIO-->
-        <dependency>
-            <groupId>io.minio</groupId>
-            <artifactId>minio</artifactId>
-        </dependency>
-        <!--QiNiu-->
-        <dependency>
-            <groupId>com.qiniu</groupId>
-            <artifactId>qiniu-java-sdk</artifactId>
-        </dependency>
-        <!--<dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-transaction</artifactId>
-        </dependency>-->
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/OmdApplication.java b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/OmdApplication.java
deleted file mode 100644
index e7d2dd2..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/OmdApplication.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-
-/**
- * 绯荤粺妯″潡鍚姩鍣�
- * @author Chill
- */
-@BladeCloudApplication
-public class OmdApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run("blade-omd", OmdApplication.class, args);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/controller/DictBizOmdController.java b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/controller/DictBizOmdController.java
deleted file mode 100644
index e3d4b3c..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/controller/DictBizOmdController.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.omd.entity.DictBizM;
-import org.springblade.omd.service.IDictBizService;
-import org.springblade.omd.vo.DictBizMVO;
-import org.springblade.omd.wrapper.DictBizWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/dict-biz")
-@Api(value = "涓氬姟瀛楀吀", tags = "涓氬姟瀛楀吀")
-public class DictBizOmdController extends BladeController {
-
-	private final IDictBizService dictService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dict")
-	public R<DictBizMVO> detail(DictBizM dict) {
-		DictBizM detail = dictService.getOne(Condition.getQueryWrapper(dict));
-		return R.data(DictBizWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictBizMVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
-		List<DictBizM> list = dictService.list(Condition.getQueryWrapper(dict, DictBizM.class).lambda().orderByAsc(DictBizM::getSort));
-		return R.data(DictBizWrapper.build().listNodeVO(list));
-	}
-
-	/**
-	 * 椤剁骇鍒楄〃
-	 */
-	@GetMapping("/parent-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<IPage<DictBizMVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
-		return R.data(dictService.parentList(dict, query));
-	}
-
-	/**
-	 * 瀛愬垪琛�
-	 */
-	@GetMapping("/child-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "parentId", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictBizMVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
-		return R.data(dictService.childList(dict, parentId));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictBizMVO>> tree() {
-		List<DictBizMVO> tree = dictService.tree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/parent-tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictBizMVO>> parentTree() {
-		List<DictBizMVO> tree = dictService.parentTree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
-	public R submit(@Valid @RequestBody DictBizM dict) {
-		CacheUtil.clear(DICT_CACHE);
-		return R.status(dictService.submit(dict));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(DICT_CACHE);
-		return R.status(dictService.removeDict(ids));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀
-	 */
-	@GetMapping("/dictionary")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鑾峰彇瀛楀吀", notes = "鑾峰彇瀛楀吀")
-	public R<List<DictBizM>> dictionary(String code) {
-		List<DictBizM> tree = dictService.getList(code);
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍�
-	 */
-	@GetMapping("/dictionary-tree")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "鑾峰彇瀛楀吀鏍�", notes = "鑾峰彇瀛楀吀鏍�")
-	public R<List<DictBizMVO>> dictionaryTree(String code) {
-		List<DictBizM> tree = dictService.getList(code);
-		return R.data(DictBizWrapper.build().listNodeVO(tree));
-	}
-
-	/**
-	 * 妫�鏌ュ瓧鍏告槸鍚﹀瓨鍦紝瀛樺湪鍗宠繑鍥烇紝涓嶅瓨鍦ㄦ柊澧�
-	 */
-	@PostMapping("/check")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
-	public R checkOrInsert(@Valid @RequestBody DictBizM dict) {
-		CacheUtil.clear(DICT_CACHE);
-		return dictService.checkOrInsert(dict);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/feign/DictBizClient.java b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/feign/DictBizClient.java
deleted file mode 100644
index eb3b366..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/feign/DictBizClient.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.feign;
-
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.omd.entity.DictBizM;
-import org.springblade.omd.service.IDictBizService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.List;
-
-
-/**
- * 瀛楀吀鏈嶅姟Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-public class DictBizClient implements IDictBizClient {
-
-	private final IDictBizService service;
-
-	@Override
-	@GetMapping(GET_BY_ID)
-	public R<DictBizM> getById(Long id) {
-		return R.data(service.getById(id));
-	}
-
-	@Override
-	@GetMapping(GET_VALUE)
-	public R<String> getValue(String code, String dictKey) {
-		return R.data(service.getValue(code, dictKey));
-	}
-
-	@Override
-	@GetMapping(GET_LIST)
-	public R<List<DictBizM>> getList(String code) {
-		return R.data(service.getList(code));
-	}
-
-	@Override
-	@GetMapping(CHECK_VALUE)
-	public R getCheck(DictBizM dict) {
-		return service.checkOrInsert(dict);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.java b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.java
deleted file mode 100644
index c835d01..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.mapper;
-
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.omd.entity.DictBizM;
-import org.springblade.omd.vo.DictBizMVO;
-
-import java.util.List;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface DictBizMapper extends BaseMapper<DictBizM> {
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	String getValue(String code, String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	List<DictBizM> getList(String code);
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @return
-	 */
-	List<DictBizMVO> tree();
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @return
-	 */
-	List<DictBizMVO> parentTree();
-
-}
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.xml b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.xml
deleted file mode 100644
index f75b087..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.omd.mapper.DictBizMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="dictResultMap" type="org.springblade.omd.entity.DictBizM">
-        <id column="id" property="id"/>
-        <result column="tenant_id" property="tenantId"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="code" property="code"/>
-        <result column="dict_key" property="dictKey"/>
-        <result column="dict_value" property="dictValue"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="title" property="title"/>
-        <result column="value" property="value"/>
-        <result column="key" property="key"/>
-    </resultMap>
-
-    <select id="getValue" resultType="java.lang.String">
-        select
-            dict_value
-        from pl_sys_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
-    </select>
-
-    <!-- oracle 鐗堟湰 -->
-    <!--<select id="getValue" resultType="java.lang.String">
-        select
-            dict_value
-        from pl_sys_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
-    </select>-->
-
-    <select id="getList" resultMap="dictResultMap">
-        select id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict_biz where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
-    </select>
-
-    <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0
-    </select>
-
-    <select id="parentTree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0 and parent_id = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/IDictBizService.java b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/IDictBizService.java
deleted file mode 100644
index 506c635..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/IDictBizService.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.service;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.omd.entity.DictBizM;
-import org.springblade.omd.vo.DictBizMVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IDictBizService extends IService<DictBizM> {
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<DictBizMVO> tree();
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<DictBizMVO> parentTree();
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	String getValue(String code, String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	List<DictBizM> getList(String code);
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 *
-	 * @param dict
-	 * @return
-	 */
-	boolean submit(DictBizM dict);
-
-	/**
-	 * 鍒犻櫎瀛楀吀
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeDict(String ids);
-
-	/**
-	 * 椤剁骇鍒楄〃
-	 *
-	 * @param dict
-	 * @param query
-	 * @return
-	 */
-	IPage<DictBizMVO> parentList(Map<String, Object> dict, Query query);
-
-	/**
-	 * 瀛愬垪琛�
-	 *
-	 * @param dict
-	 * @param parentId
-	 * @return
-	 */
-	List<DictBizMVO> childList(Map<String, Object> dict, Long parentId);
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 *
-	 * @param dict
-	 * @return
-	 */
-	R checkOrInsert(DictBizM dict);
-}
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/impl/DictBizServiceImpl.java b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/impl/DictBizServiceImpl.java
deleted file mode 100644
index 168ae02..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/impl/DictBizServiceImpl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.omd.cache.DictBizCache;
-import org.springblade.omd.entity.DictBizM;
-import org.springblade.omd.mapper.DictBizMapper;
-import org.springblade.omd.service.IDictBizService;
-import org.springblade.omd.vo.DictBizMVO;
-import org.springblade.omd.wrapper.DictBizWrapper;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class DictBizServiceImpl extends ServiceImpl<DictBizMapper, DictBizM> implements IDictBizService {
-
-	@Override
-	public List tree() {
-		return  ForestNodeMerger.merge((List)baseMapper.tree());
-	}
-
-	@Override
-	public List<DictBizMVO> parentTree() {
-		return ForestNodeMerger.merge((List)baseMapper.parentTree());
-	}
-
-	@Override
-	public String getValue(String code, String dictKey) {
-		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
-	}
-
-	@Override
-	public List<DictBizM> getList(String code) {
-		return baseMapper.getList(code);
-	}
-
-	@Override
-	public boolean submit(DictBizM dict) {
-		LambdaQueryWrapper<DictBizM> lqw = Wrappers.<DictBizM>query().lambda().eq(DictBizM::getCode, dict.getCode()).eq(DictBizM::getDictKey, dict.getDictKey());
-		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBizM::getId, dict.getId()));
-		if (cnt > 0L) {
-			throw new ServiceException("褰撳墠瀛楀吀閿�煎凡瀛樺湪!");
-		}
-		// 淇敼椤剁骇瀛楀吀鍚庡悓姝ユ洿鏂颁笅灞炲瓧鍏哥殑缂栧彿
-		if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
-			DictBizM parent = DictBizCache.getById(dict.getId());
-			this.update(Wrappers.<DictBizM>update().lambda().set(DictBizM::getCode, dict.getCode()).eq(DictBizM::getCode, parent.getCode()).ne(DictBizM::getParentId, BladeConstant.TOP_PARENT_ID));
-		}
-		if (Func.isEmpty(dict.getParentId())) {
-			dict.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		CacheUtil.clear(DICT_CACHE);
-		return saveOrUpdate(dict);
-	}
-
-	@Override
-	public boolean removeDict(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<DictBizM>query().lambda().in(DictBizM::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
-
-	@Override
-	public IPage<DictBizMVO> parentList(Map<String, Object> dict, Query query) {
-		IPage<DictBizM> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBizM.class).lambda().eq(DictBizM::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictBizM::getSort));
-		return DictBizWrapper.build().pageVO(page);
-	}
-
-	@Override
-	public List<DictBizMVO> childList(Map<String, Object> dict, Long parentId) {
-		if (parentId < 0) {
-			return new ArrayList<>();
-		}
-		dict.remove("parentId");
-		DictBizM parentDict = DictBizCache.getById(parentId);
-		List<DictBizM> list = this.list(Condition.getQueryWrapper(dict, DictBizM.class).lambda().ne(DictBizM::getId, parentId).eq(DictBizM::getCode, parentDict.getCode()).orderByAsc(DictBizM::getSort));
-		return DictBizWrapper.build().listNodeVO(list);
-	}
-
-    @Override
-    public R checkOrInsert(DictBizM dict) {
-
-		LambdaQueryWrapper<DictBizM> lqw = Wrappers.<DictBizM>query().lambda().eq(DictBizM::getCode, dict.getCode()).eq(DictBizM::getDictKey, dict.getDictKey());
-		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBizM::getId, dict.getId()));
-		if (cnt > 0L) {
-			return R.fail("瀛楀吀宸茬粡瀛樺湪锛�");
-		}
-
-		if (Func.isEmpty(dict.getParentId())) {
-			dict.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		CacheUtil.clear(DICT_CACHE);
-
-		if(saveOrUpdate(dict) == true){
-			return R.success("鎿嶄綔鎴愬姛!");
-		}
-		return R.fail("鎿嶄綔澶辫触锛�");
-
-    }
-}
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/wrapper/DictBizWrapper.java b/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/wrapper/DictBizWrapper.java
deleted file mode 100644
index c1324ab..0000000
--- a/Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/wrapper/DictBizWrapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.omd.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.omd.cache.DictBizCache;
-import org.springblade.omd.entity.DictBizM;
-import org.springblade.omd.vo.DictBizMVO;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class DictBizWrapper extends BaseEntityWrapper<DictBizM, DictBizMVO> {
-
-	public static DictBizWrapper build() {
-		return new DictBizWrapper();
-	}
-
-	@Override
-	public DictBizMVO entityVO(DictBizM dict) {
-		DictBizMVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictBizMVO.class));
-		if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
-			dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
-		} else {
-			DictBizM parent = DictBizCache.getById(dict.getParentId());
-			dictVO.setParentName(parent.getDictValue());
-		}
-		return dictVO;
-	}
-
-	public List<DictBizMVO> listNodeVO(List<DictBizM> list) {
-		List<DictBizMVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictBizMVO.class)).collect(Collectors.toList());
-		return ForestNodeMerger.merge((List)collect);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/pom.xml b/Source/BladeX/blade-service/blade-system/pom.xml
deleted file mode 100644
index a7fb25d..0000000
--- a/Source/BladeX/blade-service/blade-system/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-system</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-excel</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-system-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-user-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java
deleted file mode 100644
index 7f5baf7..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * 绯荤粺妯″潡鍚姩鍣�
- * @author Chill
- */
-@BladeCloudApplication
-public class SystemApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_SYSTEM_NAME, SystemApplication.class, args);
-	}
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ApiScopeController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ApiScopeController.java
deleted file mode 100644
index 11cd289..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ApiScopeController.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.ApiScope;
-import org.springblade.system.service.IApiScopeService;
-import org.springblade.system.vo.ApiScopeVO;
-import org.springblade.system.wrapper.ApiScopeWrapper;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 鎺ュ彛鏉冮檺鎺у埗鍣�
- *
- * @author BladeX
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("api-scope")
-@Api(value = "鎺ュ彛鏉冮檺", tags = "鎺ュ彛鏉冮檺")
-public class ApiScopeController extends BladeController {
-
-	private final IApiScopeService apiScopeService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dataScope")
-	public R<ApiScope> detail(ApiScope dataScope) {
-		ApiScope detail = apiScopeService.getOne(Condition.getQueryWrapper(dataScope));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆dataScope")
-	public R<IPage<ApiScopeVO>> list(ApiScope dataScope, Query query) {
-		IPage<ApiScope> pages = apiScopeService.page(Condition.getPage(query), Condition.getQueryWrapper(dataScope));
-		return R.data(ApiScopeWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆dataScope")
-	public R save(@Valid @RequestBody ApiScope dataScope) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(apiScopeService.save(dataScope));
-	}
-
-	/**
-	 * 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆dataScope")
-	public R update(@Valid @RequestBody ApiScope dataScope) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(apiScopeService.updateById(dataScope));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dataScope")
-	public R submit(@Valid @RequestBody ApiScope dataScope) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(apiScopeService.saveOrUpdate(dataScope));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(apiScopeService.deleteLogic(Func.toLongList(ids)));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/AuthClientController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/AuthClientController.java
deleted file mode 100644
index 3d21cdb..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/AuthClientController.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.AuthClient;
-import org.springblade.system.service.IAuthClientService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-/**
- *  搴旂敤绠$悊鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/client")
-@ApiIgnore
-@Api(value = "搴旂敤绠$悊", tags = "鎺ュ彛")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-public class AuthClientController extends BladeController {
-
-	private final IAuthClientService clientService;
-
-	/**
-	* 璇︽儏
-	*/
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆client")
-	public R<AuthClient> detail(AuthClient authClient) {
-		AuthClient detail = clientService.getOne(Condition.getQueryWrapper(authClient));
-		return R.data(detail);
-	}
-
-	/**
-	* 鍒嗛〉
-	*/
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆client")
-	public R<IPage<AuthClient>> list(AuthClient authClient, Query query) {
-		IPage<AuthClient> pages = clientService.page(Condition.getPage(query), Condition.getQueryWrapper(authClient));
-		return R.data(pages);
-	}
-
-	/**
-	* 鏂板
-	*/
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆client")
-	public R save(@Valid @RequestBody AuthClient authClient) {
-		return R.status(clientService.save(authClient));
-	}
-
-	/**
-	* 淇敼
-	*/
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆client")
-	public R update(@Valid @RequestBody AuthClient authClient) {
-		return R.status(clientService.updateById(authClient));
-	}
-
-	/**
-	* 鏂板鎴栦慨鏀�
-	*/
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆client")
-	public R submit(@Valid @RequestBody AuthClient authClient) {
-		return R.status(clientService.saveOrUpdate(authClient));
-	}
-
-
-	/**
-	* 鍒犻櫎
-	*/
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(clientService.deleteLogic(Func.toLongList(ids)));
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/CombinationController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/CombinationController.java
deleted file mode 100644
index 6297734..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/CombinationController.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.Combination;
-import org.springblade.system.service.ICombinationService;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 瀵嗙爜缁勫悎鏂瑰紡琛�(Combination)琛ㄦ帶鍒跺眰
- *
- * @author makejava
- * @since 2023-03-20 15:23:16
- */
-@ApiIgnore
-@AllArgsConstructor
-@RestController
-@Api(value = "瀵嗙爜缁勫悎鏂瑰紡", tags = "鎺ュ彛")
-@RequestMapping("/combination")
-public class CombinationController {
-
-	/**
-	 * 鏈嶅姟瀵硅薄
-	 */
-	@Resource
-	private final ICombinationService combinationService;
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param combination 绛涢�夋潯浠�
-	 * @param query      鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鍒嗛〉鏌ヨ", notes = "浼犲叆combination锛屽垎椤靛弬鏁皅uery")
-	public R<IPage<Combination>> queryByPage(Combination combination, Query query) {
-		IPage<Combination> pages = combinationService.page(Condition.getPage(query), Condition.getQueryWrapper(combination));
-		return R.data(pages);
-	}
-
-	/**
-	 * 涓嬫媺鏁版嵁婧�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�")
-	public R<List> select() {
-		List<Map<String, Object>> map = combinationService.selectMaps();
-		return R.data(map);
-	}
-
-	/**
-	 * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 鍗曟潯鏁版嵁
-	 */
-	@GetMapping("/one")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁", notes = "浼犲叆id")
-	public ResponseEntity<Combination> queryById(@ApiParam(value = "缁勫悎鏂瑰紡ID", required = true) @RequestParam Long id) {
-		return ResponseEntity.ok(this.combinationService.queryById(id));
-	}
-
-	/**
-	 * 鏂板鍜屼慨鏀规暟鎹�
-	 *
-	 * @param combination 瀹炰綋
-	 * @return 鏂板缁撴灉
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板鍜屼慨鏀规暟鎹�", notes = "浼犲叆combination")
-	public R submit(@Valid @RequestBody Combination combination) {
-		return R.status(combinationService.submit(combination));
-	}
-
-	/**
-	 * 鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鍒犻櫎鏄惁鎴愬姛
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public ResponseEntity<Boolean> deleteById(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam List<String> ids) {
-		return ResponseEntity.ok(this.combinationService.deleteByIds(ids));
-	}
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DataScopeController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DataScopeController.java
deleted file mode 100644
index faba986..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DataScopeController.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.DataScope;
-import org.springblade.system.service.IDataScopeService;
-import org.springblade.system.vo.DataScopeVO;
-import org.springblade.system.wrapper.DataScopeWrapper;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 鏁版嵁鏉冮檺鎺у埗鍣�
- *
- * @author BladeX
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("data-scope")
-@Api(value = "鏁版嵁鏉冮檺", tags = "鏁版嵁鏉冮檺")
-public class DataScopeController extends BladeController {
-
-	private final IDataScopeService dataScopeService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dataScope")
-	public R<DataScope> detail(DataScope dataScope) {
-		DataScope detail = dataScopeService.getOne(Condition.getQueryWrapper(dataScope));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆dataScope")
-	public R<IPage<DataScopeVO>> list(DataScope dataScope, Query query) {
-		IPage<DataScope> pages = dataScopeService.page(Condition.getPage(query), Condition.getQueryWrapper(dataScope));
-		return R.data(DataScopeWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆dataScope")
-	public R save(@Valid @RequestBody DataScope dataScope) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(dataScopeService.save(dataScope));
-	}
-
-	/**
-	 * 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆dataScope")
-	public R update(@Valid @RequestBody DataScope dataScope) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(dataScopeService.updateById(dataScope));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dataScope")
-	public R submit(@Valid @RequestBody DataScope dataScope) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(dataScopeService.saveOrUpdate(dataScope));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(dataScopeService.deleteLogic(Func.toLongList(ids)));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java
deleted file mode 100644
index c2acc4a..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.secure.constant.AuthConstant;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.entity.Dept;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.service.IDeptService;
-import org.springblade.system.user.cache.UserCache;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.vo.DeptVO;
-import org.springblade.system.wrapper.DeptWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/dept")
-@Api(value = "閮ㄩ棬", tags = "閮ㄩ棬")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-public class DeptController extends BladeController {
-
-	private final IDeptService deptService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dept")
-	public R<DeptVO> detail(Dept dept) {
-		Dept detail = deptService.getOne(Condition.getQueryWrapper(dept));
-		return R.data(DeptWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "deptName", value = "閮ㄩ棬鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "fullName", value = "閮ㄩ棬鍏ㄧО", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dept")
-	public R<List<DeptVO>> list(@ApiIgnore @RequestParam Map<String, Object> dept, BladeUser bladeUser) {
-		QueryWrapper<Dept> queryWrapper = Condition.getQueryWrapper(dept, Dept.class);
-		List<Dept> list = deptService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Dept::getTenantId, bladeUser.getTenantId()) : queryWrapper);
-		return R.data(DeptWrapper.build().listNodeVO(list));
-	}
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 */
-	@GetMapping("/lazy-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "deptName", value = "閮ㄩ棬鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "fullName", value = "閮ㄩ棬鍏ㄧО", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆dept")
-	public R<List<DeptVO>> lazyList(@ApiIgnore @RequestParam Map<String, Object> dept, Long parentId, BladeUser bladeUser) {
-		List<DeptVO> list = deptService.lazyList(bladeUser.getTenantId(), parentId, dept);
-		return R.data(DeptWrapper.build().listNodeLazyVO(list));
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DeptVO>> tree(String tenantId, BladeUser bladeUser) {
-		List<DeptVO> tree = deptService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
-		return R.data(tree);
-	}
-
-	/**
-	 * 鎳掑姞杞借幏鍙栭儴闂ㄦ爲褰㈢粨鏋�
-	 */
-	@GetMapping("/lazy-tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鎳掑姞杞芥爲褰㈢粨鏋�", notes = "鏍戝舰缁撴瀯")
-	public R<List<DeptVO>> lazyTree(String tenantId, Long parentId, BladeUser bladeUser) {
-		List<DeptVO> tree = deptService.lazyTree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), parentId);
-		return R.data(tree);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dept")
-	public R submit(@Valid @RequestBody Dept dept) {
-		if (deptService.submit(dept)) {
-			CacheUtil.clear(SYS_CACHE);
-			// 杩斿洖鎳掑姞杞芥爲鏇存柊鑺傜偣鎵�闇�瀛楁
-			Kv kv = Kv.create().set("id", String.valueOf(dept.getId())).set("tenantId", dept.getTenantId())
-				.set("deptCategoryName", DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory()));
-			return R.data(kv);
-		}
-		return R.fail("鎿嶄綔澶辫触");
-	}
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(SYS_CACHE);
-		return R.status(deptService.removeDept(ids));
-	}
-
-	/**
-	 * 涓嬫媺鏁版嵁婧�
-	 */
-	//@PreAuth(AuthConstant.PERMIT_ALL)
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆id闆嗗悎")
-	public R<List<Dept>> select(Long userId, String deptId) {
-		if (Func.isNotEmpty(userId)) {
-			User user = UserCache.getUser(userId);
-			deptId = user.getDeptId();
-		}
-		List<Dept> list = deptService.list(Wrappers.<Dept>lambdaQuery().in(Dept::getId, Func.toLongList(deptId)));
-		return R.data(list);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictBizController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictBizController.java
deleted file mode 100644
index 50f85d6..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictBizController.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.service.IDictBizService;
-import org.springblade.system.vo.DictBizVO;
-import org.springblade.system.wrapper.DictBizWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/dict-biz")
-@Api(value = "涓氬姟瀛楀吀", tags = "涓氬姟瀛楀吀")
-public class DictBizController extends BladeController {
-
-	private final IDictBizService dictService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dict")
-	public R<DictBizVO> detail(DictBiz dict) {
-		DictBiz detail = dictService.getOne(Condition.getQueryWrapper(dict));
-		return R.data(DictBizWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictBizVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
-		List<DictBiz> list = dictService.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().orderByAsc(DictBiz::getSort));
-		return R.data(DictBizWrapper.build().listNodeVO(list));
-	}
-
-	/**
-	 * 椤剁骇鍒楄〃
-	 */
-	@GetMapping("/parent-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<IPage<DictBizVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
-		return R.data(dictService.parentList(dict, query));
-	}
-
-	/**
-	 * 瀛愬垪琛�
-	 */
-	@GetMapping("/child-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "parentId", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictBizVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
-		return R.data(dictService.childList(dict, parentId));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictBizVO>> tree() {
-		List<DictBizVO> tree = dictService.tree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/parent-tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictBizVO>> parentTree() {
-		List<DictBizVO> tree = dictService.parentTree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
-	public R submit(@Valid @RequestBody DictBiz dict) {
-		CacheUtil.clear(DICT_CACHE);
-		return R.status(dictService.submit(dict));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(DICT_CACHE);
-		return R.status(dictService.removeDict(ids));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀
-	 */
-	@GetMapping("/dictionary")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鑾峰彇瀛楀吀", notes = "鑾峰彇瀛楀吀")
-	public R<List<DictBiz>> dictionary(String code) {
-		List<DictBiz> tree = dictService.getList(code);
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍�
-	 */
-	@GetMapping("/dictionary-tree")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "鑾峰彇瀛楀吀鏍�", notes = "鑾峰彇瀛楀吀鏍�")
-	public R<List<DictBizVO>> dictionaryTree(String code) {
-		List<DictBiz> tree = dictService.getList(code);
-		return R.data(DictBizWrapper.build().listNodeVO(tree));
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
deleted file mode 100644
index cd3708b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.entity.Dict;
-import org.springblade.system.service.IDictService;
-import org.springblade.system.vo.DictVO;
-import org.springblade.system.wrapper.DictWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/dict")
-@Api(value = "瀛楀吀", tags = "瀛楀吀")
-public class DictController extends BladeController {
-
-	private final IDictService dictService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dict")
-	public R<DictVO> detail(Dict dict) {
-		Dict detail = dictService.getOne(Condition.getQueryWrapper(dict));
-		return R.data(DictWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
-		List<Dict> list = dictService.list(Condition.getQueryWrapper(dict, Dict.class).lambda().orderByAsc(Dict::getSort));
-		DictWrapper dictWrapper = new DictWrapper();
-		return R.data(dictWrapper.listNodeVO(list));
-	}
-
-	/**
-	 * 椤剁骇鍒楄〃
-	 */
-	@GetMapping("/parent-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<IPage<DictVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
-		return R.data(dictService.parentList(dict, query));
-	}
-
-	/**
-	 * 瀛愬垪琛�
-	 */
-	@GetMapping("/child-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "parentId", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
-		return R.data(dictService.childList(dict, parentId));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictVO>> tree() {
-		List<DictVO> tree = dictService.tree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/parent-tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictVO>> parentTree() {
-		List<DictVO> tree = dictService.parentTree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
-	public R submit(@Valid @RequestBody Dict dict) {
-		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
-		return R.status(dictService.submit(dict));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
-		return R.status(dictService.removeDict(ids));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀
-	 */
-	@GetMapping("/dictionary")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鑾峰彇瀛楀吀", notes = "鑾峰彇瀛楀吀")
-	public R<List<Dict>> dictionary(String code) {
-		List<Dict> tree = dictService.getList(code);
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍�
-	 */
-	@GetMapping("/dictionary-tree")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "鑾峰彇瀛楀吀鏍�", notes = "鑾峰彇瀛楀吀鏍�")
-	public R<List<DictVO>> dictionaryTree(String code) {
-		List<Dict> tree = dictService.getList(code);
-		return R.data(DictWrapper.build().listNodeVO(tree));
-	}
-
-	/**
-	 * 瀛楀吀閿�煎垪琛�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "瀛楀吀閿�煎垪琛�", notes = "瀛楀吀閿�煎垪琛�")
-	public R<List<Dict>> select() {
-		List<Dict> list = dictService.list(Wrappers.<Dict>query().lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID));
-		list.forEach(dict -> dict.setDictValue(dict.getCode() + StringPool.COLON + StringPool.SPACE + dict.getDictValue()));
-		return R.data(list);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
deleted file mode 100644
index b798a72..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.annotation.PreAuth;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.node.TreeNode;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Menu;
-import org.springblade.system.entity.TopMenu;
-import org.springblade.system.service.IMenuService;
-import org.springblade.system.service.ITopMenuService;
-import org.springblade.system.vo.CheckedTreeVO;
-import org.springblade.system.vo.GrantTreeVO;
-import org.springblade.system.vo.MenuVO;
-import org.springblade.system.wrapper.MenuWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
-
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/menu")
-@Api(value = "鑿滃崟", tags = "鑿滃崟")
-public class MenuController extends BladeController {
-
-	private final IMenuService menuService;
-	private final ITopMenuService topMenuService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆menu")
-	public R<MenuVO> detail(Menu menu) {
-		Menu detail = menuService.getOne(Condition.getQueryWrapper(menu));
-		return R.data(MenuWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
-	})
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆menu")
-	public R<List<MenuVO>> list(@ApiIgnore @RequestParam Map<String, Object> menu) {
-		List<Menu> list = menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().orderByAsc(Menu::getSort));
-		return R.data(MenuWrapper.build().listNodeVO(list));
-	}
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 */
-	@GetMapping("/lazy-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
-	})
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆menu")
-	public R<List<MenuVO>> lazyList(Long parentId, @ApiIgnore @RequestParam Map<String, Object> menu) {
-		List<MenuVO> list = menuService.lazyList(parentId, menu);
-		return R.data(MenuWrapper.build().listNodeLazyVO(list));
-	}
-
-	/**
-	 * 鑿滃崟鍒楄〃
-	 */
-	@GetMapping("/menu-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
-	})
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鑿滃崟鍒楄〃", notes = "浼犲叆menu")
-	public R<List<MenuVO>> menuList(@ApiIgnore @RequestParam Map<String, Object> menu) {
-		List<Menu> list = menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().eq(Menu::getCategory, 1).orderByAsc(Menu::getSort));
-		return R.data(MenuWrapper.build().listNodeVO(list));
-	}
-
-	/**
-	 * 鎳掑姞杞借彍鍗曞垪琛�
-	 */
-	@GetMapping("/lazy-menu-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
-	})
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鎳掑姞杞借彍鍗曞垪琛�", notes = "浼犲叆menu")
-	public R<List<MenuVO>> lazyMenuList(Long parentId, @ApiIgnore @RequestParam Map<String, Object> menu) {
-		List<MenuVO> list = menuService.lazyMenuList(parentId, menu);
-		return R.data(MenuWrapper.build().listNodeLazyVO(list));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆menu")
-	public R submit(@Valid @RequestBody Menu menu) {
-		if (menuService.submit(menu)) {
-			CacheUtil.clear(MENU_CACHE);
-			CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
-			// 杩斿洖鎳掑姞杞芥爲鏇存柊鑺傜偣鎵�闇�瀛楁
-			Kv kv = Kv.create().set("id", String.valueOf(menu.getId()));
-			return R.data(kv);
-		}
-		return R.fail("鎿嶄綔澶辫触");
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(MENU_CACHE);
-		CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
-		return R.status(menuService.removeMenu(ids));
-	}
-
-	/**
-	 * 鍓嶇鑿滃崟鏁版嵁
-	 */
-	@GetMapping("/routes")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鍓嶇鑿滃崟鏁版嵁", notes = "鍓嶇鑿滃崟鏁版嵁")
-	public R<List<MenuVO>> routes(BladeUser user, Long topMenuId) {
-		List<MenuVO> list = menuService.routes((user == null) ? null : user.getRoleId(), topMenuId);
-		return R.data(list);
-	}
-
-	/**
-	 * 鍓嶇鎸夐挳鏁版嵁
-	 */
-	@GetMapping("/buttons")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "鍓嶇鎸夐挳鏁版嵁", notes = "鍓嶇鎸夐挳鏁版嵁")
-	public R<List<MenuVO>> buttons(BladeUser user) {
-		List<MenuVO> list = menuService.buttons(user.getRoleId());
-		return R.data(list);
-	}
-
-	/**
-	 * 鑾峰彇鑿滃崟鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 11)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<TreeNode>> tree() {
-		List<TreeNode> tree = menuService.tree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇鏉冮檺鍒嗛厤鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/grant-tree")
-	@ApiOperationSupport(order = 12)
-	@ApiOperation(value = "鏉冮檺鍒嗛厤鏍戝舰缁撴瀯", notes = "鏉冮檺鍒嗛厤鏍戝舰缁撴瀯")
-	public R<GrantTreeVO> grantTree(BladeUser user) {
-		GrantTreeVO vo = new GrantTreeVO();
-		vo.setMenu(menuService.grantTree(user));
-		vo.setDataScope(menuService.grantDataScopeTree(user));
-		vo.setApiScope(menuService.grantApiScopeTree(user));
-		return R.data(vo);
-	}
-
-	/**
-	 * 鑾峰彇鏉冮檺鍒嗛厤鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/role-tree-keys")
-	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "瑙掕壊鎵�鍒嗛厤鐨勬爲", notes = "瑙掕壊鎵�鍒嗛厤鐨勬爲")
-	public R<CheckedTreeVO> roleTreeKeys(String roleIds) {
-		CheckedTreeVO vo = new CheckedTreeVO();
-		vo.setMenu(menuService.roleTreeKeys(roleIds));
-		vo.setDataScope(menuService.dataScopeTreeKeys(roleIds));
-		vo.setApiScope(menuService.apiScopeTreeKeys(roleIds));
-		return R.data(vo);
-	}
-
-	/**
-	 * 鑾峰彇椤堕儴鑿滃崟鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/grant-top-tree")
-	@ApiOperationSupport(order = 14)
-	@ApiOperation(value = "椤堕儴鑿滃崟鏍戝舰缁撴瀯", notes = "椤堕儴鑿滃崟鏍戝舰缁撴瀯")
-	public R<GrantTreeVO> grantTopTree(BladeUser user) {
-		GrantTreeVO vo = new GrantTreeVO();
-		vo.setMenu(menuService.grantTopTree(user));
-		return R.data(vo);
-	}
-
-	/**
-	 * 鑾峰彇椤堕儴鑿滃崟鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/top-tree-keys")
-	@ApiOperationSupport(order = 15)
-	@ApiOperation(value = "椤堕儴鑿滃崟鎵�鍒嗛厤鐨勬爲", notes = "椤堕儴鑿滃崟鎵�鍒嗛厤鐨勬爲")
-	public R<CheckedTreeVO> topTreeKeys(String topMenuIds) {
-		CheckedTreeVO vo = new CheckedTreeVO();
-		vo.setMenu(menuService.topTreeKeys(topMenuIds));
-		return R.data(vo);
-	}
-
-	/**
-	 * 椤堕儴鑿滃崟鏁版嵁
-	 */
-	@GetMapping("/top-menu")
-	@ApiOperationSupport(order = 16)
-	@ApiOperation(value = "椤堕儴鑿滃崟鏁版嵁", notes = "椤堕儴鑿滃崟鏁版嵁")
-	public R<List<TopMenu>> topMenu(BladeUser user) {
-		if (Func.isEmpty(user)) {
-			return null;
-		}
-		List<TopMenu> list = topMenuService.list(Wrappers.<TopMenu>query().lambda().orderByAsc(TopMenu::getSort));
-		return R.data(list);
-	}
-
-	/**
-	 * 鑾峰彇閰嶇疆鐨勮鑹叉潈闄�
-	 */
-	@GetMapping("/auth-routes")
-	@ApiOperationSupport(order = 17)
-	@ApiOperation(value = "鑿滃崟鐨勮鑹叉潈闄�")
-	public R<List<Kv>> authRoutes(BladeUser user) {
-		if (Func.isEmpty(user)) {
-			return null;
-		}
-		return R.data(menuService.authRoutes(user));
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamController.java
deleted file mode 100644
index 3fc5614..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamController.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Param;
-import org.springblade.system.service.IParamService;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.PARAM_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/param")
-@Api(value = "鍙傛暟绠$悊", tags = "鎺ュ彛")
-public class ParamController extends BladeController {
-
-	private final IParamService paramService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆param")
-	public R<Param> detail(Param param) {
-		Param detail = paramService.getOne(Condition.getQueryWrapper(param));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "paramName", value = "鍙傛暟鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "paramKey", value = "鍙傛暟閿悕", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "paramValue", value = "鍙傛暟閿��", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆param")
-	public R<IPage<Param>> list(@ApiIgnore @RequestParam Map<String, Object> param, Query query) {
-		IPage<Param> pages = paramService.page(Condition.getPage(query), Condition.getQueryWrapper(param, Param.class));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆param")
-	public R submit(@Valid @RequestBody Param param) {
-		CacheUtil.clear(PARAM_CACHE);
-		CacheUtil.clear(PARAM_CACHE, Boolean.FALSE);
-		return R.status(paramService.saveOrUpdate(param));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(PARAM_CACHE);
-		CacheUtil.clear(PARAM_CACHE, Boolean.FALSE);
-		return R.status(paramService.deleteLogic(Func.toLongList(ids)));
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/PostController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/PostController.java
deleted file mode 100644
index ee8115d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/PostController.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Post;
-import org.springblade.system.service.IPostService;
-import org.springblade.system.vo.PostVO;
-import org.springblade.system.wrapper.PostWrapper;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 宀椾綅琛� 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/post")
-@Api(value = "宀椾綅", tags = "宀椾綅")
-public class PostController extends BladeController {
-
-	private final IPostService postService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆post")
-	public R<PostVO> detail(Post post) {
-		Post detail = postService.getOne(Condition.getQueryWrapper(post));
-		return R.data(PostWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒嗛〉 宀椾綅琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆post")
-	public R<IPage<PostVO>> list(Post post, Query query) {
-		IPage<Post> pages = postService.page(Condition.getPage(query), Condition.getQueryWrapper(post));
-		return R.data(PostWrapper.build().pageVO(pages));
-	}
-
-
-	/**
-	 * 鑷畾涔夊垎椤� 宀椾綅琛�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆post")
-	public R<IPage<PostVO>> page(PostVO post, Query query) {
-		IPage<PostVO> pages = postService.selectPostPage(Condition.getPage(query), post);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 宀椾綅琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆post")
-	public R save(@Valid @RequestBody Post post) {
-		CacheUtil.clear(SYS_CACHE);
-		return R.status(postService.save(post));
-	}
-
-	/**
-	 * 淇敼 宀椾綅琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆post")
-	public R update(@Valid @RequestBody Post post) {
-		CacheUtil.clear(SYS_CACHE);
-		return R.status(postService.updateById(post));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 宀椾綅琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆post")
-	public R submit(@Valid @RequestBody Post post) {
-		CacheUtil.clear(SYS_CACHE);
-		return R.status(postService.saveOrUpdate(post));
-	}
-
-
-	/**
-	 * 鍒犻櫎 宀椾綅琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(SYS_CACHE);
-		return R.status(postService.deleteLogic(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 涓嬫媺鏁版嵁婧�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆post")
-	public R<List<Post>> select(String tenantId, BladeUser bladeUser) {
-		List<Post> list = postService.list(Wrappers.<Post>query().lambda().eq(Post::getTenantId, Func.toStrWithEmpty(tenantId, bladeUser.getTenantId())));
-		return R.data(list);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java
deleted file mode 100644
index 307c847..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.excel.util.ExcelUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.system.entity.Region;
-import org.springblade.system.excel.RegionExcel;
-import org.springblade.system.excel.RegionImporter;
-import org.springblade.system.service.IRegionService;
-import org.springblade.system.vo.RegionVO;
-import org.springblade.system.wrapper.RegionWrapper;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 琛屾斂鍖哄垝琛� 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/region")
-@Api(value = "琛屾斂鍖哄垝", tags = "琛屾斂鍖哄垝")
-public class RegionController extends BladeController {
-
-	private final IRegionService regionService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆region")
-	public R<RegionVO> detail(Region region) {
-		Region detail = regionService.getOne(Condition.getQueryWrapper(region));
-		return R.data(RegionWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒嗛〉 琛屾斂鍖哄垝琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆region")
-	public R<IPage<Region>> list(Region region, Query query) {
-		IPage<Region> pages = regionService.page(Condition.getPage(query), Condition.getQueryWrapper(region));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 */
-	@GetMapping("/lazy-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鍖哄垝缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "鍖哄垝鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆menu")
-	public R<List<RegionVO>> lazyList(String parentCode, @ApiIgnore @RequestParam Map<String, Object> menu) {
-		List<RegionVO> list = regionService.lazyList(parentCode, menu);
-		return R.data(RegionWrapper.build().listNodeLazyVO(list));
-	}
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 */
-	@GetMapping("/lazy-tree")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鍖哄垝缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "name", value = "鍖哄垝鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆menu")
-	public R<List<RegionVO>> lazyTree(String parentCode, @ApiIgnore @RequestParam Map<String, Object> menu) {
-		List<RegionVO> list = regionService.lazyTree(parentCode, menu);
-		return R.data(RegionWrapper.build().listNodeLazyVO(list));
-	}
-
-	/**
-	 * 鏂板 琛屾斂鍖哄垝琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆region")
-	public R save(@Valid @RequestBody Region region) {
-		return R.status(regionService.save(region));
-	}
-
-	/**
-	 * 淇敼 琛屾斂鍖哄垝琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆region")
-	public R update(@Valid @RequestBody Region region) {
-		return R.status(regionService.updateById(region));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 琛屾斂鍖哄垝琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆region")
-	public R submit(@Valid @RequestBody Region region) {
-		return R.status(regionService.submit(region));
-	}
-
-
-	/**
-	 * 鍒犻櫎 琛屾斂鍖哄垝琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆涓婚敭")
-	public R remove(@ApiParam(value = "涓婚敭", required = true) @RequestParam String id) {
-		return R.status(regionService.removeRegion(id));
-	}
-
-	/**
-	 * 琛屾斂鍖哄垝涓嬫媺鏁版嵁婧�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆tenant")
-	public R<List<Region>> select(@RequestParam(required = false, defaultValue = "00") String code) {
-		List<Region> list = regionService.list(Wrappers.<Region>query().lambda().eq(Region::getParentCode, code));
-		return R.data(list);
-	}
-
-	/**
-	 * 瀵煎叆琛屾斂鍖哄垝鏁版嵁
-	 */
-	@PostMapping("import-region")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "瀵煎叆琛屾斂鍖哄垝", notes = "浼犲叆excel")
-	public R importRegion(MultipartFile file, Integer isCovered) {
-		RegionImporter regionImporter = new RegionImporter(regionService, isCovered == 1);
-		ExcelUtil.save(file, regionImporter, RegionExcel.class);
-		return R.success("鎿嶄綔鎴愬姛");
-	}
-
-	/**
-	 * 瀵煎嚭琛屾斂鍖哄垝鏁版嵁
-	 */
-	@GetMapping("export-region")
-	@ApiOperationSupport(order = 11)
-	@ApiOperation(value = "瀵煎嚭琛屾斂鍖哄垝", notes = "浼犲叆user")
-	public void exportRegion(@ApiIgnore @RequestParam Map<String, Object> region, HttpServletResponse response) {
-		QueryWrapper<Region> queryWrapper = Condition.getQueryWrapper(region, Region.class);
-		List<RegionExcel> list = regionService.exportRegion(queryWrapper);
-		ExcelUtil.export(response, "琛屾斂鍖哄垝鏁版嵁" + DateUtil.time(), "琛屾斂鍖哄垝鏁版嵁琛�", list, RegionExcel.class);
-	}
-
-	/**
-	 * 瀵煎嚭妯℃澘
-	 */
-	@GetMapping("export-template")
-	@ApiOperationSupport(order = 12)
-	@ApiOperation(value = "瀵煎嚭妯℃澘")
-	public void exportUser(HttpServletResponse response) {
-		List<RegionExcel> list = new ArrayList<>();
-		ExcelUtil.export(response, "琛屾斂鍖哄垝妯℃澘", "琛屾斂鍖哄垝琛�", list, RegionExcel.class);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
deleted file mode 100644
index 7226035..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.entity.Role;
-import org.springblade.system.service.IRoleService;
-import org.springblade.system.user.cache.UserCache;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.vo.GrantVO;
-import org.springblade.system.vo.RoleVO;
-import org.springblade.system.wrapper.RoleWrapper;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/role")
-@Api(value = "瑙掕壊", tags = "瑙掕壊")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-public class RoleController extends BladeController {
-
-	private final IRoleService roleService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆role")
-	public R<RoleVO> detail(Role role) {
-		Role detail = roleService.getOne(Condition.getQueryWrapper(role));
-		return R.data(RoleWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "roleName", value = "鍙傛暟鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "roleAlias", value = "瑙掕壊鍒悕", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆role")
-	public R<List<RoleVO>> list(@ApiIgnore @RequestParam Map<String, Object> role, BladeUser bladeUser) {
-		QueryWrapper<Role> queryWrapper = Condition.getQueryWrapper(role, Role.class);
-		List<Role> list = roleService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Role::getTenantId, bladeUser.getTenantId()) : queryWrapper);
-		return R.data(RoleWrapper.build().listNodeVO(list));
-	}
-
-	/**
-	 * 鑾峰彇瑙掕壊鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<RoleVO>> tree(String tenantId, BladeUser bladeUser) {
-		List<RoleVO> tree = roleService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇鎸囧畾瑙掕壊鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/tree-by-id")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<RoleVO>> treeById(Long roleId, BladeUser bladeUser) {
-		Role role = SysCache.getRole(roleId);
-		List<RoleVO> tree = roleService.tree(Func.notNull(role) ? role.getTenantId() : bladeUser.getTenantId());
-		return R.data(tree);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆role")
-	public R submit(@Valid @RequestBody Role role) {
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(roleService.submit(role));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(roleService.removeRole(ids));
-	}
-
-	/**
-	 * 璁剧疆瑙掕壊鏉冮檺
-	 */
-	@PostMapping("/grant")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鏉冮檺璁剧疆", notes = "浼犲叆roleId闆嗗悎浠ュ強menuId闆嗗悎")
-	public R grant(@RequestBody GrantVO grantVO) {
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds(), grantVO.getDataScopeIds(), grantVO.getApiScopeIds());
-		return R.status(temp);
-	}
-
-	/**
-	 * 涓嬫媺鏁版嵁婧�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆id闆嗗悎")
-	public R<List<Role>> select(Long userId, String roleId) {
-		if (Func.isNotEmpty(userId)) {
-			User user = UserCache.getUser(userId);
-			roleId = user.getRoleId();
-		}
-		List<Role> list = roleService.list(Wrappers.<Role>lambdaQuery().in(Role::getId, Func.toLongList(roleId)));
-		return R.data(list);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/SearchController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/SearchController.java
deleted file mode 100644
index f4d10e9..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/SearchController.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Post;
-import org.springblade.system.service.IDeptService;
-import org.springblade.system.service.IPostService;
-import org.springblade.system.service.IRoleService;
-import org.springblade.system.vo.DeptVO;
-import org.springblade.system.vo.PostVO;
-import org.springblade.system.vo.RoleVO;
-import org.springblade.system.wrapper.PostWrapper;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * 鏌ヨ鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/search")
-@Api(value = "鏌ヨ", tags = "鏌ヨ")
-public class SearchController {
-
-	private final IRoleService roleService;
-
-	private final IDeptService deptService;
-
-	private final IPostService postService;
-
-	/**
-	 * 瑙掕壊淇℃伅鏌ヨ
-	 */
-	@GetMapping("/role")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "瑙掕壊淇℃伅鏌ヨ", notes = "浼犲叆roleName鎴栬�卲arentId")
-	public R<List<RoleVO>> roleSearch(String roleName, Long parentId) {
-		return R.data(roleService.search(roleName, parentId));
-	}
-
-	/**
-	 * 閮ㄩ棬淇℃伅鏌ヨ
-	 */
-	@GetMapping("/dept")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "閮ㄩ棬淇℃伅鏌ヨ", notes = "浼犲叆deptName鎴栬�卲arentId")
-	public R<List<DeptVO>> deptSearch(String deptName, Long parentId) {
-		return R.data(deptService.search(deptName, parentId));
-	}
-
-	/**
-	 * 宀椾綅淇℃伅鏌ヨ
-	 */
-	@GetMapping("/post")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "宀椾綅淇℃伅鏌ヨ", notes = "浼犲叆postName")
-	public R<IPage<PostVO>> postSearch(String postName, Query query) {
-		LambdaQueryWrapper<Post> queryWrapper = Wrappers.<Post>query().lambda();
-		if (Func.isNotBlank(postName)) {
-			queryWrapper.like(Post::getPostName, postName);
-		}
-		IPage<Post> pages = postService.page(Condition.getPage(query), queryWrapper);
-		return R.data(PostWrapper.build().pageVO(pages));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/StrategyController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/StrategyController.java
deleted file mode 100644
index d89b21a..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/StrategyController.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.springblade.system.controller;
-
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.Strategy;
-import org.springblade.system.service.IStrategyService;
-import org.springframework.data.domain.Page;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-import java.util.List;
-
-/**
- * 瀵嗙爜绛栫暐(Strategy)琛ㄦ帶鍒跺眰
- *
- * @author makejava
- * @since 2023-03-20 16:45:31
- */
-@NonDS
-@ApiIgnore
-@AllArgsConstructor
-@RestController
-@RequestMapping("/strategy")
-@Api(value = "瀵嗙爜绛栫暐", tags = "鎺ュ彛")
-public class StrategyController {
-
-	/**
-	 * 鏈嶅姟瀵硅薄
-	 */
-	@Resource
-	private IStrategyService strategyService;
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param query 鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鍒嗛〉鏌ヨ", notes = "浼犲叆鍒嗛〉鍙傛暟query")
-	public R<Page<Strategy>> queryByPage(Query query) {
-		Page<Strategy> strategyPage = strategyService.queryAllByPage(query);
-		return R.data(strategyPage);
-	}
-
-	/**
-	 * 鏌ヨ榛樿瀵嗙爜绛栫暐
-	 *
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@GetMapping("/default")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鏌ヨ榛樿瀵嗙爜绛栫暐")
-	public R<Strategy> queryByIsDefault() {
-		Strategy strategy = strategyService.queryByIsDefault();
-		return R.data(strategy);
-	}
-
-	/**
-	 * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 鍗曟潯鏁版嵁
-	 */
-	@GetMapping("/one")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁", notes = "浼犲叆id")
-	public ResponseEntity<Strategy> queryById(@ApiParam(value = "瀵嗙爜绛栫暐ID", required = true) @RequestParam String id) {
-		return ResponseEntity.ok(this.strategyService.queryById(id));
-	}
-
-	/**
-	 * 鏂板鍜屼慨鏀规暟鎹�
-	 *
-	 * @param strategy 瀹炰綋
-	 * @return 鏂板缁撴灉
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板鎴栦慨鏀规暟鎹�", notes = "浼犲叆strategy")
-	public ResponseEntity<Boolean> submit(@Valid @RequestBody Strategy strategy) {
-		return ResponseEntity.ok(this.strategyService.submit(strategy));
-	}
-
-	/**
-	 * 鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鍒犻櫎鏄惁鎴愬姛
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public ResponseEntity<Boolean> deleteById(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam List<String> ids) {
-		return ResponseEntity.ok(this.strategyService.deleteByIds(ids));
-	}
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐
-	 *
-	 * @param userId 瀹炰綋
-	 * @return 鏂板缁撴灉
-	 */
-	@PostMapping("/query-userid")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐", notes = "浼犲叆userId")
-	public R<Strategy> queryByUserId(@Valid @RequestParam Long userId) {
-		return R.data(this.strategyService.queryByUserId(userId));
-	}
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java
deleted file mode 100644
index a21106b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Tenant;
-import org.springblade.system.entity.TenantPackage;
-import org.springblade.system.service.ITenantPackageService;
-import org.springblade.system.service.ITenantService;
-import org.springblade.system.vo.TenantVO;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-import static org.springblade.core.tenant.constant.TenantBaseConstant.TENANT_DATASOURCE_CACHE;
-import static org.springblade.core.tenant.constant.TenantBaseConstant.TENANT_DATASOURCE_EXIST_KEY;
-import static org.springblade.system.cache.SysCache.TENANT_PACKAGE_ID;
-import static org.springblade.system.cache.SysCache.TENANT_TENANT_ID;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-@RequestMapping("/tenant")
-@Api(value = "绉熸埛绠$悊", tags = "鎺ュ彛")
-public class TenantController extends BladeController {
-
-	private final ITenantService tenantService;
-
-	private final ITenantPackageService tenantPackageService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆tenant")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<Tenant> detail(Tenant tenant) {
-		Tenant detail = tenantService.getOne(Condition.getQueryWrapper(tenant));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "tenantId", value = "鍙傛暟鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "tenantName", value = "瑙掕壊鍒悕", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "contactNumber", value = "鑱旂郴鐢佃瘽", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆tenant")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<IPage<Tenant>> list(@ApiIgnore @RequestParam Map<String, Object> tenant, Query query, BladeUser bladeUser) {
-		QueryWrapper<Tenant> queryWrapper = Condition.getQueryWrapper(tenant, Tenant.class);
-		IPage<Tenant> pages = tenantService.page(Condition.getPage(query), (!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Tenant::getTenantId, bladeUser.getTenantId()) : queryWrapper);
-		return R.data(pages);
-	}
-
-	/**
-	 * 涓嬫媺鏁版嵁婧�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆tenant")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<List<Tenant>> select(Tenant tenant, BladeUser bladeUser) {
-		QueryWrapper<Tenant> queryWrapper = Condition.getQueryWrapper(tenant);
-		List<Tenant> list = tenantService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Tenant::getTenantId, bladeUser.getTenantId()) : queryWrapper);
-		return R.data(list);
-	}
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆tenant")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<IPage<Tenant>> page(Tenant tenant, Query query) {
-		IPage<Tenant> pages = tenantService.selectTenantPage(Condition.getPage(query), tenant);
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆tenant")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	public R submit(@Valid @RequestBody TenantVO tenantVO) {
-		return R.status(tenantService.submitTenant(tenantVO));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(tenantService.removeTenant(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 鏁版嵁婧愰厤缃�
-	 */
-	@PostMapping("/datasource")
-	@ApiOperationSupport(order = 8)
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperation(value = "鏁版嵁婧愰厤缃�", notes = "浼犲叆datasource_id")
-	public R datasource(@ApiParam(value = "绉熸埛ID", required = true) @RequestParam String tenantId, @ApiParam(value = "鏁版嵁婧怚D", required = true) @RequestParam Long datasourceId){
-		CacheUtil.evict(TENANT_DATASOURCE_CACHE, TENANT_DATASOURCE_EXIST_KEY, tenantId, Boolean.FALSE);
-		return R.status(tenantService.update(Wrappers.<Tenant>update().lambda().set(Tenant::getDatasourceId, datasourceId).eq(Tenant::getTenantId, tenantId)));
-	}
-
-	/**
-	 * 鏍规嵁鍚嶇О鏌ヨ鍒楄〃
-	 *
-	 * @param name 绉熸埛鍚嶇О
-	 */
-	@GetMapping("/find-by-name")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆tenant")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<List<Tenant>> findByName(String name) {
-		List<Tenant> list = tenantService.list(Wrappers.<Tenant>query().lambda().like(Tenant::getTenantName, name));
-		return R.data(list);
-	}
-
-	/**
-	 * 鏍规嵁鍩熷悕鏌ヨ淇℃伅
-	 *
-	 * @param domain 鍩熷悕
-	 */
-	@GetMapping("/info")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "閰嶇疆淇℃伅", notes = "浼犲叆domain")
-	public R<Kv> info(String domain) {
-		Tenant tenant = tenantService.getOne(Wrappers.<Tenant>query().lambda().eq(Tenant::getDomainUrl, domain));
-		Kv kv = Kv.create();
-		if (tenant != null) {
-			kv.set("tenantId", tenant.getTenantId())
-				.set("domain", tenant.getDomainUrl())
-				.set("backgroundUrl", tenant.getBackgroundUrl());
-		}
-		return R.data(kv);
-	}
-
-	/**
-	 * 鏍规嵁绉熸埛ID鏌ヨ浜у搧鍖呰鎯�
-	 *
-	 * @param tenantId 绉熸埛ID
-	 */
-	@GetMapping("/package-detail")
-	@ApiOperationSupport(order = 11)
-	@ApiOperation(value = "浜у搧鍖呰鎯�", notes = "浼犲叆tenantId")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	public R<TenantPackage> packageDetail(Long tenantId) {
-		Tenant tenant = tenantService.getById(tenantId);
-		return R.data(tenantPackageService.getById(tenant.getPackageId()));
-	}
-
-	/**
-	 * 浜у搧鍖呴厤缃�
-	 */
-	@PostMapping("/package-setting")
-	@ApiOperationSupport(order = 12)
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	@ApiOperation(value = "浜у搧鍖呴厤缃�", notes = "浼犲叆packageId")
-	public R packageSetting(@ApiParam(value = "绉熸埛ID", required = true) @RequestParam String tenantId, @ApiParam(value = "浜у搧鍖匢D") Long packageId) {
-		CacheUtil.evict(SYS_CACHE, TENANT_TENANT_ID, tenantId, Boolean.FALSE);
-		CacheUtil.evict(SYS_CACHE, TENANT_PACKAGE_ID, tenantId, Boolean.FALSE);
-		return R.status(tenantService.update(Wrappers.<Tenant>update().lambda().set(Tenant::getPackageId, packageId).eq(Tenant::getTenantId, tenantId)));
-	}
-
-	/**
-	 * 鏌ヨ绉熸埛淇℃伅锛岀畝閿�煎褰㈠娍
-	 * @return
-	 */
-	@GetMapping("/tenant-map")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "涓嬫媺绉熸埛淇℃伅")
-	public R<List> findAll() {
-		List<Map<String, Object>> map = tenantService.selectMaps();
-		return R.data(map);
-	}
-
-	/**
-	 * 鏌ヨ鏄惁閰嶇疆鏈夐粯璁ゅ繀椤诲紑鍚笁鍛樼鐞�
-	 * @return
-	 */
-	@GetMapping("/find-ssa-enable")
-	@ApiOperationSupport(order = 14)
-	@ApiOperation(value = "涓嬫媺绉熸埛淇℃伅")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	public R findIsOpen() {
-		boolean isOpen = this.tenantService.findIsOpen();
-		return R.data(isOpen);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantPackageController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantPackageController.java
deleted file mode 100644
index 242c69c..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantPackageController.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.TenantPackage;
-import org.springblade.system.service.ITenantPackageService;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 绉熸埛浜у搧琛� 鎺у埗鍣�
- *
- * @author BladeX
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("/tenant-package")
-@Api(value = "绉熸埛浜у搧琛�", tags = "绉熸埛浜у搧琛ㄦ帴鍙�")
-public class TenantPackageController extends BladeController {
-
-	private final ITenantPackageService tenantPackageService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆tenantPackage")
-	public R<TenantPackage> detail(TenantPackage tenantPackage) {
-		TenantPackage detail = tenantPackageService.getOne(Condition.getQueryWrapper(tenantPackage));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉 绉熸埛浜у搧琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆tenantPackage")
-	public R<IPage<TenantPackage>> list(TenantPackage tenantPackage, Query query) {
-		IPage<TenantPackage> pages = tenantPackageService.page(Condition.getPage(query), Condition.getQueryWrapper(tenantPackage));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 绉熸埛浜у搧琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆tenantPackage")
-	public R save(@Valid @RequestBody TenantPackage tenantPackage) {
-		return R.status(tenantPackageService.save(tenantPackage));
-	}
-
-	/**
-	 * 淇敼 绉熸埛浜у搧琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆tenantPackage")
-	public R update(@Valid @RequestBody TenantPackage tenantPackage) {
-		return R.status(tenantPackageService.updateById(tenantPackage));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 绉熸埛浜у搧琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆tenantPackage")
-	public R submit(@Valid @RequestBody TenantPackage tenantPackage) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(tenantPackageService.saveOrUpdate(tenantPackage));
-	}
-
-
-	/**
-	 * 鍒犻櫎 绉熸埛浜у搧琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(tenantPackageService.deleteLogic(Func.toLongList(ids)));
-	}
-
-
-	/**
-	 * 涓嬫媺鏁版嵁婧�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆tenant")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<List<TenantPackage>> select(TenantPackage tenantPackage) {
-		return R.data(tenantPackageService.list(Condition.getQueryWrapper(tenantPackage)));
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TopMenuController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TopMenuController.java
deleted file mode 100644
index 686dd4c..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TopMenuController.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.TopMenu;
-import org.springblade.system.service.ITopMenuService;
-import org.springblade.system.vo.GrantVO;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 椤堕儴鑿滃崟琛� 鎺у埗鍣�
- *
- * @author BladeX
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/topmenu")
-@Api(value = "椤堕儴鑿滃崟琛�", tags = "椤堕儴鑿滃崟")
-//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-public class TopMenuController extends BladeController {
-
-	private final ITopMenuService topMenuService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆topMenu")
-	public R<TopMenu> detail(TopMenu topMenu) {
-		TopMenu detail = topMenuService.getOne(Condition.getQueryWrapper(topMenu));
-		return R.data(detail);
-	}
-
-	/**
-	 * 鍒嗛〉 椤堕儴鑿滃崟琛�
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆topMenu")
-	public R<IPage<TopMenu>> list(TopMenu topMenu, Query query) {
-		IPage<TopMenu> pages = topMenuService.page(Condition.getPage(query), Condition.getQueryWrapper(topMenu).lambda().orderByAsc(TopMenu::getSort));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板 椤堕儴鑿滃崟琛�
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆topMenu")
-	public R save(@Valid @RequestBody TopMenu topMenu) {
-		return R.status(topMenuService.save(topMenu));
-	}
-
-	/**
-	 * 淇敼 椤堕儴鑿滃崟琛�
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆topMenu")
-	public R update(@Valid @RequestBody TopMenu topMenu) {
-		return R.status(topMenuService.updateById(topMenu));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀� 椤堕儴鑿滃崟琛�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆topMenu")
-	public R submit(@Valid @RequestBody TopMenu topMenu) {
-		return R.status(topMenuService.saveOrUpdate(topMenu));
-	}
-
-
-	/**
-	 * 鍒犻櫎 椤堕儴鑿滃崟琛�
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(topMenuService.deleteLogic(Func.toLongList(ids)));
-	}
-
-	/**
-	 * 璁剧疆椤堕儴鑿滃崟
-	 */
-	@PostMapping("/grant")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "椤堕儴鑿滃崟閰嶇疆", notes = "浼犲叆topMenuId闆嗗悎浠ュ強menuId闆嗗悎")
-	public R grant(@RequestBody GrantVO grantVO) {
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(MENU_CACHE);
-		CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
-		boolean temp = topMenuService.grant(grantVO.getTopMenuIds(), grantVO.getMenuIds());
-		return R.status(temp);
-	}
-
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/UserPwdstrategyController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/UserPwdstrategyController.java
deleted file mode 100644
index aaa6062..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/UserPwdstrategyController.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.springblade.system.controller;
-
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.system.service.IUserPwdstrategyService;
-import org.springblade.system.vo.UserPwdstrategyVO;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-
-/**
- * 鐢ㄦ埛瀵嗙爜绛栫暐鍏宠仈(UserPwdstrategy)琛ㄦ帶鍒跺眰
- *
- * @author ludc
- * @since 2023-03-20 15:23:24
- */
-@NonDS
-@ApiIgnore
-@AllArgsConstructor
-@RestController
-@RequestMapping("/user-pwdstrategy")
-@Api(value = "鐢ㄦ埛瀵嗙爜瀹夊叏绛栫暐鍏宠仈琛�", tags = "鎺ュ彛")
-public class UserPwdstrategyController {
-
-	@Resource
-	private IUserPwdstrategyService userPwdstrategyService;
-
-	/**
-	 * 鏂板鍜屼慨鏀规暟鎹�
-	 *
-	 * @param userPwdstrategyVO 瀹炰綋
-	 * @return 鏂板缁撴灉
-	 */
-	@PutMapping("/insert")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板鏁版嵁", notes = "浼犲叆userPwdstrategy")
-	public ResponseEntity<Boolean> insert(@Valid @RequestBody UserPwdstrategyVO userPwdstrategyVO) {
-		return ResponseEntity.ok(this.userPwdstrategyService.submit(userPwdstrategyVO));
-	}
-
-	/**
-	 * 鏂板鍜屼慨鏀规暟鎹�
-	 *
-	 * @param userPwdstrategyVO 瀹炰綋
-	 * @return 鏂板缁撴灉
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "淇敼鏁版嵁", notes = "浼犲叆userPwdstrategy")
-	public ResponseEntity<Boolean> update(@Valid @RequestBody UserPwdstrategyVO userPwdstrategyVO) {
-		return ResponseEntity.ok(this.userPwdstrategyService.submit(userPwdstrategyVO));
-	}
-
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ValueRangeController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ValueRangeController.java
deleted file mode 100644
index 6dca0b9..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ValueRangeController.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.springblade.system.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.ValueRange;
-import org.springblade.system.service.IValueRangeService;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-import java.util.List;
-
-/**
- * (ValueRangeController)琛ㄦ帶鍒跺眰
- *
- * @author ludc
- * @since 2023-03-20 15:23:24
- */
-@NonDS
-@ApiIgnore
-@AllArgsConstructor
-@RestController
-@RequestMapping("/value-range")
-@Api(value = "瀵嗙爜缁勫悎鏂瑰紡鍙栧��", tags = "鎺ュ彛")
-public class ValueRangeController {
-
-	/**
-	 * 鏈嶅姟瀵硅薄
-	 */
-	@Resource
-	private IValueRangeService valueRangeService;
-
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dataScope")
-	public R<List<ValueRange>> queryByList() {
-		return R.data(valueRangeService.queryByAll());
-	}
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param valueRange 绛涢�夋潯浠�
-	 * @param query      鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉鏌ヨ", notes = "浼犲叆valueRange锛屽垎椤靛弬鏁皅uery")
-	public R<IPage<ValueRange>> queryByPage(ValueRange valueRange, Query query) {
-		IPage<ValueRange> pages = valueRangeService.page(Condition.getPage(query), Condition.getQueryWrapper(valueRange));
-		return R.data(pages);
-	}
-
-	/**
-	 * 鏂板鍜屼慨鏀规暟鎹�
-	 *
-	 * @param valueRange 瀹炰綋
-	 * @return 鏂板缁撴灉
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板鍜屼慨鏀规暟鎹�", notes = "浼犲叆valueRange")
-	public ResponseEntity<Boolean> submit(@Valid @RequestBody ValueRange valueRange) {
-		return ResponseEntity.ok(this.valueRangeService.submit(valueRange));
-	}
-
-	/**
-	 * 鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鍒犻櫎鏄惁鎴愬姛
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public ResponseEntity<Boolean> deleteById(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam List<String> ids) {
-		return ResponseEntity.ok(this.valueRangeService.deleteByIds(ids));
-	}
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java
deleted file mode 100644
index a3b78e5..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.excel;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.alibaba.excel.annotation.write.style.ContentRowHeight;
-import com.alibaba.excel.annotation.write.style.HeadRowHeight;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * RegionExcel
- *
- * @author Chill
- */
-@Data
-@ColumnWidth(16)
-@HeadRowHeight(20)
-@ContentRowHeight(18)
-public class RegionExcel implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	@ExcelProperty("鍖哄垝缂栧彿")
-	private String code;
-
-	@ExcelProperty("鐖跺尯鍒掔紪鍙�")
-	private String parentCode;
-
-	@ExcelProperty("绁栧尯鍒掔紪鍙�")
-	private String ancestors;
-
-	@ExcelProperty("鍖哄垝鍚嶇О")
-	private String name;
-
-	@ExcelProperty("鐪佺骇鍖哄垝缂栧彿")
-	private String provinceCode;
-
-	@ExcelProperty("鐪佺骇鍚嶇О")
-	private String provinceName;
-
-	@ExcelProperty("甯傜骇鍖哄垝缂栧彿")
-	private String cityCode;
-
-	@ExcelProperty("甯傜骇鍚嶇О")
-	private String cityName;
-
-	@ExcelProperty("鍖虹骇鍖哄垝缂栧彿")
-	private String districtCode;
-
-	@ExcelProperty("鍖虹骇鍚嶇О")
-	private String districtName;
-
-	@ExcelProperty("闀囩骇鍖哄垝缂栧彿")
-	private String townCode;
-
-	@ExcelProperty("闀囩骇鍚嶇О")
-	private String townName;
-
-	@ExcelProperty("鏉戠骇鍖哄垝缂栧彿")
-	private String villageCode;
-
-	@ExcelProperty("鏉戠骇鍚嶇О")
-	private String villageName;
-
-	@ExcelProperty("灞傜骇")
-	private Integer regionLevel;
-
-	@ExcelProperty("鎺掑簭")
-	private Integer sort;
-
-	@ExcelProperty("澶囨敞")
-	private String remark;
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionImporter.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionImporter.java
deleted file mode 100644
index 0d17b53..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionImporter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.excel;
-
-import lombok.RequiredArgsConstructor;
-import org.springblade.core.excel.support.ExcelImporter;
-import org.springblade.system.service.IRegionService;
-
-import java.util.List;
-
-/**
- * 琛屾斂鍖哄垝鏁版嵁瀵煎叆绫�
- *
- * @author Chill
- */
-@RequiredArgsConstructor
-public class RegionImporter implements ExcelImporter<RegionExcel> {
-
-	private final IRegionService service;
-	private final Boolean isCovered;
-
-	@Override
-	public void save(List<RegionExcel> data) {
-		service.importRegion(data, isCovered);
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/ApiScopeClient.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/ApiScopeClient.java
deleted file mode 100644
index 76433f1..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/ApiScopeClient.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import lombok.RequiredArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static org.springblade.core.secure.constant.PermissionConstant.permissionAllStatement;
-import static org.springblade.core.secure.constant.PermissionConstant.permissionStatement;
-
-/**
- * 鎺ュ彛鏉冮檺Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@RequiredArgsConstructor
-public class ApiScopeClient implements IApiScopeClient {
-
-	private final JdbcTemplate jdbcTemplate;
-
-	@Override
-	@GetMapping(PERMISSION_PATH)
-	public List<String> permissionPath(String roleId) {
-		List<Long> roleIds = Func.toLongList(roleId);
-		return jdbcTemplate.queryForList(permissionAllStatement(roleIds.size()), roleIds.toArray(), String.class);
-	}
-
-	@Override
-	@GetMapping(PERMISSION_CODE)
-	public List<String> permissionCode(String permission, String roleId) {
-		List<Object> args = new ArrayList<>(Collections.singletonList(permission));
-		List<Long> roleIds = Func.toLongList(roleId);
-		args.addAll(roleIds);
-		return jdbcTemplate.queryForList(permissionStatement(roleIds.size()), args.toArray(), String.class);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DataScopeClient.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DataScopeClient.java
deleted file mode 100644
index a257757..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DataScopeClient.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import lombok.RequiredArgsConstructor;
-import org.springblade.core.datascope.constant.DataScopeConstant;
-import org.springblade.core.datascope.model.DataScopeModel;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.utils.CollectionUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * 鏁版嵁鏉冮檺Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@RequiredArgsConstructor
-public class DataScopeClient implements IDataScopeClient {
-
-	private static final DataScopeModel SEARCHED_DATA_SCOPE_MODEL = new DataScopeModel(Boolean.TRUE);
-
-	private final JdbcTemplate jdbcTemplate;
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param mapperId 鏁版嵁鏉冮檺mapperId
-	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
-	 * @return DataScopeModel
-	 */
-	@Override
-	@GetMapping(GET_DATA_SCOPE_BY_MAPPER)
-	public DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
-		List<Object> args = new ArrayList<>(Collections.singletonList(mapperId));
-		List<Long> roleIds = Func.toLongList(roleId);
-		args.addAll(roleIds);
-		// 澧炲姞searched瀛楁闃叉鏈厤缃殑鍙傛暟閲嶅璇诲簱瀵艰嚧缂撳瓨鍑荤┛
-		// 鍚庣画鑻ユ湁鏂板閰嶇疆鍒欎細娓呯┖缂撳瓨閲嶆柊鍔犺浇
-		DataScopeModel dataScope;
-		List<DataScopeModel> list = jdbcTemplate.query(DataScopeConstant.dataByMapper(roleIds.size()), args.toArray(), new BeanPropertyRowMapper<>(DataScopeModel.class));
-		if (CollectionUtil.isNotEmpty(list)) {
-			dataScope = list.iterator().next();
-			dataScope.setSearched(Boolean.TRUE);
-		} else {
-			dataScope = SEARCHED_DATA_SCOPE_MODEL;
-		}
-		return dataScope;
-	}
-
-	/**
-	 * 鑾峰彇鏁版嵁鏉冮檺
-	 *
-	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
-	 * @return DataScopeModel
-	 */
-	@Override
-	@GetMapping(GET_DATA_SCOPE_BY_CODE)
-	public DataScopeModel getDataScopeByCode(String code) {
-		// 澧炲姞searched瀛楁闃叉鏈厤缃殑鍙傛暟閲嶅璇诲簱瀵艰嚧缂撳瓨鍑荤┛
-		// 鍚庣画鑻ユ湁鏂板閰嶇疆鍒欎細娓呯┖缂撳瓨閲嶆柊鍔犺浇
-		DataScopeModel dataScope;
-		List<DataScopeModel> list = jdbcTemplate.query(DataScopeConstant.DATA_BY_CODE, new Object[]{code}, new BeanPropertyRowMapper<>(DataScopeModel.class));
-		if (CollectionUtil.isNotEmpty(list)) {
-			dataScope = list.iterator().next();
-			dataScope.setSearched(Boolean.TRUE);
-		} else {
-			dataScope = SEARCHED_DATA_SCOPE_MODEL;
-		}
-		return dataScope;
-	}
-
-	/**
-	 * 鑾峰彇閮ㄩ棬瀛愮骇
-	 *
-	 * @param deptId 閮ㄩ棬id
-	 * @return deptIds
-	 */
-	@Override
-	@GetMapping(GET_DEPT_ANCESTORS)
-	public List<Long> getDeptAncestors(Long deptId) {
-		return jdbcTemplate.queryForList(DataScopeConstant.DATA_BY_DEPT, new Object[]{deptId}, Long.class);
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictBizClient.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictBizClient.java
deleted file mode 100644
index feda97a..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictBizClient.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.service.IDictBizService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.List;
-
-
-/**
- * 瀛楀吀鏈嶅姟Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-public class DictBizClient implements IDictBizClient {
-
-	private final IDictBizService service;
-
-	@Override
-	@GetMapping(GET_BY_ID)
-	public R<DictBiz> getById(Long id) {
-		return R.data(service.getById(id));
-	}
-
-	@Override
-	@GetMapping(GET_VALUE)
-	public R<String> getValue(String code, String dictKey) {
-		return R.data(service.getValue(code, dictKey));
-	}
-
-	@Override
-	@GetMapping(GET_LIST)
-	public R<List<DictBiz>> getList(String code) {
-		return R.data(service.getList(code));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictClient.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictClient.java
deleted file mode 100644
index d35d617..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictClient.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.Dict;
-import org.springblade.system.service.IDictService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.List;
-
-
-/**
- * 瀛楀吀鏈嶅姟Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-public class DictClient implements IDictClient {
-
-	private final IDictService service;
-
-	@Override
-	@GetMapping(GET_BY_ID)
-	public R<Dict> getById(Long id) {
-		return R.data(service.getById(id));
-	}
-
-	@Override
-	@GetMapping(GET_VALUE)
-	public R<String> getValue(String code, String dictKey) {
-		return R.data(service.getValue(code, dictKey));
-	}
-
-	@Override
-	@GetMapping(GET_LIST)
-	public R<List<Dict>> getList(String code) {
-		return R.data(service.getList(code));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
deleted file mode 100644
index 68e2399..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.feign;
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.system.entity.*;
-import org.springblade.system.service.*;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.List;
-
-/**
- * 绯荤粺鏈嶅姟Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-public class SysClient implements ISysClient {
-
-	private final IDeptService deptService;
-
-	private final IPostService postService;
-
-	private final IRoleService roleService;
-
-	private final IMenuService menuService;
-
-	private final ITenantService tenantService;
-
-	private final ITenantPackageService tenantPackageService;
-
-	private final IParamService paramService;
-
-	private final IRegionService regionService;
-
-	private final IStrategyService strategyService;
-
-	private final ICombinationService combinationService;
-
-	@Override
-	@GetMapping(MENU)
-	public R<Menu> getMenu(Long id) {
-		return R.data(menuService.getById(id));
-	}
-
-	@Override
-	@GetMapping(DEPT)
-	public R<Dept> getDept(Long id) {
-		return R.data(deptService.getById(id));
-	}
-
-	@Override
-	public R<String> getDeptIds(String tenantId, String deptNames) {
-		return R.data(deptService.getDeptIds(tenantId, deptNames));
-	}
-
-	@Override
-	public R<String> getDeptIdsByFuzzy(String tenantId, String deptNames) {
-		return R.data(deptService.getDeptIdsByFuzzy(tenantId, deptNames));
-	}
-
-	@Override
-	@GetMapping(DEPT_NAME)
-	public R<String> getDeptName(Long id) {
-		return R.data(deptService.getById(id).getDeptName());
-	}
-
-	@Override
-	@GetMapping(DEPT_NAMES)
-	public R<List<String>> getDeptNames(String deptIds) {
-		return R.data(deptService.getDeptNames(deptIds));
-	}
-
-	@Override
-	@GetMapping(DEPT_CHILD)
-	public R<List<Dept>> getDeptChild(Long deptId) {
-		return R.data(deptService.getDeptChild(deptId));
-	}
-
-	@Override
-	public R<Post> getPost(Long id) {
-		return R.data(postService.getById(id));
-	}
-
-	@Override
-	public R<String> getPostIds(String tenantId, String postNames) {
-		return R.data(postService.getPostIds(tenantId, postNames));
-	}
-
-	@Override
-	public R<String> getPostIdsByFuzzy(String tenantId, String postNames) {
-		return R.data(postService.getPostIdsByFuzzy(tenantId, postNames));
-	}
-
-	@Override
-	public R<String> getPostName(Long id) {
-		return R.data(postService.getById(id).getPostName());
-	}
-
-	@Override
-	public R<List<String>> getPostNames(String postIds) {
-		return R.data(postService.getPostNames(postIds));
-	}
-
-	@Override
-	@GetMapping(ROLE)
-	public R<Role> getRole(Long id) {
-		return R.data(roleService.getById(id));
-	}
-
-	@Override
-	public R<String> getRoleIds(String tenantId, String roleNames) {
-		return R.data(roleService.getRoleIds(tenantId, roleNames));
-	}
-
-	@Override
-	@GetMapping(ROLE_NAME)
-	public R<String> getRoleName(Long id) {
-		return R.data(roleService.getById(id).getRoleName());
-	}
-
-	@Override
-	@GetMapping(ROLE_ALIAS)
-	public R<String> getRoleAlias(Long id) {
-		return R.data(roleService.getById(id).getRoleAlias());
-	}
-
-	@Override
-	@GetMapping(ROLE_NAMES)
-	public R<List<String>> getRoleNames(String roleIds) {
-		return R.data(roleService.getRoleNames(roleIds));
-	}
-
-	@Override
-	@GetMapping(ROLE_ALIASES)
-	public R<List<String>> getRoleAliases(String roleIds) {
-		return R.data(roleService.getRoleAliases(roleIds));
-	}
-
-	@Override
-	@GetMapping(TENANT)
-	public R<Tenant> getTenant(Long id) {
-		return R.data(tenantService.getById(id));
-	}
-
-	@Override
-	@GetMapping(TENANT_ID)
-	public R<Tenant> getTenant(String tenantId) {
-		return R.data(tenantService.getByTenantId(tenantId));
-	}
-
-	@Override
-	@GetMapping(TENANT_PACKAGE)
-	public R<TenantPackage> getTenantPackage(String tenantId) {
-		Tenant tenant = tenantService.getByTenantId(tenantId);
-		return R.data(tenantPackageService.getById(tenant.getPackageId()));
-	}
-
-	@Override
-	@GetMapping(PARAM)
-	public R<Param> getParam(Long id) {
-		return R.data(paramService.getById(id));
-	}
-
-	@Override
-	@GetMapping(PARAM_VALUE)
-	public R<String> getParamValue(String paramKey) {
-		return R.data(paramService.getValue(paramKey));
-	}
-
-	@Override
-	@GetMapping(REGION)
-	public R<Region> getRegion(String code) {
-		return R.data(regionService.getById(code));
-	}
-
-	@Override
-	@PostMapping(STRATEGY)
-	public R<Strategy> getByTenantIdAndName(String tenantId, String name) {
-		return R.data(strategyService.queryByNameAndTenantId(tenantId,name));
-	}
-
-	@Override
-	@PostMapping(STRATEGYBYID)
-	public R<Strategy> getByUserId(Long userId) {
-		return R.data(strategyService.queryByUserId(userId));
-	}
-
-	@Override
-	@PostMapping(REGEX)
-	public R<String> getRegex(@RequestBody List<String> combinationIds) {
-		return R.data(combinationService.getRegex(combinationIds));
-	}
-
-	@Override
-	@PostMapping(REGEXONE)
-	public R<List<String>> getRegexByList(List<String> combinationIds) {
-		return R.data(combinationService.getRegexList(combinationIds));
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java
deleted file mode 100644
index 3904a05..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.ApiScope;
-
-/**
- *  Mapper 鎺ュ彛
- *
- * @author BladeX
- */
-public interface ApiScopeMapper extends BaseMapper<ApiScope> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml
deleted file mode 100644
index 5d62dc0..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.ApiScopeMapper">
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.java
deleted file mode 100644
index 73d2d03..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.AuthClient;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface AuthClientMapper extends BaseMapper<AuthClient> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml
deleted file mode 100644
index f86769d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.AuthClientMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="clientResultMap" type="org.springblade.system.entity.AuthClient">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="client_id" property="clientId"/>
-        <result column="client_secret" property="clientSecret"/>
-        <result column="Autowireds_ids" property="AutowiredIds"/>
-        <result column="scope" property="scope"/>
-        <result column="authorized_grant_types" property="authorizedGrantTypes"/>
-        <result column="web_server_redirect_uri" property="webServerRedirectUri"/>
-        <result column="authorities" property="authorities"/>
-        <result column="access_token_validity" property="accessTokenValidity"/>
-        <result column="refresh_token_validity" property="refreshTokenValidity"/>
-        <result column="additional_information" property="additionalInformation"/>
-        <result column="autoapprove" property="autoapprove"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.java
deleted file mode 100644
index 3e55378..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
-import org.springblade.system.entity.Combination;
-
-import java.util.List;
-
-/**
- * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)琛ㄦ暟鎹簱璁块棶灞�
- *
- * @author makejava
- * @since 2023-03-20 15:23:17
- */
-public interface CombinationMapper extends BaseMapper<Combination> {
-
-	/**
-	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	Combination queryById(String id);
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 * @param page
-	 * @param combination
-	 * @return
-	 */
-	List<Combination> selectCombinationPage(IPage page, Combination combination);
-
-	/**
-	 * 缁熻鎬昏鏁�
-	 *
-	 * @param combination 鏌ヨ鏉′欢
-	 * @return 鎬昏鏁�
-	 */
-	long count(Combination combination);
-
-	/**
-	 * 鏌ヨ缁勫悎鏂瑰紡姝e垯
-	 *
-	 * @param combinationIds 鏌ヨ鏉′欢
-	 * @return 鎬昏鏁�
-	 */
-	String queryRegex(@Param("combinationIds") List<String> combinationIds);
-
-	/**
-	 * 鏌ヨ缁勫悎鏂瑰紡瀵瑰簲姝e垯闆嗗悎
-	 *
-	 * @param combinationIds 鏌ヨ鏉′欢
-	 * @return 鎬昏鏁�
-	 */
-	List<String> queryRegexList(@Param("combinationIds") List<String> combinationIds);
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.xml
deleted file mode 100644
index be19c53..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.CombinationMapper">
-
-    <resultMap type="org.springblade.system.entity.Combination" id="CombinationMap">
-        <result property="id" column="ID" jdbcType="VARCHAR"/>
-        <result property="name" column="NAME" jdbcType="VARCHAR"/>
-        <result property="desc" column="DESC" jdbcType="VARCHAR"/>
-        <result property="createTime" column="CREATETIME" jdbcType="TIMESTAMP"/>
-        <result property="createUser" column="CREATEUSER" jdbcType="VARCHAR"/>
-        <result property="updateTime" column="UPDATETIME" jdbcType="TIMESTAMP"/>
-        <result property="updateUser" column="UPDATEUSER" jdbcType="VARCHAR"/>
-        <result property="licensors" column="LICENSORS" jdbcType="VARCHAR"/>
-    </resultMap>
-
-    <!--鏌ヨ鍗曚釜-->
-    <select id="queryById" resultMap="CombinationMap">
-        select ID,
-               NAME, DESC, CREATETIME, CREATEUSER, UPDATETIME, UPDATEUSER, LICENSORS
-        from PL_SYS_COMBINATION
-        where ID = #{id}
-    </select>
-
-    <!--缁熻鎬昏鏁�-->
-    <select id="count" resultType="java.lang.Long">
-        select count(1)
-        from PL_SYS_COMBINATION
-        <where>
-            <if test="id != null and id != ''">
-                and ID = #{id}
-            </if>
-            <if test="name != null and name != ''">
-                and NAME = #{name}
-            </if>
-            <if test="desc != null and desc != ''">
-                and DESC = #{desc}
-            </if>
-            <if test="createtime != null">
-                and CREATETIME = #{createtime}
-            </if>
-            <if test="createuser != null and createuser != ''">
-                and CREATEUSER = #{createuser}
-            </if>
-            <if test="updatetime != null">
-                and UPDATETIME = #{updatetime}
-            </if>
-            <if test="updateuser != null and updateuser != ''">
-                and UPDATEUSER = #{updateuser}
-            </if>
-            <if test="licensors != null and licensors != ''">
-                and LICENSORS = #{licensors}
-            </if>
-        </where>
-    </select>
-
-    <!--鍒嗛〉鏌ヨ-->
-    <select id="selectCombinationPage" resultMap="CombinationMap">
-        select
-        ID, NAME, DESC, CREATETIME, CREATEUSER, UPDATETIME, UPDATEUSER, LICENSORS
-        from PL_SYS_COMBINATION
-        <where>
-            <if test="id != null and id != ''">
-                and ID = #{id}
-            </if>
-            <if test="name != null and name != ''">
-                and NAME = #{name}
-            </if>
-            <if test="desc != null and desc != ''">
-                and DESC = #{desc}
-            </if>
-            <if test="createtime != null">
-                and CREATETIME = #{createtime}
-            </if>
-            <if test="createuser != null and createuser != ''">
-                and CREATEUSER = #{createuser}
-            </if>
-            <if test="updatetime != null">
-                and UPDATETIME = #{updatetime}
-            </if>
-            <if test="updateuser != null and updateuser != ''">
-                and UPDATEUSER = #{updateuser}
-            </if>
-            <if test="licensors != null and licensors != ''">
-                and LICENSORS = #{licensors}
-            </if>
-        </where>
-        limit #{pageable.offset}, #{pageable.pageSize}
-    </select>
-
-    <select id="queryRegex" resultType="java.lang.String">
-        SELECT CONCAT(REPLACE(WM_CONCAT(psc.REGEX),',[',''),']') FROM PL_SYS_COMBINATION psc
-        WHERE psc.ID IN (
-        <foreach collection="combinationIds" item="id" separator=",">
-            #{id}
-        </foreach>
-        )
-    </select>
-
-    <select id="queryRegexList" resultType="java.lang.String">
-        SELECT concat(psc.REGEX,']{1,}') from PL_SYS_COMBINATION psc
-        WHERE psc.ID IN (
-        <foreach collection="combinationIds" item="id" separator=",">
-            #{id}
-        </foreach>
-        )
-    </select>
-
-</mapper>
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.java
deleted file mode 100644
index 8df5a4e..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.DataScope;
-
-/**
- *  Mapper 鎺ュ彛
- *
- * @author BladeX
- */
-public interface DataScopeMapper extends BaseMapper<DataScope> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml
deleted file mode 100644
index cbb4659..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.DataScopeMapper">
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java
deleted file mode 100644
index f6a10ff..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.Dept;
-import org.springblade.system.vo.DeptVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * DeptMapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface DeptMapper extends BaseMapper<Dept> {
-
-	/**
-	 * 鎳掑姞杞介儴闂ㄥ垪琛�
-	 *
-	 * @param tenantId
-	 * @param parentId
-	 * @param param
-	 * @return
-	 */
-	List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @param tenantId
-	 * @return
-	 */
-	List<DeptVO> tree(String tenantId);
-
-	/**
-	 * 鎳掑姞杞借幏鍙栨爲褰㈣妭鐐�
-	 *
-	 * @param tenantId
-	 * @param parentId
-	 * @return
-	 */
-	List<DeptVO> lazyTree(String tenantId, Long parentId);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬鍚�
-	 *
-	 * @param ids
-	 * @return
-	 */
-	List<String> getDeptNames(Long[] ids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
deleted file mode 100644
index 3b3f761..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.DeptMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="deptResultMap" type="org.springblade.system.entity.Dept">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="dept_name" property="deptName"/>
-        <result column="full_name" property="fullName"/>
-        <result column="ancestors" property="ancestors"/>
-        <result column="dept_category" property="deptCategory"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-    <resultMap id="deptVOResultMap" type="org.springblade.system.vo.DeptVO">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="dept_name" property="deptName"/>
-        <result column="full_name" property="fullName"/>
-        <result column="ancestors" property="ancestors"/>
-        <result column="dept_category" property="deptCategory"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="has_children" property="hasChildren"/>
-    </resultMap>
-
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="title" property="title"/>
-        <result column="value" property="value"/>
-        <result column="key" property="key"/>
-        <result column="has_children" property="hasChildren"/>
-    </resultMap>
-
-    <select id="lazyList" resultMap="deptVOResultMap">
-        SELECT
-            dept.* ,
-            (
-                SELECT
-                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
-                FROM
-                    pl_org_dept
-                WHERE
-                    parent_id = dept.id and is_deleted = 0
-            ) AS "has_children"
-        FROM
-            pl_org_dept dept
-        WHERE dept.is_deleted = 0
-        <if test="param1!=null and param1!=''">
-            and dept.tenant_id = #{param1}
-        </if>
-        <if test="param2!=null">
-            and dept.parent_id = #{param2}
-        </if>
-        <if test="param3.deptName!=null and param3.deptName!=''">
-            and dept.dept_name like concat(concat('%', #{param3.deptName}),'%')
-        </if>
-        <if test="param3.fullName!=null and param3.fullName!=''">
-            and dept.full_name like concat(concat('%', #{param3.fullName}),'%')
-        </if>
-        ORDER BY dept.sort
-    </select>
-
-    <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, dept_name as title, id as "value", id as "key" from pl_org_dept where is_deleted = 0
-        <if test="_parameter!=null and _parameter!=''">
-            and tenant_id = #{_parameter}
-        </if>
-        ORDER BY sort
-    </select>
-
-    <select id="lazyTree" resultMap="treeNodeResultMap" >
-        SELECT
-            dept.id,
-            dept.parent_id,
-            dept.dept_name AS title,
-            dept.id AS "value",
-            dept.id AS "key",
-            (
-                SELECT
-                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
-                FROM
-                    pl_org_dept
-                WHERE
-                    parent_id = dept.id and is_deleted = 0
-            ) AS "has_children"
-        FROM
-                pl_org_dept dept
-        WHERE
-            dept.parent_id = #{param2} AND dept.is_deleted = 0
-        <if test="param1!=null and param1!=''">
-            and dept.tenant_id = #{param1}
-        </if>
-        ORDER BY dept.sort
-    </select>
-
-    <select id="getDeptNames" resultType="java.lang.String">
-        SELECT
-        dept_name
-        FROM
-        pl_org_dept
-        WHERE
-        id IN
-        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
-            #{ids}
-        </foreach>
-        and is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.java
deleted file mode 100644
index 4e56d9d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.vo.DictBizVO;
-
-import java.util.List;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface DictBizMapper extends BaseMapper<DictBiz> {
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	String getValue(String code, String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	List<DictBiz> getList(String code);
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @return
-	 */
-	List<DictBizVO> tree();
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @return
-	 */
-	List<DictBizVO> parentTree();
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
deleted file mode 100644
index f108435..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.DictBizMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="dictResultMap" type="org.springblade.system.entity.DictBiz">
-        <id column="id" property="id"/>
-        <result column="tenant_id" property="tenantId"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="code" property="code"/>
-        <result column="dict_key" property="dictKey"/>
-        <result column="dict_value" property="dictValue"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="title" property="title"/>
-        <result column="value" property="value"/>
-        <result column="key" property="key"/>
-    </resultMap>
-
-    <select id="getValue" resultType="java.lang.String">
-        select
-            dict_value
-        from pl_sys_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
-    </select>
-
-    <!-- oracle 鐗堟湰 -->
-    <!--<select id="getValue" resultType="java.lang.String">
-        select
-            dict_value
-        from pl_sys_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
-    </select>-->
-
-    <select id="getList" resultMap="dictResultMap">
-        select id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict_biz where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
-    </select>
-
-    <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0
-    </select>
-
-    <select id="parentTree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0 and parent_id = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.java
deleted file mode 100644
index b237476..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.system.entity.Dict;
-import org.springblade.system.vo.DictVO;
-
-import java.util.List;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface DictMapper extends BaseMapper<Dict> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param dict
-	 * @return
-	 */
-	List<DictVO> selectDictPage(IPage page, DictVO dict);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	String getValue(String code, String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	List<Dict> getList(String code);
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @return
-	 */
-	List<DictVO> tree();
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @return
-	 */
-	List<DictVO> parentTree();
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml
deleted file mode 100644
index a555209..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.DictMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="dictResultMap" type="org.springblade.system.entity.Dict">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="code" property="code"/>
-        <result column="dict_key" property="dictKey"/>
-        <result column="dict_value" property="dictValue"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="title" property="title"/>
-        <result column="value" property="value"/>
-        <result column="key" property="key"/>
-    </resultMap>
-
-    <select id="selectDictPage" resultMap="dictResultMap">
-        select * from pl_sys_dict where is_deleted = 0
-    </select>
-
-    <select id="getValue" resultType="java.lang.String">
-        select
-            dict_value
-        from pl_sys_dict where code = #{param1} and dict_key = #{param2} and is_deleted = 0
-    </select>
-
-    <!-- oracle 鐗堟湰 -->
-    <!--<select id="getValue" resultType="java.lang.String">
-        select
-            dict_value
-        from pl_sys_dict where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
-    </select>-->
-
-    <select id="getList" resultMap="dictResultMap">
-        select id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
-    </select>
-
-    <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict where is_deleted = 0
-    </select>
-
-    <select id="parentTree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict where is_deleted = 0 and parent_id = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.java
deleted file mode 100644
index c4f9850..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.core.tool.node.TreeNode;
-import org.springblade.system.dto.MenuDTO;
-import org.springblade.system.entity.Menu;
-import org.springblade.system.vo.MenuVO;
-
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * MenuMapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface MenuMapper extends BaseMapper<Menu> {
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 *
-	 * @param parentId
-	 * @param param
-	 * @return
-	 */
-	List<MenuVO> lazyList(Long parentId, Map<String, Object> param);
-
-	/**
-	 * 鎳掑姞杞借彍鍗曞垪琛�
-	 *
-	 * @param parentId
-	 * @param param
-	 * @return
-	 */
-	List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<TreeNode> tree();
-
-	/**
-	 * 鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<TreeNode> grantTree();
-
-	/**
-	 * 鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<TreeNode> grantTreeByRole(List<Long> roleId);
-
-	/**
-	 * 椤堕儴鑿滃崟鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<TreeNode> grantTopTree();
-
-	/**
-	 * 椤堕儴鑿滃崟鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<TreeNode> grantTopTreeByRole(List<Long> roleId);
-
-	/**
-	 * 鏁版嵁鏉冮檺鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<TreeNode> grantDataScopeTree();
-
-	/**
-	 * 鎺ュ彛鏉冮檺鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<TreeNode> grantApiScopeTree();
-
-	/**
-	 * 鏁版嵁鏉冮檺鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<TreeNode> grantDataScopeTreeByRole(List<Long> roleId);
-
-	/**
-	 * 鎺ュ彛鏉冮檺鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<TreeNode> grantApiScopeTreeByRole(List<Long> roleId);
-
-	/**
-	 * 鎵�鏈夎彍鍗�
-	 *
-	 * @return
-	 */
-	List<Menu> allMenu();
-
-	/**
-	 * 鏉冮檺閰嶇疆鑿滃崟
-	 *
-	 * @param roleId
-	 * @param topMenuId
-	 * @return
-	 */
-	List<Menu> roleMenu(List<Long> roleId, Long topMenuId);
-
-	/**
-	 * 鏉冮檺閰嶇疆鑿滃崟
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<Menu> roleMenuByRoleId(List<Long> roleId);
-
-	/**
-	 * 鏉冮檺閰嶇疆鑿滃崟
-	 *
-	 * @param topMenuId
-	 * @return
-	 */
-	List<Menu> roleMenuByTopMenuId(Long topMenuId);
-
-	/**
-	 * 鑿滃崟鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<Menu> routes(List<Long> roleId);
-
-	/**
-	 * 鎸夐挳鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<Menu> allButtons();
-
-	/**
-	 * 鎸夐挳鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<Menu> buttons(List<Long> roleId);
-
-	/**
-	 * 鑾峰彇閰嶇疆鐨勮鑹叉潈闄�
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<MenuDTO> authRoutes(List<Long> roleIds);
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml
deleted file mode 100644
index a9cc4d7..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml
+++ /dev/null
@@ -1,478 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.MenuMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="menuResultMap" type="org.springblade.system.entity.Menu">
-        <id column="id" property="id"/>
-        <result column="code" property="code"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="name" property="name"/>
-        <result column="alias" property="alias"/>
-        <result column="path" property="path"/>
-        <result column="source" property="source"/>
-        <result column="sort" property="sort"/>
-        <result column="category" property="category"/>
-        <result column="action" property="action"/>
-        <result column="is_open" property="isOpen"/>
-        <result column="remark" property="remark"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-    <resultMap id="menuVOResultMap" type="org.springblade.system.vo.MenuVO">
-        <id column="id" property="id"/>
-        <result column="code" property="code"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="name" property="name"/>
-        <result column="alias" property="alias"/>
-        <result column="path" property="path"/>
-        <result column="source" property="source"/>
-        <result column="sort" property="sort"/>
-        <result column="category" property="category"/>
-        <result column="action" property="action"/>
-        <result column="is_open" property="isOpen"/>
-        <result column="remark" property="remark"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="has_children" property="hasChildren"/>
-    </resultMap>
-
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="title" property="title"/>
-        <result column="value" property="value"/>
-        <result column="key" property="key"/>
-    </resultMap>
-
-    <select id="lazyList"  resultMap="menuVOResultMap">
-        SELECT
-            menu.*,
-            (
-                SELECT
-                    CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
-            FROM
-                pl_sys_menu
-            WHERE
-                parent_id = menu.id AND is_deleted = 0
-        ) AS "has_children"
-        FROM
-            pl_sys_menu menu
-        WHERE menu.is_deleted = 0
-        <if test="param1!=null">
-            and menu.parent_id = #{param1}
-        </if>
-        <if test="param2.name!=null and param2.name!=''">
-            and menu.name like concat(concat('%', #{param2.name}),'%')
-        </if>
-        <if test="param2.code!=null and param2.code!=''">
-            and menu.code like concat(concat('%', #{param2.code}),'%')
-        </if>
-        <if test="param2.alias!=null and param2.alias!=''">
-            and menu.alias like concat(concat('%', #{param2.alias}),'%')
-        </if>
-        ORDER BY menu.sort
-    </select>
-
-    <select id="lazyMenuList" resultMap="menuVOResultMap">
-        SELECT
-            menu.*,
-            (
-                SELECT
-                    CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
-        FROM
-                pl_sys_menu
-        WHERE
-        parent_id = menu.id AND is_deleted = 0  AND category = 1
-        ) AS "has_children"
-        FROM
-            pl_sys_menu menu
-        WHERE menu.is_deleted = 0 AND menu.category = 1
-        <if test="param1!=null">
-            and menu.parent_id = #{param1}
-        </if>
-        <if test="param2.name!=null and param2.name!=''">
-            and menu.name like concat(concat('%', #{param2.name}),'%')
-        </if>
-        <if test="param2.code!=null and param2.code!=''">
-            and menu.code like concat(concat('%', #{param2.code}),'%')
-        </if>
-        <if test="param2.alias!=null and param2.alias!=''">
-            and menu.alias like concat(concat('%', #{param2.alias}),'%')
-        </if>
-        ORDER BY menu.sort
-    </select>
-
-    <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0 and category = 1
-    </select>
-
-    <select id="allMenu" resultMap="menuResultMap">
-        select * from pl_sys_menu where is_deleted = 0 and category = 1
-    </select>
-
-    <select id="roleMenu" resultMap="menuResultMap">
-        select * from pl_sys_menu where is_deleted = 0 and id IN
-        ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
-        <foreach collection="param1" index="index" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach>
-        )
-        <if test="param2!=null and param2>0">
-            AND id IN
-            (
-            SELECT menu_id FROM pl_sys_top_menu_setting WHERE top_menu_id = #{param2}
-            )
-        </if>
-    </select>
-
-    <select id="roleMenuByRoleId" resultMap="menuResultMap">
-        select * from pl_sys_menu where is_deleted = 0 and id IN
-            ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
-                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            )
-    </select>
-
-    <select id="roleMenuByTopMenuId" resultMap="menuResultMap">
-        select * from pl_sys_menu where is_deleted = 0 and id IN
-              (
-                  SELECT menu_id FROM pl_sys_top_menu_setting WHERE top_menu_id = #{param1}
-              )
-    </select>
-
-    <select id="routes" resultMap="menuResultMap">
-        SELECT
-            *
-        FROM
-            pl_sys_menu
-        WHERE
-            is_deleted = 0 and category = 1
-            and id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
-                        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                            #{item}
-                        </foreach> )
-    </select>
-
-    <select id="allButtons" resultMap="menuResultMap">
-        SELECT
-            id,
-            parent_id,
-            CODE,
-            NAME,
-            alias,
-            path,
-            source,
-            action,
-            sort
-        FROM
-            pl_sys_menu
-        WHERE
-            (
-                category = 2 OR id IN ( SELECT parent_id FROM pl_sys_menu WHERE is_deleted = 0 AND category = 2 )
-            )
-          AND is_deleted = 0
-        ORDER BY sort
-    </select>
-
-    <select id="buttons" resultMap="menuResultMap">
-        SELECT * FROM (
-            SELECT
-                id,
-                parent_id,
-                code,
-                name,
-                alias,
-                path,
-                source,
-                action,
-                sort
-            FROM
-                pl_sys_menu
-            WHERE
-                is_deleted = 0 and id IN (
-                  SELECT parent_id FROM pl_sys_menu
-                  WHERE ( category = 2 AND id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
-                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                        #{item}
-                    </foreach>
-                  ) ) )
-
-            UNION ALL
-
-            SELECT
-                id,
-                parent_id,
-                code,
-                name,
-                alias,
-                path,
-                source,
-                action,
-                sort
-            FROM
-                pl_sys_menu
-            WHERE
-                is_deleted = 0 and  category = 2 AND id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
-                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                    #{item}
-                </foreach>)
-        ) menu ORDER BY sort
-    </select>
-
-    <select id="grantTree" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0 order by sort
-    </select>
-
-    <select id="grantTreeByRole" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0
-        and id in ( select menu_id from pl_org_role_menu where role_id in
-        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach> )
-        or id in (
-            select parent_id from pl_sys_menu where is_deleted = 0
-            and id in ( select menu_id from pl_org_role_menu where role_id in
-            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                #{item}
-            </foreach> )
-          )
-        order by sort
-    </select>
-
-    <select id="grantTopTree" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where category = 1 and is_deleted = 0 order by sort
-    </select>
-
-    <select id="grantTopTreeByRole" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where category = 1 and is_deleted = 0
-        and id in ( select menu_id from pl_org_role_menu where role_id in
-        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach> )
-        or id in (
-        select parent_id from pl_sys_menu where is_deleted = 0
-        and id in ( select menu_id from pl_org_role_menu where role_id in
-        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach> )
-        )
-        order by sort
-    </select>
-
-    <select id="grantDataScopeTree" resultMap="treeNodeResultMap">
-        SELECT
-            *
-        FROM
-            (
-                SELECT
-                    id,
-                    parent_id,
-                    NAME AS title,
-                    id AS "value",
-                    id AS "key"
-                FROM
-                    pl_sys_menu
-                WHERE
-                    category = 1
-                  AND is_deleted = 0
-                  AND id IN ( SELECT menu_id FROM pl_auth_scope_data WHERE is_deleted = 0 AND menu_id IS NOT NULL )
-            ) menu
-
-        UNION ALL
-
-        SELECT
-            id,
-            menu_id AS parent_id,
-            scope_name AS title,
-            id AS "value",
-            id AS "key"
-        FROM
-            pl_auth_scope_data
-        WHERE
-            is_deleted = 0
-          AND menu_id IS NOT NULL
-    </select>
-
-    <select id="grantApiScopeTree" resultMap="treeNodeResultMap">
-        SELECT
-            *
-        FROM
-            (
-                SELECT
-                    id,
-                    parent_id,
-                    NAME AS title,
-                    id AS "value",
-                    id AS "key"
-                FROM
-                    pl_sys_menu
-                WHERE
-                    category = 1
-                  AND is_deleted = 0
-                  AND id IN ( SELECT menu_id FROM pl_auth_scope_api WHERE is_deleted = 0 AND menu_id IS NOT NULL )
-            ) menu
-
-        UNION ALL
-
-        SELECT
-            id,
-            menu_id AS parent_id,
-            scope_name AS title,
-            id AS "value",
-            id AS "key"
-        FROM
-            pl_auth_scope_api
-        WHERE
-            is_deleted = 0
-          AND menu_id IS NOT NULL
-    </select>
-
-    <select id="grantDataScopeTreeByRole" resultMap="treeNodeResultMap">
-        SELECT
-        *
-        FROM
-        (
-            SELECT
-                id,
-                parent_id,
-                NAME AS title,
-                id AS "value",
-                id AS "key"
-            FROM
-                pl_sys_menu
-            WHERE
-                category = 1
-            AND is_deleted = 0
-            AND id IN ( SELECT menu_id FROM pl_auth_scope_data WHERE is_deleted = 0 AND menu_id IS NOT NULL )
-            AND (
-                id IN (
-                    select menu_id from pl_org_role_menu where role_id in
-                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                        #{item}
-                    </foreach>
-                )
-                OR id IN (
-                    select parent_id from pl_sys_menu where is_deleted = 0
-                    and id in ( select menu_id from pl_org_role_menu where role_id in
-                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                        #{item}
-                    </foreach> )
-                )
-            )
-        ) menu
-
-        UNION ALL
-
-        SELECT
-            id,
-            menu_id AS parent_id,
-            scope_name AS title,
-            id AS "value",
-            id AS "key"
-        FROM
-            pl_auth_scope_data
-        WHERE
-            is_deleted = 0
-        AND (
-            menu_id IN (
-                select menu_id from pl_org_role_menu where role_id in
-                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            )
-            OR menu_id IN (
-                select parent_id from pl_sys_menu where is_deleted = 0
-                and id in ( select menu_id from pl_org_role_menu where role_id in
-                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                    #{item}
-                </foreach> )
-            )
-        )
-        AND menu_id IS NOT NULL
-    </select>
-
-    <select id="grantApiScopeTreeByRole" resultMap="treeNodeResultMap">
-        SELECT
-        *
-        FROM
-        (
-            SELECT
-                id,
-                parent_id,
-                NAME AS title,
-                id AS "value",
-                id AS "key"
-            FROM
-                pl_sys_menu
-            WHERE
-                category = 1
-            AND is_deleted = 0
-            AND id IN ( SELECT menu_id FROM pl_auth_scope_api WHERE is_deleted = 0 AND menu_id IS NOT NULL )
-            AND (
-                id IN (
-                    select menu_id from pl_org_role_menu where role_id in
-                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                        #{item}
-                    </foreach>
-                )
-                OR id IN (
-                    select parent_id from pl_sys_menu where is_deleted = 0
-                    and id in (
-                        select menu_id from pl_org_role_menu where role_id in
-                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                        #{item}
-                    </foreach> )
-                )
-            )
-        ) menu
-
-        UNION ALL
-
-        SELECT
-            id,
-            menu_id AS parent_id,
-            scope_name AS title,
-            id AS "value",
-            id AS "key"
-        FROM
-            pl_auth_scope_api
-        WHERE
-            is_deleted = 0
-        AND
-            (
-                menu_id IN (
-                    select menu_id from pl_org_role_menu where role_id in
-                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                        #{item}
-                    </foreach>
-                )
-            OR menu_id IN (
-                    select parent_id from pl_sys_menu where is_deleted = 0
-                    and id in ( select menu_id from pl_org_role_menu where role_id in
-                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                        #{item}
-                    </foreach> )
-                )
-        )
-        AND menu_id IS NOT NULL
-    </select>
-
-    <select id="authRoutes" resultType="org.springblade.system.dto.MenuDTO">
-        SELECT
-            GROUP_CONCAT(r.role_alias) as alias,
-            m.path
-        FROM
-            pl_org_role_menu rm
-            LEFT JOIN pl_sys_menu m ON rm.menu_id = m.id
-            LEFT JOIN pl_org_role r ON rm.role_id = r.id
-        WHERE
-            rm.role_id IN
-            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
-                #{item}
-            </foreach>
-            AND m.path IS NOT NULL and m.is_deleted = 0
-        GROUP BY m.path
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.java
deleted file mode 100644
index 3adf34f..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.Param;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface ParamMapper extends BaseMapper<Param> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.xml
deleted file mode 100644
index e88fd76..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.ParamMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="paramResultMap" type="org.springblade.system.entity.Param">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="param_name" property="paramName"/>
-        <result column="param_key" property="paramKey"/>
-        <result column="param_value" property="paramValue"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.java
deleted file mode 100644
index 67a4190..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.system.entity.Post;
-import org.springblade.system.vo.PostVO;
-
-import java.util.List;
-
-/**
- * 宀椾綅琛� Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface PostMapper extends BaseMapper<Post> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param post
-	 * @return
-	 */
-	List<PostVO> selectPostPage(IPage page, PostVO post);
-
-	/**
-	 * 鑾峰彇宀椾綅鍚�
-	 *
-	 * @param ids
-	 * @return
-	 */
-	List<String> getPostNames(Long[] ids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml
deleted file mode 100644
index bb3cfd8..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.PostMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="postResultMap" type="org.springblade.system.entity.Post">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="category" property="category"/>
-        <result column="post_code" property="postCode"/>
-        <result column="post_name" property="postName"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-
-
-    <select id="selectPostPage" resultMap="postResultMap">
-        select * from pl_org_post where is_deleted = 0
-    </select>
-
-    <select id="getPostNames" resultType="java.lang.String">
-        SELECT
-            post_name
-        FROM
-            pl_org_post
-        WHERE
-            id IN
-            <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
-                #{ids}
-            </foreach>
-            and is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java
deleted file mode 100644
index 4a9eeb1..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Param;
-import org.springblade.system.entity.Region;
-import org.springblade.system.excel.RegionExcel;
-import org.springblade.system.vo.RegionVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 琛屾斂鍖哄垝琛� Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface RegionMapper extends BaseMapper<Region> {
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 *
-	 * @param parentCode
-	 * @param param
-	 * @return
-	 */
-	List<RegionVO> lazyList(String parentCode, Map<String, Object> param);
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 *
-	 * @param parentCode
-	 * @param param
-	 * @return
-	 */
-	List<RegionVO> lazyTree(String parentCode, Map<String, Object> param);
-
-	/**
-	 * 瀵煎嚭鍖哄垝鏁版嵁
-	 *
-	 * @param queryWrapper
-	 * @return
-	 */
-	List<RegionExcel> exportRegion(@Param("ew") Wrapper<Region> queryWrapper);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml
deleted file mode 100644
index 0253d34..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.RegionMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="regionResultMap" type="org.springblade.system.entity.Region">
-        <id column="code" property="code"/>
-        <result column="parent_code" property="parentCode"/>
-        <result column="ancestors" property="ancestors"/>
-        <result column="name" property="name"/>
-        <result column="province_code" property="provinceCode"/>
-        <result column="province_name" property="provinceName"/>
-        <result column="city_code" property="cityCode"/>
-        <result column="city_name" property="cityName"/>
-        <result column="district_code" property="districtCode"/>
-        <result column="district_name" property="districtName"/>
-        <result column="town_code" property="townCode"/>
-        <result column="town_name" property="townName"/>
-        <result column="village_code" property="villageCode"/>
-        <result column="village_name" property="villageName"/>
-        <result column="level" property="regionLevel"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-
-    <resultMap id="regionVOResultMap" type="org.springblade.system.vo.RegionVO">
-        <id column="code" property="code"/>
-        <result column="parent_code" property="parentCode"/>
-        <result column="ancestors" property="ancestors"/>
-        <result column="name" property="name"/>
-        <result column="province_code" property="provinceCode"/>
-        <result column="province_name" property="provinceName"/>
-        <result column="city_code" property="cityCode"/>
-        <result column="city_name" property="cityName"/>
-        <result column="district_code" property="districtCode"/>
-        <result column="district_name" property="districtName"/>
-        <result column="town_code" property="townCode"/>
-        <result column="town_name" property="townName"/>
-        <result column="village_code" property="villageCode"/>
-        <result column="village_name" property="villageName"/>
-        <result column="level" property="regionLevel"/>
-        <result column="sort" property="sort"/>
-        <result column="remark" property="remark"/>
-        <result column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="has_children" property="hasChildren"/>
-    </resultMap>
-
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="title" property="title"/>
-        <result column="value" property="value"/>
-        <result column="key" property="key"/>
-        <result column="has_children" property="hasChildren"/>
-    </resultMap>
-
-    <select id="lazyList" resultMap="regionVOResultMap">
-        SELECT
-            region.*,
-            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM pl_sys_region WHERE parent_code = region.code ) AS "has_children"
-        FROM
-            pl_sys_region region
-        <where>
-            <if test="param1!=null">
-                and region.parent_code = #{param1}
-            </if>
-            <if test="param2.code!=null and param2.code!=''">
-                and region.code like concat(concat('%', #{param2.code}),'%')
-            </if>
-            <if test="param2.name!=null and param2.name!=''">
-                and region.name like concat(concat('%', #{param2.name}),'%')
-            </if>
-        </where>
-    </select>
-
-    <select id="lazyTree" resultMap="treeNodeResultMap">
-        SELECT
-            region.code AS "id",
-            region.parent_code AS "parent_id",
-            region.name AS "title",
-            region.code AS "value",
-            region.code AS "key",
-            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM pl_sys_region WHERE parent_code = region.code ) AS "has_children"
-        FROM
-            pl_sys_region region
-        <where>
-            <if test="param1!=null">
-                and region.parent_code = #{param1}
-            </if>
-            <if test="param2.code!=null and param2.code!=''">
-                and region.code like concat(concat('%', #{param2.code}),'%')
-            </if>
-            <if test="param2.name!=null and param2.name!=''">
-                and region.name like concat(concat('%', #{param2.name}),'%')
-            </if>
-        </where>
-        ORDER BY region.code
-    </select>
-
-    <select id="exportRegion" resultType="org.springblade.system.excel.RegionExcel">
-        SELECT * FROM pl_sys_region ${ew.customSqlSegment}
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java
deleted file mode 100644
index 66b1b73..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.system.entity.Role;
-import org.springblade.system.vo.RoleVO;
-
-import java.util.List;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface RoleMapper extends BaseMapper<Role> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param role
-	 * @return
-	 */
-	List<RoleVO> selectRolePage(IPage page, RoleVO role);
-
-	/**
-	 * 鑾峰彇鏍戝舰鑺傜偣
-	 *
-	 * @param tenantId
-	 * @param excludeRole
-	 * @return
-	 */
-	List<RoleVO> tree(String tenantId, String excludeRole);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚�
-	 *
-	 * @param ids
-	 * @return
-	 */
-	List<String> getRoleNames(Long[] ids);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚�
-	 *
-	 * @param ids
-	 * @return
-	 */
-	List<String> getRoleAliases(Long[] ids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
deleted file mode 100644
index 7142252..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.RoleMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="roleResultMap" type="org.springblade.system.entity.Role">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="role_name" property="roleName"/>
-        <result column="sort" property="sort"/>
-        <result column="role_alias" property="roleAlias"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
-        <id column="id" property="id"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="title" property="title"/>
-        <result column="value" property="value"/>
-        <result column="key" property="key"/>
-    </resultMap>
-
-    <select id="selectRolePage" resultMap="roleResultMap">
-        select * from pl_org_role where is_deleted = 0
-    </select>
-
-    <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, role_name as title, id as "value", id as "key" from pl_org_role where is_deleted = 0
-        <if test="param1!=null">
-            and tenant_id = #{param1}
-        </if>
-        <if test="param2!=null">
-            and role_alias &lt;&gt; #{param2}
-        </if>
-    </select>
-
-    <select id="getRoleNames" resultType="java.lang.String">
-        SELECT
-        role_name
-        FROM
-        pl_org_role
-        WHERE
-        id IN
-        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
-            #{ids}
-        </foreach>
-        and is_deleted = 0
-    </select>
-
-    <select id="getRoleAliases" resultType="java.lang.String">
-        SELECT
-        role_alias
-        FROM
-        pl_org_role
-        WHERE
-        id IN
-        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
-            #{ids}
-        </foreach>
-        and is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java
deleted file mode 100644
index 9afb43b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.system.entity.RoleMenu;
-import org.springblade.system.vo.RoleMenuVO;
-
-import java.util.List;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 * @param page
-	 * @param roleMenu
-	 * @return
-	 */
-	List<RoleMenuVO> selectRoleMenuPage(IPage page, RoleMenuVO roleMenu);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
deleted file mode 100644
index ea7f060..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.RoleMenuMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="roleMenuResultMap" type="org.springblade.system.entity.RoleMenu">
-        <id column="id" property="id"/>
-        <result column="menu_id" property="menuId"/>
-        <result column="role_id" property="roleId"/>
-    </resultMap>
-
-    <select id="selectRoleMenuPage" resultMap="roleMenuResultMap">
-        select * from pl_org_role_menu where is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java
deleted file mode 100644
index 7b22574..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.RoleScope;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface RoleScopeMapper extends BaseMapper<RoleScope> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml
deleted file mode 100644
index 55b8fb5..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.RoleScopeMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="roleMenuResultMap" type="org.springblade.system.entity.RoleScope">
-        <id column="id" property="id"/>
-        <result column="scope_id" property="scopeId"/>
-        <result column="role_id" property="roleId"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.java
deleted file mode 100644
index 2a7fe31..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.springblade.system.mapper;
-
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
-import org.springblade.system.entity.Strategy;
-
-import java.util.List;
-
-/**
- * 瀵嗙爜绛栫暐(PlSysStrategy)琛ㄦ暟鎹簱璁块棶灞�
- *
- * @author makejava
- * @since 2023-03-20 15:16:15
- */
-public interface StrategyMapper extends BaseMapper<Strategy> {
-
-	/**
-	 * 鏌ヨ鎸囧畾琛屾暟鎹�
-	 *
-	 * @param page 鍒嗛〉瀵硅薄
-	 * @return 瀵硅薄鍒楄〃
-	 */
-	List<Strategy> queryAllByPage(IPage page);
-
-	/**
-	 * 缁熻鎬昏鏁�
-	 *
-	 * @param plSysStrategy 鏌ヨ鏉′欢
-	 * @return 鎬昏鏁�
-	 */
-	long count(Strategy plSysStrategy);
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛鍚嶄互鍙婄鎴稩D鏌ヨ瀵嗙爜绛栫暐
-	 * @return
-	 */
-	Strategy queryByNameAndTenantId(@Param("tenantId") String tenantId,@Param("name") String name);
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛id杩涜鏌ヨ
-	 *
-	 * @param userId 鐢ㄦ埛id
-	 * @return 瀵硅薄
-	 */
-	Strategy queryByUserId(@Param("userId") Long userId);
-
-	Strategy queryByIsDefault();
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.xml
deleted file mode 100644
index 385b072..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.StrategyMapper">
-
-    <resultMap type="org.springblade.system.entity.Strategy" id="StrategyMap">
-        <result property="id" column="ID" jdbcType="VARCHAR"/>
-        <result property="strategyName" column="STRATEGY_NAME" jdbcType="VARCHAR"/>
-        <result property="minPwdLen" column="MIN_PWD_LEN" jdbcType="VARCHAR"/>
-        <result property="maxPwdLen" column="MAX_PWD_LEN" jdbcType="VARCHAR"/>
-        <result property="combinationIds" column="COMBINATION_IDS" jdbcType="VARCHAR"/>
-        <result property="requiredType" column="REQUIRED_TYPE" jdbcType="VARCHAR"/>
-        <result property="expirationTime" column="EXPIRATION_TIME" jdbcType="TIMESTAMP"/>
-        <result property="reminderTime" column="REMINDER_TIME" jdbcType="TIMESTAMP"/>
-        <result property="lockingNum" column="LOCKING_NUM" jdbcType="VARCHAR"/>
-        <result property="lockingTime" column="LOCKING_TIME" jdbcType="TIMESTAMP"/>
-        <result property="desc" column="DESC" jdbcType="VARCHAR"/>
-        <result property="isDefault" column="IS_DEFAULT" jdbcType="VARCHAR"/>
-        <result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
-        <result property="createUser" column="CREATE_USER" jdbcType="TIMESTAMP"/>
-        <result property="updateTime" column="UPDATE_TIME" jdbcType="TIMESTAMP"/>
-        <result property="updateUser" column="UPDATE_USER" jdbcType="TIMESTAMP"/>
-        <result property="combinationNames" column="COMBINATIONNAMES"/>
-    </resultMap>
-
-    <!--鏌ヨ鎸囧畾琛屾暟鎹�-->
-    <select id="queryAllByPage" resultMap="StrategyMap">
-        select pss.*,
-               (select WM_CONCAT(psc.NAME)
-                from PL_SYS_COMBINATION psc
-                where instr(pss.COMBINATION_IDS,psc.ID) > 0) COMBINATIONNAMES
-        from PL_SYS_STRATEGY pss
-    </select>
-
-    <!--缁熻鎬昏鏁�-->
-    <select id="count" resultType="java.lang.Long">
-        select count(1)
-        from PL_SYS_STRATEGY
-        <where>
-            <if test="id != null and id != ''">
-                and ID = #{id}
-            </if>
-            <if test="strategyName != null and strategyName != ''">
-                and STRATEGY_NAME = #{strategyName}
-            </if>
-            <if test="minPwdLen != null and minPwdLen != ''">
-                and MIN_PWD_LEN = #{minPwdLen}
-            </if>
-            <if test="maxPwdLen != null and maxPwdLen != ''">
-                and MAX_PWD_LEN = #{maxPwdLen}
-            </if>
-            <if test="combination  != null and combination  != ''">
-                and COMBINATION  = #{combination }
-            </if>
-            <if test="requiredType != null and requiredType != ''">
-                and REQUIRED_TYPE = #{requiredType}
-            </if>
-            <if test="expirationTime != null">
-                and EXPIRATION_TIME = #{expirationTime}
-            </if>
-            <if test="reminderTime != null">
-                and REMINDER_TIME = #{reminderTime}
-            </if>
-            <if test="lockingNum != null and lockingNum != ''">
-                and LOCKING_NUM = #{lockingNum}
-            </if>
-            <if test="lockingTime != null">
-                and LOCKING_TIME = #{lockingTime}
-            </if>
-            <if test="desc != null and desc != ''">
-                and DESC = #{desc}
-            </if>
-            <if test="isDefault != null and isDefault != ''">
-                and IS_DEFAULT = #{isDefault}
-            </if>
-            <if test="createDate != null">
-                and CREATE_DATE = #{createDate}
-            </if>
-            <if test="createUser != null">
-                and CREATE_USER = #{createUser}
-            </if>
-            <if test="updateDate != null">
-                and UPDATE_DATE = #{updateDate}
-            </if>
-            <if test="updateUser != null">
-                and UPDATE_USER = #{updateUser}
-            </if>
-        </where>
-    </select>
-
-
-    <select id="queryByNameAndTenantId" resultMap="StrategyMap">
-        SELECT PSS.*,(select WM_CONCAT(psc.NAME)
-                      from PL_SYS_COMBINATION psc
-                      where instr(pss.COMBINATION_IDS,psc.ID) > 0) COMBINATIONNAMES
-        FROM PL_SYS_STRATEGY PSS
-              LEFT JOIN PL_SYS_USER_PWDSTRATEGY PSUP ON PSS.ID=PSUP.PWDSTRATEGY_ID
-              LEFT JOIN PL_ORG_USER POU ON POU.ID=PSUP.USER_ID
-        WHERE POU.TENANT_ID = #{tenantId} AND POU.NAME=#{name};
-    </select>
-
-    <select id="queryByUserId" resultMap="StrategyMap">
-        SELECT PSS.*,(select WM_CONCAT(psc.NAME)
-                      from PL_SYS_COMBINATION psc
-                      where instr(pss.COMBINATION_IDS,psc.ID) > 0) COMBINATIONNAMES
-        FROM PL_SYS_STRATEGY PSS LEFT JOIN PL_SYS_USER_PWDSTRATEGY PSUP ON PSS.ID=psup.PWDSTRATEGY_ID
-        WHERE PSUP.USER_ID = #{userId}
-    </select>
-
-    <select id="queryByIsDefault" resultType="org.springblade.system.entity.Strategy">
-        SELECT PSS.*,(SELECT WM_CONCAT(psc.NAME)
-                      FROM PL_SYS_COMBINATION psc
-                      WHERE instr(pss.COMBINATION_IDS, psc.ID) > 0) COMBINATIONNAMES
-        FROM PL_SYS_STRATEGY PSS
-        WHERE is_default = 1
-    </select>
-
-</mapper>
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.java
deleted file mode 100644
index b57431b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.system.entity.Tenant;
-
-import java.util.List;
-
-/**
- *  Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface TenantMapper extends BaseMapper<Tenant> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param tenant
-	 * @return
-	 */
-	List<Tenant> selectTenantPage(IPage page, Tenant tenant);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml
deleted file mode 100644
index 47708d7..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.TenantMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="tenantResultMap" type="org.springblade.system.entity.Tenant">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="tenant_id" property="tenantId"/>
-        <result column="tenant_name" property="tenantName"/>
-        <result column="full_name" property="fullName"/>
-        <result column="domain_url" property="domainUrl"/>
-        <result column="background_url" property="backgroundUrl"/>
-        <result column="linkman" property="linkman"/>
-        <result column="contact_number" property="contactNumber"/>
-        <result column="address" property="address"/>
-        <result column="license_key" property="licenseKey"/>
-    </resultMap>
-
-
-    <select id="selectTenantPage" resultMap="tenantResultMap">
-        select * from pl_org_tenant where is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java
deleted file mode 100644
index acf4e8d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.TenantPackage;
-
-/**
- * 绉熸埛浜у搧琛� Mapper 鎺ュ彛
- *
- * @author BladeX
- */
-public interface TenantPackageMapper extends BaseMapper<TenantPackage> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml
deleted file mode 100644
index 749f86d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.TenantPackageMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="tenantPackageResultMap" type="org.springblade.system.entity.TenantPackage">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="package_name" property="packageName"/>
-        <result column="menu_id" property="menuId"/>
-        <result column="remark" property="remark"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.java
deleted file mode 100644
index c035291..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.TopMenu;
-
-/**
- * 椤堕儴鑿滃崟琛� Mapper 鎺ュ彛
- *
- * @author BladeX
- */
-public interface TopMenuMapper extends BaseMapper<TopMenu> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml
deleted file mode 100644
index 7f3b5b2..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.TopMenuMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="topMenuResultMap" type="org.springblade.system.entity.TopMenu">
-        <result column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="code" property="code"/>
-        <result column="name" property="name"/>
-        <result column="source" property="source"/>
-        <result column="sort" property="sort"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java
deleted file mode 100644
index 0c9e3ce..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.TopMenuSetting;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface TopMenuSettingMapper extends BaseMapper<TopMenuSetting> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml
deleted file mode 100644
index 5de98e4..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.TopMenuSettingMapper">
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.java
deleted file mode 100644
index 15876ae..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.entity.UserPwdstrategy;
-
-import java.util.List;
-
-/**
- * 鐢ㄦ埛瀵嗙爜绛栫暐绠$悊琛�(UserPwdstrategy)琛ㄦ暟鎹簱璁块棶灞�
- *
- * @author makejava
- * @since 2023-03-22 15:24:46
- */
-public interface UserPwdstrategyMapper  extends BaseMapper<UserPwdstrategy> {
-
-	/**
-	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	UserPwdstrategy queryById(Long id);
-
-	/**
-	 * 淇敼鏁版嵁
-	 *
-	 * @param UserPwdstrategy 瀹炰緥瀵硅薄
-	 * @return 褰卞搷琛屾暟
-	 */
-	int update(UserPwdstrategy UserPwdstrategy);
-
-	/**
-	 * 閫氳繃鐢ㄦ埛id杩涜鍒犻櫎鏁版嵁
-	 *
-	 * @param userIds 鐢ㄦ埛id
-	 * @return 褰卞搷琛屾暟
-	 */
-	int deleteByUserIds(List<Long> userIds);
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.xml
deleted file mode 100644
index 62eea8a..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.UserPwdstrategyMapper">
-
-    <resultMap type="org.springblade.system.entity.UserPwdstrategy" id="UserPwdstrategyMap">
-        <result property="id" column="ID" jdbcType="INTEGER"/>
-        <result property="userId" column="USER_ID" jdbcType="INTEGER"/>
-        <result property="pwdstrategyId" column="PWDSTRATEGY_ID" jdbcType="INTEGER"/>
-    </resultMap>
-
-    <!--鏌ヨ鍗曚釜-->
-    <select id="queryById" resultMap="UserPwdstrategyMap">
-        select ID,
-               USER_ID,
-               PWDSTRATEGY_ID
-        from PL_SYS_USER_PWDSTRATEGY
-        where ID = #{id}
-    </select>
-
-    <!--缁熻鎬昏鏁�-->
-    <select id="count" resultType="java.lang.Long">
-        select count(1)
-        from PL_SYS_USER_PWDSTRATEGY
-        <where>
-            <if test="id != null">
-                and ID = #{id}
-            </if>
-            <if test="userId != null">
-                and USER_ID = #{userId}
-            </if>
-            <if test="pwdstrategyId != null">
-                and PWDSTRATEGY_ID = #{pwdstrategyId}
-            </if>
-        </where>
-    </select>
-
-    <!--閫氳繃涓婚敭淇敼鏁版嵁-->
-    <update id="update">
-        update PL_SYS_USER_PWDSTRATEGY
-        <set>
-            <if test="userId != null">
-                USER_ID = #{userId},
-            </if>
-            <if test="pwdstrategyId != null">
-                PWDSTRATEGY_ID = #{pwdstrategyId},
-            </if>
-        </set>
-        where ID = #{id}
-    </update>
-
-    <delete id="deleteByUserIds">
-        DELETE FROM PL_SYS_USER_PWDSTRATEGY WHERE USER_ID IN (
-        <foreach collection="userIds" item="uId" separator=",">
-            #{uId}
-        </foreach>
-        )
-    </delete>
-
-</mapper>
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.java
deleted file mode 100644
index 05ef2cd..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.springblade.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Param;
-import org.springblade.system.entity.ValueRange;
-import org.springframework.data.domain.Pageable;
-
-import java.util.List;
-
-/**
- * (ValueRannge)琛ㄦ暟鎹簱璁块棶灞�
- *
- * @author makejava
- * @since 2023-03-20 15:23:25
- */
-public interface ValueRangeMapper extends BaseMapper<ValueRange> {
-
-	/**
-	 * 鏌ヨ鎸囧畾琛屾暟鎹�
-	 *
-	 * @param valueRannge 鏌ヨ鏉′欢
-	 * @param pageable        鍒嗛〉瀵硅薄
-	 * @return 瀵硅薄鍒楄〃
-	 */
-	List<ValueRange> queryAllByLimit(ValueRange valueRannge, @Param("pageable") Pageable pageable);
-
-	/**
-	 * 缁熻鎬昏鏁�
-	 *
-	 * @param valueRannge 鏌ヨ鏉′欢
-	 * @return 鎬昏鏁�
-	 */
-	long count(ValueRange valueRannge);
-
-
-	/**
-	 * 鏍圭┒缁勫悎id鏌ヨ鍙栧��
-	 * @return
-	 */
-	List<String> queryByCombinationIds(@Param("combinationIds") List<String> combinationIds);
-
-}
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.xml
deleted file mode 100644
index 6b38726..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.mapper.ValueRangeMapper">
-
-    <resultMap type="org.springblade.system.entity.ValueRange" id="ValueRangeMap">
-        <result property="id" column="ID" jdbcType="VARCHAR"/>
-        <result property="value" column="VALUE" jdbcType="VARCHAR"/>
-        <result property="combinationId" column="COMBINATION_ID" jdbcType="VARCHAR"/>
-        <result property="updateTime" column="CREATEUSER" jdbcType="VARCHAR"/>
-        <result property="updateTime" column="UPDATETIME" jdbcType="TIMESTAMP"/>
-        <result property="createUser" column="UPDATEUSER" jdbcType="VARCHAR"/>
-        <result property="createTime" column="CREATETIME" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <!--鏌ヨ鎸囧畾琛屾暟鎹�-->
-    <select id="queryAllByLimit" resultMap="ValueRangeMap">
-        select
-          ID, VALUE, COMBINATION_ID, CREATEUSER, UPDATETIME, UPDATEUSER, CREATETIME
-        from PL_SYS_VALUE_RANGE
-        <where>
-            <if test="id != null and id != ''">
-                and ID = #{id}
-            </if>
-            <if test="value != null and value != ''">
-                and VALUE = #{value}
-            </if>
-            <if test="combinationId != null and combinationId != ''">
-                and COMBINATION_ID = #{combinationId}
-            </if>
-            <if test="createuser != null and createuser != ''">
-                and CREATEUSER = #{createuser}
-            </if>
-            <if test="updatetime != null">
-                and UPDATETIME = #{updatetime}
-            </if>
-            <if test="updateuser != null and updateuser != ''">
-                and UPDATEUSER = #{updateuser}
-            </if>
-            <if test="createtime != null">
-                and CREATETIME = #{createtime}
-            </if>
-        </where>
-        limit #{pageable.offset}, #{pageable.pageSize}
-    </select>
-
-    <!--缁熻鎬昏鏁�-->
-    <select id="count" resultType="java.lang.Long">
-        select count(1)
-        from PL_SYS_VALUE_RANGE
-        <where>
-            <if test="id != null and id != ''">
-                and ID = #{id}
-            </if>
-            <if test="value != null and value != ''">
-                and VALUE = #{value}
-            </if>
-            <if test="combinationId != null and combinationId != ''">
-                and COMBINATION_ID = #{combinationId}
-            </if>
-            <if test="createuser != null and createuser != ''">
-                and CREATEUSER = #{createuser}
-            </if>
-            <if test="updatetime != null">
-                and UPDATETIME = #{updatetime}
-            </if>
-            <if test="updateuser != null and updateuser != ''">
-                and UPDATEUSER = #{updateuser}
-            </if>
-            <if test="createtime != null">
-                and CREATETIME = #{createtime}
-            </if>
-        </where>
-    </select>
-
-    <select id="queryByCombinationIds" resultType="java.util.List">
-        SELECT "VALUE" FROM PL_SYS_VALUE_RANGE PSVR
-        WHERE PSVR.COMBINATION_ID IN (
-            <foreach collection="combinationIds" item="id" separator=",">
-                #{id}
-            </foreach>
-        )
-    </select>
-
-</mapper>
-
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IApiScopeService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IApiScopeService.java
deleted file mode 100644
index 293b3e5..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IApiScopeService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.ApiScope;
-
-/**
- *  鏈嶅姟绫�
- *
- * @author BladeX
- */
-public interface IApiScopeService extends BaseService<ApiScope> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IAuthClientService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IAuthClientService.java
deleted file mode 100644
index 695eb1d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IAuthClientService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.AuthClient;
-
-/**
- *  鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IAuthClientService extends BaseService<AuthClient> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ICombinationService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ICombinationService.java
deleted file mode 100644
index c019269..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ICombinationService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.Combination;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)琛ㄦ湇鍔℃帴鍙�
- *
- * @author makejava
- * @since 2023-03-20 15:23:21
- */
-public interface ICombinationService extends IService<Combination> {
-
-	/**
-	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	Combination queryById(Long id);
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param combination 绛涢�夋潯浠�
-	 * @param page      鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	IPage<Combination> selectCombinationPage(Combination combination, IPage<Combination> page);
-
-	/**
-	 * 鏂板鏁版嵁鍜屼慨鏀规暟鎹�
-	 *
-	 * @param combination 瀹炰緥瀵硅薄
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	boolean submit(Combination combination);
-
-	/**
-	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
-	 *
-	 * @param ids
-	 * @return 鏄惁鎴愬姛
-	 */
-	boolean deleteByIds(List<String> ids);
-
-	/**
-	 * 涓嬫媺鏁版嵁婧愭煡璇�
-	 * 鏌ヨ缁勫悎id锛坘ey锛夛細缁勫悎鍚嶏紙value锛�
-	 * @return
-	 */
-	List<Map<String,Object>> selectMaps();
-
-	/**
-	 * 鏌ヨ鎷兼帴瀹屾暣鐨勬鍒�
-	 * @param combinationIds
-	 * @return
-	 */
-	String getRegex(List<String> combinationIds);
-
-	/**
-	 * 鏍规嵁缁勫悎id鏌ヨ姝e垯闆嗗悎
-	 * @param combinationIds
-	 * @return
-	 */
-	List<String> getRegexList(List<String> combinationIds);
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDataScopeService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDataScopeService.java
deleted file mode 100644
index 4babdcb..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDataScopeService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.DataScope;
-
-/**
- *  鏈嶅姟绫�
- *
- * @author BladeX
- */
-public interface IDataScopeService extends BaseService<DataScope> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java
deleted file mode 100644
index fde1c9b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.Dept;
-import org.springblade.system.vo.DeptVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IDeptService extends IService<Dept> {
-
-	/**
-	 * 鎳掑姞杞介儴闂ㄥ垪琛�
-	 *
-	 * @param tenantId
-	 * @param parentId
-	 * @param param
-	 * @return
-	 */
-	List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @param tenantId
-	 * @return
-	 */
-	List<DeptVO> tree(String tenantId);
-
-	/**
-	 * 鎳掑姞杞芥爲褰㈢粨鏋�
-	 *
-	 * @param tenantId
-	 * @param parentId
-	 * @return
-	 */
-	List<DeptVO> lazyTree(String tenantId, Long parentId);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬ID
-	 *
-	 * @param tenantId
-	 * @param deptNames
-	 * @return
-	 */
-	String getDeptIds(String tenantId, String deptNames);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬ID
-	 *
-	 * @param tenantId
-	 * @param deptNames
-	 * @return
-	 */
-	String getDeptIdsByFuzzy(String tenantId, String deptNames);
-
-	/**
-	 * 鑾峰彇閮ㄩ棬鍚�
-	 *
-	 * @param deptIds
-	 * @return
-	 */
-	List<String> getDeptNames(String deptIds);
-
-	/**
-	 * 鑾峰彇瀛愰儴闂�
-	 *
-	 * @param deptId
-	 * @return
-	 */
-	List<Dept> getDeptChild(Long deptId);
-
-	/**
-	 * 鍒犻櫎閮ㄩ棬
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeDept(String ids);
-
-	/**
-	 * 鎻愪氦
-	 *
-	 * @param dept
-	 * @return
-	 */
-	boolean submit(Dept dept);
-
-	/**
-	 * 閮ㄩ棬淇℃伅鏌ヨ
-	 *
-	 * @param deptName
-	 * @param parentId
-	 * @return
-	 */
-	List<DeptVO> search(String deptName, Long parentId);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictBizService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictBizService.java
deleted file mode 100644
index e254f40..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictBizService.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.mp.support.Query;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.vo.DictBizVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IDictBizService extends IService<DictBiz> {
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<DictBizVO> tree();
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<DictBizVO> parentTree();
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	String getValue(String code, String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	List<DictBiz> getList(String code);
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 *
-	 * @param dict
-	 * @return
-	 */
-	boolean submit(DictBiz dict);
-
-	/**
-	 * 鍒犻櫎瀛楀吀
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeDict(String ids);
-
-	/**
-	 * 椤剁骇鍒楄〃
-	 *
-	 * @param dict
-	 * @param query
-	 * @return
-	 */
-	IPage<DictBizVO> parentList(Map<String, Object> dict, Query query);
-
-	/**
-	 * 瀛愬垪琛�
-	 *
-	 * @param dict
-	 * @param parentId
-	 * @return
-	 */
-	List<DictBizVO> childList(Map<String, Object> dict, Long parentId);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java
deleted file mode 100644
index 28d3a33..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.mp.support.Query;
-import org.springblade.system.entity.Dict;
-import org.springblade.system.vo.DictVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IDictService extends IService<Dict> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param dict
-	 * @return
-	 */
-	IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict);
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<DictVO> tree();
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<DictVO> parentTree();
-
-	/**
-	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
-	 *
-	 * @param code    瀛楀吀缂栧彿
-	 * @param dictKey 瀛楀吀搴忓彿
-	 * @return
-	 */
-	String getValue(String code, String dictKey);
-
-	/**
-	 * 鑾峰彇瀛楀吀琛�
-	 *
-	 * @param code 瀛楀吀缂栧彿
-	 * @return
-	 */
-	List<Dict> getList(String code);
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 *
-	 * @param dict
-	 * @return
-	 */
-	boolean submit(Dict dict);
-
-	/**
-	 * 鍒犻櫎瀛楀吀
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeDict(String ids);
-
-	/**
-	 * 椤剁骇鍒楄〃
-	 *
-	 * @param dict
-	 * @param query
-	 * @return
-	 */
-	IPage<DictVO> parentList(Map<String, Object> dict, Query query);
-
-	/**
-	 * 瀛愬垪琛�
-	 *
-	 * @param dict
-	 * @param parentId
-	 * @return
-	 */
-	List<DictVO> childList(Map<String, Object> dict, Long parentId);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java
deleted file mode 100644
index 5014981..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.tool.node.TreeNode;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.system.entity.Menu;
-import org.springblade.system.vo.MenuVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IMenuService extends IService<Menu> {
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 *
-	 * @param parentId
-	 * @param param
-	 * @return
-	 */
-	List<MenuVO> lazyList(Long parentId, Map<String, Object> param);
-
-	/**
-	 * 鎳掑姞杞借彍鍗曞垪琛�
-	 *
-	 * @param parentId
-	 * @param param
-	 * @return
-	 */
-	List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
-
-	/**
-	 * 鑿滃崟鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @param topMenuId
-	 * @return
-	 */
-	List<MenuVO> routes(String roleId, Long topMenuId);
-
-	/**
-	 * 鎸夐挳鏍戝舰缁撴瀯
-	 *
-	 * @param roleId
-	 * @return
-	 */
-	List<MenuVO> buttons(String roleId);
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @return
-	 */
-	List<TreeNode> tree();
-
-	/**
-	 * 鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @param user
-	 * @return
-	 */
-	List<TreeNode> grantTree(BladeUser user);
-
-	/**
-	 * 椤堕儴鑿滃崟鏍戝舰缁撴瀯
-	 *
-	 * @param user
-	 * @return
-	 */
-	List<TreeNode> grantTopTree(BladeUser user);
-
-	/**
-	 * 鏁版嵁鏉冮檺鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @param user
-	 * @return
-	 */
-	List<TreeNode> grantDataScopeTree(BladeUser user);
-
-	/**
-	 * 鎺ュ彛鏉冮檺鎺堟潈鏍戝舰缁撴瀯
-	 *
-	 * @param user
-	 * @return
-	 */
-	List<TreeNode> grantApiScopeTree(BladeUser user);
-
-	/**
-	 * 榛樿閫変腑鑺傜偣
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<String> roleTreeKeys(String roleIds);
-
-	/**
-	 * 榛樿閫変腑鑺傜偣
-	 *
-	 * @param topMenuIds
-	 * @return
-	 */
-	List<String> topTreeKeys(String topMenuIds);
-
-	/**
-	 * 榛樿閫変腑鑺傜偣
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<String> dataScopeTreeKeys(String roleIds);
-
-	/**
-	 * 榛樿閫変腑鑺傜偣
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<String> apiScopeTreeKeys(String roleIds);
-
-	/**
-	 * 鑾峰彇閰嶇疆鐨勮鑹叉潈闄�
-	 *
-	 * @param user
-	 * @return
-	 */
-	List<Kv> authRoutes(BladeUser user);
-
-	/**
-	 * 鍒犻櫎鑿滃崟
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeMenu(String ids);
-
-	/**
-	 * 鎻愪氦
-	 *
-	 * @param menu
-	 * @return
-	 */
-	boolean submit(Menu menu);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IParamService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IParamService.java
deleted file mode 100644
index ff29123..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IParamService.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.Param;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IParamService extends BaseService<Param> {
-
-	/**
-	 * 鑾峰彇鍙傛暟鍊�
-	 *
-	 * @param paramKey 鍙傛暟key
-	 * @return String
-	 */
-	String getValue(String paramKey);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IPostService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IPostService.java
deleted file mode 100644
index fc395d5..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IPostService.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.Post;
-import org.springblade.system.vo.PostVO;
-
-import java.util.List;
-
-/**
- * 宀椾綅琛� 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IPostService extends BaseService<Post> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param post
-	 * @return
-	 */
-	IPage<PostVO> selectPostPage(IPage<PostVO> page, PostVO post);
-
-	/**
-	 * 鑾峰彇宀椾綅ID
-	 *
-	 * @param tenantId
-	 * @param postNames
-	 * @return
-	 */
-	String getPostIds(String tenantId, String postNames);
-
-	/**
-	 * 鑾峰彇宀椾綅ID
-	 *
-	 * @param tenantId
-	 * @param postNames
-	 * @return
-	 */
-	String getPostIdsByFuzzy(String tenantId, String postNames);
-
-	/**
-	 * 鑾峰彇宀椾綅鍚�
-	 *
-	 * @param postIds
-	 * @return
-	 */
-	List<String> getPostNames(String postIds);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java
deleted file mode 100644
index c46f6fa..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.Region;
-import org.springblade.system.excel.RegionExcel;
-import org.springblade.system.vo.RegionVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 琛屾斂鍖哄垝琛� 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IRegionService extends IService<Region> {
-
-	/**
-	 * 鎻愪氦
-	 *
-	 * @param region
-	 * @return
-	 */
-	boolean submit(Region region);
-
-	/**
-	 * 鍒犻櫎
-	 *
-	 * @param id
-	 * @return
-	 */
-	boolean removeRegion(String id);
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 *
-	 * @param parentCode
-	 * @param param
-	 * @return
-	 */
-	List<RegionVO> lazyList(String parentCode, Map<String, Object> param);
-
-	/**
-	 * 鎳掑姞杞藉垪琛�
-	 *
-	 * @param parentCode
-	 * @param param
-	 * @return
-	 */
-	List<RegionVO> lazyTree(String parentCode, Map<String, Object> param);
-
-	/**
-	 * 瀵煎叆鍖哄垝鏁版嵁
-	 *
-	 * @param data
-	 * @param isCovered
-	 * @return
-	 */
-	void importRegion(List<RegionExcel> data, Boolean isCovered);
-
-	/**
-	 * 瀵煎嚭鍖哄垝鏁版嵁
-	 *
-	 * @param queryWrapper
-	 * @return
-	 */
-	List<RegionExcel> exportRegion(Wrapper<Region> queryWrapper);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleMenuService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleMenuService.java
deleted file mode 100644
index b504d32..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleMenuService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.RoleMenu;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IRoleMenuService extends IService<RoleMenu> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleScopeService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleScopeService.java
deleted file mode 100644
index d3d6376..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleScopeService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.RoleScope;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IRoleScopeService extends IService<RoleScope> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java
deleted file mode 100644
index adbe3a1..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.Role;
-import org.springblade.system.vo.RoleVO;
-
-import javax.validation.constraints.NotEmpty;
-import java.util.List;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IRoleService extends IService<Role> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param role
-	 * @return
-	 */
-	IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role);
-
-	/**
-	 * 鏍戝舰缁撴瀯
-	 *
-	 * @param tenantId
-	 * @return
-	 */
-	List<RoleVO> tree(String tenantId);
-
-	/**
-	 * 鏉冮檺閰嶇疆
-	 *
-	 * @param roleIds      瑙掕壊id闆嗗悎
-	 * @param menuIds      鑿滃崟id闆嗗悎
-	 * @param dataScopeIds 鏁版嵁鏉冮檺id闆嗗悎
-	 * @param apiScopeIds  鎺ュ彛鏉冮檺id闆嗗悎
-	 * @return 鏄惁鎴愬姛
-	 */
-	boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds);
-
-	/**
-	 * 鑾峰彇瑙掕壊ID
-	 *
-	 * @param tenantId
-	 * @param roleNames
-	 * @return
-	 */
-	String getRoleIds(String tenantId, String roleNames);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚�
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<String> getRoleNames(String roleIds);
-
-	/**
-	 * 鑾峰彇瑙掕壊鍚�
-	 *
-	 * @param roleIds
-	 * @return
-	 */
-	List<String> getRoleAliases(String roleIds);
-
-	/**
-	 * 鎻愪氦
-	 *
-	 * @param role
-	 * @return
-	 */
-	boolean submit(Role role);
-
-	/**
-	 * 瑙掕壊淇℃伅鏌ヨ
-	 *
-	 * @param roleName
-	 * @param parentId
-	 * @return
-	 */
-	List<RoleVO> search(String roleName, Long parentId);
-
-	/**
-	 * 鍒犻櫎瑙掕壊
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeRole(String ids);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IStrategyService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IStrategyService.java
deleted file mode 100644
index bc3e471..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IStrategyService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.mp.support.Query;
-import org.springblade.system.entity.Strategy;
-import org.springframework.data.domain.PageImpl;
-
-import java.util.List;
-
-/**
- * 瀵嗙爜绛栫暐(PlSysStrategy)琛ㄦ湇鍔℃帴鍙�
- *
- * @author makejava
- * @since 2023-03-20 15:16:18
- */
-public interface IStrategyService extends IService<Strategy> {
-
-	/**
-	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	Strategy queryById(String id);
-
-	/**
-	 * 鏌ヨ榛樿瀵嗙爜绛栫暐
-	 *
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	Strategy queryByIsDefault();
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param query 鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	PageImpl<Strategy> queryAllByPage(Query query);
-
-	/**
-	 * 鏂板鏁版嵁鎴栦慨鏀规暟鎹�
-	 *
-	 * @param strategy 瀹炰緥瀵硅薄
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	boolean submit(Strategy strategy);
-
-	/**
-	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鏄惁鎴愬姛
-	 */
-	boolean deleteByIds(List<String> ids);
-
-	/**
-	 * 閫氳繃绉熸埛id浠ュ強鐢ㄦ埛鍚嶆煡璇㈠瘑鐮佺瓥鐣�
-	 * @param tenantId
-	 * @param name
-	 * @return
-	 */
-	Strategy queryByNameAndTenantId(String tenantId, String name);
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐
-	 * @param userId
-	 * @return
-	 */
-	Strategy queryByUserId(Long userId);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantPackageService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantPackageService.java
deleted file mode 100644
index 9007e1e..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantPackageService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.TenantPackage;
-
-/**
- * 绉熸埛浜у搧琛� 鏈嶅姟绫�
- *
- * @author BladeX
- */
-public interface ITenantPackageService extends BaseService<TenantPackage> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
deleted file mode 100644
index fb571c8..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.Tenant;
-import org.springblade.system.vo.TenantVO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface ITenantService extends BaseService<Tenant> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param tenant
-	 * @return
-	 */
-	IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant);
-
-	/**
-	 * 鏍规嵁绉熸埛缂栧彿鑾峰彇瀹炰綋
-	 *
-	 * @param tenantId
-	 * @return
-	 */
-	Tenant getByTenantId(String tenantId);
-
-	/**
-	 * 鏂板
-	 *
-	 * @param tenant
-	 * @return
-	 */
-	boolean submitTenant(TenantVO tenant);
-
-	/**
-	 * 鍒犻櫎
-	 *
-	 * @param ids
-	 * @return
-	 */
-	boolean removeTenant(List<Long> ids);
-
-	/**
-	 * 閰嶇疆绉熸埛鎺堟潈
-	 *
-	 * @param accountNumber
-	 * @param expireTime
-	 * @param ids
-	 * @return
-	 */
-	//boolean setting(Integer accountNumber, Date expireTime, String ids);
-
-	/**
-	 * 鏌ヨ绉熸埛id锛坘ey锛夛細绉熸埛鍚嶏紙value锛�
-	 * @return
-	 */
-	List<Map<String,Object>> selectMaps();
-
-	/**
-	 * 鏌ヨ鏄惁閰嶇疆鏈夐粯璁ゅ繀椤诲紑鍚笁鍛樼鐞�
-	 *
-	 * @return
-	 */
-	boolean findIsOpen();
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuService.java
deleted file mode 100644
index 66fbad1..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuService.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.entity.TopMenu;
-
-import javax.validation.constraints.NotEmpty;
-import java.util.List;
-
-/**
- * 椤堕儴鑿滃崟琛� 鏈嶅姟绫�
- *
- * @author BladeX
- */
-public interface ITopMenuService extends BaseService<TopMenu> {
-
-	/**
-	 * 椤堕儴鑿滃崟閰嶇疆
-	 *
-	 * @param topMenuIds 椤堕儴鑿滃崟id闆嗗悎
-	 * @param menuIds    鑿滃崟id闆嗗悎
-	 * @return 鏄惁鎴愬姛
-	 */
-	boolean grant(@NotEmpty List<Long> topMenuIds, @NotEmpty List<Long> menuIds);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuSettingService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuSettingService.java
deleted file mode 100644
index 83b52f2..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuSettingService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.TopMenuSetting;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface ITopMenuSettingService extends IService<TopMenuSetting> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IUserPwdstrategyService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IUserPwdstrategyService.java
deleted file mode 100644
index 03e26cf..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IUserPwdstrategyService.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.UserPwdstrategy;
-import org.springblade.system.vo.UserPwdstrategyVO;
-
-/**
- * 鐢ㄦ埛瀵嗙爜绛栫暐绠$悊琛�(UserPwdstrategy)琛ㄦ湇鍔℃帴鍙�
- *
- * @author makejava
- * @since 2023-03-22 15:24:54
- */
-public interface IUserPwdstrategyService extends IService<UserPwdstrategy> {
-
-	/**
-	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	UserPwdstrategy queryById(Long id);
-
-	/**
-	 * 鏂板鎴栦慨鏀规暟鎹�
-	 *
-	 * @param userPwdstrategyVO 瀹炰緥瀵硅薄
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	Boolean submit(UserPwdstrategyVO userPwdstrategyVO);
-
-
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IValueRangeService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IValueRangeService.java
deleted file mode 100644
index 9dcea9b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IValueRangeService.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.springblade.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.entity.ValueRange;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-
-import java.util.List;
-
-/**
- * (ValueRange)琛ㄦ湇鍔℃帴鍙�
- *
- * @author makejava
- * @since 2023-03-20 15:23:27
- */
-public interface IValueRangeService extends IService<ValueRange> {
-
-	/**
-	 * 鍏ㄦ煡璇�
-	 * @return
-	 */
-	List<ValueRange> queryByAll();
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param valueRange 绛涢�夋潯浠�
-	 * @param pageRequest     鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	Page<ValueRange> queryByPage(ValueRange valueRange, PageRequest pageRequest);
-
-	/**
-	 * 鏂板鏁版嵁鎴栦慨鏀规暟鎹�
-	 *
-	 * @param valueRange 瀹炰緥瀵硅薄
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	boolean submit(ValueRange valueRange);
-
-	/**
-	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鏄惁鎴愬姛
-	 */
-	boolean deleteByIds(List<String> ids);
-
-	/**
-	 * 鑾峰彇鍙栧��
-	 *
-	 * @return 鏄惁鎴愬姛
-	 */
-	List<String> getByAllString(List<String> combinationIds);
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java
deleted file mode 100644
index 4f7d23a..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.system.entity.ApiScope;
-import org.springblade.system.mapper.ApiScopeMapper;
-import org.springblade.system.service.IApiScopeService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author BladeX
- */
-@Service
-public class ApiScopeServiceImpl extends BaseServiceImpl<ApiScopeMapper, ApiScope> implements IApiScopeService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java
deleted file mode 100644
index a375e48..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.system.entity.AuthClient;
-import org.springblade.system.mapper.AuthClientMapper;
-import org.springblade.system.service.IAuthClientService;
-import org.springframework.stereotype.Service;
-
-/**
- *  鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class AuthClientServiceImpl extends BaseServiceImpl<AuthClientMapper, AuthClient> implements IAuthClientService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CombinationServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CombinationServiceImpl.java
deleted file mode 100644
index 1d69a42..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CombinationServiceImpl.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Combination;
-import org.springblade.system.mapper.CombinationMapper;
-import org.springblade.system.service.ICombinationService;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)琛ㄦ湇鍔″疄鐜扮被
- *
- * @author makejava
- * @since 2023-03-20 15:23:22
- */
-@Service
-@Validated
-//@AllArgsConstructor
-public class CombinationServiceImpl extends ServiceImpl<CombinationMapper,Combination> implements ICombinationService {
-
-	@Resource
-	private CombinationMapper combinationMapper;
-
-	/**
-	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	@Override
-	public Combination queryById(Long id) {
-		Combination combination = this.getOne(Wrappers.<Combination>query().lambda().eq(Combination::getId, id));
-		return combination;
-	}
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param combination 绛涢�夋潯浠�
-	 * @param page      鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@Override
-	public IPage<Combination> selectCombinationPage(Combination combination, IPage<Combination> page) {
-		return page.setRecords(combinationMapper.selectCombinationPage(page,combination));
-	}
-
-	/**
-	 * 鏂板鏁版嵁鍜屼慨鏀规暟鎹�
-	 *
-	 * @param combination 瀹炰緥瀵硅薄
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	@Override
-	public boolean submit(Combination combination) {
-		//鍒ゆ柇鏄惁鎼哄甫id
-		if(Func.isEmpty(combination.getId())){
-			//鏂板
-			Combination dbcombination = this.getOne(Wrappers.<Combination>query().lambda().eq(Combination::getName, combination.getName()));
-			//濡傛灉鏁版嵁搴撲腑瀛樺湪杩欐潯缁勫悎鍚嶇О鐨勮褰曠洿鎺ヨ繑鍥�
-			if(!Func.isEmpty(dbcombination)){
-				throw new ServiceException("缁勫悎鍚嶇О宸插瓨鍦�!");
-			}
-			if(Func.isEmpty(combination.getCreateTime())){
-				combination.setCreateTime(new Date());
-			}
-			if(Func.isEmpty(combination.getUpdateTime())){
-				combination.setUpdateTime(new Date());
-			}
-			boolean temp = saveOrUpdate(combination);
-			return temp;
-		}else {
-			if(Func.isEmpty(combination.getUpdateTime())){
-				combination.setUpdateTime(new Date());
-			}
-			CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-			return saveOrUpdate(combination);
-		}
-	}
-
-	/**
-	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鏄惁鎴愬姛
-	 */
-	@Override
-	public boolean deleteByIds(List<String> ids) {
-		boolean tenantTemp = this.removeBatchByIds(ids);
-		return tenantTemp;
-	}
-
-	/**
-	 * 鏌ヨ瀵嗙爜缁勫悎id锛氱粍鍚堝悕锛岄敭鍊煎
-	 *
-	 * @return 閿�煎
-	 */
-	@Override
-	public List<Map<String, Object>> selectMaps() {
-		List<Map<String, Object>> maps = listMaps(new QueryWrapper<Combination>().select("ID", "NAME"));
-		return maps;
-	}
-
-	@Override
-	public String getRegex(List<String> combinationIds) {
-		return combinationMapper.queryRegex(combinationIds);
-	}
-
-	@Override
-	public List<String> getRegexList(List<String> combinationIds) {
-		return combinationMapper.queryRegexList(combinationIds);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java
deleted file mode 100644
index a1d96c6..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.system.entity.DataScope;
-import org.springblade.system.mapper.DataScopeMapper;
-import org.springblade.system.service.IDataScopeService;
-import org.springframework.stereotype.Service;
-
-/**
- *  鏈嶅姟瀹炵幇绫�
- *
- * @author BladeX
- */
-@Service
-public class DataScopeServiceImpl extends BaseServiceImpl<DataScopeMapper, DataScope> implements IDataScopeService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
deleted file mode 100644
index b344a1e..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.entity.Dept;
-import org.springblade.system.mapper.DeptMapper;
-import org.springblade.system.service.IDeptService;
-import org.springblade.system.vo.DeptVO;
-import org.springblade.system.wrapper.DeptWrapper;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
-
-	private static final String TENANT_ID = "tenantId";
-	private static final String PARENT_ID = "parentId";
-
-	@Override
-	public List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param) {
-		// 璁剧疆绉熸埛ID
-		if (AuthUtil.isAdministrator()) {
-			tenantId = StringPool.EMPTY;
-		}
-		String paramTenantId = Func.toStr(param.get(TENANT_ID));
-		if (Func.isNotEmpty(paramTenantId) && AuthUtil.isAdministrator()) {
-			tenantId = paramTenantId;
-		}
-		// 鍒ゆ柇鐐瑰嚮鎼滅储浣嗘槸娌℃湁鏌ヨ鏉′欢鐨勬儏鍐�
-		if (Func.isEmpty(param.get(PARENT_ID)) && param.size() == 1) {
-			parentId = 0L;
-		}
-		// 鍒ゆ柇鏁版嵁鏉冮檺鎺у埗,闈炶秴绠¤鑹插彧鍙湅鍒版湰绾у強浠ヤ笅鏁版嵁
-		if (Func.toLong(parentId) == 0L && !AuthUtil.isAdministrator()) {
-			Long deptId = Func.firstLong(AuthUtil.getDeptId());
-			Dept dept = SysCache.getDept(deptId);
-			if (dept.getParentId() != 0) {
-				parentId = dept.getParentId();
-			}
-		}
-		// 鍒ゆ柇鐐瑰嚮鎼滅储甯︽湁鏌ヨ鏉′欢鐨勬儏鍐�
-		if (Func.isEmpty(param.get(PARENT_ID)) && param.size() > 1 && Func.toLong(parentId) == 0L) {
-			parentId = null;
-		}
-		return baseMapper.lazyList(tenantId, parentId, param);
-	}
-
-
-	@Override
-	public List<DeptVO> tree(String tenantId) {
-		return ForestNodeMerger.merge(baseMapper.tree(tenantId));
-	}
-
-	@Override
-	public List<DeptVO> lazyTree(String tenantId, Long parentId) {
-		if (AuthUtil.isAdministrator()) {
-			tenantId = StringPool.EMPTY;
-		}
-		return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
-	}
-
-	@Override
-	public String getDeptIds(String tenantId, String deptNames) {
-		List<Dept> deptList = baseMapper.selectList(Wrappers.<Dept>query().lambda().eq(Dept::getTenantId, tenantId).in(Dept::getDeptName, Func.toStrList(deptNames)));
-		if (deptList != null && deptList.size() > 0) {
-			return deptList.stream().map(dept -> Func.toStr(dept.getId())).distinct().collect(Collectors.joining(","));
-		}
-		return null;
-	}
-
-	@Override
-	public String getDeptIdsByFuzzy(String tenantId, String deptNames) {
-		LambdaQueryWrapper<Dept> queryWrapper = Wrappers.<Dept>query().lambda().eq(Dept::getTenantId, tenantId);
-		queryWrapper.and(wrapper -> {
-			List<String> names = Func.toStrList(deptNames);
-			names.forEach(name -> wrapper.like(Dept::getDeptName, name).or());
-		});
-		List<Dept> deptList = baseMapper.selectList(queryWrapper);
-		if (deptList != null && deptList.size() > 0) {
-			return deptList.stream().map(dept -> Func.toStr(dept.getId())).distinct().collect(Collectors.joining(","));
-		}
-		return null;
-	}
-
-	@Override
-	public List<String> getDeptNames(String deptIds) {
-		return baseMapper.getDeptNames(Func.toLongArray(deptIds));
-	}
-
-	@Override
-	public List<Dept> getDeptChild(Long deptId) {
-		return baseMapper.selectList(Wrappers.<Dept>query().lambda().like(Dept::getAncestors, deptId));
-	}
-
-	@Override
-	public boolean removeDept(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Dept>query().lambda().in(Dept::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
-
-	@Override
-	public boolean submit(Dept dept) {
-		if (Func.isEmpty(dept.getParentId())) {
-			dept.setTenantId(AuthUtil.getTenantId());
-			dept.setParentId(BladeConstant.TOP_PARENT_ID);
-			dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
-		}
-		if (dept.getParentId() > 0) {
-			Dept parent = getById(dept.getParentId());
-			if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
-				throw new ServiceException("鐖惰妭鐐逛笉鍙�夋嫨鑷韩!");
-			}
-			dept.setTenantId(parent.getTenantId());
-			String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
-			dept.setAncestors(ancestors);
-		}
-		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return saveOrUpdate(dept);
-	}
-
-	@Override
-	public List<DeptVO> search(String deptName, Long parentId) {
-		String tenantId = AuthUtil.getTenantId();
-		LambdaQueryWrapper<Dept> queryWrapper = Wrappers.<Dept>query().lambda();
-		if (Func.isNotEmpty(tenantId)) {
-			queryWrapper.eq(Dept::getTenantId, tenantId);
-		}
-		if (Func.isNotEmpty(deptName)) {
-			queryWrapper.like(Dept::getDeptName, deptName);
-		}
-		if (Func.isNotEmpty(parentId) && parentId > 0L) {
-			queryWrapper.eq(Dept::getParentId, parentId);
-		}
-		List<Dept> deptList = baseMapper.selectList(queryWrapper);
-		return DeptWrapper.build().listNodeVO(deptList);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java
deleted file mode 100644
index 15f8f1e..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.cache.DictBizCache;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.mapper.DictBizMapper;
-import org.springblade.system.service.IDictBizService;
-import org.springblade.system.vo.DictBizVO;
-import org.springblade.system.wrapper.DictBizWrapper;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class DictBizServiceImpl extends ServiceImpl<DictBizMapper, DictBiz> implements IDictBizService {
-
-	@Override
-	public List<DictBizVO> tree() {
-		return ForestNodeMerger.merge(baseMapper.tree());
-	}
-
-	@Override
-	public List<DictBizVO> parentTree() {
-		return ForestNodeMerger.merge(baseMapper.parentTree());
-	}
-
-	@Override
-	public String getValue(String code, String dictKey) {
-		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
-	}
-
-	@Override
-	public List<DictBiz> getList(String code) {
-		return baseMapper.getList(code);
-	}
-
-	@Override
-	public boolean submit(DictBiz dict) {
-		LambdaQueryWrapper<DictBiz> lqw = Wrappers.<DictBiz>query().lambda().eq(DictBiz::getCode, dict.getCode()).eq(DictBiz::getDictKey, dict.getDictKey());
-		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBiz::getId, dict.getId()));
-		if (cnt > 0L) {
-			throw new ServiceException("褰撳墠瀛楀吀閿�煎凡瀛樺湪!");
-		}
-		// 淇敼椤剁骇瀛楀吀鍚庡悓姝ユ洿鏂颁笅灞炲瓧鍏哥殑缂栧彿
-		if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
-			DictBiz parent = DictBizCache.getById(dict.getId());
-			this.update(Wrappers.<DictBiz>update().lambda().set(DictBiz::getCode, dict.getCode()).eq(DictBiz::getCode, parent.getCode()).ne(DictBiz::getParentId, BladeConstant.TOP_PARENT_ID));
-		}
-		if (Func.isEmpty(dict.getParentId())) {
-			dict.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		CacheUtil.clear(DICT_CACHE);
-		return saveOrUpdate(dict);
-	}
-
-	@Override
-	public boolean removeDict(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<DictBiz>query().lambda().in(DictBiz::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
-
-	@Override
-	public IPage<DictBizVO> parentList(Map<String, Object> dict, Query query) {
-		IPage<DictBiz> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBiz.class).lambda().eq(DictBiz::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictBiz::getSort));
-		return DictBizWrapper.build().pageVO(page);
-	}
-
-	@Override
-	public List<DictBizVO> childList(Map<String, Object> dict, Long parentId) {
-		if (parentId < 0) {
-			return new ArrayList<>();
-		}
-		dict.remove("parentId");
-		DictBiz parentDict = DictBizCache.getById(parentId);
-		List<DictBiz> list = this.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().ne(DictBiz::getId, parentId).eq(DictBiz::getCode, parentDict.getCode()).orderByAsc(DictBiz::getSort));
-		return DictBizWrapper.build().listNodeVO(list);
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
deleted file mode 100644
index 087520b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.entity.Dict;
-import org.springblade.system.mapper.DictMapper;
-import org.springblade.system.service.IDictService;
-import org.springblade.system.vo.DictVO;
-import org.springblade.system.wrapper.DictWrapper;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
-
-	@Override
-	public IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict) {
-		return page.setRecords(baseMapper.selectDictPage(page, dict));
-	}
-
-	@Override
-	public List<DictVO> tree() {
-		return ForestNodeMerger.merge(baseMapper.tree());
-	}
-
-	@Override
-	public List<DictVO> parentTree() {
-		return ForestNodeMerger.merge(baseMapper.parentTree());
-	}
-
-	@Override
-	public String getValue(String code, String dictKey) {
-		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
-	}
-
-	@Override
-	public List<Dict> getList(String code) {
-		return baseMapper.getList(code);
-	}
-
-	@Override
-	public boolean submit(Dict dict) {
-		LambdaQueryWrapper<Dict> lqw = Wrappers.<Dict>query().lambda().eq(Dict::getCode, dict.getCode()).eq(Dict::getDictKey, dict.getDictKey());
-		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(Dict::getId, dict.getId()));
-		if (cnt > 0L) {
-			throw new ServiceException("褰撳墠瀛楀吀閿�煎凡瀛樺湪!");
-		}
-		// 淇敼椤剁骇瀛楀吀鍚庡悓姝ユ洿鏂颁笅灞炲瓧鍏哥殑缂栧彿
-		if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
-			Dict parent = DictCache.getById(dict.getId());
-			this.update(Wrappers.<Dict>update().lambda().set(Dict::getCode, dict.getCode()).eq(Dict::getCode, parent.getCode()).ne(Dict::getParentId, BladeConstant.TOP_PARENT_ID));
-		}
-		if (Func.isEmpty(dict.getParentId())) {
-			dict.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
-		return saveOrUpdate(dict);
-	}
-
-	@Override
-	public boolean removeDict(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Dict>query().lambda().in(Dict::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
-
-	@Override
-	public IPage<DictVO> parentList(Map<String, Object> dict, Query query) {
-		IPage<Dict> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, Dict.class).lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(Dict::getSort));
-		return DictWrapper.build().pageVO(page);
-	}
-
-	@Override
-	public List<DictVO> childList(Map<String, Object> dict, Long parentId) {
-		if (parentId < 0) {
-			return new ArrayList<>();
-		}
-		dict.remove("parentId");
-		Dict parentDict = DictCache.getById(parentId);
-		List<Dict> list = this.list(Condition.getQueryWrapper(dict, Dict.class).lambda().ne(Dict::getId, parentId).eq(Dict::getCode, parentDict.getCode()).orderByAsc(Dict::getSort));
-		return DictWrapper.build().listNodeVO(list);
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
deleted file mode 100644
index b7ea85b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.AllArgsConstructor;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.node.TreeNode;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.dto.MenuDTO;
-import org.springblade.system.entity.*;
-import org.springblade.system.mapper.MenuMapper;
-import org.springblade.system.service.IMenuService;
-import org.springblade.system.service.IRoleMenuService;
-import org.springblade.system.service.IRoleScopeService;
-import org.springblade.system.service.ITopMenuSettingService;
-import org.springblade.system.vo.MenuVO;
-import org.springblade.system.wrapper.MenuWrapper;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static org.springblade.common.constant.CommonConstant.API_SCOPE_CATEGORY;
-import static org.springblade.common.constant.CommonConstant.DATA_SCOPE_CATEGORY;
-import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-@AllArgsConstructor
-public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
-
-	private final IRoleMenuService roleMenuService;
-	private final IRoleScopeService roleScopeService;
-	private final ITopMenuSettingService topMenuSettingService;
-	private final static String PARENT_ID = "parentId";
-	private final static Integer MENU_CATEGORY = 1;
-
-	@Override
-	public List<MenuVO> lazyList(Long parentId, Map<String, Object> param) {
-		if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
-			parentId = null;
-		}
-		return baseMapper.lazyList(parentId, param);
-	}
-
-	@Override
-	public List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param) {
-		if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
-			parentId = null;
-		}
-		return baseMapper.lazyMenuList(parentId, param);
-	}
-
-
-	@Override
-	public List<MenuVO> routes(String roleId, Long topMenuId) {
-		if (StringUtil.isBlank(roleId)) {
-			return null;
-		}
-		List<Menu> allMenus = baseMapper.allMenu();
-		List<Menu> roleMenus;
-		// 瓒呯骇绠$悊鍛樺苟涓斾笉鏄《閮ㄨ彍鍗曡姹傚垯杩斿洖鍏ㄩ儴鑿滃崟
-		if (AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
-			roleMenus = allMenus;
-		}
-		// 闈炶秴绾х鐞嗗憳骞朵笖涓嶆槸椤堕儴鑿滃崟璇锋眰鍒欒繑鍥炲搴旇鑹叉潈闄愯彍鍗�
-		else if (!AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
-			roleMenus = tenantPackageMenu(baseMapper.roleMenuByRoleId(Func.toLongList(roleId)));
-		}
-		// 椤堕儴鑿滃崟璇锋眰杩斿洖瀵瑰簲瑙掕壊鏉冮檺鑿滃崟
-		else {
-			// 瑙掕壊閰嶇疆瀵瑰簲鑿滃崟
-			List<Menu> roleIdMenus = baseMapper.roleMenuByRoleId(Func.toLongList(roleId));
-			// 鍙嶅悜閫掑綊瑙掕壊鑿滃崟鎵�鏈夌埗绾�
-			List<Menu> routes = new LinkedList<>(roleIdMenus);
-			roleIdMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu));
-			// 椤堕儴閰嶇疆瀵瑰簲鑿滃崟
-			List<Menu> topIdMenus = baseMapper.roleMenuByTopMenuId(topMenuId);
-			// 绛涢�夊尮閰嶈鑹插搴旂殑鏉冮檺鑿滃崟
-			roleMenus = topIdMenus.stream().filter(x ->
-				routes.stream().anyMatch(route -> route.getId().longValue() == x.getId().longValue())
-			).collect(Collectors.toList());
-		}
-		return buildRoutes(allMenus, roleMenus);
-	}
-
-	private List<MenuVO> buildRoutes(List<Menu> allMenus, List<Menu> roleMenus) {
-		List<Menu> routes = new LinkedList<>(roleMenus);
-		roleMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu));
-		routes.sort(Comparator.comparing(Menu::getSort));
-		MenuWrapper menuWrapper = new MenuWrapper();
-		List<Menu> collect = routes.stream().filter(x -> Func.equals(x.getCategory(), 1)).collect(Collectors.toList());
-		return menuWrapper.listNodeVO(collect);
-	}
-
-	private void recursion(List<Menu> allMenus, List<Menu> routes, Menu roleMenu) {
-		Optional<Menu> menu = allMenus.stream().filter(x -> Func.equals(x.getId(), roleMenu.getParentId())).findFirst();
-		if (menu.isPresent() && !routes.contains(menu.get())) {
-			routes.add(menu.get());
-			recursion(allMenus, routes, menu.get());
-		}
-	}
-
-	@Override
-	public List<MenuVO> buttons(String roleId) {
-		List<Menu> buttons = (AuthUtil.isAdministrator()) ? baseMapper.allButtons() : baseMapper.buttons(Func.toLongList(roleId));
-		MenuWrapper menuWrapper = new MenuWrapper();
-		return menuWrapper.listNodeVO(buttons);
-	}
-
-	@Override
-	public List<TreeNode> tree() {
-		return ForestNodeMerger.merge(baseMapper.tree());
-	}
-
-	@Override
-	public List<TreeNode> grantTree(BladeUser user) {
-		List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTree() : baseMapper.grantTreeByRole(Func.toLongList(user.getRoleId()));
-		return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
-	}
-
-	@Override
-	public List<TreeNode> grantTopTree(BladeUser user) {
-		List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTopTree() : baseMapper.grantTopTreeByRole(Func.toLongList(user.getRoleId()));
-		return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
-	}
-
-	/**
-	 * 绉熸埛鑿滃崟鏉冮檺鑷畾涔夌瓫閫�
-	 */
-	private List<TreeNode> tenantPackageTree(List<TreeNode> menuTree, String tenantId) {
-		TenantPackage tenantPackage = SysCache.getTenantPackage(tenantId);
-		if (!AuthUtil.isAdministrator() && Func.isNotEmpty(tenantPackage) && tenantPackage.getId() > 0L) {
-			List<Long> menuIds = Func.toLongList(tenantPackage.getMenuId());
-			// 绛涢�夊嚭涓よ�呰彍鍗曚氦闆嗛泦鍚�
-			List<TreeNode> collect = menuTree.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList());
-			// 鍒涘缓閫掑綊鍩虹闆嗗悎
-			List<TreeNode> packageTree = new LinkedList<>(collect);
-			// 閫掑綊绛涢�夊嚭鑿滃崟闆嗗悎鎵�鏈夌埗绾�
-			collect.forEach(treeNode -> recursionParent(menuTree, packageTree, treeNode));
-			// 閫掑綊绛涢�夊嚭鑿滃崟闆嗗悎鎵�鏈夊瓙绾�
-			collect.forEach(treeNode -> recursionChild(menuTree, packageTree, treeNode));
-			// 鍚堝苟鍦ㄤ竴璧疯繑鍥炴渶缁堥泦鍚�
-			return packageTree;
-		}
-		return menuTree;
-	}
-
-	/**
-	 * 鐖惰妭鐐归�掑綊
-	 */
-	public void recursionParent(List<TreeNode> menuTree, List<TreeNode> packageTree, TreeNode treeNode) {
-		Optional<TreeNode> node = menuTree.stream().filter(x -> Func.equals(x.getId(), treeNode.getParentId())).findFirst();
-		if (node.isPresent() && !packageTree.contains(node.get())) {
-			packageTree.add(node.get());
-			recursionParent(menuTree, packageTree, node.get());
-		}
-	}
-
-	/**
-	 * 瀛愯妭鐐归�掑綊
-	 */
-	public void recursionChild(List<TreeNode> menuTree, List<TreeNode> packageTree, TreeNode treeNode) {
-		List<TreeNode> nodes = menuTree.stream().filter(x -> Func.equals(x.getParentId(), treeNode.getId())).collect(Collectors.toList());
-		nodes.forEach(node -> {
-			if (!packageTree.contains(node)) {
-				packageTree.add(node);
-				recursionChild(menuTree, packageTree, node);
-			}
-		});
-	}
-
-	/**
-	 * 绉熸埛鑿滃崟鏉冮檺鑷畾涔夌瓫閫�
-	 */
-	private List<Menu> tenantPackageMenu(List<Menu> menu) {
-		TenantPackage tenantPackage = SysCache.getTenantPackage(AuthUtil.getTenantId());
-		if (Func.isNotEmpty(tenantPackage) && tenantPackage.getId() > 0L) {
-			List<Long> menuIds = Func.toLongList(tenantPackage.getMenuId());
-			menu = menu.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList());
-		}
-		return menu;
-	}
-
-	@Override
-	public List<TreeNode> grantDataScopeTree(BladeUser user) {
-		return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantDataScopeTree() : baseMapper.grantDataScopeTreeByRole(Func.toLongList(user.getRoleId())));
-	}
-
-	@Override
-	public List<TreeNode> grantApiScopeTree(BladeUser user) {
-		return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantApiScopeTree() : baseMapper.grantApiScopeTreeByRole(Func.toLongList(user.getRoleId())));
-	}
-
-	@Override
-	public List<String> roleTreeKeys(String roleIds) {
-		List<RoleMenu> roleMenus = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().in(RoleMenu::getRoleId, Func.toLongList(roleIds)));
-		return roleMenus.stream().map(roleMenu -> Func.toStr(roleMenu.getMenuId())).collect(Collectors.toList());
-	}
-
-	@Override
-	public List<String> topTreeKeys(String topMenuIds) {
-		List<TopMenuSetting> settings = topMenuSettingService.list(Wrappers.<TopMenuSetting>query().lambda().in(TopMenuSetting::getTopMenuId, Func.toLongList(topMenuIds)));
-		return settings.stream().map(setting -> Func.toStr(setting.getMenuId())).collect(Collectors.toList());
-	}
-
-	@Override
-	public List<String> dataScopeTreeKeys(String roleIds) {
-		List<RoleScope> roleScopes = roleScopeService.list(Wrappers.<RoleScope>query().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, Func.toLongList(roleIds)));
-		return roleScopes.stream().map(roleScope -> Func.toStr(roleScope.getScopeId())).collect(Collectors.toList());
-	}
-
-	@Override
-	public List<String> apiScopeTreeKeys(String roleIds) {
-		List<RoleScope> roleScopes = roleScopeService.list(Wrappers.<RoleScope>query().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, Func.toLongList(roleIds)));
-		return roleScopes.stream().map(roleScope -> Func.toStr(roleScope.getScopeId())).collect(Collectors.toList());
-	}
-
-	@Override
-	@Cacheable(cacheNames = MENU_CACHE, key = "'auth:routes:' + #user.roleId")
-	public List<Kv> authRoutes(BladeUser user) {
-		List<MenuDTO> routes = baseMapper.authRoutes(Func.toLongList(user.getRoleId()));
-		List<Kv> list = new ArrayList<>();
-		routes.forEach(route -> list.add(Kv.create().set(route.getPath(), Kv.create().set("authority", Func.toStrArray(route.getAlias())))));
-		return list;
-	}
-
-	@Override
-	public boolean removeMenu(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Menu>query().lambda().in(Menu::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
-
-	@Override
-	public boolean submit(Menu menu) {
-		LambdaQueryWrapper<Menu> menuQueryWrapper = Wrappers.lambdaQuery();
-		if (menu.getId() == null) {
-			menuQueryWrapper.eq(Menu::getCode, menu.getCode()).or(
-				wrapper -> wrapper.eq(Menu::getName, menu.getName()).eq(Menu::getCategory, MENU_CATEGORY)
-			);
-		} else {
-			menuQueryWrapper.ne(Menu::getId, menu.getId()).and(
-				wrapper -> wrapper.eq(Menu::getCode, menu.getCode()).or(
-					o -> o.eq(Menu::getName, menu.getName()).eq(Menu::getCategory, MENU_CATEGORY)
-				)
-			);
-		}
-		Long cnt = baseMapper.selectCount(menuQueryWrapper);
-		if (cnt > 0L) {
-			throw new ServiceException("鑿滃崟鍚嶆垨缂栧彿宸插瓨鍦�!");
-		}
-		if (menu.getParentId() == null && menu.getId() == null) {
-			menu.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		if (menu.getParentId() != null && menu.getId() == null) {
-			Menu parentMenu = baseMapper.selectById(menu.getParentId());
-			if (parentMenu != null && parentMenu.getCategory() != 1) {
-				throw new ServiceException("鐖惰妭鐐瑰彧鍙�夋嫨鑿滃崟绫诲瀷!");
-			}
-		}
-		menu.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return saveOrUpdate(menu);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java
deleted file mode 100644
index 3cd73c9..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.system.entity.Param;
-import org.springblade.system.mapper.ParamMapper;
-import org.springblade.system.service.IParamService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class ParamServiceImpl extends BaseServiceImpl<ParamMapper, Param> implements IParamService {
-
-	@Override
-	public String getValue(String paramKey) {
-		Param param = this.getOne(Wrappers.<Param>query().lambda().eq(Param::getParamKey, paramKey));
-		return param.getParamValue();
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java
deleted file mode 100644
index 240fd39..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Post;
-import org.springblade.system.mapper.PostMapper;
-import org.springblade.system.service.IPostService;
-import org.springblade.system.vo.PostVO;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 宀椾綅琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class PostServiceImpl extends BaseServiceImpl<PostMapper, Post> implements IPostService {
-
-	@Override
-	public IPage<PostVO> selectPostPage(IPage<PostVO> page, PostVO post) {
-		return page.setRecords(baseMapper.selectPostPage(page, post));
-	}
-
-	@Override
-	public String getPostIds(String tenantId, String postNames) {
-		List<Post> postList = baseMapper.selectList(Wrappers.<Post>query().lambda().eq(Post::getTenantId, tenantId).in(Post::getPostName, Func.toStrList(postNames)));
-		if (postList != null && postList.size() > 0) {
-			return postList.stream().map(post -> Func.toStr(post.getId())).distinct().collect(Collectors.joining(","));
-		}
-		return null;
-	}
-
-	@Override
-	public String getPostIdsByFuzzy(String tenantId, String postNames) {
-		LambdaQueryWrapper<Post> queryWrapper = Wrappers.<Post>query().lambda().eq(Post::getTenantId, tenantId);
-		queryWrapper.and(wrapper -> {
-			List<String> names = Func.toStrList(postNames);
-			names.forEach(name -> wrapper.like(Post::getPostName, name).or());
-		});
-		List<Post> postList = baseMapper.selectList(queryWrapper);
-		if (postList != null && postList.size() > 0) {
-			return postList.stream().map(post -> Func.toStr(post.getId())).distinct().collect(Collectors.joining(","));
-		}
-		return null;
-	}
-
-	@Override
-	public List<String> getPostNames(String postIds) {
-		return baseMapper.getPostNames(Func.toLongArray(postIds));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java
deleted file mode 100644
index 6fc8f7d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.system.entity.Region;
-import org.springblade.system.excel.RegionExcel;
-import org.springblade.system.mapper.RegionMapper;
-import org.springblade.system.service.IRegionService;
-import org.springblade.system.vo.RegionVO;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.system.cache.RegionCache.*;
-
-
-/**
- * 琛屾斂鍖哄垝琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService {
-
-	@Override
-	public boolean submit(Region region) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getCode, region.getCode()));
-		if (cnt > 0L) {
-			return this.updateById(region);
-		}
-		// 璁剧疆绁栧尯鍒掔紪鍙�
-		Region parent = getByCode(region.getParentCode());
-		if (Func.isNotEmpty(parent) || Func.isNotEmpty(parent.getCode())) {
-			String ancestors = parent.getAncestors() + StringPool.COMMA + parent.getCode();
-			region.setAncestors(ancestors);
-		}
-		// 璁剧疆鐪併�佸競銆佸尯銆侀晣銆佹潙
-		Integer level = region.getRegionLevel();
-		String code = region.getCode();
-		String name = region.getName();
-		if (level == PROVINCE_LEVEL) {
-			region.setProvinceCode(code);
-			region.setProvinceName(name);
-		} else if (level == CITY_LEVEL) {
-			region.setCityCode(code);
-			region.setCityName(name);
-		} else if (level == DISTRICT_LEVEL) {
-			region.setDistrictCode(code);
-			region.setDistrictName(name);
-		} else if (level == TOWN_LEVEL) {
-			region.setTownCode(code);
-			region.setTownName(name);
-		} else if (level == VILLAGE_LEVEL) {
-			region.setVillageCode(code);
-			region.setVillageName(name);
-		}
-		return this.save(region);
-	}
-
-	@Override
-	public boolean removeRegion(String id) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getParentCode, id));
-		if (cnt > 0L) {
-			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
-		}
-		return removeById(id);
-	}
-
-	@Override
-	public List<RegionVO> lazyList(String parentCode, Map<String, Object> param) {
-		return baseMapper.lazyList(parentCode, param);
-	}
-
-	@Override
-	public List<RegionVO> lazyTree(String parentCode, Map<String, Object> param) {
-		return baseMapper.lazyTree(parentCode, param);
-	}
-
-	@Override
-	public void importRegion(List<RegionExcel> data, Boolean isCovered) {
-		List<Region> list = new ArrayList<>();
-		data.forEach(regionExcel -> {
-			Region region = BeanUtil.copy(regionExcel, Region.class);
-			list.add(region);
-		});
-		if (isCovered) {
-			this.saveOrUpdateBatch(list);
-		} else {
-			this.saveBatch(list);
-		}
-	}
-
-	@Override
-	public List<RegionExcel> exportRegion(Wrapper<Region> queryWrapper) {
-		return baseMapper.exportRegion(queryWrapper);
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java
deleted file mode 100644
index 9bf04c8..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.system.entity.RoleMenu;
-import org.springblade.system.mapper.RoleMenuMapper;
-import org.springblade.system.service.IRoleMenuService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements IRoleMenuService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java
deleted file mode 100644
index 76b19c5..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.system.entity.RoleScope;
-import org.springblade.system.mapper.RoleScopeMapper;
-import org.springblade.system.service.IRoleScopeService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class RoleScopeServiceImpl extends ServiceImpl<RoleScopeMapper, RoleScope> implements IRoleScopeService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java
deleted file mode 100644
index d6d525a..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.AllArgsConstructor;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.constant.RoleConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.CollectionUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Role;
-import org.springblade.system.entity.RoleMenu;
-import org.springblade.system.entity.RoleScope;
-import org.springblade.system.mapper.RoleMapper;
-import org.springblade.system.service.IRoleMenuService;
-import org.springblade.system.service.IRoleScopeService;
-import org.springblade.system.service.IRoleService;
-import org.springblade.system.vo.RoleVO;
-import org.springblade.system.wrapper.RoleWrapper;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.validation.annotation.Validated;
-
-import javax.validation.constraints.NotEmpty;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static org.springblade.common.constant.CommonConstant.API_SCOPE_CATEGORY;
-import static org.springblade.common.constant.CommonConstant.DATA_SCOPE_CATEGORY;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-@Validated
-@AllArgsConstructor
-public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
-
-	private final IRoleMenuService roleMenuService;
-	private final IRoleScopeService roleScopeService;
-
-	@Override
-	public IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role) {
-		return page.setRecords(baseMapper.selectRolePage(page, role));
-	}
-
-	@Override
-	public List<RoleVO> tree(String tenantId) {
-		String userRole = AuthUtil.getUserRole();
-		String excludeRole = null;
-		if (!CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMIN) && !CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMINISTRATOR)) {
-			excludeRole = RoleConstant.ADMINISTRATOR;
-		}
-		return ForestNodeMerger.merge(baseMapper.tree(tenantId, excludeRole));
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds) {
-		return grantRoleMenu(roleIds, menuIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds);
-	}
-
-	private boolean grantRoleMenu(List<Long> roleIds, List<Long> menuIds) {
-		// 闃叉瓒婃潈閰嶇疆瓒呯瑙掕壊
-		Long administratorCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMINISTRATOR).in(Role::getId, roleIds));
-		if (!AuthUtil.isAdministrator() && administratorCount > 0L) {
-			throw new ServiceException("鏃犳潈閰嶇疆瓒呯瑙掕壊!");
-		}
-		// 闃叉瓒婃潈閰嶇疆绠$悊鍛樿鑹�
-		Long adminCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMIN).in(Role::getId, roleIds));
-		if (!AuthUtil.isAdmin() && adminCount > 0L) {
-			throw new ServiceException("鏃犳潈閰嶇疆绠$悊鍛樿鑹�!");
-		}
-		// 鍒犻櫎瑙掕壊閰嶇疆鐨勮彍鍗曢泦鍚�
-		roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().in(RoleMenu::getRoleId, roleIds));
-		// 缁勮閰嶇疆
-		List<RoleMenu> roleMenus = new ArrayList<>();
-		roleIds.forEach(roleId -> menuIds.forEach(menuId -> {
-			RoleMenu roleMenu = new RoleMenu();
-			roleMenu.setRoleId(roleId);
-			roleMenu.setMenuId(menuId);
-			roleMenus.add(roleMenu);
-		}));
-		// 鏂板閰嶇疆
-		roleMenuService.saveBatch(roleMenus);
-		// 閫掑綊璁剧疆涓嬪睘瑙掕壊鑿滃崟闆嗗悎
-		recursionRoleMenu(roleIds, menuIds);
-		return true;
-	}
-
-	private void recursionRoleMenu(List<Long> roleIds, List<Long> menuIds) {
-		roleIds.forEach(roleId -> baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getParentId, roleId)).forEach(role -> {
-			List<RoleMenu> roleMenuList = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().eq(RoleMenu::getRoleId, role.getId()));
-			// 瀛愯妭鐐硅繃婊ゅ嚭鐖惰妭鐐瑰垹闄ょ殑鑿滃崟闆嗗悎
-			List<Long> collectRoleMenuIds = roleMenuList.stream().map(RoleMenu::getMenuId).filter(menuId -> !menuIds.contains(menuId)).collect(Collectors.toList());
-			if (collectRoleMenuIds.size() > 0) {
-				// 鍒犻櫎瀛愯妭鐐规潈闄愬鐨勮彍鍗曢泦鍚�
-				roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().eq(RoleMenu::getRoleId, role.getId()).in(RoleMenu::getMenuId, collectRoleMenuIds));
-				// 閫掑綊璁剧疆涓嬪睘瑙掕壊鑿滃崟闆嗗悎
-				recursionRoleMenu(Collections.singletonList(role.getId()), menuIds);
-			}
-		}));
-	}
-
-	private boolean grantDataScope(List<Long> roleIds, List<Long> dataScopeIds) {
-		// 鍒犻櫎瑙掕壊閰嶇疆鐨勬暟鎹潈闄愰泦鍚�
-		roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
-		// 缁勮閰嶇疆
-		List<RoleScope> roleDataScopes = new ArrayList<>();
-		roleIds.forEach(roleId -> dataScopeIds.forEach(scopeId -> {
-			RoleScope roleScope = new RoleScope();
-			roleScope.setScopeCategory(DATA_SCOPE_CATEGORY);
-			roleScope.setRoleId(roleId);
-			roleScope.setScopeId(scopeId);
-			roleDataScopes.add(roleScope);
-		}));
-		// 鏂板閰嶇疆
-		roleScopeService.saveBatch(roleDataScopes);
-		return true;
-	}
-
-	private boolean grantApiScope(List<Long> roleIds, List<Long> apiScopeIds) {
-		// 鍒犻櫎瑙掕壊閰嶇疆鐨勬帴鍙f潈闄愰泦鍚�
-		roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
-		// 缁勮閰嶇疆
-		List<RoleScope> roleApiScopes = new ArrayList<>();
-		roleIds.forEach(roleId -> apiScopeIds.forEach(scopeId -> {
-			RoleScope roleScope = new RoleScope();
-			roleScope.setScopeCategory(API_SCOPE_CATEGORY);
-			roleScope.setScopeId(scopeId);
-			roleScope.setRoleId(roleId);
-			roleApiScopes.add(roleScope);
-		}));
-		// 鏂板閰嶇疆
-		roleScopeService.saveBatch(roleApiScopes);
-		return true;
-	}
-
-	@Override
-	public String getRoleIds(String tenantId, String roleNames) {
-		List<Role> roleList = baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getTenantId, tenantId).in(Role::getRoleName, Func.toStrList(roleNames)));
-		if (roleList != null && roleList.size() > 0) {
-			return roleList.stream().map(role -> Func.toStr(role.getId())).distinct().collect(Collectors.joining(","));
-		}
-		return null;
-	}
-
-	@Override
-	public List<String> getRoleNames(String roleIds) {
-		return baseMapper.getRoleNames(Func.toLongArray(roleIds));
-	}
-
-	@Override
-	public List<String> getRoleAliases(String roleIds) {
-		return baseMapper.getRoleAliases(Func.toLongArray(roleIds));
-	}
-
-	@Override
-	public boolean submit(Role role) {
-		if (!AuthUtil.isAdministrator()) {
-			if (Func.toStr(role.getRoleAlias()).equals(RoleConstant.ADMINISTRATOR)) {
-				throw new ServiceException("鏃犳潈闄愬垱寤鸿秴绠¤鑹诧紒");
-			}
-		}
-		if (Func.isEmpty(role.getParentId())) {
-			role.setTenantId(AuthUtil.getTenantId());
-			role.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		if (role.getParentId() > 0) {
-			Role parent = getById(role.getParentId());
-			if (Func.toLong(role.getParentId()) == Func.toLong(role.getId())) {
-				throw new ServiceException("鐖惰妭鐐逛笉鍙�夋嫨鑷韩!");
-			}
-			role.setTenantId(parent.getTenantId());
-		}
-		role.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return saveOrUpdate(role);
-	}
-
-	@Override
-	public List<RoleVO> search(String roleName, Long parentId) {
-		String tenantId = AuthUtil.getTenantId();
-		LambdaQueryWrapper<Role> queryWrapper = Wrappers.<Role>query().lambda();
-		if (Func.isNotEmpty(roleName)) {
-			queryWrapper.like(Role::getRoleName, roleName);
-		}
-		if (Func.isNotEmpty(parentId) && parentId > 0L) {
-			queryWrapper.eq(Role::getParentId, parentId);
-		}
-		if (Func.isNotEmpty(tenantId)) {
-			queryWrapper.eq(Role::getTenantId, tenantId);
-		}
-		List<Role> roleList = baseMapper.selectList(queryWrapper);
-		return RoleWrapper.build().listNodeVO(roleList);
-	}
-
-	@Override
-	public boolean removeRole(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Role>query().lambda().in(Role::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/StrategyServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/StrategyServiceImpl.java
deleted file mode 100644
index 15a6b43..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/StrategyServiceImpl.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.Strategy;
-import org.springblade.system.mapper.StrategyMapper;
-import org.springblade.system.service.IStrategyService;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 瀵嗙爜绛栫暐(Strategy)琛ㄦ湇鍔″疄鐜扮被
- *
- * @author makejava
- * @since 2023-03-20 15:25:05
- */
-@Service
-public class StrategyServiceImpl extends ServiceImpl<StrategyMapper, Strategy> implements IStrategyService {
-
-	@Resource
-	private StrategyMapper strategyMapper;
-
-	/**
-	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
-	 *
-	 * @param id 涓婚敭
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	@Override
-	public Strategy queryById(String id) {
-		return this.getById(id);
-	}
-
-	/**
-	 * 鏌ヨ榛樿瀵嗙爜绛栫暐
-	 * @return
-	 */
-	@Override
-	public Strategy queryByIsDefault() {
-		return this.strategyMapper.queryByIsDefault();
-	}
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param query 鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@Override
-	public PageImpl<Strategy> queryAllByPage(Query query) {
-		Page<Strategy> strategyPage = new Page<>(query.getCurrent(), query.getSize());
-		return new PageImpl<>(this.strategyMapper.queryAllByPage(strategyPage));
-	}
-
-	/**
-	 * 鏂板鏁版嵁鎴栬�呬慨鏀规暟鎹�
-	 *
-	 * @param strategy 瀹炰緥瀵硅薄
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	@Override
-	public boolean submit(Strategy strategy) {
-		//鍒ゆ柇鏄惁鎼哄甫id
-		if(Func.isEmpty(strategy.getId())){
-			//鎵ц鏂板
-			Strategy dbstrategy = this.getOne(Wrappers.<Strategy>query().lambda()
-				.eq(Strategy::getStrategyName, strategy.getStrategyName()));
-			//濡傛灉鏁版嵁搴撲腑瀛樺湪杩欐潯缁勫悎鍚嶇О鐨勮褰曠洿鎺ヨ繑鍥�
-			if(!Func.isEmpty(dbstrategy)){
-				throw new ServiceException("璇ュ瘑鐮佺瓥鐣ュ凡瀛樺湪!");
-			}
-			//濡傛灉褰撳墠鏂板璁剧疆涓洪粯璁ゅ瘑鐮佺瓥鐣ワ紝闇�瑕佸皢宸插瓨鍦ㄩ粯璁ゅ瘑鐮佺瓥鐣ヤ慨鏀逛负闈為粯璁�
-			if(strategy.getIsDefault().equals("1") || strategy.getIsDefault() == 1){
-				this.update(Wrappers.<Strategy>update().lambda()
-					.set(Strategy::getIsDefault, CommonConstant.NOT_SEALED_ID)
-					.eq(Strategy::getIsDefault, CommonConstant.DATA_SCOPE_CATEGORY));
-			}
-			if(strategy.getRequiredType() > 0){
-				throw new ServiceException("蹇呭~绉嶇被涓嶈兘灏忎簬绛変簬0!");
-			}
-			if(strategy.getRequiredType() > strategy.getCombinationIds().split(",").length){
-				throw new ServiceException("蹇呭~绉嶇被涓嶈兘澶т簬鎵�閫夋嫨鐨勫瘑鐮佺粍鍚堟柟寮忕殑涓暟!");
-			}
-			if(strategy.getMaxPwdLen() > strategy.getMinPwdLen()){
-				throw new ServiceException("瀵嗙爜鏈�澶ч暱搴︿笉鑳藉皬浜庢渶灏忛暱搴�!");
-			}
-			if(strategy.getMinPwdLen() < strategy.getCombinationIds().split(",").length || strategy.getMaxPwdLen() < strategy.getCombinationIds().split(",").length){
-				throw new ServiceException("瀵嗙爜鏈�灏忛暱搴︿笉鑳藉皬浜庣瀵嗙瓥鐣ョ殑鍊�!");
-			}
-			if(Func.isEmpty(strategy.getCreateTime())){
-				strategy.setCreateTime(new Date());
-			}
-			if(Func.isEmpty(strategy.getUpdateTime())){
-				strategy.setUpdateTime(new Date());
-			}
-			boolean temp = super.saveOrUpdate(strategy);
-			return temp;
-		}else {
-			//濡傛灉褰撳墠淇敼璁剧疆涓洪粯璁ゅ瘑鐮佺瓥鐣ワ紝闇�瑕佸皢宸插瓨鍦ㄩ粯璁ゅ瘑鐮佺瓥鐣ヤ慨鏀逛负闈為粯璁�
-			if(strategy.getIsDefault().equals("1") || strategy.getIsDefault() == 1){
-				this.update(Wrappers.<Strategy>update().lambda()
-					.set(Strategy::getIsDefault,CommonConstant.NOT_SEALED_ID)
-					.eq(Strategy::getIsDefault,CommonConstant.DATA_SCOPE_CATEGORY));
-			}else {
-				if(Func.isEmpty(queryByIsDefault())){
-					throw new ServiceException("榛樿瀵嗙爜绛栫暐蹇呴』鏈変笖浠呮湁涓�鏉�!");
-				}
-			}
-			if(Func.isEmpty(strategy.getUpdateTime())){
-				strategy.setUpdateTime(new Date());
-			}
-			CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-			return super.saveOrUpdate(strategy);
-		}
-	}
-
-	/**
-	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鏄惁鎴愬姛
-	 */
-	@Override
-	public boolean deleteByIds(List<String> ids) {
-		Strategy strategy = this.getOne(Wrappers.<Strategy>query().lambda()
-			.in(Strategy::getId,ids)
-			.eq(Strategy::getIsDefault, CommonConstant.DATA_SCOPE_CATEGORY));
-		//濡傛灉瀛樺湪榛樿绛栫暐鐨刬d锛屽氨涓嶈兘鐩存帴鍒犻櫎缁欏嚭鎻愮ず
-		if(!Func.isEmpty(strategy)){
-			throw new ServiceException("涓嶈兘鍒犻櫎榛樿瀵嗙爜绛栫暐!");
-		}
-		boolean tenantTemp = this.removeBatchByIds(ids);
-		return tenantTemp;
-	}
-
-	/**
-	 * 閫氳繃绉熸埛id浠ュ強鐢ㄦ埛鍚嶆煡璇㈠瘑鐮佺瓥鐣�
-	 * @param tenantId
-	 * @param name
-	 * @return
-	 */
-	@Override
-	public Strategy queryByNameAndTenantId(String tenantId, String name) {
-		Strategy strategy = this.strategyMapper.queryByNameAndTenantId(tenantId,name);
-		if(!Func.isEmpty(strategy)){
-			return strategy;
-		}
-		return queryByIsDefault();
-	}
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐
-	 * @param userId
-	 * @return
-	 */
-	@Override
-	public Strategy queryByUserId(Long userId) {
-		Strategy strategy = this.strategyMapper.queryByUserId(userId);
-		if(!Func.isEmpty(strategy)){
-			return strategy;
-		}
-		return queryByIsDefault();
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java
deleted file mode 100644
index dd222e8..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.system.entity.TenantPackage;
-import org.springblade.system.mapper.TenantPackageMapper;
-import org.springblade.system.service.ITenantPackageService;
-import org.springframework.stereotype.Service;
-
-/**
- * 绉熸埛浜у搧琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author BladeX
- */
-@Service
-public class TenantPackageServiceImpl extends BaseServiceImpl<TenantPackageMapper, TenantPackage> implements ITenantPackageService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
deleted file mode 100644
index 8d989ce..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.RequiredArgsConstructor;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.tenant.TenantId;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.system.cache.ParamCache;
-import org.springblade.system.entity.*;
-import org.springblade.system.mapper.TenantMapper;
-import org.springblade.system.service.*;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.enums.UserEnum;
-import org.springblade.system.user.feign.IUserClient;
-import org.springblade.system.vo.TenantVO;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static org.springblade.common.constant.TenantConstant.*;
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-@RequiredArgsConstructor
-public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> implements ITenantService {
-
-	private final TenantId tenantId;
-	private final IRoleService roleService;
-	private final IMenuService menuService;
-	private final IDeptService deptService;
-	private final IPostService postService;
-	private final IRoleMenuService roleMenuService;
-	private final IDictBizService dictBizService;
-	private final IUserClient userClient;
-	private final IStrategyService strategyService;
-	private final IUserPwdstrategyService userPwdstrategyService;
-
-	/**
-	 * 鑾峰彇鏄惁鍏佽鑷鎺у埗涓夊憳鏄惁寮�鍚�
-	 */
-	@Value("${ssa.ssa-enable}")
-	private Boolean ssaEnable;
-	/**
-	 * 鑾峰彇榛樿涓夊憳绠$悊鍛樼殑鍚嶇О
-	 */
-	@Value("#{'${ssa.ssa-names}'.split(',')}")
-	private List<String> ssaNames;
-	/**
-	 * 涓夊憳绠$悊鑿滃崟閰嶇疆
-	 */
-	@Value("#{'${ssa.sys-menus}'.split(',')}")
-	private List<String> sysMenus;
-	@Value("#{'${ssa.sec-menus}'.split(',')}")
-	private List<String> secMenus;
-	@Value("#{'${ssa.audit-menus}'.split(',')}")
-	private List<String> auditMenus;
-
-	@Override
-	public IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant) {
-		return page.setRecords(baseMapper.selectTenantPage(page, tenant));
-	}
-
-	@Override
-	public Tenant getByTenantId(String tenantId) {
-		return getOne(Wrappers.<Tenant>query().lambda().eq(Tenant::getTenantId, tenantId));
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean submitTenant(TenantVO tenant) {
-		if (Func.isEmpty(tenant.getId())) {
-			// 鑾峰彇鍒版湭鍒犻櫎绉熸埛鎬绘暟锛岀敓鎴愭柊鐨勭鎴穒d
-			List<Tenant> tenants = baseMapper.selectList(Wrappers.<Tenant>query().lambda().eq(Tenant::getIsDeleted, BladeConstant.DB_NOT_DELETED));
-			List<String> codes = tenants.stream().map(Tenant::getTenantId).collect(Collectors.toList());
-			String tenantId = getTenantId(codes);
-			tenant.setTenantId(tenantId);
-			// 閰嶇疆涓篺alse锛屽苟涓斿墠绔紶杈撶殑鍙傛暟涓�1(鏈�夋嫨寮�鍚�)灏变笉闇�瑕佸垱寤轰笁鍛�
-			if(!this.ssaEnable && tenant.getSsaEnable()==1){
-				// 涓嶅紑鍚笁鍛樼鐞嗘椂鐩存帴鍒涘缓涓�涓渶楂樻潈闄愮殑绠$悊鍛�
-				Role role = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瓒呯骇绠$悊鍛�",1,"admin",BladeConstant.DB_NOT_DELETED);
-				roleService.save(role);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄�
-				saveRoleMenus(role, MENU_CODES);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂�
-				Dept dept = generateDept(tenantId, tenant);
-				deptService.save(dept);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣�
-				Post postInfo = generatePost(tenantId, 1, "admin", "绠$悊鍛�", 1);
-				postService.save(postInfo);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏�
-				LinkedList<DictBiz> dictBizs = new LinkedList<>();
-				List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
-				dictBizService.saveBatch(dictBizList);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤
-				User user = generateUser(tenantId, role, dept, postInfo);
-				// 鍏堜繚瀛樼鎴�
-				boolean temp = super.saveOrUpdate(tenant);
-				// 鍒涘缓鐢ㄦ埛
-				R<Boolean> result = userClient.saveUser(user);
-				//鐢熸垚鐢ㄦ埛瀵嗙爜绛栫暐绠$悊璁板綍
-				if (!result.isSuccess()) {
-					throw new ServiceException(result.getMsg());
-				}
-				return temp;
-			}else {
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁よ鑹�
-				List<Role> roles = new ArrayList<>();
-				Role roleSys = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"绯荤粺绠$悊鍛�",1,this.ssaNames.get(0),BladeConstant.DB_NOT_DELETED);
-				Role roleSec = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹夊叏绠$悊鍛�",2,this.ssaNames.get(1),BladeConstant.DB_NOT_DELETED);
-				Role roleAudit = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹¤绠$悊鍛�",3,this.ssaNames.get(2),BladeConstant.DB_NOT_DELETED);
-				roles.add(roleSys);
-				roles.add(roleSec);
-				roles.add(roleAudit);
-				roleService.saveBatch(roles);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄�
-				saveRoleMenus(roleSys,this.sysMenus); //绯荤粺绠$悊鍛樿鑹茶彍鍗曟潈闄�
-				saveRoleMenus(roleSec,this.secMenus); //瀹夊叏绠$悊鍛樿鑹茶彍鍗曟潈闄�
-				saveRoleMenus(roleAudit,this.auditMenus); //瀹¤绠$悊鍛樿鑹茶彍鍗曟潈闄�
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂�
-				Dept dept = generateDept(tenantId, tenant);
-				deptService.save(dept);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣�
-				Post postSys = generatePost(tenantId, 1, this.ssaNames.get(0), "绯荤粺绠$悊鍛�", 1);
-				Post postSec = generatePost(tenantId,1,this.ssaNames.get(1),"瀹夊叏绠$悊鍛�",4);
-				Post postAudit = generatePost(tenantId,1,this.ssaNames.get(2),"瀹¤绠$悊鍛�",5);
-				postService.saveBatch(Arrays.asList(postSys,postSec,postAudit));
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏�
-				LinkedList<DictBiz> dictBizs = new LinkedList<>();
-				List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
-				dictBizService.saveBatch(dictBizList);
-				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴�
-				User userSys = generateUser(tenantId, roleSys, dept, postSys);
-				User userSec = generateUser(tenantId,roleSec,dept,postSec);
-				User userAudit = generateUser(tenantId,roleAudit,dept,postAudit);
-				// 鍏堜繚瀛樼鎴�
-				boolean temp = super.saveOrUpdate(tenant);
-				// 鍒涘缓鐢ㄦ埛
-				R<Boolean> result = userClient.saveUserList(Arrays.asList(userSys,userSec,userAudit));
-				if (!result.isSuccess()) {
-					throw new ServiceException(result.getMsg());
-				}
-				return temp;
-			}
-		} else {
-			CacheUtil.clear(SYS_CACHE, tenant.getTenantId());
-			return super.saveOrUpdate(tenant);
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean removeTenant(List<Long> ids) {
-		List<String> tenantIds = this.list(Wrappers.<Tenant>query().lambda().in(Tenant::getId, ids))
-			.stream().map(tenant -> Func.toStr(tenant.getTenantId())).distinct().collect(Collectors.toList());
-		CacheUtil.clear(SYS_CACHE, tenantIds);
-		if (tenantIds.contains(BladeConstant.ADMIN_TENANT_ID)) {
-			throw new ServiceException("涓嶅彲鍒犻櫎绠$悊绉熸埛!");
-		}
-		boolean tenantTemp = this.deleteLogic(ids);
-		R<Boolean> result = userClient.removeUser(StringUtil.join(tenantIds));
-		if (!result.isSuccess()) {
-			throw new ServiceException(result.getMsg());
-		}
-		return tenantTemp;
-	}
-
-	@Override
-	public List<Map<String,Object>> selectMaps(){
-		List<Map<String, Object>> maps = listMaps(new QueryWrapper<Tenant>().select("TENANT_ID", "TENANT_NAME"));
-		return maps;
-	}
-
-	@Override
-	public boolean findIsOpen() {
-		return this.ssaEnable;
-	}
-
-	/**
-	 * 鍒涘缓绉熸埛涓嬬殑榛樿宀椾綅
-	 * @param tenantId
-	 * @param sort
-	 */
-	private Post generatePost(String tenantId,Integer categ,String postCode,String postName,Integer sort){
-		Post post = new Post();
-		post.setTenantId(tenantId);
-		post.setCategory(categ);
-		post.setPostCode(postCode);
-		post.setPostName(postName);
-		post.setSort(sort);
-		return post;
-	}
-
-	/**
-	 * 鍒涘缓榛樿鐢ㄦ埛锛屽苟杩涜鐩稿叧鏉冮檺璁剧疆
-	 */
-	private User generateUser(String tenantId, Role role, Dept dept, Post post){
-		User user = new User();
-		user.setTenantId(tenantId);
-		user.setName(role.getRoleAlias());
-		user.setRealName(role.getRoleName());
-		user.setAccount(role.getRoleAlias());
-		user.setStrategyUpdateStatus(CommonConstant.TOP_PARENT_ID);
-		user.setPwdUpdateTime(new Date());
-		// 鑾峰彇鍙傛暟閰嶇疆鐨勫瘑鐮�
-		String password = Func.toStr(ParamCache.getValue(PASSWORD_KEY), DEFAULT_PASSWORD);
-		user.setPassword(password);
-		user.setRoleId(String.valueOf(role.getId()));
-		user.setDeptId(String.valueOf(dept.getId()));
-		user.setPostId(String.valueOf(post.getId()));
-		user.setBirthday(new Date());
-		user.setSex(1);
-		user.setUserType(UserEnum.WEB.getCategory());
-		user.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return user;
-	}
-
-	/**
-	 * 淇濆瓨鐢ㄦ埛瀵瑰簲鐨勫叧鑱斾俊鎭�
-	 * @param role
-	 */
-	private void saveRoleMenus(Role role,List<String> stringMenus){
-		LinkedList<Menu> userMenus = new LinkedList<>();
-		// 鑾峰彇鍙傛暟閰嶇疆鐨勯粯璁よ彍鍗曢泦鍚堬紝閫楀彿闅斿紑
-		//List<String> menuCodes = Func.toStrList(ParamCache.getValue(ACCOUNT_MENU_CODE_KEY));
-		List<Menu> menus = getMenus((stringMenus), userMenus);
-		List<RoleMenu> roleMenus = new ArrayList<>();
-		//鍒涘缓鎵�鏈夎彍鍗曡鑹插叧鑱斿璞�
-		menus.forEach(menu -> {
-			roleMenus.add(new RoleMenu(menu.getId(),role.getId()));
-		});
-		roleMenuService.saveBatch(roleMenus);
-	}
-
-	/**
-	 * 鍒涘缓榛樿閮ㄩ棬
-	 * @param tenantId
-	 * @param tenant
-	 */
-	private Dept generateDept(String tenantId,Tenant tenant){
-		Dept dept = new Dept();
-		dept.setTenantId(tenantId);
-		dept.setParentId(BladeConstant.TOP_PARENT_ID);
-		dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
-		dept.setDeptName(tenant.getTenantName());
-		dept.setFullName(tenant.getTenantName());
-		dept.setDeptCategory(1);
-		dept.setSort(2);
-		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return dept;
-	}
-
-	private String getTenantId(List<String> codes) {
-		String code = tenantId.generate();
-		if (codes.contains(code)) {
-			return getTenantId(codes);
-		}
-		return code;
-	}
-
-	private List<Menu> getMenus(List<String> codes, LinkedList<Menu> menus) {
-		codes.forEach(code -> {
-			Menu menu = menuService.getOne(Wrappers.<Menu>query().lambda().eq(Menu::getCode, code).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED));
-			if (menu != null) {
-				menus.add(menu);
-				recursionMenu(menu.getId(), menus);
-			}
-		});
-		return menus;
-	}
-
-	private void recursionMenu(Long parentId, LinkedList<Menu> menus) {
-		List<Menu> menuList = menuService.list(Wrappers.<Menu>query().lambda().eq(Menu::getParentId, parentId).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED));
-		menus.addAll(menuList);
-		menuList.forEach(menu -> recursionMenu(menu.getId(), menus));
-	}
-
-	private List<DictBiz> getDictBizs(String tenantId, LinkedList<DictBiz> dictBizs) {
-		List<DictBiz> dictBizList = dictBizService.list(Wrappers.<DictBiz>query().lambda().eq(DictBiz::getParentId, BladeConstant.TOP_PARENT_ID).eq(DictBiz::getIsDeleted, BladeConstant.DB_NOT_DELETED));
-		dictBizList.forEach(dictBiz -> {
-			Long oldParentId = dictBiz.getId();
-			Long newParentId = IdWorker.getId();
-			dictBiz.setId(newParentId);
-			dictBiz.setTenantId(tenantId);
-			dictBizs.add(dictBiz);
-			recursionDictBiz(tenantId, oldParentId, newParentId, dictBizs);
-		});
-		return dictBizs;
-	}
-
-	private void recursionDictBiz(String tenantId, Long oldParentId, Long newParentId, LinkedList<DictBiz> dictBizs) {
-		List<DictBiz> dictBizList = dictBizService.list(Wrappers.<DictBiz>query().lambda().eq(DictBiz::getParentId, oldParentId).eq(DictBiz::getIsDeleted, BladeConstant.DB_NOT_DELETED));
-		dictBizList.forEach(dictBiz -> {
-			Long oldSubParentId = dictBiz.getId();
-			Long newSubParentId = IdWorker.getId();
-			dictBiz.setId(newSubParentId);
-			dictBiz.setTenantId(tenantId);
-			dictBiz.setParentId(newParentId);
-			dictBizs.add(dictBiz);
-			recursionDictBiz(tenantId, oldSubParentId, newSubParentId, dictBizs);
-		});
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java
deleted file mode 100644
index 134252c..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.system.entity.TopMenu;
-import org.springblade.system.entity.TopMenuSetting;
-import org.springblade.system.mapper.TopMenuMapper;
-import org.springblade.system.service.ITopMenuService;
-import org.springblade.system.service.ITopMenuSettingService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.validation.constraints.NotEmpty;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 椤堕儴鑿滃崟琛� 鏈嶅姟瀹炵幇绫�
- *
- * @author BladeX
- */
-@Service
-@AllArgsConstructor
-public class TopMenuServiceImpl extends BaseServiceImpl<TopMenuMapper, TopMenu> implements ITopMenuService {
-
-	private final ITopMenuSettingService topMenuSettingService;
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean grant(@NotEmpty List<Long> topMenuIds, @NotEmpty List<Long> menuIds) {
-		// 鍒犻櫎椤堕儴鑿滃崟閰嶇疆鐨勮彍鍗曢泦鍚�
-		topMenuSettingService.remove(Wrappers.<TopMenuSetting>update().lambda().in(TopMenuSetting::getTopMenuId, topMenuIds));
-		// 缁勮閰嶇疆
-		List<TopMenuSetting> menuSettings = new ArrayList<>();
-		topMenuIds.forEach(topMenuId -> menuIds.forEach(menuId -> {
-			TopMenuSetting menuSetting = new TopMenuSetting();
-			menuSetting.setTopMenuId(topMenuId);
-			menuSetting.setMenuId(menuId);
-			menuSettings.add(menuSetting);
-		}));
-		// 鏂板閰嶇疆
-		topMenuSettingService.saveBatch(menuSettings);
-		return true;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java
deleted file mode 100644
index 6c61257..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.system.entity.TopMenuSetting;
-import org.springblade.system.mapper.TopMenuSettingMapper;
-import org.springblade.system.service.ITopMenuSettingService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class TopMenuSettingServiceImpl extends ServiceImpl<TopMenuSettingMapper, TopMenuSetting> implements ITopMenuSettingService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/UserPwdstrategyServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/UserPwdstrategyServiceImpl.java
deleted file mode 100644
index c277d31..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/UserPwdstrategyServiceImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.RequiredArgsConstructor;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.system.entity.UserPwdstrategy;
-import org.springblade.system.mapper.UserPwdstrategyMapper;
-import org.springblade.system.service.IUserPwdstrategyService;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.feign.IUserClient;
-import org.springblade.system.vo.UserPwdstrategyVO;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 鐢ㄦ埛瀵嗙爜绛栫暐绠$悊琛�(UserPwdstrategy)琛ㄦ湇鍔″疄鐜扮被
- *
- * @author makejava
- * @since 2023-03-22 15:24:55
- */
-@Service
-@RequiredArgsConstructor
-public class UserPwdstrategyServiceImpl extends ServiceImpl<UserPwdstrategyMapper,UserPwdstrategy> implements IUserPwdstrategyService {
-
-	@Resource
-	private UserPwdstrategyMapper userPwdstrategyMapper;
-
-	/**
-	 * user鏈嶅姟璋冪敤绫�
-	 */
-	private final IUserClient userClient;
-
-	@Override
-	public UserPwdstrategy queryById(Long id) {
-		return this.getById(id);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 * @param userPwdstrategyVO 瀹炰緥瀵硅薄
-	 * @return
-	 */
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public Boolean submit(UserPwdstrategyVO userPwdstrategyVO) {
-		//鍏堝垹闄�
-		int eft = this.userPwdstrategyMapper.deleteByUserIds(userPwdstrategyVO.getUserIds());
-		//鍦ㄦ柊澧�
-		List<UserPwdstrategy> userPwdstrategyList = new ArrayList<>();
-		userPwdstrategyVO.getUserIds().forEach(id->{
-			boolean temp = userPwdstrategyList.add(new UserPwdstrategy(id, userPwdstrategyVO.getPwdstrategyId()));
-			if(temp){
-				//瀵嗙爜绛栫暐鏀瑰姩鎴愬姛涔嬪悗淇敼鐢ㄦ埛鐘舵��
-				User user = new User();
-				user.setId(id);
-				user.setStrategyUpdateStatus(CommonConstant.TOP_PARENT_ID);
-				userClient.updateUser(user);
-			}
-		});
-		return this.saveBatch(userPwdstrategyList);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ValueRangeServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ValueRangeServiceImpl.java
deleted file mode 100644
index 69eaa0b..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ValueRangeServiceImpl.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.springblade.system.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.entity.ValueRange;
-import org.springblade.system.mapper.ValueRangeMapper;
-import org.springblade.system.service.IValueRangeService;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
-
-/**
- * (PlSysValueRange)琛ㄦ湇鍔″疄鐜扮被
- *
- * @author makejava
- * @since 2023-03-20 15:23:59
- */
-@Service
-public class ValueRangeServiceImpl extends ServiceImpl<ValueRangeMapper,ValueRange> implements IValueRangeService {
-
-	@Resource
-	private ValueRangeMapper valueRangeMapper;
-
-	/**
-	 * 鍏ㄦ煡璇�
-	 *
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@Override
-	public List<ValueRange> queryByAll() {
-		return valueRangeMapper.selectList(null);
-	}
-
-	/**
-	 * 鍒嗛〉鏌ヨ
-	 *
-	 * @param valueRange 绛涢�夋潯浠�
-	 * @param pageRequest     鍒嗛〉瀵硅薄
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@Override
-	public Page<ValueRange> queryByPage(ValueRange valueRange, PageRequest pageRequest) {
-		long total = this.valueRangeMapper.count(valueRange);
-		return new PageImpl<>(this.valueRangeMapper.queryAllByLimit(valueRange, pageRequest), pageRequest, total);
-	}
-
-	/**
-	 * 鏂板鏁版嵁
-	 *
-	 * @param valueRange 瀹炰緥瀵硅薄
-	 * @return 瀹炰緥瀵硅薄
-	 */
-	@Override
-	public boolean submit(ValueRange valueRange) {
-		//鍒ゆ柇鏄惁鎼哄甫id
-		if(Func.isEmpty(valueRange.getId())){
-			//鏂板
-			ValueRange dbValueRange = this.getOne(Wrappers.<ValueRange>query().lambda()
-				.eq(ValueRange::getCombinationId,valueRange.getCombinationId())
-				.eq(ValueRange::getValue, valueRange.getValue()));
-			//鍚屼竴缁勫悎鏂瑰紡涓嬩笉鑳藉嚭鐜扮浉鍚岀殑鍙栧�艰寖鍥�
-			if(!Func.isEmpty(dbValueRange)){
-				throw new ServiceException("璇ョ粍鍚堟柟寮忎笅宸插瓨鍦ㄧ浉鍚屽彇鍊艰寖鍥�!");
-			}
-			if(Func.isEmpty(valueRange.getCreateTime())){
-				valueRange.setCreateTime(new Date());
-			}
-			if(Func.isEmpty(valueRange.getUpdateTime())){
-				valueRange.setUpdateTime(new Date());
-			}
-			boolean temp = saveOrUpdate(valueRange);
-			return temp;
-		}else {
-			if(Func.isEmpty(valueRange.getUpdateTime())){
-				valueRange.setUpdateTime(new Date());
-			}
-			CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-			return saveOrUpdate(valueRange);
-		}
-	}
-
-	/**
-	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
-	 *
-	 * @param ids 涓婚敭
-	 * @return 鏄惁鎴愬姛
-	 */
-	@Override
-	public boolean deleteByIds(List<String> ids) {
-		boolean tenantTemp = this.removeBatchByIds(ids);
-		return tenantTemp;
-	}
-
-	/**
-	 * 鑾峰彇鍙栧��
-	 *
-	 * @return 鏄惁鎴愬姛
-	 */
-	@Override
-	public List<String> getByAllString(List<String> combinationIds) {
-		List<String> list = valueRangeMapper.queryByCombinationIds(combinationIds);
-		return list;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java
deleted file mode 100644
index bad6600..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.entity.ApiScope;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.vo.ApiScopeVO;
-
-import java.util.Objects;
-
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class ApiScopeWrapper extends BaseEntityWrapper<ApiScope, ApiScopeVO> {
-
-	public static ApiScopeWrapper build() {
-		return new ApiScopeWrapper();
-	}
-
-	@Override
-	public ApiScopeVO entityVO(ApiScope dataScope) {
-		ApiScopeVO apiScopeVO = Objects.requireNonNull(BeanUtil.copy(dataScope, ApiScopeVO.class));
-		String scopeTypeName = DictCache.getValue(DictEnum.API_SCOPE_TYPE, dataScope.getScopeType());
-		apiScopeVO.setScopeTypeName(scopeTypeName);
-		return apiScopeVO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java
deleted file mode 100644
index 2ce546d..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.entity.DataScope;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.vo.DataScopeVO;
-
-import java.util.Objects;
-
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class DataScopeWrapper extends BaseEntityWrapper<DataScope, DataScopeVO> {
-
-	public static DataScopeWrapper build() {
-		return new DataScopeWrapper();
-	}
-
-	@Override
-	public DataScopeVO entityVO(DataScope dataScope) {
-		DataScopeVO dataScopeVO = Objects.requireNonNull(BeanUtil.copy(dataScope, DataScopeVO.class));
-		String scopeTypeName = DictCache.getValue(DictEnum.DATA_SCOPE_TYPE, dataScope.getScopeType());
-		dataScopeVO.setScopeTypeName(scopeTypeName);
-		return dataScopeVO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DeptWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DeptWrapper.java
deleted file mode 100644
index 1303f10..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DeptWrapper.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.entity.Dept;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.vo.DeptVO;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class DeptWrapper extends BaseEntityWrapper<Dept, DeptVO> {
-
-	public static DeptWrapper build() {
-		return new DeptWrapper();
-	}
-
-	@Override
-	public DeptVO entityVO(Dept dept) {
-		DeptVO deptVO = Objects.requireNonNull(BeanUtil.copy(dept, DeptVO.class));
-		if (Func.equals(dept.getParentId(), BladeConstant.TOP_PARENT_ID)) {
-			deptVO.setParentName(BladeConstant.TOP_PARENT_NAME);
-		} else {
-			Dept parent = SysCache.getDept(dept.getParentId());
-			deptVO.setParentName(parent.getDeptName());
-		}
-		String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
-		deptVO.setDeptCategoryName(category);
-		return deptVO;
-	}
-
-
-	public List<DeptVO> listNodeVO(List<Dept> list) {
-		List<DeptVO> collect = list.stream().map(dept -> {
-			DeptVO deptVO = BeanUtil.copy(dept, DeptVO.class);
-			String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
-			Objects.requireNonNull(deptVO).setDeptCategoryName(category);
-			return deptVO;
-		}).collect(Collectors.toList());
-		return ForestNodeMerger.merge(collect);
-	}
-
-	public List<DeptVO> listNodeLazyVO(List<DeptVO> list) {
-		List<DeptVO> collect = list.stream().peek(dept -> {
-			String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
-			Objects.requireNonNull(dept).setDeptCategoryName(category);
-		}).collect(Collectors.toList());
-		return ForestNodeMerger.merge(collect);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java
deleted file mode 100644
index f921da0..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.DictBizCache;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.vo.DictBizVO;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class DictBizWrapper extends BaseEntityWrapper<DictBiz, DictBizVO> {
-
-	public static DictBizWrapper build() {
-		return new DictBizWrapper();
-	}
-
-	@Override
-	public DictBizVO entityVO(DictBiz dict) {
-		DictBizVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictBizVO.class));
-		if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
-			dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
-		} else {
-			DictBiz parent = DictBizCache.getById(dict.getParentId());
-			dictVO.setParentName(parent.getDictValue());
-		}
-		return dictVO;
-	}
-
-	public List<DictBizVO> listNodeVO(List<DictBiz> list) {
-		List<DictBizVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictBizVO.class)).collect(Collectors.toList());
-		return ForestNodeMerger.merge(collect);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictWrapper.java
deleted file mode 100644
index c1c0514..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictWrapper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.entity.Dict;
-import org.springblade.system.vo.DictVO;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class DictWrapper extends BaseEntityWrapper<Dict, DictVO> {
-
-	public static DictWrapper build() {
-		return new DictWrapper();
-	}
-
-	@Override
-	public DictVO entityVO(Dict dict) {
-		DictVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictVO.class));
-		if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
-			dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
-		} else {
-			Dict parent = DictCache.getById(dict.getParentId());
-			dictVO.setParentName(parent.getDictValue());
-		}
-		return dictVO;
-	}
-
-	public List<DictVO> listNodeVO(List<Dict> list) {
-		List<DictVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictVO.class)).collect(Collectors.toList());
-		return ForestNodeMerger.merge(collect);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java
deleted file mode 100644
index 4f3ea79..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.entity.Menu;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.vo.MenuVO;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class MenuWrapper extends BaseEntityWrapper<Menu, MenuVO> {
-
-	public static MenuWrapper build() {
-		return new MenuWrapper();
-	}
-
-	@Override
-	public MenuVO entityVO(Menu menu) {
-		MenuVO menuVO = Objects.requireNonNull(BeanUtil.copy(menu, MenuVO.class));
-		if (Func.equals(menu.getParentId(), BladeConstant.TOP_PARENT_ID)) {
-			menuVO.setParentName(BladeConstant.TOP_PARENT_NAME);
-		} else {
-			Menu parent = SysCache.getMenu(menu.getParentId());
-			menuVO.setParentName(parent.getName());
-		}
-		String category = DictCache.getValue(DictEnum.MENU_CATEGORY, Func.toInt(menuVO.getCategory()));
-		String action = DictCache.getValue(DictEnum.BUTTON_FUNC, Func.toInt(menuVO.getAction()));
-		String open = DictCache.getValue(DictEnum.YES_NO, Func.toInt(menuVO.getIsOpen()));
-		menuVO.setCategoryName(category);
-		menuVO.setActionName(action);
-		menuVO.setIsOpenName(open);
-		return menuVO;
-	}
-
-	public List<MenuVO> listNodeVO(List<Menu> list) {
-		List<MenuVO> collect = list.stream().map(menu -> BeanUtil.copy(menu, MenuVO.class)).collect(Collectors.toList());
-		return ForestNodeMerger.merge(collect);
-	}
-
-	public List<MenuVO> listNodeLazyVO(List<MenuVO> list) {
-		return ForestNodeMerger.merge(list);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/PostWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/PostWrapper.java
deleted file mode 100644
index edeb175..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/PostWrapper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.entity.Post;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.vo.PostVO;
-
-import java.util.Objects;
-
-/**
- * 宀椾綅琛ㄥ寘瑁呯被,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class PostWrapper extends BaseEntityWrapper<Post, PostVO> {
-
-	public static PostWrapper build() {
-		return new PostWrapper();
-	}
-
-	@Override
-	public PostVO entityVO(Post post) {
-		PostVO postVO = Objects.requireNonNull(BeanUtil.copy(post, PostVO.class));
-		String categoryName = DictCache.getValue(DictEnum.POST_CATEGORY, post.getCategory());
-		postVO.setCategoryName(categoryName);
-		return postVO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RegionWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RegionWrapper.java
deleted file mode 100644
index d78c82c..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RegionWrapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.system.cache.RegionCache;
-import org.springblade.system.entity.Region;
-import org.springblade.system.vo.RegionVO;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class RegionWrapper extends BaseEntityWrapper<Region, RegionVO> {
-
-	public static RegionWrapper build() {
-		return new RegionWrapper();
-	}
-
-	@Override
-	public RegionVO entityVO(Region region) {
-		RegionVO regionVO = Objects.requireNonNull(BeanUtil.copy(region, RegionVO.class));
-		Region parentRegion = RegionCache.getByCode(region.getParentCode());
-		regionVO.setParentName(parentRegion.getName());
-		return regionVO;
-	}
-
-	public List<RegionVO> listNodeLazyVO(List<RegionVO> list) {
-		return ForestNodeMerger.merge(list);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RoleWrapper.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RoleWrapper.java
deleted file mode 100644
index 33050f0..0000000
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RoleWrapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.entity.Role;
-import org.springblade.system.vo.RoleVO;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class RoleWrapper extends BaseEntityWrapper<Role, RoleVO> {
-
-	public static RoleWrapper build() {
-		return new RoleWrapper();
-	}
-
-	@Override
-	public RoleVO entityVO(Role role) {
-		RoleVO roleVO = Objects.requireNonNull(BeanUtil.copy(role, RoleVO.class));
-		if (Func.equals(role.getParentId(), BladeConstant.TOP_PARENT_ID)) {
-			roleVO.setParentName(BladeConstant.TOP_PARENT_NAME);
-		} else {
-			Role parent = SysCache.getRole(role.getParentId());
-			roleVO.setParentName(parent.getRoleName());
-		}
-		return roleVO;
-	}
-
-
-	public List<RoleVO> listNodeVO(List<Role> list) {
-		List<RoleVO> collect = list.stream().map(this::entityVO).collect(Collectors.toList());
-		return ForestNodeMerger.merge(collect);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/pom.xml b/Source/BladeX/blade-service/blade-user/pom.xml
deleted file mode 100644
index f9e3259..0000000
--- a/Source/BladeX/blade-service/blade-user/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>blade-service</artifactId>
-        <groupId>org.springblade</groupId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-user</artifactId>
-    <name>${project.artifactId}</name>
-    <version>${bladex.project.version}</version>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-core-boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-excel</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-swagger</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-user-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-system-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>cn.easyproject</groupId>
-            <artifactId>orai18n</artifactId>
-            <version>${orai18n.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <username>${docker.username}</username>
-                    <password>${docker.password}</password>
-                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                    <tag>${project.version}</tag>
-                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                    <buildArgs>
-                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/UserApplication.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/UserApplication.java
deleted file mode 100644
index 903b57d..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/UserApplication.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
-
-/**
- * 鐢ㄦ埛鍚姩鍣�
- *
- * @author Chill
- */
-@BladeCloudApplication
-public class UserApplication {
-
-	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_USER_NAME, UserApplication.class, args);
-	}
-
-}
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
deleted file mode 100644
index 48102f9..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.controller;
-
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.common.cache.CacheNames;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.excel.util.ExcelUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.excel.UserExcel;
-import org.springblade.system.user.excel.UserImporter;
-import org.springblade.system.user.service.IUserService;
-import org.springblade.system.user.vo.UserVO;
-import org.springblade.system.user.wrapper.UserWrapper;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@RequestMapping
-@AllArgsConstructor
-public class UserController {
-
-	private final IUserService userService;
-	private final BladeRedis bladeRedis;
-
-	/**
-	 * 鏌ヨ鍗曟潯
-	 */
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆id")
-	@GetMapping("/detail")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<UserVO> detail(User user) {
-		User detail = userService.getOne(Condition.getQueryWrapper(user));
-		return R.data(UserWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鏌ヨ鍗曟潯
-	 */
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆id")
-	@GetMapping("/info")
-	public R<UserVO> info(BladeUser user) {
-		User detail = userService.getById(user.getUserId());
-		return R.data(UserWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鐢ㄦ埛鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "account", value = "璐﹀彿鍚�", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "realName", value = "濮撳悕", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆account鍜宺ealName")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<IPage<UserVO>> list(@ApiIgnore @RequestParam Map<String, Object> user, Query query, BladeUser bladeUser) {
-		QueryWrapper<User> queryWrapper = Condition.getQueryWrapper(user, User.class);
-		IPage<User> pages = userService.page(Condition.getPage(query), (!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper);
-		return R.data(UserWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 鑷畾涔夌敤鎴峰垪琛�
-	 */
-	@GetMapping("/page")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "account", value = "璐﹀彿鍚�", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "realName", value = "濮撳悕", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆account鍜宺ealName")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<IPage<UserVO>> page(@ApiIgnore User user, Query query, Long deptId, BladeUser bladeUser) {
-		IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()));
-		return R.data(UserWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆User")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R submit(@Valid @RequestBody User user) {
-		CacheUtil.clear(USER_CACHE);
-		return R.status(userService.submit(user));
-	}
-
-	/**
-	 * 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆User")
-	public R update(@Valid @RequestBody User user) {
-		CacheUtil.clear(USER_CACHE);
-		return R.status(userService.updateUser(user));
-	}
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆id闆嗗悎")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R remove(@RequestParam String ids) {
-		CacheUtil.clear(USER_CACHE);
-		return R.status(userService.removeUser(ids));
-	}
-
-	/**
-	 * 璁剧疆鑿滃崟鏉冮檺
-	 */
-	@PostMapping("/grant")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鏉冮檺璁剧疆", notes = "浼犲叆roleId闆嗗悎浠ュ強menuId闆嗗悎")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R grant(@ApiParam(value = "userId闆嗗悎", required = true) @RequestParam String userIds,
-				   @ApiParam(value = "roleId闆嗗悎", required = true) @RequestParam String roleIds) {
-		boolean temp = userService.grant(userIds, roleIds);
-		return R.status(temp);
-	}
-
-	/**
-	 * 瀵嗙爜閲嶅埗
-	 */
-	@PostMapping("/reset-password")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鍒濆鍖栧瘑鐮�", notes = "浼犲叆userId闆嗗悎")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R resetPassword(@ApiParam(value = "userId闆嗗悎", required = true) @RequestParam String userIds) {
-		boolean temp = userService.resetPassword(userIds);
-		return R.status(temp);
-	}
-
-	/**
-	 * 淇敼瀵嗙爜
-	 */
-	@PostMapping("/update-password")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "淇敼瀵嗙爜", notes = "浼犲叆瀵嗙爜")
-	public R updatePassword(BladeUser user, @ApiParam(value = "鏃у瘑鐮�", required = true) @RequestParam String oldPassword,
-							@ApiParam(value = "鏂板瘑鐮�", required = true) @RequestParam String newPassword,
-							@ApiParam(value = "鏂板瘑鐮�", required = true) @RequestParam String newPassword1) {
-		boolean temp = userService.updatePassword(user.getUserId(), oldPassword, newPassword, newPassword1);
-		return R.status(temp);
-	}
-
-	/**
-	 * 淇敼鍩烘湰淇℃伅
-	 */
-	@PostMapping("/update-info")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "淇敼鍩烘湰淇℃伅", notes = "浼犲叆User")
-	public R updateInfo(@Valid @RequestBody User user) {
-		CacheUtil.clear(USER_CACHE);
-		return R.status(userService.updateUserInfo(user));
-	}
-
-	/**
-	 * 鐢ㄦ埛鍒楄〃
-	 */
-	@GetMapping("/user-list")
-	@ApiOperationSupport(order = 11)
-	@ApiOperation(value = "鐢ㄦ埛鍒楄〃", notes = "浼犲叆user")
-	public R<List<User>> userList(User user, BladeUser bladeUser) {
-		QueryWrapper<User> queryWrapper = Condition.getQueryWrapper(user);
-		List<User> list = userService.list((!AuthUtil.isAdministrator()) ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper);
-		return R.data(list);
-	}
-
-	/**
-	 * 瀵煎叆鐢ㄦ埛
-	 */
-	@PostMapping("import-user")
-	@ApiOperationSupport(order = 12)
-	@ApiOperation(value = "瀵煎叆鐢ㄦ埛", notes = "浼犲叆excel")
-	public R importUser(MultipartFile file, Integer isCovered) {
-		UserImporter userImporter = new UserImporter(userService, isCovered == 1);
-		ExcelUtil.save(file, userImporter, UserExcel.class);
-		return R.success("鎿嶄綔鎴愬姛");
-	}
-
-	/**
-	 * 瀵煎嚭鐢ㄦ埛
-	 */
-	@GetMapping("export-user")
-	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "瀵煎嚭鐢ㄦ埛", notes = "浼犲叆user")
-	public void exportUser(@ApiIgnore @RequestParam Map<String, Object> user, BladeUser bladeUser, HttpServletResponse response) {
-		QueryWrapper<User> queryWrapper = Condition.getQueryWrapper(user, User.class);
-		if (!AuthUtil.isAdministrator()) {
-			queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId());
-		}
-		queryWrapper.lambda().eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED);
-		List<UserExcel> list = userService.exportUser(queryWrapper);
-		ExcelUtil.export(response, "鐢ㄦ埛鏁版嵁" + DateUtil.time(), "鐢ㄦ埛鏁版嵁琛�", list, UserExcel.class);
-	}
-
-	/**
-	 * 瀵煎嚭妯℃澘
-	 */
-	@GetMapping("export-template")
-	@ApiOperationSupport(order = 14)
-	@ApiOperation(value = "瀵煎嚭妯℃澘")
-	public void exportUser(HttpServletResponse response) {
-		List<UserExcel> list = new ArrayList<>();
-		ExcelUtil.export(response, "鐢ㄦ埛鏁版嵁妯℃澘", "鐢ㄦ埛鏁版嵁琛�", list, UserExcel.class);
-	}
-
-
-	/**
-	 * 绗笁鏂规敞鍐岀敤鎴�
-	 */
-	@PostMapping("/register-guest")
-	@ApiOperationSupport(order = 15)
-	@ApiOperation(value = "绗笁鏂规敞鍐岀敤鎴�", notes = "浼犲叆user")
-	public R registerGuest(User user, Long oauthId) {
-		return R.status(userService.registerGuest(user, oauthId));
-	}
-
-
-	/**
-	 * 閰嶇疆鐢ㄦ埛骞冲彴淇℃伅
-	 */
-	@PostMapping("/update-platform")
-	@ApiOperationSupport(order = 16)
-	@ApiOperation(value = "閰嶇疆鐢ㄦ埛骞冲彴淇℃伅", notes = "浼犲叆user")
-	public R updatePlatform(Long userId, Integer userType, String userExt) {
-		return R.status(userService.updatePlatform(userId, userType, userExt));
-	}
-
-	/**
-	 * 鏌ョ湅骞冲彴璇︽儏
-	 */
-	@ApiOperationSupport(order = 17)
-	@ApiOperation(value = "鏌ョ湅骞冲彴璇︽儏", notes = "浼犲叆id")
-	@GetMapping("/platform-detail")
-	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
-	public R<UserVO> platformDetail(User user) {
-		return R.data(userService.platformDetail(user));
-	}
-
-
-	/**
-	 * 鐢ㄦ埛鍒楄〃鏌ヨ
-	 */
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "name", value = "浜哄憳濮撳悕", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "deptName", value = "閮ㄩ棬鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "postName", value = "鑱屼綅鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "current", value = "褰撳墠椤垫暟", paramType = "query", dataType = "int"),
-		@ApiImplicitParam(name = "size", value = "姣忛〉鏁伴噺", paramType = "query", dataType = "int")
-	})
-	@ApiOperationSupport(order = 18)
-	@ApiOperation(value = "鐢ㄦ埛鍒楄〃鏌ヨ", notes = "鐢ㄦ埛鍒楄〃鏌ヨ")
-	@GetMapping("/search/user")
-	public R<IPage<UserVO>> userSearch(@ApiIgnore UserVO user, @ApiIgnore Query query) {
-		return R.data(userService.selectUserSearch(user, query));
-	}
-
-	/**
-	 * 鐢ㄦ埛瑙i攣
-	 */
-	@PostMapping("/unlock")
-	@ApiOperationSupport(order = 19)
-	@ApiOperation(value = "璐﹀彿瑙i攣", notes = "浼犲叆id")
-	public R unlock(String userIds) {
-		if (StringUtil.isBlank(userIds)) {
-			return R.fail("璇疯嚦灏戦�夋嫨涓�涓敤鎴�");
-		}
-		List<User> userList = userService.list(Wrappers.<User>lambdaQuery().in(User::getId, Func.toLongList(userIds)));
-		userList.forEach(user -> bladeRedis.del(CacheNames.tenantKey(user.getTenantId(), CacheNames.USER_FAIL_KEY, user.getAccount())));
-		return R.success("鎿嶄綔鎴愬姛");
-	}
-
-	/**
-	 * 鐢ㄦ埛瑙i攣
-	 */
-	@PostMapping("/check-renexpr")
-	@ApiOperationSupport(order = 20)
-	@ApiOperation(value = "鏌ヨ鐢ㄦ埛瀵嗙爜绛栫暐鏄惁闇�瑕佹彁閱�", notes = "浼犲叆id")
-	public R<Long> checkRenAndExpr(BladeUser user) {
-		System.out.println("==============================="+user.getUserId());
-		Long res = userService.checkRenAndExpr(user.getUserId());
-		return R.data(res);
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel.java
deleted file mode 100644
index 0ed691d..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.excel;
-
-import com.alibaba.excel.annotation.ExcelIgnore;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.alibaba.excel.annotation.write.style.ContentRowHeight;
-import com.alibaba.excel.annotation.write.style.HeadRowHeight;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * UserExcel
- *
- * @author Chill
- */
-@Data
-@ColumnWidth(25)
-@HeadRowHeight(20)
-@ContentRowHeight(18)
-public class UserExcel implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	@ColumnWidth(15)
-	@ExcelProperty("绉熸埛缂栧彿")
-	private String tenantId;
-
-	@ExcelIgnore
-	@ExcelProperty("鐢ㄦ埛骞冲彴")
-	private String userType;
-
-	@ColumnWidth(20)
-	@ExcelProperty("鐢ㄦ埛骞冲彴鍚嶇О")
-	private String userTypeName;
-
-	@ColumnWidth(15)
-	@ExcelProperty("璐︽埛")
-	private String account;
-
-	@ColumnWidth(10)
-	@ExcelProperty("鏄电О")
-	private String name;
-
-	@ColumnWidth(10)
-	@ExcelProperty("濮撳悕")
-	private String realName;
-
-	@ExcelProperty("閭")
-	private String email;
-
-	@ColumnWidth(15)
-	@ExcelProperty("鎵嬫満")
-	private String phone;
-
-	@ExcelIgnore
-	@ExcelProperty("瑙掕壊ID")
-	private String roleId;
-
-	@ExcelIgnore
-	@ExcelProperty("閮ㄩ棬ID")
-	private String deptId;
-
-	@ExcelIgnore
-	@ExcelProperty("宀椾綅ID")
-	private String postId;
-
-	@ExcelProperty("瑙掕壊鍚嶇О")
-	private String roleName;
-
-	@ExcelProperty("閮ㄩ棬鍚嶇О")
-	private String deptName;
-
-	@ExcelProperty("宀椾綅鍚嶇О")
-	private String postName;
-
-	@ColumnWidth(20)
-	@ExcelProperty("鐢熸棩")
-	private Date birthday;
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserImporter.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserImporter.java
deleted file mode 100644
index 0f450d9..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserImporter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.excel;
-
-import lombok.RequiredArgsConstructor;
-import org.springblade.core.excel.support.ExcelImporter;
-import org.springblade.system.user.service.IUserService;
-
-import java.util.List;
-
-/**
- * 鐢ㄦ埛鏁版嵁瀵煎叆绫�
- *
- * @author Chill
- */
-@RequiredArgsConstructor
-public class UserImporter implements ExcelImporter<UserExcel> {
-
-	private final IUserService service;
-	private final Boolean isCovered;
-
-	@Override
-	public void save(List<UserExcel> data) {
-		service.importUser(data, isCovered);
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
deleted file mode 100644
index 7081387..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.feign;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.entity.UserInfo;
-import org.springblade.system.user.entity.UserOauth;
-import org.springblade.system.user.enums.UserEnum;
-import org.springblade.system.user.service.IUserService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * 鐢ㄦ埛鏈嶅姟Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-public class UserClient implements IUserClient {
-
-	private final IUserService service;
-
-	@Override
-	@GetMapping(USER_INFO_BY_ID)
-	public R<User> userInfoById(Long userId) {
-		return R.data(service.getById(userId));
-	}
-
-	@Override
-	@GetMapping(USER_INFO_BY_ACCOUNT)
-	public R<User> userByAccount(String tenantId, String account) {
-		return R.data(service.userByAccount(tenantId, account));
-	}
-
-	@Override
-	@GetMapping(USER_INFO)
-	public R<UserInfo> userInfo(String tenantId, String account) {
-		return R.data(service.userInfo(tenantId, account));
-	}
-
-	@Override
-	@GetMapping(USER_INFO_BY_TYPE)
-	public R<UserInfo> userInfo(String tenantId, String account, String userType) {
-		return R.data(service.userInfo(tenantId, account, UserEnum.of(userType)));
-	}
-
-	@Override
-	@PostMapping(USER_AUTH_INFO)
-	public R<UserInfo> userAuthInfo(@RequestBody UserOauth userOauth) {
-		return R.data(service.userInfo(userOauth));
-	}
-
-	@Override
-	@PostMapping(SAVE_USER)
-	public R<Boolean> saveUser(@RequestBody User user) {
-		return R.data(service.submit(user));
-	}
-
-	@Override
-	@PostMapping(SAVE_USER_LIST)
-	public R<Boolean> saveUserList(List<User> users) {
-		return R.data(service.submitList(users));
-	}
-
-	@Override
-	@PostMapping(REMOVE_USER)
-	public R<Boolean> removeUser(String tenantIds) {
-		return R.data(service.remove(Wrappers.<User>query().lambda().in(User::getTenantId, Func.toStrList(tenantIds))));
-	}
-
-	@Override
-	@PostMapping(UPDATE_USER)
-	public R<Boolean> updateUser(@RequestBody User user) {
-		return R.data(service.updateUser(user));
-	}
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserSearchClient.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserSearchClient.java
deleted file mode 100644
index 3961115..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserSearchClient.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.feign;
-
-import lombok.AllArgsConstructor;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.service.IUserSearchService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * 鐢ㄦ埛鏌ヨ鏈嶅姟Feign瀹炵幇绫�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-public class UserSearchClient implements IUserSearchClient {
-
-	private final IUserSearchService service;
-
-	@Override
-	@GetMapping(LIST_BY_USER)
-	public R<List<User>> listByUser(String userId) {
-		return R.data(service.listByUser(Func.toLongList(userId)));
-	}
-
-	@Override
-	@GetMapping(LIST_BY_DEPT)
-	public R<List<User>> listByDept(String deptId) {
-		return R.data(service.listByDept(Func.toLongList(deptId)));
-	}
-
-	@Override
-	@GetMapping(LIST_BY_POST)
-	public R<List<User>> listByPost(String postId) {
-		return R.data(service.listByPost(Func.toLongList(postId)));
-	}
-
-	@Override
-	@GetMapping(LIST_BY_ROLE)
-	public R<List<User>> listByRole(String roleId) {
-		return R.data(service.listByRole(Func.toLongList(roleId)));
-	}
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java
deleted file mode 100644
index feae073..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.user.entity.UserApp;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface UserAppMapper extends BaseMapper<UserApp> {
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml
deleted file mode 100644
index 321d2df..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.user.mapper.UserAppMapper">
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java
deleted file mode 100644
index a8bf6bd..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.user.entity.UserDept;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface UserDeptMapper extends BaseMapper<UserDept> {
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml
deleted file mode 100644
index e5b4723..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.user.mapper.UserDeptMapper">
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java
deleted file mode 100644
index 30a83db..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.excel.UserExcel;
-
-import java.util.List;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface UserMapper extends BaseMapper<User> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param user
-	 * @param deptIdList
-	 * @param tenantId
-	 * @return
-	 */
-	List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);
-
-	/**
-	 * 鑾峰彇鐢ㄦ埛
-	 *
-	 * @param tenantId
-	 * @param account
-	 * @return
-	 */
-	User getUser(String tenantId, String account);
-
-	/**
-	 * 鑾峰彇瀵煎嚭鐢ㄦ埛鏁版嵁
-	 *
-	 * @param queryWrapper
-	 * @return
-	 */
-	List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
deleted file mode 100644
index 9c1b7c3..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.user.mapper.UserMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="userResultMap" type="org.springblade.system.user.entity.User">
-        <result column="id" property="id"/>
-        <result column="tenant_id" property="tenantId"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="code" property="code"/>
-        <result column="user_type" property="userType"/>
-        <result column="account" property="account"/>
-        <result column="password" property="password"/>
-        <result column="name" property="name"/>
-        <result column="real_name" property="realName"/>
-        <result column="email" property="email"/>
-        <result column="phone" property="phone"/>
-        <result column="birthday" property="birthday"/>
-        <result column="sex" property="sex"/>
-        <result column="role_id" property="roleId"/>
-        <result column="dept_id" property="deptId"/>
-        <result column="post_id" property="postId"/>
-        <result column="strategy_name" property="pwdStrategy"/>
-        <result column="pwd_update_time" property="pwdUpdateTime"/>
-        <result column="secretgrade" property="secretgrade"/>
-        <result column="strategy_update_status" property="strategyUpdateStatus"/>
-    </resultMap>
-
-
-    <select id="selectUserPage" resultMap="userResultMap">
-        SELECT
-            pou.*,nvl(pss.STRATEGY_NAME,(SELECT STRATEGY_NAME FROM PL_SYS_STRATEGY WHERE IS_DEFAULT=1)) strategy_name
-        FROM pl_org_user pou
-            LEFT JOIN PL_SYS_USER_PWDSTRATEGY plup on plup.USER_ID=pou.ID
-            LEFT JOIN PL_SYS_STRATEGY pss on pss.ID=plup.PWDSTRATEGY_ID
-        WHERE is_deleted = 0
-        <if test="tenantId!=null and tenantId != ''">
-            and tenant_id = #{tenantId}
-        </if>
-        <if test="user.tenantId!=null and user.tenantId != ''">
-            and tenant_id = #{user.tenantId}
-        </if>
-        <if test="user.account!=null and user.account != ''">
-            and account = #{user.account}
-        </if>
-        <if test="user.realName!=null and user.realName != ''">
-            and real_name = #{user.realName}
-        </if>
-        <if test="user.userType!=null and user.userType != ''">
-            and user_type = #{user.userType}
-        </if>
-        <if test="deptIdList!=null and deptIdList.size>0">
-            and pou.id in (
-            SELECT
-            user_id
-            FROM
-            pl_org_user_dept poud
-            WHERE
-            dept_id IN
-            <foreach collection="deptIdList" index="index" item="item" open="(" separator="," close=")">
-                #{item}
-            </foreach>
-            )
-        </if>
-        ORDER BY pou.id
-    </select>
-
-    <select id="getUser" resultMap="userResultMap">
-        SELECT
-            pou.*,nvl(pss.STRATEGY_NAME,(SELECT STRATEGY_NAME FROM PL_SYS_STRATEGY WHERE IS_DEFAULT=1)) strategy_name
-        FROM pl_org_user pou
-            LEFT JOIN PL_SYS_USER_PWDSTRATEGY plup on plup.USER_ID=pou.ID
-            LEFT JOIN PL_SYS_STRATEGY pss on pss.ID=plup.PWDSTRATEGY_ID
-        WHERE
-            tenant_id = #{param1} and account = #{param2} and is_deleted = 0
-    </select>
-
-    <select id="exportUser" resultType="org.springblade.system.user.excel.UserExcel">
-        SELECT
-            pou.*,nvl(pss.STRATEGY_NAME,(SELECT STRATEGY_NAME FROM PL_SYS_STRATEGY WHERE IS_DEFAULT=1)) strategy_name
-        FROM pl_org_user pou
-            LEFT JOIN PL_SYS_USER_PWDSTRATEGY plup on plup.USER_ID=pou.ID
-            LEFT JOIN PL_SYS_STRATEGY pss on pss.ID=plup.PWDSTRATEGY_ID
-            ${ew.customSqlSegment}
-    </select>
-
-    <select id="selectByIdUser" resultType="org.springblade.system.user.entity.User">
-        select id, code, user_type, account, password , name, real_name, avatar, email, phone , birthday, sex, role_id, dept_id, post_id , pwd_update_time, secretgrade, strategy_update_status, tenant_id, create_user , create_dept, create_time, update_user, update_time, status , is_deleted
-        from pl_org_user
-            where id = #{userId} and is_deleted = 0
-    </select>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java
deleted file mode 100644
index edaa704..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.user.entity.UserOauth;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface UserOauthMapper extends BaseMapper<UserOauth> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml
deleted file mode 100644
index c1ccf8d..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.user.mapper.UserOauthMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="userResultMap" type="org.springblade.system.user.entity.UserOauth">
-        <result column="id" property="id"/>
-        <result column="tenant_id" property="tenantId"/>
-        <result column="user_id" property="userId"/>
-        <result column="username" property="username"/>
-        <result column="nickname" property="nickname"/>
-        <result column="avatar" property="avatar"/>
-        <result column="blog" property="blog"/>
-        <result column="company" property="company"/>
-        <result column="location" property="location"/>
-        <result column="email" property="email"/>
-        <result column="remark" property="remark"/>
-        <result column="gender" property="gender"/>
-        <result column="source" property="source"/>
-    </resultMap>
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java
deleted file mode 100644
index f7a9c69..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.user.entity.UserOther;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface UserOtherMapper extends BaseMapper<UserOther> {
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml
deleted file mode 100644
index 3cde6e2..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.user.mapper.UserOtherMapper">
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java
deleted file mode 100644
index 735aeaa..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.system.user.entity.UserWeb;
-
-/**
- * Mapper 鎺ュ彛
- *
- * @author Chill
- */
-public interface UserWebMapper extends BaseMapper<UserWeb> {
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml
deleted file mode 100644
index 687ffc1..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.system.user.mapper.UserWebMapper">
-
-</mapper>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserDeptService.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserDeptService.java
deleted file mode 100644
index cc1d8df..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserDeptService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.user.entity.UserDept;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IUserDeptService extends IService<UserDept> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserOauthService.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserOauthService.java
deleted file mode 100644
index 4c0dd98..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserOauthService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.system.user.entity.UserOauth;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IUserOauthService extends IService<UserOauth> {
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserSearchService.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserSearchService.java
deleted file mode 100644
index 112712c..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserSearchService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service;
-
-
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.system.user.entity.User;
-
-import java.util.List;
-
-/**
- * 鐢ㄦ埛鏌ヨ鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IUserSearchService extends BaseService<User> {
-
-	/**
-	 * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param userId 鐢ㄦ埛ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	List<User> listByUser(List<Long> userId);
-
-    /**
-	 * 鏍规嵁閮ㄩ棬ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param deptId 閮ㄩ棬ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	List<User> listByDept(List<Long> deptId);
-
-    /**
-	 * 鏍规嵁宀椾綅ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param postId 宀椾綅ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	List<User> listByPost(List<Long> postId);
-
-    /**
-	 * 鏍规嵁瑙掕壊ID鏌ヨ鐢ㄦ埛鍒楄〃
-	 *
-	 * @param roleId 瑙掕壊ID
-	 * @return 鐢ㄦ埛鍒楄〃
-	 */
-	List<User> listByRole(List<Long> roleId);
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
deleted file mode 100644
index ef74d82..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service;
-
-
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.core.mp.support.Query;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.entity.UserInfo;
-import org.springblade.system.user.entity.UserOauth;
-import org.springblade.system.user.enums.UserEnum;
-import org.springblade.system.user.excel.UserExcel;
-import org.springblade.system.user.vo.UserVO;
-
-import java.util.List;
-
-/**
- * 鏈嶅姟绫�
- *
- * @author Chill
- */
-public interface IUserService extends BaseService<User> {
-
-	/**
-	 * 鏂板鐢ㄦ埛
-	 *
-	 * @param user
-	 * @return
-	 */
-	boolean submit(User user);
-
-	/**
-	 * 鎵归噺鏂板鐢ㄦ埛
-	 *
-	 * @param users
-	 * @return
-	 */
-	boolean submitList(List<User> users);
-
-	/**
-	 * 淇敼鐢ㄦ埛
-	 *
-	 * @param user
-	 * @return
-	 */
-	boolean updateUser(User user);
-
-	/**
-	 * 淇敼鐢ㄦ埛鍩烘湰淇℃伅
-	 *
-	 * @param user
-	 * @return
-	 */
-	boolean updateUserInfo(User user);
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param user
-	 * @param deptId
-	 * @param tenantId
-	 * @return
-	 */
-	IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId);
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param user
-	 * @param query
-	 * @return
-	 */
-	IPage<UserVO> selectUserSearch(UserVO user, Query query);
-
-
-	/**
-	 * 鐢ㄦ埛淇℃伅
-	 *
-	 * @param userId
-	 * @return
-	 */
-	UserInfo userInfo(Long userId);
-
-	/**
-	 * 鐢ㄦ埛淇℃伅
-	 *
-	 * @param tenantId
-	 * @param account
-	 * @return
-	 */
-	UserInfo userInfo(String tenantId, String account);
-
-	/**
-	 * 鐢ㄦ埛淇℃伅
-	 *
-	 * @param tenantId
-	 * @param account
-	 * @param userEnum
-	 * @return
-	 */
-	UserInfo userInfo(String tenantId, String account, UserEnum userEnum);
-
-	/**
-	 * 鐢ㄦ埛淇℃伅
-	 *
-	 * @param userOauth
-	 * @return
-	 */
-	UserInfo userInfo(UserOauth userOauth);
-
-	/**
-	 * 鏍规嵁璐﹀彿鑾峰彇鐢ㄦ埛
-	 *
-	 * @param tenantId
-	 * @param account
-	 * @return
-	 */
-	User userByAccount(String tenantId, String account);
-
-	/**
-	 * 缁欑敤鎴疯缃鑹�
-	 *
-	 * @param userIds
-	 * @param roleIds
-	 * @return
-	 */
-	boolean grant(String userIds, String roleIds);
-
-	/**
-	 * 鍒濆鍖栧瘑鐮�
-	 *
-	 * @param userIds
-	 * @return
-	 */
-	boolean resetPassword(String userIds);
-
-	/**
-	 * 淇敼瀵嗙爜
-	 *
-	 * @param userId
-	 * @param oldPassword
-	 * @param newPassword
-	 * @param newPassword1
-	 * @return
-	 */
-	boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1);
-
-	/**
-	 * 鍒犻櫎鐢ㄦ埛
-	 *
-	 * @param userIds
-	 * @return
-	 */
-	boolean removeUser(String userIds);
-
-	/**
-	 * 瀵煎叆鐢ㄦ埛鏁版嵁
-	 *
-	 * @param data
-	 * @param isCovered
-	 * @return
-	 */
-	void importUser(List<UserExcel> data, Boolean isCovered);
-
-	/**
-	 * 瀵煎嚭鐢ㄦ埛鏁版嵁
-	 *
-	 * @param queryWrapper
-	 * @return
-	 */
-	List<UserExcel> exportUser(Wrapper<User> queryWrapper);
-
-	/**
-	 * 娉ㄥ唽鐢ㄦ埛
-	 *
-	 * @param user
-	 * @param oauthId
-	 * @return
-	 */
-	boolean registerGuest(User user, Long oauthId);
-
-	/**
-	 * 閰嶇疆鐢ㄦ埛骞冲彴
-	 *
-	 * @param userId
-	 * @param userType
-	 * @param userExt
-	 * @return
-	 */
-	boolean updatePlatform(Long userId, Integer userType, String userExt);
-
-	/**
-	 * 鐢ㄦ埛璇︾粏淇℃伅
-	 *
-	 * @param user
-	 * @return
-	 */
-	UserVO platformDetail(User user);
-
-	/**
-	 * 妫�鏌ョ敤鎴锋槸鍚﹀埌浜嗘彁閱掔敤鎴蜂慨鏀瑰瘑鐮佹垨鑰呭瘑鐮佽繃鏈熺殑鏃堕棿
-	 *
-	 */
-	Long checkRenAndExpr(Long userId);
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java
deleted file mode 100644
index 3ab95db..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service.impl;
-
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.system.user.entity.UserDept;
-import org.springblade.system.user.mapper.UserDeptMapper;
-import org.springblade.system.user.service.IUserDeptService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-public class UserDeptServiceImpl extends ServiceImpl<UserDeptMapper, UserDept> implements IUserDeptService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java
deleted file mode 100644
index 59c9c84..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service.impl;
-
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.AllArgsConstructor;
-import org.springblade.system.user.entity.UserOauth;
-import org.springblade.system.user.mapper.UserOauthMapper;
-import org.springblade.system.user.service.IUserOauthService;
-import org.springframework.stereotype.Service;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-@AllArgsConstructor
-public class UserOauthServiceImpl extends ServiceImpl<UserOauthMapper, UserOauth> implements IUserOauthService {
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java
deleted file mode 100644
index d934ce2..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service.impl;
-
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.mapper.UserMapper;
-import org.springblade.system.user.service.IUserSearchService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 鐢ㄦ埛鏌ヨ鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-@AllArgsConstructor
-public class UserSearchServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserSearchService {
-
-	@Override
-	public List<User> listByUser(List<Long> userId) {
-		return this.list(Wrappers.<User>lambdaQuery().in(User::getId, userId));
-	}
-
-	@Override
-	public List<User> listByDept(List<Long> deptId) {
-		LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
-		deptId.forEach(id -> queryWrapper.like(User::getDeptId, id).or());
-		return this.list(queryWrapper);
-	}
-
-	@Override
-	public List<User> listByPost(List<Long> postId) {
-		LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
-		postId.forEach(id -> queryWrapper.like(User::getPostId, id).or());
-		return this.list(queryWrapper);
-	}
-
-	@Override
-	public List<User> listByRole(List<Long> roleId) {
-		LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
-		roleId.forEach(id -> queryWrapper.like(User::getRoleId, id).or());
-		return this.list(queryWrapper);
-	}
-}
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
deleted file mode 100644
index 6e92d92..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.service.impl;
-
-
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.RequiredArgsConstructor;
-import org.springblade.common.constant.CommonConstant;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tenant.BladeTenantProperties;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.*;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.cache.ParamCache;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.entity.Strategy;
-import org.springblade.system.entity.Tenant;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.feign.ISysClient;
-import org.springblade.system.user.cache.UserCache;
-import org.springblade.system.user.entity.*;
-import org.springblade.system.user.enums.UserEnum;
-import org.springblade.system.user.excel.UserExcel;
-import org.springblade.system.user.mapper.UserMapper;
-import org.springblade.system.user.service.IUserDeptService;
-import org.springblade.system.user.service.IUserOauthService;
-import org.springblade.system.user.service.IUserService;
-import org.springblade.system.user.vo.UserVO;
-import org.springblade.system.user.wrapper.UserWrapper;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.DigestUtils;
-
-import java.util.*;
-
-import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
-
-/**
- * 鏈嶅姟瀹炵幇绫�
- *
- * @author Chill
- */
-@Service
-@RequiredArgsConstructor
-public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserService {
-	private static final String GUEST_NAME = "guest";
-
-	private final IUserDeptService userDeptService;
-	private final IUserOauthService userOauthService;
-	private final ISysClient sysClient;
-	private final BladeTenantProperties tenantProperties;
-	//鎷垮埌閰嶇疆鐨勮秴绠d
-	@Value("${user-info.id}")
-	private String adminUserId;
-
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean submit(User user) {
-		if (StringUtil.isBlank(user.getTenantId())) {
-			user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
-		}
-		String tenantId = user.getTenantId();
-		//Tenant tenant = SysCache.getTenant(tenantId);
-		if (Func.isNotEmpty(user.getPassword())) {
-			user.setPassword(DigestUtil.encrypt(user.getPassword()));
-		}
-		Long userCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount()));
-		if (userCount > 0L && Func.isEmpty(user.getId())) {
-			throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
-		}
-		return save(user) && submitUserDept(user);
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean submitList(List<User> users) {
-		Boolean flag = true;
-		for (User user : users){
-			if (StringUtil.isBlank(user.getTenantId())) {
-				user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
-			}
-			String tenantId = user.getTenantId();
-			if (Func.isNotEmpty(user.getPassword())) {
-				user.setPassword(DigestUtil.encrypt(user.getPassword()));
-			}
-			Long userCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount()));
-			if (userCount > 0L && Func.isEmpty(user.getId())) {
-				throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
-			}
-			flag = save(user) && submitUserDept(user);
-
-		}
-		return flag;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean updateUser(User user) {
-		String tenantId = user.getTenantId();
-		Long userCount = baseMapper.selectCount(
-			Wrappers.<User>query().lambda()
-				.eq(User::getTenantId, tenantId)
-				.eq(User::getAccount, user.getAccount())
-				.notIn(User::getId, user.getId())
-		);
-		if (userCount > 0L) {
-			throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
-		}
-		return updateUserInfo(user) && submitUserDept(user);
-	}
-
-	@Override
-	public boolean updateUserInfo(User user) {
-		user.setPassword(null);
-		return updateById(user);
-	}
-
-	private boolean submitUserDept(User user) {
-		List<Long> deptIdList = Func.toLongList(user.getDeptId());
-		List<UserDept> userDeptList = new ArrayList<>();
-		deptIdList.forEach(deptId -> {
-			UserDept userDept = new UserDept();
-			userDept.setUserId(user.getId());
-			userDept.setDeptId(deptId);
-			userDeptList.add(userDept);
-		});
-		userDeptService.remove(Wrappers.<UserDept>update().lambda().eq(UserDept::getUserId, user.getId()));
-		return userDeptService.saveBatch(userDeptList);
-	}
-
-	@Override
-	public IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId) {
-		List<Long> deptIdList = SysCache.getDeptChildIds(deptId);
-		return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId));
-	}
-
-	@Override
-	public IPage<UserVO> selectUserSearch(UserVO user, Query query) {
-		LambdaQueryWrapper<User> queryWrapper = Wrappers.<User>query().lambda();
-		String tenantId = AuthUtil.getTenantId();
-		if (StringUtil.isNotBlank(tenantId)) {
-			queryWrapper.eq(User::getTenantId, tenantId);
-		}
-		if (StringUtil.isNotBlank(user.getName())) {
-			queryWrapper.like(User::getName, user.getName());
-		}
-		if (StringUtil.isNotBlank(user.getDeptName())) {
-			String deptIds = SysCache.getDeptIdsByFuzzy(AuthUtil.getTenantId(), user.getDeptName());
-			if (StringUtil.isNotBlank(deptIds)) {
-				queryWrapper.and(wrapper -> {
-					List<String> ids = Func.toStrList(deptIds);
-					ids.forEach(id -> wrapper.like(User::getDeptId, id).or());
-				});
-			}
-		}
-		if (StringUtil.isNotBlank(user.getPostName())) {
-			String postIds = SysCache.getPostIdsByFuzzy(AuthUtil.getTenantId(), user.getPostName());
-			if (StringUtil.isNotBlank(postIds)) {
-				queryWrapper.and(wrapper -> {
-					List<String> ids = Func.toStrList(postIds);
-					ids.forEach(id -> wrapper.like(User::getPostId, id).or());
-				});
-			}
-		}
-		IPage<User> pages = this.page(Condition.getPage(query), queryWrapper);
-		return UserWrapper.build().pageVO(pages);
-	}
-
-	@Override
-	public User userByAccount(String tenantId, String account) {
-		return baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, account).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
-	}
-
-	@Override
-	public UserInfo userInfo(Long userId) {
-		User user = baseMapper.selectById(userId);
-		return buildUserInfo(user);
-	}
-
-	@Override
-	public UserInfo userInfo(String tenantId, String account) {
-		User user = baseMapper.getUser(tenantId, account);
-		return buildUserInfo(user);
-	}
-
-	@Override
-	public UserInfo userInfo(String tenantId, String account, UserEnum userEnum) {
-		User user = baseMapper.getUser(tenantId, account);
-		return buildUserInfo(user, userEnum);
-	}
-
-	private UserInfo buildUserInfo(User user) {
-		return buildUserInfo(user, UserEnum.WEB);
-	}
-
-	private UserInfo buildUserInfo(User user, UserEnum userEnum) {
-		if (ObjectUtil.isEmpty(user)) {
-			return null;
-		}
-		UserInfo userInfo = new UserInfo();
-		userInfo.setUser(user);
-		if (Func.isNotEmpty(user)) {
-			R<List<String>> result = sysClient.getRoleAliases(user.getRoleId());
-			if (result.isSuccess()) {
-				List<String> roleAlias = result.getData();
-				userInfo.setRoles(roleAlias);
-			}
-		}
-		// 鏍规嵁姣忎釜鐢ㄦ埛骞冲彴锛屽缓绔嬪搴旂殑detail琛紝閫氳繃鏌ヨ灏嗙粨鏋滈泦鍐欏叆鍒癲etail瀛楁
-		Kv detail = Kv.create().set("type", userEnum.getName());
-		if (userEnum == UserEnum.WEB) {
-			UserWeb userWeb = new UserWeb();
-			UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, user.getId()));
-			if (ObjectUtil.isNotEmpty(query)) {
-				detail.set("ext", query.getUserExt());
-			}
-		} else if (userEnum == UserEnum.APP) {
-			UserApp userApp = new UserApp();
-			UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, user.getId()));
-			if (ObjectUtil.isNotEmpty(query)) {
-				detail.set("ext", query.getUserExt());
-			}
-		} else {
-			UserOther userOther = new UserOther();
-			UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
-			if (ObjectUtil.isNotEmpty(query)) {
-				detail.set("ext", query.getUserExt());
-			}
-		}
-		userInfo.setDetail(detail);
-		return userInfo;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public UserInfo userInfo(UserOauth userOauth) {
-		UserOauth uo = userOauthService.getOne(Wrappers.<UserOauth>query().lambda().eq(UserOauth::getUuid, userOauth.getUuid()).eq(UserOauth::getSource, userOauth.getSource()));
-		UserInfo userInfo;
-		if (Func.isNotEmpty(uo) && Func.isNotEmpty(uo.getUserId())) {
-			userInfo = this.userInfo(uo.getUserId());
-			userInfo.setOauthId(Func.toStr(uo.getId()));
-		} else {
-			userInfo = new UserInfo();
-			if (Func.isEmpty(uo)) {
-				userOauthService.save(userOauth);
-				userInfo.setOauthId(Func.toStr(userOauth.getId()));
-			} else {
-				userInfo.setOauthId(Func.toStr(uo.getId()));
-			}
-			User user = new User();
-			user.setAccount(userOauth.getUsername());
-			user.setTenantId(userOauth.getTenantId());
-			userInfo.setUser(user);
-			userInfo.setRoles(Collections.singletonList(GUEST_NAME));
-		}
-		return userInfo;
-	}
-
-	@Override
-	public boolean grant(String userIds, String roleIds) {
-		User user = new User();
-		user.setRoleId(roleIds);
-		return this.update(user, Wrappers.<User>update().lambda().in(User::getId, Func.toLongList(userIds)));
-	}
-
-	@Override
-	public boolean resetPassword(String userIds) {
-		User user = new User();
-		user.setPassword(DigestUtil.encrypt(CommonConstant.DEFAULT_PASSWORD));
-		user.setUpdateTime(DateUtil.now());
-		return this.update(user, Wrappers.<User>update().lambda().in(User::getId, Func.toLongList(userIds)));
-	}
-
-	@Override
-	public boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1) {
-		User user = getById(userId);
-		if (!newPassword.equals(newPassword1)) {
-			throw new ServiceException("璇疯緭鍏ユ纭殑纭瀵嗙爜!");
-		}
-		if (!user.getPassword().equals(DigestUtil.hex(oldPassword))) {
-			throw new ServiceException("鍘熷瘑鐮佷笉姝g‘!");
-		}
-		//鑾峰彇鐢ㄦ埛閲囩敤鐨勫瘑鐮佺瓥鐣�
-		Strategy strategy = sysClient.getByUserId(userId).getData();
-		//瀵嗙爜闀垮害鏍¢獙
-		if(newPassword1.length() < strategy.getMinPwdLen() || newPassword1.length() > strategy.getMaxPwdLen()){
-			throw new ServiceException("瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠瀵嗙爜缁勫悎鏂瑰紡锛屼笖瀵嗙爜闀垮害蹇呴』鍦ㄣ��"+strategy.getMinPwdLen()+"-"+strategy.getMaxPwdLen()+"銆戣寖鍥村唴");
-		}
-		List<String> regexs = sysClient.getRegexByList(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
-		//鍒ゆ柇鏄惁婊¤冻缁勫悎鏂瑰紡涓殑蹇呭~绉嶇被鏁�
-		int reqType = 0;
-		for (int i = 0; i < regexs.size(); i++) {
-			if(reqType>=strategy.getRequiredType()){
-				break;
-			}
-			if(!Func.isEmpty(RegexUtil.findResult(regexs.get(i),newPassword1))){
-				reqType++;
-			}
-		}
-		String resException = "瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠绫诲瀷锛岃閲嶆柊杈撳叆瀵嗙爜锛�";
-		if(reqType<strategy.getRequiredType()){
-			throw new ServiceException(resException);
-		}
-		// 鏄惁灞炰簬缁勫悎鏂瑰紡涓殑绫诲瀷
-		String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
-		regex = "^"+regex+"{"+strategy.getRequiredType()+",}$";
-		boolean result = RegexUtil.find(regex, newPassword1);
-		if(!result){
-			throw new ServiceException(resException);
-		}
-		//淇敼瀵嗙爜鍚屾椂锛屾敼鍙樼敤鎴蜂俊鎭腑鐨勫瘑鐮佷慨鏀圭姸鎬佸瓧娈�,瀵嗙爜淇敼鏃堕棿
-		return this.update(Wrappers.<User>update().lambda()
-			.set(User::getPassword, DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes())))
-			.set(User::getStrategyUpdateStatus,CommonConstant.TOP_PARENT_ID)
-			.set(User::getPwdUpdateTime,new Date())
-			.eq(User::getId, userId));
-	}
-
-	@Override
-	public boolean removeUser(String userIds) {
-		if (Func.contains(Func.toLongArray(userIds), AuthUtil.getUserId())) {
-			throw new ServiceException("涓嶈兘鍒犻櫎鏈处鍙�!");
-		}
-		return deleteLogic(Func.toLongList(userIds));
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void importUser(List<UserExcel> data, Boolean isCovered) {
-		data.forEach(userExcel -> {
-			User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class));
-			// 璁剧疆鐢ㄦ埛骞冲彴
-			user.setUserType(Func.toInt(DictCache.getKey(DictEnum.USER_TYPE, userExcel.getUserTypeName()), 1));
-			// 璁剧疆閮ㄩ棬ID
-			user.setDeptId(Func.toStrWithEmpty(SysCache.getDeptIds(userExcel.getTenantId(), userExcel.getDeptName()), StringPool.EMPTY));
-			// 璁剧疆宀椾綅ID
-			user.setPostId(Func.toStrWithEmpty(SysCache.getPostIds(userExcel.getTenantId(), userExcel.getPostName()), StringPool.EMPTY));
-			// 璁剧疆瑙掕壊ID
-			user.setRoleId(Func.toStrWithEmpty(SysCache.getRoleIds(userExcel.getTenantId(), userExcel.getRoleName()), StringPool.EMPTY));
-			// 璁剧疆绉熸埛ID
-			if (!AuthUtil.isAdministrator() || StringUtil.isBlank(user.getTenantId())) {
-				user.setTenantId(AuthUtil.getTenantId());
-			}
-			// 瑕嗙洊鏁版嵁
-			if (isCovered) {
-				// 鏌ヨ鐢ㄦ埛鏄惁瀛樺湪
-				User oldUser = UserCache.getUser(userExcel.getTenantId(), userExcel.getAccount());
-				if (oldUser != null && oldUser.getId() != null) {
-					user.setId(oldUser.getId());
-					this.updateUser(user);
-					return;
-				}
-			}
-			// 鑾峰彇榛樿瀵嗙爜閰嶇疆
-			String initPassword = ParamCache.getValue(DEFAULT_PARAM_PASSWORD);
-			user.setPassword(initPassword);
-			this.submit(user);
-		});
-	}
-
-	@Override
-	public List<UserExcel> exportUser(Wrapper<User> queryWrapper) {
-		List<UserExcel> userList = baseMapper.exportUser(queryWrapper);
-		userList.forEach(user -> {
-			user.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
-			user.setRoleName(StringUtil.join(SysCache.getRoleNames(user.getRoleId())));
-			user.setDeptName(StringUtil.join(SysCache.getDeptNames(user.getDeptId())));
-			user.setPostName(StringUtil.join(SysCache.getPostNames(user.getPostId())));
-		});
-		return userList;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean registerGuest(User user, Long oauthId) {
-		Tenant tenant = SysCache.getTenant(user.getTenantId());
-		if (tenant == null || tenant.getId() == null) {
-			throw new ServiceException("绉熸埛淇℃伅閿欒!");
-		}
-		UserOauth userOauth = userOauthService.getById(oauthId);
-		if (userOauth == null || userOauth.getId() == null) {
-			throw new ServiceException("绗笁鏂圭櫥闄嗕俊鎭敊璇�!");
-		}
-		user.setRealName(user.getName());
-		user.setAvatar(userOauth.getAvatar());
-		user.setRoleId(StringPool.MINUS_ONE);
-		user.setDeptId(StringPool.MINUS_ONE);
-		user.setPostId(StringPool.MINUS_ONE);
-		boolean userTemp = this.submit(user);
-		userOauth.setUserId(user.getId());
-		userOauth.setTenantId(user.getTenantId());
-		boolean oauthTemp = userOauthService.updateById(userOauth);
-		return (userTemp && oauthTemp);
-	}
-	@Override
-	public boolean updatePlatform(Long userId, Integer userType, String userExt) {
-		if (userType.equals(UserEnum.WEB.getCategory())) {
-			UserWeb userWeb = new UserWeb();
-			UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, userId));
-			if (ObjectUtil.isNotEmpty(query)) {
-				userWeb.setId(query.getId());
-			}
-			userWeb.setUserId(userId);
-			userWeb.setUserExt(userExt);
-			return userWeb.insertOrUpdate();
-		} else if (userType.equals(UserEnum.APP.getCategory())) {
-			UserApp userApp = new UserApp();
-			UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, userId));
-			if (ObjectUtil.isNotEmpty(query)) {
-				userApp.setId(query.getId());
-			}
-			userApp.setUserId(userId);
-			userApp.setUserExt(userExt);
-			return userApp.insertOrUpdate();
-		} else {
-			UserOther userOther = new UserOther();
-			UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, userId));
-			if (ObjectUtil.isNotEmpty(query)) {
-				userOther.setId(query.getId());
-			}
-			userOther.setUserId(userId);
-			userOther.setUserExt(userExt);
-			return userOther.insertOrUpdate();
-		}
-	}
-
-	@Override
-	public UserVO platformDetail(User user) {
-		User detail = baseMapper.selectOne(Condition.getQueryWrapper(user));
-		UserVO userVO = UserWrapper.build().entityVO(detail);
-		if (userVO.getUserType().equals(UserEnum.WEB.getCategory())) {
-			UserWeb userWeb = new UserWeb();
-			UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, user.getId()));
-			if (ObjectUtil.isNotEmpty(query)) {
-				userVO.setUserExt(query.getUserExt());
-			}
-		} else if (userVO.getUserType().equals(UserEnum.APP.getCategory())) {
-			UserApp userApp = new UserApp();
-			UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, user.getId()));
-			if (ObjectUtil.isNotEmpty(query)) {
-				userVO.setUserExt(query.getUserExt());
-			}
-		} else {
-			UserOther userOther = new UserOther();
-			UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
-			if (ObjectUtil.isNotEmpty(query)) {
-				userVO.setUserExt(query.getUserExt());
-			}
-		}
-		return userVO;
-	}
-
-	@Override
-	public Long checkRenAndExpr(Long userId) {
-		//瓒呯骇绠$悊鍛樼洿鎺ヨ繑鍥炰笉闇�瑕佹彁閱掑瘑鐮佷慨鏀�
-		if(adminUserId.equals(userId)){
-			return 0L;
-		}
-		//鑾峰彇鍒板瘑鐮佷慨鏀规椂闂�
-		Date pwdUpdateTime = this.getOne(Wrappers.<User>query().eq("ID", userId)).getPwdUpdateTime();
-		Long pwdupdateday = 0L;
-		if(!Func.isEmpty(pwdUpdateTime)){
-			pwdupdateday = dateToDay(pwdUpdateTime);
-		}
-		Strategy strategy = sysClient.getByUserId(userId).getData();
-		//鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=0灏辨彁閱掑繀椤讳慨鏀瑰瘑鐮�
-		long reminder = pwdupdateday+strategy.getExpirationTime()-dateToDay(new Date());
-		//鎻愰啋鐢ㄦ埛蹇呴』淇敼瀵嗙爜
-		if(reminder<=0){
-			return -1L;
-		}
-		//鎻愰啋鐢ㄦ埛杩樻湁澶氫箙杩囨湡
-		if(reminder<=strategy.getReminderTime()){
-			long res = (strategy.getReminderTime()+pwdupdateday)-dateToDay(new Date());
-			return res;
-		}
-		//浠h〃姝e父鐘舵�佽繕鏈埌鎻愰啋涓庤繃鏈熸椂闂达紝鏃笉鎻愰啋涔熶笉瑕佹眰淇敼
-		return 0L;
-	}
-
-	/**
-	 * 鏃堕棿鏍煎紡杞ぉ
-	 * @param date
-	 * @return
-	 */
-	private Long dateToDay(Date date){
-		long time = date.getTime();
-		return time/(1000 * 60 * 60 * 24);
-	}
-
-
-}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java
deleted file mode 100644
index e84aff4..0000000
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package org.springblade.system.user.wrapper;
-
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.system.cache.DictCache;
-import org.springblade.system.cache.SysCache;
-import org.springblade.system.entity.Tenant;
-import org.springblade.system.enums.DictEnum;
-import org.springblade.system.user.entity.User;
-import org.springblade.system.user.vo.UserVO;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author Chill
- */
-public class UserWrapper extends BaseEntityWrapper<User, UserVO> {
-
-	public static UserWrapper build() {
-		return new UserWrapper();
-	}
-
-	@Override
-	public UserVO entityVO(User user) {
-		UserVO userVO = Objects.requireNonNull(BeanUtil.copy(user, UserVO.class));
-		Tenant tenant = SysCache.getTenant(user.getTenantId());
-		List<String> roleName = SysCache.getRoleNames(user.getRoleId());
-		List<String> deptName = SysCache.getDeptNames(user.getDeptId());
-		List<String> postName = SysCache.getPostNames(user.getPostId());
-		userVO.setTenantName(tenant.getTenantName());
-		userVO.setRoleName(Func.join(roleName));
-		userVO.setDeptName(Func.join(deptName));
-		userVO.setPostName(Func.join(postName));
-		userVO.setSexName(DictCache.getValue(DictEnum.SEX, user.getSex()));
-		userVO.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
-		return userVO;
-	}
-
-}
diff --git a/Source/BladeX/blade-service/pom.xml b/Source/BladeX/blade-service/pom.xml
deleted file mode 100644
index 6920bb2..0000000
--- a/Source/BladeX/blade-service/pom.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <parent>
-        <groupId>org.springblade</groupId>
-        <artifactId>UBCS</artifactId>
-        <version>3.0.1.RELEASE</version>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>blade-service</artifactId>
-    <name>${project.artifactId}</name>
-    <version>3.0.1.RELEASE</version>
-    <packaging>pom</packaging>
-    <description>BladeX 寰湇鍔¢泦鍚�</description>
-
-    <modules>
-        <module>blade-desk</module>
-        <module>blade-system</module>
-        <module>blade-user</module>
-        <module>blade-code</module>
-        <module>blade-omd</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-metrics</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-tenant</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-api-crypto</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-dict-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-scope-api</artifactId>
-            <version>${bladex.project.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/Source/BladeX/pom.xml b/Source/BladeX/pom.xml
deleted file mode 100644
index 32624ed..0000000
--- a/Source/BladeX/pom.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.springblade</groupId>
-    <artifactId>UBCS</artifactId>
-    <version>3.0.1.RELEASE</version>
-    <packaging>pom</packaging>
-
-    <properties>
-        <bladex.project.version>3.0.1.RELEASE</bladex.project.version>
-
-        <java.version>1.8</java.version>
-        <maven.plugin.version>3.8.0</maven.plugin.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <orai18n.version>11.2.0.4</orai18n.version>
-        <spring.boot.version>2.7.1</spring.boot.version>
-        <spring.cloud.version>2021.0.3</spring.cloud.version>
-        <spring.platform.version>Cairo-SR8</spring.platform.version>
-
-        <!-- 鎺ㄨ崘浣跨敤Harbor -->
-        <docker.registry.url>192.168.0.157</docker.registry.url>
-        <docker.registry.host>http://${docker.registry.url}:2375</docker.registry.host>
-        <docker.username>admin</docker.username>
-        <docker.password>Harbor12345</docker.password>
-        <docker.namespace>blade</docker.namespace>
-        <docker.plugin.version>1.4.13</docker.plugin.version>
-    </properties>
-
-    <modules>
-        <module>blade-auth</module>
-        <module>blade-common</module>
-        <module>blade-gateway</module>
-        <module>blade-ops</module>
-        <module>blade-ops-api</module>
-        <module>blade-plugin</module>
-        <module>blade-plugin-api</module>
-        <module>blade-service</module>
-        <module>blade-service-api</module>
-    </modules>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.springblade.platform</groupId>
-                <artifactId>blade-bom</artifactId>
-                <version>${bladex.project.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.springblade</groupId>
-                <artifactId>blade-common</artifactId>
-                <version>${bladex.project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-dependencies</artifactId>
-                <version>${spring.boot.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.cloud</groupId>
-                <artifactId>spring-cloud-dependencies</artifactId>
-                <version>${spring.cloud.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-            <dependency>
-                <groupId>io.spring.platform</groupId>
-                <artifactId>platform-bom</artifactId>
-                <version>${spring.platform.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <finalName>${project.name}</finalName>
-        <Autowireds>
-            <Autowired>
-                <directory>src/main/Autowireds</directory>
-            </Autowired>
-            <Autowired>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.xml</include>
-                </includes>
-            </Autowired>
-        </Autowireds>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-maven-plugin</artifactId>
-                    <version>${spring.boot.version}</version>
-                    <configuration>
-                        <fork>true</fork>
-                        <finalName>${project.build.finalName}</finalName>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>repackage</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>com.spotify</groupId>
-                    <artifactId>dockerfile-maven-plugin</artifactId>
-                    <version>${docker.plugin.version}</version>
-                    <configuration>
-                        <username>${docker.username}</username>
-                        <password>${docker.password}</password>
-                        <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
-                        <tag>${project.version}</tag>
-                        <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                        <buildArgs>
-                            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
-                        </buildArgs>
-                    </configuration>
-                    <!--瀛愭湇鍔℃坊鍔犲涓嬮厤缃紝杩愯 mvn deploy 鍛戒护渚夸細鑷姩鎵撳寘闀滃儚-->
-                    <!--<executions>
-                        <execution>
-                            <id>default</id>
-                            <goals>
-                                <goal>build</goal>
-                                <goal>push</goal>
-                            </goals>
-                        </execution>
-                    </executions>-->
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-antrun-plugin</artifactId>
-                    <executions>
-                        <execution>
-                            <phase>package</phase>
-                            <goals>
-                                <goal>run</goal>
-                            </goals>
-                            <configuration>
-                                <tasks>
-                                    <!--suppress UnresolvedMavenProperty -->
-                                    <copy overwrite="true"
-                                          tofile="${session.executionRootDirectory}/target/${project.artifactId}.jar"
-                                          file="${project.build.directory}/${project.artifactId}.jar" />
-                                </tasks>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <configuration>
-                    <skip>true</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>${maven.plugin.version}</version>
-                <configuration>
-                    <source>${java.version}</source>
-                    <target>${java.version}</target>
-                    <encoding>UTF-8</encoding>
-                    <compilerArgs>
-                        <arg>-parameters</arg>
-                    </compilerArgs>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <repositories>
-        <repository>
-            <id>aliyun-repos</id>
-            <url>https://maven.aliyun.com/repository/public/</url>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-        <repository>
-            <id>blade-release</id>
-            <name>Release Repository</name>
-            <url>http://nexus.javablade.com/repository/maven-releases/</url>
-        </repository>
-    </repositories>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>aliyun-plugin</id>
-            <url>https://maven.aliyun.com/repository/public/</url>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </pluginRepository>
-    </pluginRepositories>
-
-</project>
diff --git a/Source/BladeX/service-start.sh b/Source/BladeX/service-start.sh
deleted file mode 100644
index 6501254..0000000
--- a/Source/BladeX/service-start.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#妫�鏌ョ▼搴忔槸鍚﹀湪杩愯
-start(){
-
-  #鍏堟竻绌簍arget骞舵墦鍖�
- mvn clean package
-
-  #鍚姩admin鏈嶅姟
- docker build -f ./blade-ops/blade-admin/Dockerfile -t bladex/blade-admin .
- docker run -d -p 36002:36002 --name blade-admin bladex/blade-admin:latest
-
- #鍚姩auth鏈嶅姟
- docker build -f ./blade-auth/Dockerfile -t bladex/blade-auth .
- docker run -d -p 36001:36001 --name blade-auth bladex/blade-auth:latest
-
- #鍚姩log鏈嶅姟
- docker build -f ./blade-ops/blade-log/Dockerfile -t bladex/blade-log .
- docker run -d -p 36005:36005 --name blade-log bladex/blade-log:latest
-
- #鍚姩desk鏈嶅姟
- docker build -f ./blade-service/blade-desk/Dockerfile -t bladex/blade-desk .
- docker run -d -p 36010:36010 --name blade-desk bladex/blade-desk:latest
-
-  #鍚姩宸ヤ綔娴乫low鏈嶅姟
- docker build -f ./blade-ops/blade-flow/Dockerfile -t bladex/blade-flow .
- docker run -d -p 36004:36004 --name blade-flow bladex/blade-flow:latest
-
- #鍚姩develop鏈嶅姟
- docker build -f ./blade-ops/blade-develop/Dockerfile -t bladex/blade-develop .
- docker run -d -p 36003:36003 --name blade-develop bladex/blade-develop:latest
-
- #鍚姩jobAdmin鏈嶅姟
- docker build -f ./blade-ops/blade-xxljob-admin/Dockerfile -t bladex/blade-jobadmin .
- docker run -d -p 36013:36013 --name blade-jobadmin bladex/blade-jobadmin:latest
-
- #鍚姩job鏈嶅姟
- docker build -f ./blade-ops/blade-xxljob/Dockerfile -t bladex/blade-job .
- docker run -d -p 36009:36009 --name blade-job bladex/blade-job:latest
-
- #鍚姩report鏈嶅姟
- docker build -f ./blade-ops/blade-report/Dockerfile -t bladex/blade-report .
- docker run -d -p 36006:36006 --name blade-report bladex/blade-report:latest
-
- #鍚姩Autowired鏈嶅姟
- docker build -f ./blade-ops/blade-Autowired/Dockerfile -t bladex/blade-Autowired .
- docker run -d -p 36007:36007 --name blade-Autowired bladex/blade-Autowired:latest
-
- #鍚姩swagger鏈嶅姟
- docker build -f ./blade-ops/blade-swagger/Dockerfile -t bladex/blade-swagger .
- docker run -d -p 36008:36008 --name blade-swagger bladex/blade-swagger:latest
-
- #鍚姩system鏈嶅姟
- docker build -f ./blade-service/blade-system/Dockerfile -t bladex/blade-system .
- docker run -d -p 36011:36011 --name blade-system bladex/blade-system:latest
-
- #鍚姩user鏈嶅姟
- docker build -f ./blade-service/blade-user/Dockerfile -t bladex/blade-user .
- docker run -d -p 36012:36012 --name blade-user bladex/blade-user:latest
-
- #鍚姩gateway鏈嶅姟
- docker build -f ./blade-gateway/Dockerfile -t bladex/blade-gateway .
- docker run -d -p 37000:37000 --name blade-gateway bladex/blade-gateway:latest
-
-}
-
-start
-
-
-
-
-
diff --git a/Source/BladeX/service-stop.sh b/Source/BladeX/service-stop.sh
deleted file mode 100644
index fa340ce..0000000
--- a/Source/BladeX/service-stop.sh
+++ /dev/null
@@ -1,173 +0,0 @@
-#鍋滄鏂规硶瀹瑰櫒鍜屽垹闄ゅ搴旈暅鍍忔柟娉�
-stop(){
-    #瀹氫箟瀹瑰櫒鍜岄暅鍍忕殑鍚嶇О
-    imagesName=bladex/blade-auth
-    containerName=blade-auth
-    #濡傛灉瀛樺湪锛屽氨鍏抽棴骞朵笖鍒犻櫎璇ュ鍣�
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-         echo $containerName"is up,we will stop and remove it !!!"
-         docker stop $containerName
-         docker rm $containerName
-         docker rmi $imagesName
-    else
-         echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-admin
-    containerName=blade-admin
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-        fi
-
-    imagesName=bladex/blade-auth
-    containerName=blade-auth
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-log
-    containerName=blade-log
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-desk
-    containerName=blade-desk
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-flow
-    containerName=blade-flow
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-develop
-    containerName=blade-develop
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-jobadmin
-    containerName=blade-jobadmin
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-job
-    containerName=blade-job
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-report
-    containerName=blade-report
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-Autowired
-    containerName=blade-Autowired
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-swagger
-    containerName=blade-swagger
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-system
-    containerName=blade-system
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-user
-    containerName=blade-user
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-    imagesName=bladex/blade-gateway
-    containerName=blade-gateway
-    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
-             echo $containerName"is up,we will stop and remove it !!!"
-             docker stop $containerName
-             docker rm $containerName
-             docker rmi $imagesName
-        else
-             echo $containerName" is not up!!!"
-    fi
-
-}
-stop
-
-
diff --git a/Source/BladeX/.editorconfig b/Source/UBCS/.editorconfig
similarity index 100%
rename from Source/BladeX/.editorconfig
rename to Source/UBCS/.editorconfig
diff --git a/Source/BladeX/.gitignore b/Source/UBCS/.gitignore
similarity index 100%
rename from Source/BladeX/.gitignore
rename to Source/UBCS/.gitignore
diff --git a/Source/BladeX/LICENSE b/Source/UBCS/LICENSE
similarity index 100%
rename from Source/BladeX/LICENSE
rename to Source/UBCS/LICENSE
diff --git a/Source/BladeX/README.md b/Source/UBCS/README.md
similarity index 100%
rename from Source/BladeX/README.md
rename to Source/UBCS/README.md
diff --git a/Source/BladeX/doc/docker/README.md b/Source/UBCS/doc/docker/README.md
similarity index 100%
rename from Source/BladeX/doc/docker/README.md
rename to Source/UBCS/doc/docker/README.md
diff --git "a/Source/BladeX/doc/mvn/mvn\345\221\275\344\273\244.md" "b/Source/UBCS/doc/mvn/mvn\345\221\275\344\273\244.md"
similarity index 100%
rename from "Source/BladeX/doc/mvn/mvn\345\221\275\344\273\244.md"
rename to "Source/UBCS/doc/mvn/mvn\345\221\275\344\273\244.md"
diff --git a/Source/BladeX/doc/nacos/README.md b/Source/UBCS/doc/nacos/README.md
similarity index 100%
rename from Source/BladeX/doc/nacos/README.md
rename to Source/UBCS/doc/nacos/README.md
diff --git a/Source/BladeX/doc/nacos/blade-dev.yaml b/Source/UBCS/doc/nacos/blade-dev.yaml
similarity index 100%
rename from Source/BladeX/doc/nacos/blade-dev.yaml
rename to Source/UBCS/doc/nacos/blade-dev.yaml
diff --git a/Source/BladeX/doc/nacos/blade-prod.yaml b/Source/UBCS/doc/nacos/blade-prod.yaml
similarity index 100%
rename from Source/BladeX/doc/nacos/blade-prod.yaml
rename to Source/UBCS/doc/nacos/blade-prod.yaml
diff --git a/Source/BladeX/doc/nacos/blade-test.yaml b/Source/UBCS/doc/nacos/blade-test.yaml
similarity index 100%
rename from Source/BladeX/doc/nacos/blade-test.yaml
rename to Source/UBCS/doc/nacos/blade-test.yaml
diff --git a/Source/BladeX/doc/nacos/blade.yaml b/Source/UBCS/doc/nacos/blade.yaml
similarity index 100%
rename from Source/BladeX/doc/nacos/blade.yaml
rename to Source/UBCS/doc/nacos/blade.yaml
diff --git a/Source/BladeX/doc/nacos/routes/README.md b/Source/UBCS/doc/nacos/routes/README.md
similarity index 100%
rename from Source/BladeX/doc/nacos/routes/README.md
rename to Source/UBCS/doc/nacos/routes/README.md
diff --git a/Source/BladeX/doc/nacos/routes/blade-gateway-dev.json b/Source/UBCS/doc/nacos/routes/blade-gateway-dev.json
similarity index 100%
rename from Source/BladeX/doc/nacos/routes/blade-gateway-dev.json
rename to Source/UBCS/doc/nacos/routes/blade-gateway-dev.json
diff --git a/Source/BladeX/doc/other/env.md b/Source/UBCS/doc/other/env.md
similarity index 100%
rename from Source/BladeX/doc/other/env.md
rename to Source/UBCS/doc/other/env.md
diff --git a/Source/BladeX/doc/other/http-code.md b/Source/UBCS/doc/other/http-code.md
similarity index 100%
rename from Source/BladeX/doc/other/http-code.md
rename to Source/UBCS/doc/other/http-code.md
diff --git a/Source/BladeX/doc/sql/db/database-info.md b/Source/UBCS/doc/sql/db/database-info.md
similarity index 100%
rename from Source/BladeX/doc/sql/db/database-info.md
rename to Source/UBCS/doc/sql/db/database-info.md
diff --git a/Source/BladeX/doc/sql/dm/bladex-flowable-dameng.dmp b/Source/UBCS/doc/sql/dm/bladex-flowable-dameng.dmp
similarity index 100%
rename from Source/BladeX/doc/sql/dm/bladex-flowable-dameng.dmp
rename to Source/UBCS/doc/sql/dm/bladex-flowable-dameng.dmp
Binary files differ
diff --git a/Source/BladeX/doc/sql/dm/bladex-saber-dameng.dmp b/Source/UBCS/doc/sql/dm/bladex-saber-dameng.dmp
similarity index 100%
rename from Source/BladeX/doc/sql/dm/bladex-saber-dameng.dmp
rename to Source/UBCS/doc/sql/dm/bladex-saber-dameng.dmp
Binary files differ
diff --git a/Source/BladeX/doc/sql/dm/bladex-sword-dameng.dmp b/Source/UBCS/doc/sql/dm/bladex-sword-dameng.dmp
similarity index 100%
rename from Source/BladeX/doc/sql/dm/bladex-sword-dameng.dmp
rename to Source/UBCS/doc/sql/dm/bladex-sword-dameng.dmp
Binary files differ
diff --git a/Source/BladeX/doc/sql/mysql/bladex-flowable-mysql.sql b/Source/UBCS/doc/sql/mysql/bladex-flowable-mysql.sql
similarity index 100%
rename from Source/BladeX/doc/sql/mysql/bladex-flowable-mysql.sql
rename to Source/UBCS/doc/sql/mysql/bladex-flowable-mysql.sql
diff --git a/Source/BladeX/doc/sql/mysql/bladex-saber-mysql.sql b/Source/UBCS/doc/sql/mysql/bladex-saber-mysql.sql
similarity index 100%
rename from Source/BladeX/doc/sql/mysql/bladex-saber-mysql.sql
rename to Source/UBCS/doc/sql/mysql/bladex-saber-mysql.sql
diff --git a/Source/BladeX/doc/sql/mysql/bladex-sword-mysql.sql b/Source/UBCS/doc/sql/mysql/bladex-sword-mysql.sql
similarity index 100%
rename from Source/BladeX/doc/sql/mysql/bladex-sword-mysql.sql
rename to Source/UBCS/doc/sql/mysql/bladex-sword-mysql.sql
diff --git a/Source/BladeX/doc/sql/oracle/bladex-flowable-oracle.sql b/Source/UBCS/doc/sql/oracle/bladex-flowable-oracle.sql
similarity index 100%
rename from Source/BladeX/doc/sql/oracle/bladex-flowable-oracle.sql
rename to Source/UBCS/doc/sql/oracle/bladex-flowable-oracle.sql
diff --git a/Source/BladeX/doc/sql/oracle/bladex-saber-oracle.sql b/Source/UBCS/doc/sql/oracle/bladex-saber-oracle.sql
similarity index 100%
rename from Source/BladeX/doc/sql/oracle/bladex-saber-oracle.sql
rename to Source/UBCS/doc/sql/oracle/bladex-saber-oracle.sql
diff --git a/Source/BladeX/doc/sql/oracle/bladex-sword-oracle.sql b/Source/UBCS/doc/sql/oracle/bladex-sword-oracle.sql
similarity index 100%
rename from Source/BladeX/doc/sql/oracle/bladex-sword-oracle.sql
rename to Source/UBCS/doc/sql/oracle/bladex-sword-oracle.sql
diff --git a/Source/BladeX/doc/sql/postgresql/bladex-flowable-postgresql.sql b/Source/UBCS/doc/sql/postgresql/bladex-flowable-postgresql.sql
similarity index 100%
rename from Source/BladeX/doc/sql/postgresql/bladex-flowable-postgresql.sql
rename to Source/UBCS/doc/sql/postgresql/bladex-flowable-postgresql.sql
diff --git a/Source/BladeX/doc/sql/postgresql/bladex-saber-postgresql.sql b/Source/UBCS/doc/sql/postgresql/bladex-saber-postgresql.sql
similarity index 100%
rename from Source/BladeX/doc/sql/postgresql/bladex-saber-postgresql.sql
rename to Source/UBCS/doc/sql/postgresql/bladex-saber-postgresql.sql
diff --git a/Source/BladeX/doc/sql/postgresql/bladex-sword-postgresql.sql b/Source/UBCS/doc/sql/postgresql/bladex-sword-postgresql.sql
similarity index 100%
rename from Source/BladeX/doc/sql/postgresql/bladex-sword-postgresql.sql
rename to Source/UBCS/doc/sql/postgresql/bladex-sword-postgresql.sql
diff --git a/Source/BladeX/doc/sql/sqlserver/bladex-flowable-sqlserver.sql b/Source/UBCS/doc/sql/sqlserver/bladex-flowable-sqlserver.sql
similarity index 100%
rename from Source/BladeX/doc/sql/sqlserver/bladex-flowable-sqlserver.sql
rename to Source/UBCS/doc/sql/sqlserver/bladex-flowable-sqlserver.sql
diff --git a/Source/BladeX/doc/sql/sqlserver/bladex-saber-sqlserver.sql b/Source/UBCS/doc/sql/sqlserver/bladex-saber-sqlserver.sql
similarity index 100%
rename from Source/BladeX/doc/sql/sqlserver/bladex-saber-sqlserver.sql
rename to Source/UBCS/doc/sql/sqlserver/bladex-saber-sqlserver.sql
diff --git a/Source/BladeX/doc/sql/sqlserver/bladex-sword-sqlserver.sql b/Source/UBCS/doc/sql/sqlserver/bladex-sword-sqlserver.sql
similarity index 100%
rename from Source/BladeX/doc/sql/sqlserver/bladex-sword-sqlserver.sql
rename to Source/UBCS/doc/sql/sqlserver/bladex-sword-sqlserver.sql
diff --git a/Source/BladeX/doc/sql/update/bladex-update-dameng-3.0.0~3.0.1.sql b/Source/UBCS/doc/sql/update/bladex-update-dameng-3.0.0~3.0.1.sql
similarity index 100%
rename from Source/BladeX/doc/sql/update/bladex-update-dameng-3.0.0~3.0.1.sql
rename to Source/UBCS/doc/sql/update/bladex-update-dameng-3.0.0~3.0.1.sql
diff --git a/Source/BladeX/doc/sql/update/bladex-update-mysql-3.0.0~3.0.1.sql b/Source/UBCS/doc/sql/update/bladex-update-mysql-3.0.0~3.0.1.sql
similarity index 100%
rename from Source/BladeX/doc/sql/update/bladex-update-mysql-3.0.0~3.0.1.sql
rename to Source/UBCS/doc/sql/update/bladex-update-mysql-3.0.0~3.0.1.sql
diff --git a/Source/BladeX/doc/sql/update/bladex-update-oracle-3.0.0~3.0.1.sql b/Source/UBCS/doc/sql/update/bladex-update-oracle-3.0.0~3.0.1.sql
similarity index 100%
rename from Source/BladeX/doc/sql/update/bladex-update-oracle-3.0.0~3.0.1.sql
rename to Source/UBCS/doc/sql/update/bladex-update-oracle-3.0.0~3.0.1.sql
diff --git a/Source/BladeX/doc/sql/update/bladex-update-postgresql-3.0.0~3.0.1.sql b/Source/UBCS/doc/sql/update/bladex-update-postgresql-3.0.0~3.0.1.sql
similarity index 100%
rename from Source/BladeX/doc/sql/update/bladex-update-postgresql-3.0.0~3.0.1.sql
rename to Source/UBCS/doc/sql/update/bladex-update-postgresql-3.0.0~3.0.1.sql
diff --git a/Source/BladeX/doc/sql/update/bladex-update-sqlserver-3.0.0~3.0.1.sql b/Source/UBCS/doc/sql/update/bladex-update-sqlserver-3.0.0~3.0.1.sql
similarity index 100%
rename from Source/BladeX/doc/sql/update/bladex-update-sqlserver-3.0.0~3.0.1.sql
rename to Source/UBCS/doc/sql/update/bladex-update-sqlserver-3.0.0~3.0.1.sql
diff --git a/Source/UBCS/pom.xml b/Source/UBCS/pom.xml
new file mode 100644
index 0000000..ca85d29
--- /dev/null
+++ b/Source/UBCS/pom.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.springblade</groupId>
+    <artifactId>UBCS</artifactId>
+    <version>3.0.1.RELEASE</version>
+    <packaging>pom</packaging>
+
+    <properties>
+        <bladex.project.version>3.0.1.RELEASE</bladex.project.version>
+
+        <java.version>1.8</java.version>
+        <maven.plugin.version>3.8.0</maven.plugin.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <orai18n.version>11.2.0.4</orai18n.version>
+        <spring.boot.version>2.7.1</spring.boot.version>
+        <spring.cloud.version>2021.0.3</spring.cloud.version>
+        <spring.platform.version>Cairo-SR8</spring.platform.version>
+
+        <!-- 鎺ㄨ崘浣跨敤Harbor -->
+        <docker.registry.url>192.168.0.157</docker.registry.url>
+        <docker.registry.host>http://${docker.registry.url}:2375</docker.registry.host>
+        <docker.username>admin</docker.username>
+        <docker.password>Harbor12345</docker.password>
+        <docker.namespace>blade</docker.namespace>
+        <docker.plugin.version>1.4.13</docker.plugin.version>
+    </properties>
+
+    <modules>
+        <module>ubcs-auth</module>
+        <module>ubcs-common</module>
+        <module>ubcs-gateway</module>
+        <module>ubcs-ops</module>
+        <module>ubcs-ops-api</module>
+        <module>ubcs-plugin</module>
+        <module>ubcs-plugin-api</module>
+        <module>ubcs-service</module>
+        <module>ubcs-service-api</module>
+    </modules>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springblade.platform</groupId>
+                <artifactId>blade-bom</artifactId>
+                <version>${bladex.project.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.springblade</groupId>
+                <artifactId>ubcs-common</artifactId>
+                <version>${bladex.project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring.boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring.cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>io.spring.platform</groupId>
+                <artifactId>platform-bom</artifactId>
+                <version>${spring.platform.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.name}</finalName>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </resource>
+        </resources>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-maven-plugin</artifactId>
+                    <version>${spring.boot.version}</version>
+                    <configuration>
+                        <fork>true</fork>
+                        <finalName>${project.build.finalName}</finalName>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>repackage</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>com.spotify</groupId>
+                    <artifactId>dockerfile-maven-plugin</artifactId>
+                    <version>${docker.plugin.version}</version>
+                    <configuration>
+                        <username>${docker.username}</username>
+                        <password>${docker.password}</password>
+                        <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                        <tag>${project.version}</tag>
+                        <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                        <buildArgs>
+                            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                        </buildArgs>
+                    </configuration>
+                    <!--瀛愭湇鍔℃坊鍔犲涓嬮厤缃紝杩愯 mvn deploy 鍛戒护渚夸細鑷姩鎵撳寘闀滃儚-->
+                    <!--<executions>
+                        <execution>
+                            <id>default</id>
+                            <goals>
+                                <goal>build</goal>
+                                <goal>push</goal>
+                            </goals>
+                        </execution>
+                    </executions>-->
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-antrun-plugin</artifactId>
+                    <executions>
+                        <execution>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>run</goal>
+                            </goals>
+                            <configuration>
+                                <tasks>
+                                    <!--suppress UnresolvedMavenProperty -->
+                                    <copy overwrite="true"
+                                          tofile="${session.executionRootDirectory}/target/${project.artifactId}.jar"
+                                          file="${project.build.directory}/${project.artifactId}.jar" />
+                                </tasks>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven.plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>UTF-8</encoding>
+                    <compilerArgs>
+                        <arg>-parameters</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>aliyun-repos</id>
+            <url>https://maven.aliyun.com/repository/public/</url>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+        <repository>
+            <id>blade-release</id>
+            <name>Release Repository</name>
+            <url>http://nexus.javablade.com/repository/maven-releases/</url>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>aliyun-plugin</id>
+            <url>https://maven.aliyun.com/repository/public/</url>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+</project>
diff --git a/Source/BladeX/script/docker/app/.env b/Source/UBCS/script/docker/app/.env
similarity index 100%
rename from Source/BladeX/script/docker/app/.env
rename to Source/UBCS/script/docker/app/.env
diff --git a/Source/BladeX/script/docker/app/deploy.sh b/Source/UBCS/script/docker/app/deploy.sh
similarity index 100%
rename from Source/BladeX/script/docker/app/deploy.sh
rename to Source/UBCS/script/docker/app/deploy.sh
diff --git a/Source/BladeX/script/docker/app/docker-compose.yml b/Source/UBCS/script/docker/app/docker-compose.yml
similarity index 100%
rename from Source/BladeX/script/docker/app/docker-compose.yml
rename to Source/UBCS/script/docker/app/docker-compose.yml
diff --git a/Source/BladeX/script/docker/app/nacos/init.d/custom.properties b/Source/UBCS/script/docker/app/nacos/init.d/custom.properties
similarity index 100%
rename from Source/BladeX/script/docker/app/nacos/init.d/custom.properties
rename to Source/UBCS/script/docker/app/nacos/init.d/custom.properties
diff --git a/Source/BladeX/script/docker/app/nginx/api/nginx.conf b/Source/UBCS/script/docker/app/nginx/api/nginx.conf
similarity index 100%
rename from Source/BladeX/script/docker/app/nginx/api/nginx.conf
rename to Source/UBCS/script/docker/app/nginx/api/nginx.conf
diff --git a/Source/BladeX/script/docker/app/nginx/web/html/index.html b/Source/UBCS/script/docker/app/nginx/web/html/index.html
similarity index 100%
rename from Source/BladeX/script/docker/app/nginx/web/html/index.html
rename to Source/UBCS/script/docker/app/nginx/web/html/index.html
diff --git a/Source/BladeX/script/docker/app/nginx/web/nginx.conf b/Source/UBCS/script/docker/app/nginx/web/nginx.conf
similarity index 100%
rename from Source/BladeX/script/docker/app/nginx/web/nginx.conf
rename to Source/UBCS/script/docker/app/nginx/web/nginx.conf
diff --git a/Source/BladeX/script/docker/app/prometheus/config/alert_rules.yml b/Source/UBCS/script/docker/app/prometheus/config/alert_rules.yml
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/config/alert_rules.yml
rename to Source/UBCS/script/docker/app/prometheus/config/alert_rules.yml
diff --git a/Source/BladeX/script/docker/app/prometheus/config/alertmanager.yml b/Source/UBCS/script/docker/app/prometheus/config/alertmanager.yml
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/config/alertmanager.yml
rename to Source/UBCS/script/docker/app/prometheus/config/alertmanager.yml
diff --git a/Source/BladeX/script/docker/app/prometheus/config/dingtalk.yml b/Source/UBCS/script/docker/app/prometheus/config/dingtalk.yml
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/config/dingtalk.yml
rename to Source/UBCS/script/docker/app/prometheus/config/dingtalk.yml
diff --git a/Source/BladeX/script/docker/app/prometheus/config/grafana.ini b/Source/UBCS/script/docker/app/prometheus/config/grafana.ini
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/config/grafana.ini
rename to Source/UBCS/script/docker/app/prometheus/config/grafana.ini
diff --git a/Source/BladeX/script/docker/app/prometheus/config/prometheus.yml b/Source/UBCS/script/docker/app/prometheus/config/prometheus.yml
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/config/prometheus.yml
rename to Source/UBCS/script/docker/app/prometheus/config/prometheus.yml
diff --git a/Source/BladeX/script/docker/app/prometheus/config/wechat.tmpl b/Source/UBCS/script/docker/app/prometheus/config/wechat.tmpl
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/config/wechat.tmpl
rename to Source/UBCS/script/docker/app/prometheus/config/wechat.tmpl
diff --git a/Source/BladeX/script/docker/app/prometheus/dashboard/bladex-docker.json b/Source/UBCS/script/docker/app/prometheus/dashboard/bladex-docker.json
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/dashboard/bladex-docker.json
rename to Source/UBCS/script/docker/app/prometheus/dashboard/bladex-docker.json
diff --git a/Source/BladeX/script/docker/app/prometheus/dashboard/bladex-jvm.json b/Source/UBCS/script/docker/app/prometheus/dashboard/bladex-jvm.json
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/dashboard/bladex-jvm.json
rename to Source/UBCS/script/docker/app/prometheus/dashboard/bladex-jvm.json
diff --git a/Source/BladeX/script/docker/app/prometheus/dashboard/bladex-linux.json b/Source/UBCS/script/docker/app/prometheus/dashboard/bladex-linux.json
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/dashboard/bladex-linux.json
rename to Source/UBCS/script/docker/app/prometheus/dashboard/bladex-linux.json
diff --git a/Source/BladeX/script/docker/app/prometheus/dashboard/bladex-mysql.json b/Source/UBCS/script/docker/app/prometheus/dashboard/bladex-mysql.json
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/dashboard/bladex-mysql.json
rename to Source/UBCS/script/docker/app/prometheus/dashboard/bladex-mysql.json
diff --git a/Source/BladeX/script/docker/app/prometheus/dashboard/bladex-nacos.json b/Source/UBCS/script/docker/app/prometheus/dashboard/bladex-nacos.json
similarity index 100%
rename from Source/BladeX/script/docker/app/prometheus/dashboard/bladex-nacos.json
rename to Source/UBCS/script/docker/app/prometheus/dashboard/bladex-nacos.json
diff --git a/Source/BladeX/script/docker/elk/README.md b/Source/UBCS/script/docker/elk/README.md
similarity index 100%
rename from Source/BladeX/script/docker/elk/README.md
rename to Source/UBCS/script/docker/elk/README.md
diff --git a/Source/BladeX/script/docker/elk/deploy.sh b/Source/UBCS/script/docker/elk/deploy.sh
similarity index 100%
rename from Source/BladeX/script/docker/elk/deploy.sh
rename to Source/UBCS/script/docker/elk/deploy.sh
diff --git a/Source/BladeX/script/docker/elk/docker-compose.yml b/Source/UBCS/script/docker/elk/docker-compose.yml
similarity index 100%
rename from Source/BladeX/script/docker/elk/docker-compose.yml
rename to Source/UBCS/script/docker/elk/docker-compose.yml
diff --git a/Source/BladeX/script/docker/elk/es-master.yml b/Source/UBCS/script/docker/elk/es-master.yml
similarity index 100%
rename from Source/BladeX/script/docker/elk/es-master.yml
rename to Source/UBCS/script/docker/elk/es-master.yml
diff --git a/Source/BladeX/script/docker/elk/es-slave1.yml b/Source/UBCS/script/docker/elk/es-slave1.yml
similarity index 100%
rename from Source/BladeX/script/docker/elk/es-slave1.yml
rename to Source/UBCS/script/docker/elk/es-slave1.yml
diff --git a/Source/BladeX/script/docker/elk/es-slave2.yml b/Source/UBCS/script/docker/elk/es-slave2.yml
similarity index 100%
rename from Source/BladeX/script/docker/elk/es-slave2.yml
rename to Source/UBCS/script/docker/elk/es-slave2.yml
diff --git a/Source/BladeX/script/docker/elk/filebeat.yml b/Source/UBCS/script/docker/elk/filebeat.yml
similarity index 100%
rename from Source/BladeX/script/docker/elk/filebeat.yml
rename to Source/UBCS/script/docker/elk/filebeat.yml
diff --git a/Source/BladeX/script/docker/elk/kibana.yml b/Source/UBCS/script/docker/elk/kibana.yml
similarity index 100%
rename from Source/BladeX/script/docker/elk/kibana.yml
rename to Source/UBCS/script/docker/elk/kibana.yml
diff --git a/Source/BladeX/script/docker/elk/logstash-filebeat.conf b/Source/UBCS/script/docker/elk/logstash-filebeat.conf
similarity index 100%
rename from Source/BladeX/script/docker/elk/logstash-filebeat.conf
rename to Source/UBCS/script/docker/elk/logstash-filebeat.conf
diff --git a/Source/BladeX/script/docker/elk/logstash.yml b/Source/UBCS/script/docker/elk/logstash.yml
similarity index 100%
rename from Source/BladeX/script/docker/elk/logstash.yml
rename to Source/UBCS/script/docker/elk/logstash.yml
diff --git a/Source/BladeX/script/docker/elk/undeploy.sh b/Source/UBCS/script/docker/elk/undeploy.sh
similarity index 100%
rename from Source/BladeX/script/docker/elk/undeploy.sh
rename to Source/UBCS/script/docker/elk/undeploy.sh
diff --git a/Source/BladeX/script/fatjar/service.cmd b/Source/UBCS/script/fatjar/service.cmd
similarity index 100%
rename from Source/BladeX/script/fatjar/service.cmd
rename to Source/UBCS/script/fatjar/service.cmd
diff --git a/Source/BladeX/script/fatjar/service.sh b/Source/UBCS/script/fatjar/service.sh
similarity index 100%
rename from Source/BladeX/script/fatjar/service.sh
rename to Source/UBCS/script/fatjar/service.sh
diff --git a/Source/UBCS/service-start.sh b/Source/UBCS/service-start.sh
new file mode 100644
index 0000000..ac56fbd
--- /dev/null
+++ b/Source/UBCS/service-start.sh
@@ -0,0 +1,83 @@
+#鏈嶅姟鐢熸垚闀滃儚锛屽苟杩愯
+start(){
+
+  #鍏堟竻绌簍arget骞舵墦鍖�
+ mvn clean package
+
+  #鍚姩admin鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-admin/Dockerfile -t vci-ubcs/ubcs-admin .
+ docker run -d -p 36002:36002 --name ubcs-admin vci-ubcs/ubcs-admin:latest
+
+ #鍚姩auth鏈嶅姟
+ docker build -f ./ubcs-auth/Dockerfile -t vci-ubcs/ubcs-auth .
+ docker run -d -p 36001:36001 --name ubcs-auth vci-ubcs/ubcs-auth:latest
+
+ #鍚姩log鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-log/Dockerfile -t vci-ubcs/ubcs-log .
+ docker run -d -p 36005:36005 --name ubcs-log vci-ubcs/ubcs-log:latest
+
+ #鍚姩desk鏈嶅姟
+ docker build -f ./ubcs-service/ubcs-desk/Dockerfile -t vci-ubcs/ubcs-desk .
+ docker run -d -p 36010:36010 --name ubcs-desk vci-ubcs/ubcs-desk:latest
+
+  #鍚姩宸ヤ綔娴乫low鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-flow/Dockerfile -t vci-ubcs/ubcs-flow .
+ docker run -d -p 36004:36004 --name ubcs-flow vci-ubcs/ubcs-flow:latest
+
+ #鍚姩develop鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-develop/Dockerfile -t vci-ubcs/ubcs-develop .
+ docker run -d -p 36003:36003 --name ubcs-develop vci-ubcs/ubcs-develop:latest
+
+ #鍚姩jobAdmin鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-xxljob-admin/Dockerfile -t vci-ubcs/ubcs-jobadmin .
+ docker run -d -p 36013:36013 --name ubcs-jobadmin vci-ubcs/ubcs-jobadmin:latest
+
+ #鍚姩job鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-xxljob/Dockerfile -t vci-ubcs/ubcs-job .
+ docker run -d -p 36009:36009 --name ubcs-job vci-ubcs/ubcs-job:latest
+
+ #鍚姩report鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-report/Dockerfile -t vci-ubcs/ubcs-report .
+ docker run -d -p 36006:36006 --name ubcs-report vci-ubcs/ubcs-report:latest
+
+ #鍚姩Resource鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-resource/Dockerfile -t vci-ubcs/ubcs-resource .
+ docker run -d -p 36007:36007 --name ubcs-rresource vci-ubcs/ubcs-resource:latest
+
+ #鍚姩swagger鏈嶅姟
+ docker build -f ./ubcs-ops/ubcs-swagger/Dockerfile -t vci-ubcs/ubcs-swagger .
+ docker run -d -p 36008:36008 --name ubcs-swagger vci-ubcs/ubcs-swagger:latest
+
+ #鍚姩system鏈嶅姟
+ docker build -f ./ubcs-service/ubcs-system/Dockerfile -t vci-ubcs/ubcs-system .
+ docker run -d -p 36011:36011 --name ubcs-system vci-ubcs/ubcs-system:latest
+
+ #鍚姩user鏈嶅姟
+ docker build -f ./ubcs-service/ubcs-user/Dockerfile -t vci-ubcs/ubcs-user .
+ docker run -d -p 36012:36012 --name ubcs-user vci-ubcs/ubcs-user:latest
+
+ #鍚姩gateway鏈嶅姟
+ docker build -f ./ubcs-gateway/Dockerfile -t vci-ubcs/ubcs-gateway .
+ docker run -d -p 37000:37000 --name ubcs-gateway vci-ubcs/ubcs-gateway:latest
+
+ #鍚姩omdy鏈嶅姟
+ docker build -f ./ubcs-omd/Dockerfile -t vci-ubcs/ubcs-omd .
+ docker run -d -p 36015:36015 --name ubcs-omd vci-ubcs/ubcs-omd:latest
+
+ #鍚姩code鏈嶅姟
+ docker build -f ./ubcs-code/Dockerfile -t vci-ubcs/ubcs-code .
+ docker run -d -p 36013:36013 --name ubcs-code vci-ubcs/ubcs-code:latest
+
+
+ #鍏朵粬鏈嶅姟璇疯嚜琛屾坊鍔�
+
+
+
+}
+
+start
+
+
+
+
+
diff --git a/Source/UBCS/service-stop.sh b/Source/UBCS/service-stop.sh
new file mode 100644
index 0000000..9f4cb9c
--- /dev/null
+++ b/Source/UBCS/service-stop.sh
@@ -0,0 +1,199 @@
+#鍋滄瀹瑰櫒杩愯鍜屽垹闄ゅ搴旈暅鍍忔柟娉�
+stop(){
+    #瀹氫箟瀹瑰櫒鍜岄暅鍍忕殑鍚嶇О
+    imagesName=vci-ubcs/ubcs-
+    #瀹氫箟鏈嶅姟鍚嶇О
+    containerName=ubcs-auth
+    #濡傛灉瀛樺湪锛屽氨鍏抽棴骞朵笖鍒犻櫎璇ュ鍣�
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+         echo $containerName"is up,we will stop and remove it !!!"
+         docker stop $containerName
+         docker rm $containerName
+         docker rmi $imagesName
+    else
+         echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-admin
+    containerName=ubcs-admin
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+        fi
+
+    imagesName=vci-ubcs/ubcs-auth
+    containerName=ubcs-auth
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-log
+    containerName=ubcs-log
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-desk
+    containerName=ubcs-desk
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-flow
+    containerName=ubcs-flow
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-develop
+    containerName=ubcs-develop
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-jobadmin
+    containerName=ubcs-jobadmin
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-job
+    containerName=ubcs-job
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-report
+    containerName=ubcs-report
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-resource
+    containerName=ubcs-resource
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-swagger
+    containerName=ubcs-swagger
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-system
+    containerName=ubcs-system
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-user
+    containerName=ubcs-user
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-gateway
+    containerName=ubcs-gateway
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-omd
+    containerName=ubcs-omd
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=vci-ubcs/ubcs-code
+    containerName=ubcs-code
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    #鍏朵粬鏈嶅姟闇�瑕侊紝璇疯嚜琛屾坊鍔�
+
+
+}
+stop
+
+
diff --git a/Source/BladeX/blade-auth/Dockerfile b/Source/UBCS/ubcs-auth/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-auth/Dockerfile
rename to Source/UBCS/ubcs-auth/Dockerfile
diff --git a/Source/BladeX/blade-auth/README.md b/Source/UBCS/ubcs-auth/README.md
similarity index 100%
rename from Source/BladeX/blade-auth/README.md
rename to Source/UBCS/ubcs-auth/README.md
diff --git a/Source/UBCS/ubcs-auth/pom.xml b/Source/UBCS/ubcs-auth/pom.xml
new file mode 100644
index 0000000..a92b9d5
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/pom.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>UBCS</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <artifactId>ubcs-auth</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springblade</groupId>
+                    <artifactId>ubcs-scope-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-db</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-cloud</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-metrics</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-social</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-user-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-system-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <!--瀹夊叏妯″潡-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security.oauth</groupId>
+            <artifactId>spring-security-oauth2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-jwt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-redis</artifactId>
+        </dependency>
+        <!-- 楠岃瘉鐮� -->
+        <dependency>
+            <groupId>com.github.whvcse</groupId>
+            <artifactId>easy-captcha</artifactId>
+        </dependency>
+        <!--freemarker-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-freemarker</artifactId>
+        </dependency>
+        <!--oracle椹卞姩-->
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+        <!-- 閾捐矾杩借釜銆佹湇鍔$洃鎺� -->
+        <!--<dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-trace</artifactId>
+        </dependency>-->
+        <!-- 瑙e喅Java11鏃犳硶杩愯鐨勯棶棰� -->
+        <!--<dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.2.11</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-core</artifactId>
+            <version>2.2.11</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+            <version>2.2.11</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1.1</version>
+        </dependency>-->
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/AuthApplication.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/AuthApplication.java
new file mode 100644
index 0000000..b28b2e1
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/AuthApplication.java
@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth;
+
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * 鐢ㄦ埛璁よ瘉鏈嶅姟鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class AuthApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeAuthorizationServerConfiguration.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeAuthorizationServerConfiguration.java
new file mode 100644
index 0000000..2d03d28
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeAuthorizationServerConfiguration.java
@@ -0,0 +1,120 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.config;
+
+import com.vci.ubcs.system.user.feign.IUserClient;
+import com.vci.ubcs.auth.constant.AuthConstant;
+import com.vci.ubcs.auth.granter.BladeTokenGranter;
+import com.vci.ubcs.auth.service.BladeClientDetailsServiceImpl;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.social.props.SocialProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
+import org.springframework.security.oauth2.provider.TokenGranter;
+import org.springframework.security.oauth2.provider.token.TokenEnhancer;
+import org.springframework.security.oauth2.provider.token.TokenEnhancerChain;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+
+import javax.sql.DataSource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 璁よ瘉鏈嶅姟鍣ㄩ厤缃�
+ *
+ * @author Chill
+ */
+@Order
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+@EnableAuthorizationServer
+public class BladeAuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
+
+	private final DataSource dataSource;
+
+	private final AuthenticationManager authenticationManager;
+
+	private final UserDetailsService userDetailsService;
+
+	private final TokenStore tokenStore;
+
+	private final TokenEnhancer jwtTokenEnhancer;
+
+	private final JwtAccessTokenConverter jwtAccessTokenConverter;
+
+	private final BladeRedis bladeRedis;
+
+	private final IUserClient userClient;
+
+	private final SocialProperties socialProperties;
+
+	@Override
+	public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
+		//鑾峰彇鑷畾涔塼okenGranter
+		TokenGranter tokenGranter = BladeTokenGranter.getTokenGranter(authenticationManager, endpoints, bladeRedis, userClient, socialProperties);
+
+		//閰嶇疆绔偣
+		endpoints.tokenStore(tokenStore)
+			.authenticationManager(authenticationManager)
+			.userDetailsService(userDetailsService)
+			.tokenGranter(tokenGranter);
+
+		//鎵╁睍token杩斿洖缁撴灉
+		if (jwtAccessTokenConverter != null && jwtTokenEnhancer != null) {
+			TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
+			List<TokenEnhancer> enhancerList = new ArrayList<>();
+			enhancerList.add(jwtTokenEnhancer);
+			enhancerList.add(jwtAccessTokenConverter);
+			tokenEnhancerChain.setTokenEnhancers(enhancerList);
+			//jwt澧炲己
+			endpoints.tokenEnhancer(tokenEnhancerChain).accessTokenConverter(jwtAccessTokenConverter);
+		}
+	}
+
+	/**
+	 * 閰嶇疆瀹㈡埛绔俊鎭�
+	 * 鏈嶅姟鍚姩鏃跺姞杞絪ql
+	 * 浣滅敤锛氭煡璇lient淇℃伅
+	 */
+	@Override
+	@SneakyThrows
+	public void configure(ClientDetailsServiceConfigurer clients) {
+		BladeClientDetailsServiceImpl clientDetailsService = new BladeClientDetailsServiceImpl(dataSource);
+		clientDetailsService.setSelectClientDetailsSql(AuthConstant.DEFAULT_SELECT_STATEMENT);
+		clientDetailsService.setFindClientDetailsSql(AuthConstant.DEFAULT_FIND_STATEMENT);
+		clients.withClientDetails(clientDetailsService);
+	}
+
+	@Override
+	public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
+		oauthServer
+			.allowFormAuthenticationForClients()
+			.tokenKeyAccess("permitAll()")
+			.checkTokenAccess("isAuthenticated()");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java
new file mode 100644
index 0000000..5f680cc
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java
@@ -0,0 +1,57 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.config;
+
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+
+/**
+ * 鑷畾涔夎祫婧愭斁琛�
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+public class BladeResourceServerConfiguration extends ResourceServerConfigurerAdapter {
+
+	@Override
+	@SneakyThrows
+	public void configure(HttpSecurity http) {
+		http.authorizeRequests()
+			.antMatchers(
+				"/actuator/**",
+				"/oauth/captcha",
+				"/oauth/logout",
+				"/oauth/clear-cache",
+				"/oauth/render/**",
+				"/oauth/callback/**",
+				"/oauth/revoke/**",
+				"/oauth/refresh/**",
+				"/oauth/login",
+				"/oauth/form",
+				"/token/**",
+				"/mobile/**",
+				"/static/**",
+				"/v2/api-docs").permitAll()
+			.anyRequest().authenticated().and()
+			.csrf().disable();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/JwtTokenStoreConfiguration.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/JwtTokenStoreConfiguration.java
new file mode 100644
index 0000000..ea6bf6c
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/JwtTokenStoreConfiguration.java
@@ -0,0 +1,77 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.config;
+
+import com.vci.ubcs.auth.support.BladeJwtTokenEnhancer;
+import org.springblade.core.jwt.props.JwtProperties;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.jwt.crypto.sign.MacSigner;
+import org.springframework.security.jwt.crypto.sign.SignatureVerifier;
+import org.springframework.security.oauth2.provider.token.TokenEnhancer;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
+
+/**
+ * JwtTokenStore
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnProperty(prefix = "blade.security.oauth2", name = "storeType", havingValue = "jwt", matchIfMissing = true)
+public class JwtTokenStoreConfiguration {
+
+	/**
+	 * 浣跨敤jwtTokenStore瀛樺偍token
+	 */
+	@Bean
+	public TokenStore jwtTokenStore(JwtProperties jwtProperties) {
+		return new JwtTokenStore(getJwtAccessTokenConverter(jwtProperties));
+	}
+
+	/**
+	 * 鐢ㄤ簬鐢熸垚jwt
+	 */
+	@Bean
+	public JwtAccessTokenConverter jwtAccessTokenConverter(JwtProperties jwtProperties) {
+		return getJwtAccessTokenConverter(jwtProperties);
+	}
+
+	/**
+	 * 鑷畾涔� JwtAccessTokenConverter
+	 */
+	private JwtAccessTokenConverter getJwtAccessTokenConverter(JwtProperties jwtProperties) {
+		JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
+		accessTokenConverter.setSigningKey(jwtProperties.getSignKey());
+		SignatureVerifier verifier = new MacSigner(jwtProperties.getSignKey());
+		accessTokenConverter.setVerifier(verifier);
+		return accessTokenConverter;
+	}
+
+	/**
+	 * 鐢ㄤ簬鎵╁睍jwt
+	 */
+	@Bean
+	@ConditionalOnMissingBean(name = "jwtTokenEnhancer")
+	public TokenEnhancer jwtTokenEnhancer(JwtAccessTokenConverter jwtAccessTokenConverter, JwtProperties jwtProperties) {
+		return new BladeJwtTokenEnhancer(jwtAccessTokenConverter, jwtProperties);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/SecurityConfiguration.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/SecurityConfiguration.java
new file mode 100644
index 0000000..39d3e5b
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/SecurityConfiguration.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.config;
+
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import com.vci.ubcs.auth.support.BladePasswordEncoderFactories;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.builders.WebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+/**
+ * Security閰嶇疆
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
+
+	@Bean
+	@Override
+	@SneakyThrows
+	public AuthenticationManager authenticationManagerBean() {
+		return super.authenticationManagerBean();
+	}
+
+	@Bean
+	public PasswordEncoder passwordEncoder() {
+		return BladePasswordEncoderFactories.createDelegatingPasswordEncoder();
+	}
+
+	@Override
+	@SneakyThrows
+	protected void configure(HttpSecurity http) {
+		http.headers().frameOptions().disable();
+		http.httpBasic().and().csrf().disable();
+		http.formLogin().loginPage("/oauth/login").loginProcessingUrl("/oauth/form");
+	}
+
+	@Override
+	public void configure(WebSecurity web) {
+		web.ignoring().antMatchers("/js/*.js", "/css/*.css");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/constant/AuthConstant.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/constant/AuthConstant.java
new file mode 100644
index 0000000..1379e85
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/constant/AuthConstant.java
@@ -0,0 +1,53 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.constant;
+
+/**
+ * 鎺堟潈鏍¢獙甯搁噺
+ *
+ * @author Chill
+ */
+public interface AuthConstant {
+
+	/**
+	 * 瀵嗙爜鍔犲瘑瑙勫垯
+	 */
+	String ENCRYPT = "{blade}";
+
+	/**
+	 * pl_sys_client琛ㄥ瓧娈�
+	 */
+	String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, Resource_ids, scope, authorized_grant_types, " +
+		"web_server_redirect_uri, authorities, access_token_validity, " +
+		"refresh_token_validity, additional_information, autoapprove";
+
+	/**
+	 * pl_sys_client鏌ヨ璇彞
+	 */
+	String BASE_STATEMENT = "select " + CLIENT_FIELDS + " from pl_sys_client";
+
+	/**
+	 * pl_sys_client鏌ヨ鎺掑簭
+	 */
+	String DEFAULT_FIND_STATEMENT = BASE_STATEMENT + " order by client_id";
+
+	/**
+	 * 鏌ヨclient_id
+	 */
+	String DEFAULT_SELECT_STATEMENT = BASE_STATEMENT + " where client_id = ?";
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeSocialEndpoint.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeSocialEndpoint.java
new file mode 100644
index 0000000..be06db7
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeSocialEndpoint.java
@@ -0,0 +1,88 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.endpoint;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthToken;
+import me.zhyd.oauth.request.AuthRequest;
+import me.zhyd.oauth.utils.AuthStateUtils;
+import org.springblade.core.social.props.SocialProperties;
+import org.springblade.core.social.utils.SocialUtil;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * SocialEndpoint
+ *
+ * @author Chill
+ */
+@NonDS
+@Slf4j
+@RestController
+@AllArgsConstructor
+@ConditionalOnProperty(value = "social.enabled", havingValue = "true")
+public class BladeSocialEndpoint {
+
+	private final SocialProperties socialProperties;
+
+	/**
+	 * 鎺堟潈瀹屾瘯璺宠浆
+	 */
+	@RequestMapping("/oauth/render/{source}")
+	public void renderAuth(@PathVariable("source") String source, HttpServletResponse response) throws IOException {
+		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+		String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
+		response.sendRedirect(authorizeUrl);
+	}
+
+	/**
+	 * 鑾峰彇璁よ瘉淇℃伅
+	 */
+	@RequestMapping("/oauth/callback/{source}")
+	public Object login(@PathVariable("source") String source, AuthCallback callback) {
+		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+		return authRequest.login(callback);
+	}
+
+	/**
+	 * 鎾ら攢鎺堟潈
+	 */
+	@RequestMapping("/oauth/revoke/{source}/{token}")
+	public Object revokeAuth(@PathVariable("source") String source, @PathVariable("token") String token) {
+		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+		return authRequest.revoke(AuthToken.builder().accessToken(token).build());
+	}
+
+	/**
+	 * 缁湡浠ょ墝
+	 */
+	@RequestMapping("/oauth/refresh/{source}")
+	public Object refreshAuth(@PathVariable("source") String source, String token) {
+		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+		return authRequest.refresh(AuthToken.builder().refreshToken(token).build());
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java
new file mode 100644
index 0000000..1d4aaf1
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java
@@ -0,0 +1,157 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.endpoint;
+
+import com.wf.captcha.SpecCaptcha;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import com.vci.ubcs.common.cache.CacheNames;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.jwt.JwtUtil;
+import org.springblade.core.jwt.props.JwtProperties;
+import org.springblade.core.launch.constant.TokenConstant;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.common.OAuth2AccessToken;
+import org.springframework.security.oauth2.common.OAuth2RefreshToken;
+import org.springframework.security.oauth2.provider.AuthorizationRequest;
+import org.springframework.security.oauth2.provider.ClientDetailsService;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpSession;
+import java.time.Duration;
+
+import static org.springblade.core.cache.constant.CacheConstant.*;
+
+/**
+ * BladeEndPoint
+ *
+ * @author Chill
+ */
+@NonDS
+@Slf4j
+@RestController
+@AllArgsConstructor
+public class BladeTokenEndPoint {
+
+	private final BladeRedis bladeRedis;
+	private final JwtProperties jwtProperties;
+	private final ClientDetailsService clientDetailsService;
+	private final TokenStore tokenStore;
+
+	/**
+	 * 鐧诲綍椤甸潰
+	 */
+	@GetMapping("/oauth/login")
+	public ModelAndView require(ModelAndView model) {
+		model.setViewName("login");
+		return model;
+	}
+
+	/**
+	 * 鎺堟潈椤甸潰
+	 */
+	@GetMapping("/oauth/confirm_access")
+	public ModelAndView confirm(HttpSession session, ModelAndView model) {
+		Object auth = session.getAttribute("authorizationRequest");
+		if (auth != null) {
+			AuthorizationRequest authorizationRequest = (AuthorizationRequest) auth;
+			model.addObject("client", clientDetailsService.loadClientByClientId(authorizationRequest.getClientId()));
+			model.addObject("principal", SecurityContextHolder.getContext().getAuthentication().getPrincipal());
+		}
+		model.setViewName("confirm");
+		return model;
+	}
+
+	/**
+	 * 鐢ㄦ埛淇℃伅
+	 */
+	@GetMapping("/oauth/user-info")
+	public R<Authentication> currentUser(Authentication authentication) {
+		return R.data(authentication);
+	}
+
+	/**
+	 * 楠岃瘉鐮�
+	 */
+	@GetMapping("/oauth/captcha")
+	public Kv captcha() {
+		SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
+		String verCode = specCaptcha.text().toLowerCase();
+		String key = StringUtil.randomUUID();
+		// 瀛樺叆redis骞惰缃繃鏈熸椂闂翠负30鍒嗛挓
+		bladeRedis.setEx(CacheNames.CAPTCHA_KEY + key, verCode, Duration.ofMinutes(30));
+		// 灏唊ey鍜宐ase64杩斿洖缁欏墠绔�
+		return Kv.create().set("key", key).set("image", specCaptcha.toBase64());
+	}
+
+	/**
+	 * 閫�鍑虹櫥褰�
+	 */
+	@GetMapping("/oauth/logout")
+	public Kv logout() {
+		BladeUser user = AuthUtil.getUser();
+		String token = JwtUtil.getToken(WebUtil.getRequest().getHeader(TokenConstant.HEADER));
+		// 娓呯┖redis淇濆瓨鐨則oken
+		if (user != null && jwtProperties.getState()) {
+			JwtUtil.removeAccessToken(user.getTenantId(), String.valueOf(user.getUserId()), token);
+		}
+		// 娓呯┖璧勬簮鏈嶅姟鍣ㄤ繚瀛樼殑token
+		OAuth2AccessToken accessToken = tokenStore.readAccessToken(token);
+		OAuth2RefreshToken refreshToken = null;
+		if (accessToken != null && StringUtil.isNoneBlank(accessToken.getValue())) {
+			refreshToken = accessToken.getRefreshToken();
+			tokenStore.removeAccessToken(accessToken);
+		}
+		if (refreshToken != null && StringUtil.isNoneBlank(refreshToken.getValue())) {
+			tokenStore.removeRefreshToken(refreshToken);
+		}
+		return Kv.create().set("success", "true").set("msg", "success");
+	}
+
+	/**
+	 * 缂撳瓨娓呯┖
+	 */
+	@GetMapping("/oauth/clear-cache")
+	public Kv clearCache() {
+		CacheUtil.clear(BIZ_CACHE);
+		CacheUtil.clear(USER_CACHE);
+		CacheUtil.clear(DICT_CACHE);
+		CacheUtil.clear(FLOW_CACHE);
+		CacheUtil.clear(SYS_CACHE);
+		CacheUtil.clear(PARAM_CACHE);
+		CacheUtil.clear(RESOURCE_CACHE);
+		CacheUtil.clear(MENU_CACHE);
+		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
+		CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		CacheUtil.clear(PARAM_CACHE, Boolean.FALSE);
+		return Kv.create().set("success", "true").set("msg", "success");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java
new file mode 100644
index 0000000..5a6306a
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java
@@ -0,0 +1,52 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.granter;
+
+import com.vci.ubcs.system.user.feign.IUserClient;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.social.props.SocialProperties;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
+import org.springframework.security.oauth2.provider.CompositeTokenGranter;
+import org.springframework.security.oauth2.provider.TokenGranter;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 鑷畾涔夋嫇灞昑okenGranter
+ *
+ * @author Chill
+ */
+public class BladeTokenGranter {
+
+	/**
+	 * 鑷畾涔塼okenGranter
+	 */
+	public static TokenGranter getTokenGranter(final AuthenticationManager authenticationManager, final AuthorizationServerEndpointsConfigurer endpoints, BladeRedis bladeRedis, IUserClient userClient, SocialProperties socialProperties) {
+		// 榛樿tokenGranter闆嗗悎
+		List<TokenGranter> granters = new ArrayList<>(Collections.singletonList(endpoints.getTokenGranter()));
+		// 澧炲姞楠岃瘉鐮佹ā寮�
+		granters.add(new CaptchaTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), bladeRedis));
+		// 澧炲姞绗笁鏂圭櫥闄嗘ā寮�
+		granters.add(new SocialTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), userClient, socialProperties));
+		// 缁勫悎tokenGranter闆嗗悎
+		return new CompositeTokenGranter(granters);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/CaptchaTokenGranter.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/CaptchaTokenGranter.java
new file mode 100644
index 0000000..31d5f6b
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/CaptchaTokenGranter.java
@@ -0,0 +1,65 @@
+package com.vci.ubcs.auth.granter;
+
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springframework.security.authentication.*;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
+import org.springframework.security.oauth2.provider.*;
+import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
+import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 楠岃瘉鐮乀okenGranter
+ *
+ * @author Chill
+ */
+public class CaptchaTokenGranter extends AbstractTokenGranter {
+
+	private static final String GRANT_TYPE = "captcha";
+
+	private final AuthenticationManager authenticationManager;
+
+	private BladeRedis bladeRedis;
+
+	public CaptchaTokenGranter(AuthenticationManager authenticationManager,
+							   AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, BladeRedis bladeRedis) {
+		this(authenticationManager, tokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
+		this.bladeRedis = bladeRedis;
+	}
+
+	protected CaptchaTokenGranter(AuthenticationManager authenticationManager, AuthorizationServerTokenServices tokenServices,
+												ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, String grantType) {
+		super(tokenServices, clientDetailsService, requestFactory, grantType);
+		this.authenticationManager = authenticationManager;
+	}
+
+	@Override
+	protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
+		Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
+		String username = parameters.get("username");
+		String password = parameters.get("password");
+		// Protect from downstream leaks of password
+		parameters.remove("password");
+
+		Authentication userAuth = new UsernamePasswordAuthenticationToken(username, password);
+		((AbstractAuthenticationToken) userAuth).setDetails(parameters);
+		try {
+				userAuth = authenticationManager.authenticate(userAuth);
+		}
+		catch (AccountStatusException | BadCredentialsException ase) {
+			//covers expired, locked, disabled cases (mentioned in section 5.2, draft 31)
+			throw new InvalidGrantException(ase.getMessage());
+		}
+		// If the username/password are wrong the spec says we should send 400/invalid grant
+
+		if (userAuth == null || !userAuth.isAuthenticated()) {
+			throw new InvalidGrantException("Could not authenticate user: " + username);
+		}
+
+		OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
+		return new OAuth2Authentication(storedOAuth2Request, userAuth);
+	}
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java
new file mode 100644
index 0000000..c56eb43
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java
@@ -0,0 +1,130 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.granter;
+
+import com.vci.ubcs.auth.service.BladeUserDetails;
+import com.vci.ubcs.auth.utils.TokenUtil;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.entity.UserInfo;
+import com.vci.ubcs.system.user.entity.UserOauth;
+import com.vci.ubcs.system.user.feign.IUserClient;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthResponse;
+import me.zhyd.oauth.model.AuthUser;
+import me.zhyd.oauth.request.AuthRequest;
+import com.vci.ubcs.auth.constant.AuthConstant;
+import org.springblade.core.social.props.SocialProperties;
+import org.springblade.core.social.utils.SocialUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springframework.security.authentication.AbstractAuthenticationToken;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
+import org.springframework.security.oauth2.provider.*;
+import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
+import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 绗笁鏂圭櫥褰曡璇佺被
+ *
+ * @author Chill
+ */
+public class SocialTokenGranter extends AbstractTokenGranter {
+	private static final String GRANT_TYPE = "social";
+	private static final Integer AUTH_SUCCESS_CODE = 2000;
+
+	private final IUserClient userClient;
+	private final SocialProperties socialProperties;
+
+	protected SocialTokenGranter(AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, IUserClient userClient, SocialProperties socialProperties) {
+		super(tokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
+		this.userClient = userClient;
+		this.socialProperties = socialProperties;
+	}
+
+	@Override
+	protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
+		// 璇锋眰澶寸鎴蜂俊鎭�
+		HttpServletRequest request = WebUtil.getRequest();
+		String tenantId = Func.toStr(request.getHeader(TokenUtil.TENANT_HEADER_KEY), TokenUtil.DEFAULT_TENANT_ID);
+
+		Map<String, String> parameters = new LinkedHashMap<>(tokenRequest.getRequestParameters());
+		// 寮�鏀惧钩鍙版潵婧�
+		String sourceParameter = parameters.get("source");
+		// 鍖归厤鏄惁鏈夊埆鍚嶅畾涔�
+		String source = socialProperties.getAlias().getOrDefault(sourceParameter, sourceParameter);
+		// 寮�鏀惧钩鍙版巿鏉冪爜
+		String code = parameters.get("code");
+		// 寮�鏀惧钩鍙扮姸鎬佸悧
+		String state = parameters.get("state");
+
+		// 鑾峰彇寮�鏀惧钩鍙版巿鏉冩暟鎹�
+		AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+		AuthCallback authCallback = new AuthCallback();
+		authCallback.setCode(code);
+		authCallback.setState(state);
+		AuthResponse authResponse = authRequest.login(authCallback);
+		AuthUser authUser;
+		if (authResponse.getCode() == AUTH_SUCCESS_CODE) {
+			authUser = (AuthUser) authResponse.getData();
+		} else {
+			throw new InvalidGrantException("social grant failure, auth response is not success");
+		}
+
+		// 缁勮鏁版嵁
+		UserOauth userOauth = Objects.requireNonNull(BeanUtil.copy(authUser, UserOauth.class));
+		userOauth.setSource(authUser.getSource());
+		userOauth.setTenantId(tenantId);
+		userOauth.setUuid(authUser.getUuid());
+
+		// 杩滅▼璋冪敤锛岃幏鍙栬璇佷俊鎭�
+		R<UserInfo> result = userClient.userAuthInfo(userOauth);
+		BladeUserDetails bladeUserDetails;
+		if (result.isSuccess()) {
+			User user = result.getData().getUser();
+			Kv detail = result.getData().getDetail();
+			if (user == null || user.getId() == null) {
+				throw new InvalidGrantException("social grant failure, user is null");
+			}
+			bladeUserDetails = new BladeUserDetails(user.getId(),
+				tenantId, result.getData().getOauthId(), user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(result.getData().getRoles()), Func.toStr(userOauth.getAvatar(), TokenUtil.DEFAULT_AVATAR),
+				userOauth.getUsername(), AuthConstant.ENCRYPT + user.getPassword(), detail, true, true, true, true,
+				AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
+		} else {
+			throw new InvalidGrantException("social grant failure, feign client return error");
+		}
+
+		// 缁勮璁よ瘉鏁版嵁锛屽叧闂瘑鐮佹牎楠�
+		Authentication userAuth = new UsernamePasswordAuthenticationToken(bladeUserDetails, null, bladeUserDetails.getAuthorities());
+		((AbstractAuthenticationToken) userAuth).setDetails(parameters);
+		OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
+
+		// 杩斿洖 OAuth2Authentication
+		return new OAuth2Authentication(storedOAuth2Request, userAuth);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeClientDetailsServiceImpl.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeClientDetailsServiceImpl.java
new file mode 100644
index 0000000..4b614cd
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeClientDetailsServiceImpl.java
@@ -0,0 +1,51 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.service;
+
+import org.springframework.security.oauth2.provider.ClientDetails;
+import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+
+/**
+ * 瀹㈡埛绔俊鎭�
+ *
+ * @author Chill
+ */
+@Component
+public class BladeClientDetailsServiceImpl extends JdbcClientDetailsService {
+
+	public BladeClientDetailsServiceImpl(DataSource dataSource) {
+		super(dataSource);
+	}
+
+	/**
+	 * 缂撳瓨瀹㈡埛绔俊鎭�
+	 * clientId=saber
+	 * @param clientId 瀹㈡埛绔痠d
+	 */
+	@Override
+	public ClientDetails loadClientByClientId(String clientId) {
+		try {
+			return super.loadClientByClientId(clientId);
+		} catch (Exception ex) {
+			ex.printStackTrace();
+			return null;
+		}
+	}
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetails.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetails.java
new file mode 100644
index 0000000..bc7b230
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetails.java
@@ -0,0 +1,121 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.service;
+
+import lombok.Getter;
+import org.springblade.core.tool.support.Kv;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+
+import java.util.Collection;
+
+/**
+ * 鐢ㄦ埛淇℃伅鎷撳睍
+ *
+ * @author Chill
+ */
+@Getter
+public class BladeUserDetails extends User {
+
+	/**
+	 * 鐢ㄦ埛id
+	 */
+	private final Long userId;
+	/**
+	 * 绉熸埛ID
+	 */
+	private final String tenantId;
+	/**
+	 * 绗笁鏂硅璇両D
+	 */
+	private final String oauthId;
+	/**
+	 * 鏄电О
+	 */
+	private final String name;
+	/**
+	 * 鐪熷悕
+	 */
+	private final String realName;
+	/**
+	 * 璐﹀彿
+	 */
+	private final String account;
+	/**
+	 * 閮ㄩ棬id
+	 */
+	private final String deptId;
+	/**
+	 * 宀椾綅id
+	 */
+	private final String postId;
+	/**
+	 * 瑙掕壊id
+	 */
+	private final String roleId;
+	/**
+	 * 瑙掕壊鍚�
+	 */
+	private final String roleName;
+	/**
+	 * 澶村儚
+	 */
+	private final String avatar;
+	/**
+	 * 鐢ㄦ埛璇︽儏
+	 */
+	private final Kv detail;
+	/**
+	 * 瀵嗙爜绛栫暐淇敼鐘舵��
+	 */
+	private Long strategyUpdateStatus;
+
+
+	public BladeUserDetails(Long userId, String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, Kv detail, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities,Long strategyUpdateStatus) {
+		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
+		this.userId = userId;
+		this.tenantId = tenantId;
+		this.oauthId = oauthId;
+		this.name = name;
+		this.realName = realName;
+		this.account = username;
+		this.deptId = deptId;
+		this.postId = postId;
+		this.roleId = roleId;
+		this.roleName = roleName;
+		this.avatar = avatar;
+		this.detail = detail;
+		this.strategyUpdateStatus = strategyUpdateStatus;
+	}
+
+	public BladeUserDetails(Long userId, String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, Kv detail, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
+		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
+		this.userId = userId;
+		this.tenantId = tenantId;
+		this.oauthId = oauthId;
+		this.name = name;
+		this.realName = realName;
+		this.account = username;
+		this.deptId = deptId;
+		this.postId = postId;
+		this.roleId = roleId;
+		this.roleName = roleName;
+		this.avatar = avatar;
+		this.detail = detail;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
new file mode 100644
index 0000000..088979d
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
@@ -0,0 +1,322 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.service;
+
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.vci.ubcs.auth.constant.AuthConstant;
+import com.vci.ubcs.auth.utils.TokenUtil;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.entity.UserInfo;
+import com.vci.ubcs.system.user.enums.UserEnum;
+import com.vci.ubcs.system.user.feign.IUserClient;
+import io.jsonwebtoken.Claims;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import me.zhyd.oauth.log.Log;
+import com.vci.ubcs.common.cache.CacheNames;
+import org.springblade.core.jwt.JwtUtil;
+import org.springblade.core.jwt.props.JwtProperties;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.*;
+import com.vci.ubcs.system.cache.ParamCache;
+import com.vci.ubcs.system.entity.Strategy;
+import com.vci.ubcs.system.entity.Tenant;
+import com.vci.ubcs.system.feign.ISysClient;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.time.Duration;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛淇℃伅
+ *
+ * @author Chill
+ */
+@Service
+@RequiredArgsConstructor
+public class BladeUserDetailsServiceImpl implements UserDetailsService {
+
+	/**
+	 * 鍏佽閿欒娆℃暟
+	 */
+	//public static final Integer FAIL_COUNT = 5;
+	public static final String FAIL_COUNT_VALUE = "account.failCount";
+
+	/**
+	 * user鏈嶅姟璋冪敤绫�
+	 */
+	private final IUserClient userClient;
+
+	private final ISysClient sysClient;
+
+	private final BladeRedis bladeRedis;
+
+	private final JwtProperties jwtProperties;
+
+
+	/**
+	 * 瓒呯骇绠$悊鍛樹俊鎭�
+	 */
+	@Value("${user-info.tenant-id}")
+	private String tenantId;
+	@Value("${user-info.user-name}")
+	private String userName;
+	@Value("${user-info.passwrod}")
+	private String password;
+	@Value("${user-info.id}")
+	private String id;
+	@Value("${ip-whitelist.ip-enable}")
+	private Boolean ipEnable;
+	@Value("#{'${ip-whitelist.ip}'.split(',')}")
+	private List<String> ips;
+
+	@Override
+	@SneakyThrows
+	public BladeUserDetails loadUserByUsername(String username) {
+		HttpServletRequest request = WebUtil.getRequest();
+		// 鑾峰彇鐢ㄦ埛缁戝畾ID
+		String headerDept = request.getHeader(TokenUtil.DEPT_HEADER_KEY);
+		String headerRole = request.getHeader(TokenUtil.ROLE_HEADER_KEY);
+		// 鑾峰彇绉熸埛ID
+		String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
+		String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
+		String password = request.getParameter(TokenUtil.PASSWORD_KEY);
+		String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
+		// 鍒ゆ柇绉熸埛璇锋眰澶�
+		if (StringUtil.isAllBlank(headerTenant, paramTenant)) {
+			throw new UserDeniedAuthorizationException(TokenUtil.TENANT_NOT_FOUND);
+		}
+		// 鍒ゆ柇浠ょ墝鍚堟硶鎬�
+		if (!judgeRefreshToken(grantType, request)) {
+			throw new UserDeniedAuthorizationException(TokenUtil.TOKEN_NOT_PERMISSION);
+		}
+
+		// 鎸囧畾绉熸埛ID
+		String tenantId = StringUtils.isBlank(headerTenant) ? paramTenant : headerTenant;
+
+		Log.debug("褰撳墠鐧诲綍鐢ㄦ埛鐨勭鎴稩d涓猴細"+tenantId+"褰撳墠鐧诲綍鐢ㄦ埛鍚嶄负锛�"+username);
+		Strategy strategy = sysClient.getByTenantIdAndName(tenantId, username).getData();
+
+		// 鍒ゆ柇鐧诲綍鏄惁閿佸畾
+		int count = getFailCount(tenantId, username);
+		int failCount = Func.toInt(ParamCache.getValue(FAIL_COUNT_VALUE), Func.toInt(strategy.getLockingNum()));
+
+		if (count >= failCount) {
+			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_TOO_MANY_FAILS);
+		}
+		//瓒呯骇绠$悊鍛橀厤缃枃浠堕厤缃处鍙峰瘑鐮侊紝瀹炵幇鐧诲綍, 榛樿绉熸埛id涓�000000
+		if(tenantId.equals(this.tenantId)){
+			if (!this.userName.equals(username) && !password.equalsIgnoreCase(this.password)) {
+				setFailCount(tenantId, username, count,strategy.getLockingTime());
+				throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+			}
+			//濡傛灉ip姣斿鍚巊et鎶涘嚭寮傚父No value present灏辩洿鎺ユ姏寮傚父缁撴潫鐧诲綍
+			if(ipEnable){
+				Log.debug("褰撳墠璁块棶IP锛�"+getIpAddress(request));
+				try {
+					ips.stream().filter(s -> s.equals(getIpAddress(request))).findFirst().get();
+				} catch (Exception e){
+					throw new UserDeniedAuthorizationException(TokenUtil.IP_NOT_FOND);
+				}
+			}
+
+			ArrayList<GrantedAuthority> authorities = new ArrayList<>();
+			authorities.add(new SimpleGrantedAuthority("administrator"));
+			// 鎴愬姛鍒欐竻闄ょ櫥褰曢敊璇鏁�
+			delFailCount(tenantId, username);
+			Kv kv = Kv.create();
+			kv.set("type","web");
+			return new BladeUserDetails(
+				new Long(this.id),this.tenantId, StringPool.EMPTY, "瓒呯骇绠$悊鍛�", "瓒呯骇绠$悊鍛�",this.id, this.id,"1123598816738675201",
+				"administrator","https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png" ,this.userName, AuthConstant.ENCRYPT + this.password,  kv,
+				true, true, true, true,authorities
+			);
+		}else {
+			R<Tenant> tenant = sysClient.getTenant(tenantId);
+
+			if (tenant.isSuccess()) {
+				if (TokenUtil.judgeTenant(tenant.getData())) {
+					throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
+				}
+			} else {
+				throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
+			}
+
+			// 鑾峰彇鐢ㄦ埛绫诲瀷
+			String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
+
+			// 杩滅▼璋冪敤杩斿洖鏁版嵁
+			R<UserInfo> result;
+			// 鏍规嵁涓嶅悓鐢ㄦ埛绫诲瀷璋冪敤瀵瑰簲鐨勬帴鍙h繑鍥炴暟鎹紝鐢ㄦ埛鍙嚜琛屾嫇灞�
+			if (userType.equals(UserEnum.WEB.getName())) {
+				result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
+			} else if (userType.equals(UserEnum.APP.getName())) {
+				result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
+			} else {
+				result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
+			}
+
+			// 鍒ゆ柇杩斿洖淇℃伅
+			if (result.isSuccess()) {
+				UserInfo userInfo = result.getData();
+				User user = userInfo.getUser();
+				// 鐢ㄦ埛涓嶅瓨鍦�,浣嗘彁绀虹敤鎴峰悕涓庡瘑鐮侀敊璇苟閿佸畾璐﹀彿
+				if (user == null || user.getId() == null) {
+					setFailCount(tenantId, username, count,strategy.getLockingTime());
+					throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+				}
+				String hex = DigestUtil.hex(password);
+				// 鐢ㄦ埛瀛樺湪浣嗗瘑鐮侀敊璇�,瓒呰繃娆℃暟鍒欓攣瀹氳处鍙�
+				if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(hex)) {
+					setFailCount(tenantId, username, count,strategy.getLockingTime());
+					throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+				}
+				// 鐢ㄦ埛瑙掕壊涓嶅瓨鍦�
+				if (Func.isEmpty(userInfo.getRoles())) {
+					throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
+				}
+				// 澶氶儴闂ㄦ儏鍐典笅鎸囧畾鍗曢儴闂�
+				if (Func.isNotEmpty(headerDept) && user.getDeptId().contains(headerDept)) {
+					user.setDeptId(headerDept);
+				}
+				// 澶氳鑹叉儏鍐典笅鎸囧畾鍗曡鑹�
+				if (Func.isNotEmpty(headerRole) && user.getRoleId().contains(headerRole)) {
+					R<List<String>> roleResult = sysClient.getRoleAliases(headerRole);
+					if (roleResult.isSuccess()) {
+						userInfo.setRoles(roleResult.getData());
+					}
+					user.setRoleId(headerRole);
+				}
+				// 鎴愬姛鍒欐竻闄ょ櫥褰曢敊璇鏁�
+				delFailCount(tenantId, username);
+				//濉厖鐢ㄦ埛淇℃伅鍒扮敤鎴蜂俊鎭墿灞曠被
+				BladeUserDetails bladeUserDetails = new BladeUserDetails(user.getId(),
+					user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
+					username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
+					AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())),user.getStrategyUpdateStatus());
+				return bladeUserDetails;
+			} else {
+				throw new UsernameNotFoundException(result.getMsg());
+			}
+		}
+	}
+
+	/**
+	 * 鑾峰彇瀹㈡埛绔痠p锛屽鎴风鍙兘缁忚繃浠g悊锛屼篃鍙兘娌$粡杩囦唬鐞�
+	 * 濡傚紑鍚櫄鎷熸満鐨勬儏鍐典篃鍙兘瀵艰嚧鑾峰彇鍒扮殑鏄櫄鎷熸満鐨刬p
+	 * @param request
+	 * @return
+	 */
+	public static String getIpAddress(HttpServletRequest request){
+		String ip = request.getHeader("x-forwarded-for");
+		if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
+			// 澶氭鍙嶅悜浠g悊鍚庝細鏈夊涓猧p鍊硷紝绗竴涓猧p鎵嶆槸鐪熷疄ip
+			ip = ip.split(",")[0];
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("Proxy-Client-IP");
+			System.out.println("Proxy-Client-IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("WL-Proxy-Client-IP");
+			System.out.println("WL-Proxy-Client-IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_CLIENT_IP");
+			System.out.println("HTTP_CLIENT_IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+			System.out.println("HTTP_X_FORWARDED_FOR"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("X-Real-IP");
+			System.out.println("X-Real-IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getRemoteAddr();
+			System.out.println("getRemoteAddr"+ip);
+		}
+		//濡傛灉娌″彇鍒癷p锛岃繑鍥�""
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = "";
+		}
+		return ip;
+	}
+
+	/**
+	 * 鑾峰彇璐﹀彿閿欒娆℃暟
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @param username 璐﹀彿
+	 * @return int
+	 */
+	private int getFailCount(String tenantId, String username) {
+		return Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0);
+	}
+
+	/**
+	 * 璁剧疆璐﹀彿閿欒娆℃暟
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @param username 璐﹀彿
+	 * @param count    娆℃暟
+	 */
+	private void setFailCount(String tenantId, String username, int count, Long expir) {
+		bladeRedis.setEx(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username), count + 1, Duration.ofMinutes(expir));
+	}
+
+	/**
+	 * 娓呯┖璐﹀彿閿欒娆℃暟
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @param username 璐﹀彿
+	 */
+	private void delFailCount(String tenantId, String username) {
+		bladeRedis.del(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username));
+	}
+
+	/**
+	 * 鏍¢獙refreshToken鍚堟硶鎬�
+	 *
+	 * @param grantType 璁よ瘉绫诲瀷
+	 * @param request   璇锋眰
+	 */
+	private boolean judgeRefreshToken(String grantType, HttpServletRequest request) {
+		if (jwtProperties.getState() && jwtProperties.getSingle() && StringUtil.equals(grantType, TokenUtil.REFRESH_TOKEN_KEY)) {
+			String refreshToken = request.getParameter(TokenUtil.REFRESH_TOKEN_KEY);
+			Claims claims = JwtUtil.parseJWT(refreshToken);
+			String tenantId = String.valueOf(claims.get("tenant_id"));
+			String userId = String.valueOf(claims.get("user_id"));
+			String token = JwtUtil.getRefreshToken(tenantId, userId, refreshToken);
+			return StringUtil.equalsIgnoreCase(token, refreshToken);
+		}
+		return true;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeJwtTokenEnhancer.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeJwtTokenEnhancer.java
new file mode 100644
index 0000000..74b24bd
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeJwtTokenEnhancer.java
@@ -0,0 +1,87 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.support;
+
+import com.vci.ubcs.auth.service.BladeUserDetails;
+import com.vci.ubcs.auth.utils.TokenUtil;
+import lombok.AllArgsConstructor;
+import org.springblade.core.jwt.JwtUtil;
+import org.springblade.core.jwt.props.JwtProperties;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
+import org.springframework.security.oauth2.common.OAuth2AccessToken;
+import org.springframework.security.oauth2.common.OAuth2RefreshToken;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.security.oauth2.provider.token.TokenEnhancer;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * jwt杩斿洖鍙傛暟澧炲己
+ *
+ * @author Chill
+ */
+@AllArgsConstructor
+public class BladeJwtTokenEnhancer implements TokenEnhancer {
+
+	private final JwtAccessTokenConverter jwtAccessTokenConverter;
+	private final JwtProperties jwtProperties;
+
+	@Override
+	public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
+		BladeUserDetails principal = (BladeUserDetails) authentication.getUserAuthentication().getPrincipal();
+
+		//token鍙傛暟澧炲己
+		Map<String, Object> info = new HashMap<>(16);
+		info.put(TokenUtil.CLIENT_ID, TokenUtil.getClientIdFromHeader());
+		info.put(TokenUtil.USER_ID, Func.toStr(principal.getUserId()));
+		info.put(TokenUtil.DEPT_ID, Func.toStr(principal.getDeptId()));
+		info.put(TokenUtil.POST_ID, Func.toStr(principal.getPostId()));
+		info.put(TokenUtil.ROLE_ID, Func.toStr(principal.getRoleId()));
+		info.put(TokenUtil.TENANT_ID, principal.getTenantId());
+		info.put(TokenUtil.OAUTH_ID, principal.getOauthId());
+		info.put(TokenUtil.ACCOUNT, principal.getAccount());
+		info.put(TokenUtil.USER_NAME, principal.getUsername());
+		info.put(TokenUtil.NICK_NAME, principal.getName());
+		info.put(TokenUtil.REAL_NAME, principal.getRealName());
+		info.put(TokenUtil.ROLE_NAME, principal.getRoleName());
+		info.put(TokenUtil.AVATAR, principal.getAvatar());
+		info.put(TokenUtil.DETAIL, principal.getDetail());
+		info.put(TokenUtil.LICENSE, TokenUtil.LICENSE_NAME);
+		info.put(TokenUtil.STRATEGYUPDATESTATUS, principal.getStrategyUpdateStatus());
+		((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(info);
+
+		//token鐘舵�佽缃�
+		if (jwtProperties.getState()) {
+			OAuth2AccessToken oAuth2AccessToken = jwtAccessTokenConverter.enhance(accessToken, authentication);
+			String accessTokenValue = oAuth2AccessToken.getValue();
+			String tenantId = principal.getTenantId();
+			String userId = Func.toStr(principal.getUserId());
+			JwtUtil.addAccessToken(tenantId, userId, accessTokenValue, accessToken.getExpiresIn());
+
+			if (jwtProperties.getSingle()) {
+				OAuth2RefreshToken oAuth2RefreshToken = oAuth2AccessToken.getRefreshToken();
+				String refreshTokenValue = oAuth2RefreshToken.getValue();
+				JwtUtil.addRefreshToken(tenantId, userId, refreshTokenValue, accessToken.getExpiresIn() * 168);
+			}
+		}
+
+		return accessToken;
+	}
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeNoOpPasswordEncoder.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeNoOpPasswordEncoder.java
new file mode 100644
index 0000000..1b8d839
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeNoOpPasswordEncoder.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.support;
+
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+/**
+ * 鏃犲瘑鐮佸姞瀵�
+ *
+ * @author Chill
+ */
+public class BladeNoOpPasswordEncoder implements PasswordEncoder {
+
+	@Override
+	public String encode(CharSequence rawPassword) {
+		return rawPassword.toString();
+	}
+
+	@Override
+	public boolean matches(CharSequence rawPassword, String encodedPassword) {
+		return rawPassword.toString().equals(encodedPassword);
+	}
+
+	/**
+	 * Get the singleton {@link BladeNoOpPasswordEncoder}.
+	 */
+	public static PasswordEncoder getInstance() {
+		return INSTANCE;
+	}
+
+	private static final PasswordEncoder INSTANCE = new BladeNoOpPasswordEncoder();
+
+	private BladeNoOpPasswordEncoder() {
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoder.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoder.java
new file mode 100644
index 0000000..9c3ba44
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoder.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.support;
+
+import org.springblade.core.tool.utils.DigestUtil;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+/**
+ * 鑷畾涔夊瘑鐮佸姞瀵�
+ *
+ * @author Chill
+ */
+public class BladePasswordEncoder implements PasswordEncoder {
+
+	@Override
+	public String encode(CharSequence rawPassword) {
+		return DigestUtil.hex((String) rawPassword);
+	}
+
+	@Override
+	public boolean matches(CharSequence rawPassword, String encodedPassword) {
+		return encodedPassword.equals(encode(rawPassword));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoderFactories.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoderFactories.java
new file mode 100644
index 0000000..b1ab109
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoderFactories.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2002-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.vci.ubcs.auth.support;
+
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.DelegatingPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
+import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鑷畾涔夊瘑鐮佸伐鍘�
+ *
+ * @author Rob Winch, Chill
+ * @since 5.0
+ */
+public class BladePasswordEncoderFactories {
+
+	/**
+	 * Creates a {@link DelegatingPasswordEncoder} with default mappings. Additional
+	 * mappings may be added and the encoding will be updated to conform with best
+	 * practices. However, due to the nature of {@link DelegatingPasswordEncoder} the
+	 * updates should not impact users. The mappings current are:
+	 *
+	 * <ul>
+	 * <li>blade - {@link BladePasswordEncoder} (sha1(md5("password")))</li>
+	 * <li>bcrypt - {@link BCryptPasswordEncoder} (Also used for encoding)</li>
+	 * <li>noop - {@link BladeNoOpPasswordEncoder}</li>
+	 * <li>pbkdf2 - {@link Pbkdf2PasswordEncoder}</li>
+	 * <li>scrypt - {@link SCryptPasswordEncoder}</li>
+	 * </ul>
+	 *
+	 * @return the {@link PasswordEncoder} to use
+	 */
+	public static PasswordEncoder createDelegatingPasswordEncoder() {
+		String encodingId = "blade";
+		Map<String, PasswordEncoder> encoders = new HashMap<>(16);
+		encoders.put(encodingId, new BladePasswordEncoder());
+		encoders.put("bcrypt", new BCryptPasswordEncoder());
+		encoders.put("noop", BladeNoOpPasswordEncoder.getInstance());
+		encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
+		encoders.put("scrypt", new SCryptPasswordEncoder());
+
+		return new DelegatingPasswordEncoder(encodingId, encoders);
+	}
+
+	private BladePasswordEncoderFactories() {
+	}
+
+}
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/utils/TokenUtil.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/utils/TokenUtil.java
new file mode 100644
index 0000000..386b7bc
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/utils/TokenUtil.java
@@ -0,0 +1,177 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.auth.utils;
+
+import lombok.SneakyThrows;
+import com.vci.ubcs.common.constant.TenantConstant;
+import org.springblade.core.launch.constant.TokenConstant;
+import org.springblade.core.tenant.BladeTenantProperties;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.utils.*;
+import com.vci.ubcs.system.entity.Tenant;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
+import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
+
+import java.util.Base64;
+import java.util.Calendar;
+
+/**
+ * 璁よ瘉宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class TokenUtil {
+
+	public final static String AVATAR = TokenConstant.AVATAR;
+	public final static String ACCOUNT = TokenConstant.ACCOUNT;
+	public final static String USER_NAME = TokenConstant.USER_NAME;
+	public final static String NICK_NAME = TokenConstant.NICK_NAME;
+	public final static String REAL_NAME = TokenConstant.REAL_NAME;
+	public final static String USER_ID = TokenConstant.USER_ID;
+	public final static String DEPT_ID = TokenConstant.DEPT_ID;
+	public final static String POST_ID = TokenConstant.POST_ID;
+	public final static String ROLE_ID = TokenConstant.ROLE_ID;
+	public final static String ROLE_NAME = TokenConstant.ROLE_NAME;
+	public final static String TENANT_ID = TokenConstant.TENANT_ID;
+	public final static String OAUTH_ID = TokenConstant.OAUTH_ID;
+	public final static String CLIENT_ID = TokenConstant.CLIENT_ID;
+	public final static String DETAIL = TokenConstant.DETAIL;
+	public final static String LICENSE = TokenConstant.LICENSE;
+	public final static String LICENSE_NAME = TokenConstant.LICENSE_NAME;
+	public final static String STRATEGYUPDATESTATUS = "strategyUpdateStatus";
+
+	public final static String DEPT_HEADER_KEY = "Dept-Id";
+	public final static String ROLE_HEADER_KEY = "Role-Id";
+	public final static String CAPTCHA_HEADER_KEY = "Captcha-Key";
+	public final static String CAPTCHA_HEADER_CODE = "Captcha-Code";
+	public final static String CAPTCHA_NOT_CORRECT = "楠岃瘉鐮佷笉姝g‘";
+	public final static String TENANT_HEADER_KEY = "Tenant-Id";
+	public final static String TENANT_PARAM_KEY = "tenant_id";
+	public final static String DEFAULT_TENANT_ID = "000000";
+	public final static String TENANT_NOT_FOUND = "绉熸埛ID鏈壘鍒�";
+	public final static String USER_TYPE_HEADER_KEY = "User-Type";
+	public final static String DEFAULT_USER_TYPE = "web";
+	public final static String TOKEN_NOT_PERMISSION = "浠ょ墝鎺堟潈宸茶繃鏈�";
+	public final static String USER_NOT_FOUND = "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒";
+	public final static String USER_HAS_NO_ROLE = "鏈幏寰楃敤鎴风殑瑙掕壊淇℃伅";
+	public final static String USER_HAS_NO_TENANT = "鏈幏寰楃敤鎴风殑绉熸埛淇℃伅";
+	public final static String USER_HAS_NO_TENANT_PERMISSION = "绉熸埛鎺堟潈宸茶繃鏈�,璇疯仈绯荤鐞嗗憳";
+	public final static String USER_HAS_TOO_MANY_FAILS = "鐧诲綍閿欒娆℃暟杩囧,璇风◢鍚庡啀璇�";
+	public final static String IP_NOT_FOND = "璇P鍦板潃鏃犺闂潈闄愶紝璇烽厤缃甀P鐧藉悕鍗�";
+	public final static String HEADER_KEY = "Authorization";
+	public final static String HEADER_PREFIX = "Basic ";
+	public final static String DEFAULT_AVATAR = "";
+	public final static String PASSWORD_KEY = "password";
+	public final static String GRANT_TYPE_KEY = "grant_type";
+	public final static String REFRESH_TOKEN_KEY = "refresh_token";
+
+	private static BladeTenantProperties tenantProperties;
+
+	/**
+	 * 鑾峰彇绉熸埛閰嶇疆
+	 *
+	 * @return tenantProperties
+	 */
+	private static BladeTenantProperties getTenantProperties() {
+		if (tenantProperties == null) {
+			tenantProperties = SpringUtil.getBean(BladeTenantProperties.class);
+		}
+		return tenantProperties;
+	}
+
+	/**
+	 * 瑙g爜
+	 */
+	@SneakyThrows
+	public static String[] extractAndDecodeHeader() {
+		String header = WebUtil.getRequest().getHeader(TokenUtil.HEADER_KEY);
+		if (header == null || !header.startsWith(TokenUtil.HEADER_PREFIX)) {
+			throw new UnapprovedClientAuthenticationException("璇锋眰澶翠腑鏃燾lient淇℃伅");
+		}
+
+		byte[] base64Token = header.substring(6).getBytes(Charsets.UTF_8_NAME);
+
+		byte[] decoded;
+		try {
+			decoded = Base64.getDecoder().decode(base64Token);
+		} catch (IllegalArgumentException var7) {
+			throw new BadCredentialsException("Failed to decode basic authentication token");
+		}
+
+		String token = new String(decoded, Charsets.UTF_8_NAME);
+		int index = token.indexOf(StringPool.COLON);
+		if (index == -1) {
+			throw new BadCredentialsException("Invalid basic authentication token");
+		} else {
+			return new String[]{token.substring(0, index), token.substring(index + 1)};
+		}
+	}
+
+	/**
+	 * 鑾峰彇璇锋眰澶翠腑鐨勫鎴风id
+	 */
+	public static String getClientIdFromHeader() {
+		String[] tokens = extractAndDecodeHeader();
+		return tokens[0];
+	}
+
+	/**
+	 * 鑾峰彇token杩囨湡鏃堕棿(娆℃棩鍑屾櫒3鐐�)
+	 *
+	 * @return expire
+	 */
+	public static int getTokenValiditySecond() {
+		Calendar cal = Calendar.getInstance();
+		cal.add(Calendar.DAY_OF_YEAR, 1);
+		cal.set(Calendar.HOUR_OF_DAY, 3);
+		cal.set(Calendar.SECOND, 0);
+		cal.set(Calendar.MINUTE, 0);
+		cal.set(Calendar.MILLISECOND, 0);
+		return (int) (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
+	}
+
+	/**
+	 * 鑾峰彇refreshToken杩囨湡鏃堕棿
+	 *
+	 * @return expire
+	 */
+	public static int getRefreshTokenValiditySeconds() {
+		return 60 * 60 * 24 * 15;
+	}
+
+	/**
+	 * 鍒ゆ柇绉熸埛鏉冮檺
+	 *
+	 * @param tenant 绉熸埛淇℃伅
+	 * @return boolean
+	 */
+	public static boolean judgeTenant(Tenant tenant) {
+		if (tenant == null || tenant.getId() == null) {
+			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
+		}
+		if (StringUtil.equalsIgnoreCase(tenant.getTenantId(), BladeConstant.ADMIN_TENANT_ID)) {
+			return false;
+		}
+		if (getTenantProperties().getLicense()) {
+			String licenseKey = tenant.getLicenseKey();
+			String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY);
+		}
+		return false;
+	}
+
+}
diff --git a/Source/BladeX/blade-auth/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-auth/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-auth/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-auth/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-auth/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-auth/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-auth/src/main/resources/application-test.yml b/Source/UBCS/ubcs-auth/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-auth/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-auth/src/main/resources/application.yml b/Source/UBCS/ubcs-auth/src/main/resources/application.yml
new file mode 100644
index 0000000..23c2497
--- /dev/null
+++ b/Source/UBCS/ubcs-auth/src/main/resources/application.yml
@@ -0,0 +1,65 @@
+# 鍦ㄤ娇鐢⊿pring榛樿鏁版嵁婧怘ikari鐨勬儏鍐典笅閰嶇疆浠ヤ笅閰嶇疆椤�
+spring:
+  datasource:
+    hikari:
+      # 鑷姩鎻愪氦浠庢睜涓繑鍥炵殑杩炴帴
+      auto-commit: true
+      # 杩炴帴姹犱腑缁存姢鐨勬渶灏忕┖闂茶繛鎺ユ暟
+      minimum-idle: 10
+      # 杩炴帴姹犱腑鍏佽鐨勬渶澶ц繛鎺ユ暟銆傜己鐪佸�硷細10锛涙帹鑽愮殑鍏紡锛�((core_count * 2) + effective_spindle_count)
+      maximum-pool-size: 60
+      # 绌洪棽杩炴帴瓒呮椂鏃堕棿锛岄粯璁ゅ��600000锛�10鍒嗛挓锛夛紝澶т簬绛変簬max-lifetime涓攎ax-lifetime>0锛屼細琚噸缃负0锛涗笉绛変簬0涓斿皬浜�10绉掞紝浼氳閲嶇疆涓�10绉掋��
+      # 鍙湁绌洪棽杩炴帴鏁板ぇ浜庢渶澶ц繛鎺ユ暟涓旂┖闂叉椂闂磋秴杩囪鍊硷紝鎵嶄細琚噴鏀�
+      idle-timeout: 30000
+      # 杩炴帴鏈�澶у瓨娲绘椂闂�.涓嶇瓑浜�0涓斿皬浜�30绉掞紝浼氳閲嶇疆涓洪粯璁ゅ��30鍒嗛挓.璁剧疆搴旇姣攎ysql璁剧疆鐨勮秴鏃舵椂闂寸煭
+      max-lifetime: 1800000
+      # 绛夊緟杩炴帴姹犲垎閰嶈繛鎺ョ殑鏈�澶ф椂闀匡紙姣锛夛紝瓒呰繃杩欎釜鏃堕暱杩樻病鍙敤鐨勮繛鎺ュ垯鍙戠敓SQLException锛� 缂虹渷:30绉�
+      connection-timeout: 30000
+      # 杩炴帴娴嬭瘯鏌ヨ
+      #connection-test-query: select 1
+      #connection-test-query: SELECT 1 FROM dual
+  freemarker:
+    # 妯℃澘鍚庣紑鍚�
+    suffix: .ftl
+    # 鏂囨。绫诲瀷
+    content-type: text/html
+    # 椤甸潰缂栫爜
+    charset: UTF-8
+    # 椤甸潰缂撳瓨
+    cache: false
+    # 妯℃澘璺緞
+    template-loader-path: classpath:/templates/
+  web:
+    # 璧勬簮璺緞
+    resources:
+      static-locations: classpath:/static/
+
+#swagger鏂囨。
+swagger:
+  base-packages:
+    - org.springblade
+    - org.springframework.security.oauth2.provider.endpoint
+
+#绗笁鏂圭櫥闄�
+social:
+  oauth:
+    GITHUB:
+      client-id: 233************
+      client-secret: 233************************************
+      redirect-uri: ${social.domain}/oauth/redirect/github
+    GITEE:
+      client-id: 233************
+      client-secret: 233************************************
+      redirect-uri: ${social.domain}/oauth/redirect/gitee
+    WECHAT_OPEN:
+      client-id: 233************
+      client-secret: 233************************************
+      redirect-uri: ${social.domain}/oauth/redirect/wechat
+    QQ:
+      client-id: 233************
+      client-secret: 233************************************
+      redirect-uri: ${social.domain}/oauth/redirect/qq
+    DINGTALK:
+      client-id: 233************
+      client-secret: 233************************************
+      redirect-uri: ${social.domain}/oauth/redirect/dingtalk
diff --git a/Source/BladeX/blade-auth/src/main/resources/static/css/bootstrap.min.css b/Source/UBCS/ubcs-auth/src/main/resources/static/css/bootstrap.min.css
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/static/css/bootstrap.min.css
rename to Source/UBCS/ubcs-auth/src/main/resources/static/css/bootstrap.min.css
diff --git a/Source/BladeX/blade-auth/src/main/resources/static/css/iofrm-style.css b/Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-style.css
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/static/css/iofrm-style.css
rename to Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-style.css
diff --git a/Source/BladeX/blade-auth/src/main/resources/static/css/iofrm-theme.css b/Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-theme.css
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/static/css/iofrm-theme.css
rename to Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-theme.css
diff --git a/Source/BladeX/blade-auth/src/main/resources/static/js/bootstrap.min.js b/Source/UBCS/ubcs-auth/src/main/resources/static/js/bootstrap.min.js
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/static/js/bootstrap.min.js
rename to Source/UBCS/ubcs-auth/src/main/resources/static/js/bootstrap.min.js
diff --git a/Source/BladeX/blade-auth/src/main/resources/static/js/jquery.min.js b/Source/UBCS/ubcs-auth/src/main/resources/static/js/jquery.min.js
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/static/js/jquery.min.js
rename to Source/UBCS/ubcs-auth/src/main/resources/static/js/jquery.min.js
diff --git a/Source/BladeX/blade-auth/src/main/resources/static/js/md5.js b/Source/UBCS/ubcs-auth/src/main/resources/static/js/md5.js
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/static/js/md5.js
rename to Source/UBCS/ubcs-auth/src/main/resources/static/js/md5.js
diff --git a/Source/BladeX/blade-auth/src/main/resources/static/js/popper.min.js b/Source/UBCS/ubcs-auth/src/main/resources/static/js/popper.min.js
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/static/js/popper.min.js
rename to Source/UBCS/ubcs-auth/src/main/resources/static/js/popper.min.js
diff --git a/Source/BladeX/blade-auth/src/main/resources/templates/confirm.ftl b/Source/UBCS/ubcs-auth/src/main/resources/templates/confirm.ftl
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/templates/confirm.ftl
rename to Source/UBCS/ubcs-auth/src/main/resources/templates/confirm.ftl
diff --git a/Source/BladeX/blade-auth/src/main/resources/templates/login.ftl b/Source/UBCS/ubcs-auth/src/main/resources/templates/login.ftl
similarity index 100%
rename from Source/BladeX/blade-auth/src/main/resources/templates/login.ftl
rename to Source/UBCS/ubcs-auth/src/main/resources/templates/login.ftl
diff --git a/Source/UBCS/ubcs-common/pom.xml b/Source/UBCS/ubcs-common/pom.xml
new file mode 100644
index 0000000..96a7d1a
--- /dev/null
+++ b/Source/UBCS/ubcs-common/pom.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>UBCS</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-common</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-launch</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-loadbalancer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                    <finalName>${project.name}</finalName>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/cache/CacheNames.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/cache/CacheNames.java
new file mode 100644
index 0000000..62bd0c5
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/cache/CacheNames.java
@@ -0,0 +1,59 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.common.cache;
+
+/**
+ * 缂撳瓨鍚�
+ *
+ * @author Chill
+ */
+public interface CacheNames {
+
+	/**
+	 * 杩斿洖鎷兼帴鍚庣殑key
+	 *
+	 * @param cacheKey      缂撳瓨key
+	 * @param cacheKeyValue 缂撳瓨key鍊�
+	 * @return tenantKey
+	 */
+	static String cacheKey(String cacheKey, String cacheKeyValue) {
+		return cacheKey.concat(cacheKeyValue);
+	}
+
+	/**
+	 * 杩斿洖绉熸埛鏍煎紡鐨刱ey
+	 *
+	 * @param tenantId      绉熸埛缂栧彿
+	 * @param cacheKey      缂撳瓨key
+	 * @param cacheKeyValue 缂撳瓨key鍊�
+	 * @return tenantKey
+	 */
+	static String tenantKey(String tenantId, String cacheKey, String cacheKeyValue) {
+		return tenantId.concat(":").concat(cacheKey).concat(cacheKeyValue);
+	}
+
+	/**
+	 * 楠岃瘉鐮乲ey
+	 */
+	String CAPTCHA_KEY = "blade:auth::blade:captcha:";
+
+	/**
+	 * 鐧诲綍澶辫触key
+	 */
+	String USER_FAIL_KEY = "blade:user::blade:fail:";
+
+}
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/config/BladeCommonConfiguration.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/config/BladeCommonConfiguration.java
new file mode 100644
index 0000000..5872175
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/config/BladeCommonConfiguration.java
@@ -0,0 +1,32 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.common.config;
+
+
+import lombok.AllArgsConstructor;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 鍏叡灏佽鍖呴厤缃被
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+public class BladeCommonConfiguration {
+
+}
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/CommonConstant.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/CommonConstant.java
new file mode 100644
index 0000000..9b6dffa
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/CommonConstant.java
@@ -0,0 +1,77 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.common.constant;
+
+/**
+ * 閫氱敤甯搁噺
+ *
+ * @author Chill
+ */
+public interface CommonConstant {
+
+	/**
+	 * sword 绯荤粺鍚�
+	 */
+	String SWORD_NAME = "sword";
+
+	/**
+	 * saber 绯荤粺鍚�
+	 */
+	String SABER_NAME = "saber";
+
+	/**
+	 * 椤剁骇鐖惰妭鐐筰d
+	 */
+	Long TOP_PARENT_ID = 0L;
+
+	/**
+	 * 椤剁骇鐖惰妭鐐瑰悕绉�
+	 */
+	String TOP_PARENT_NAME = "椤剁骇";
+
+	/**
+	 * 鏈皝瀛樼姸鎬佸��
+	 */
+	Integer NOT_SEALED_ID = 0;
+
+	/**
+	 * 榛樿瀵嗙爜
+	 */
+	String DEFAULT_PASSWORD = "123456";
+
+	/**
+	 * 榛樿瀵嗙爜鍙傛暟鍊�
+	 */
+	String DEFAULT_PARAM_PASSWORD = "account.initPassword";
+
+	/**
+	 * 榛樿鎺掑簭瀛楁
+	 */
+	String SORT_FIELD = "sort";
+
+	/**
+	 * 鏁版嵁鏉冮檺绫诲瀷
+	 */
+	Integer DATA_SCOPE_CATEGORY = 1;
+
+	/**
+	 * 鎺ュ彛鏉冮檺绫诲瀷
+	 */
+	Integer API_SCOPE_CATEGORY = 2;
+
+
+}
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
new file mode 100644
index 0000000..c372f84
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
@@ -0,0 +1,233 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.common.constant;
+
+import org.springblade.core.launch.constant.AppConstant;
+
+import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
+
+/**
+ * 鍚姩甯搁噺
+ *
+ * @author Chill
+ */
+public interface LauncherConstant {
+
+	/**
+	 * xxljob
+	 */
+	String APPLICATION_XXLJOB_NAME = APPLICATION_NAME_PREFIX + "xxljob";
+
+	/**
+	 * xxljob
+	 */
+	String APPLICATION_XXLJOB_ADMIN_NAME = APPLICATION_NAME_PREFIX + "xxljob-admin";
+
+	/**
+	 * nacos dev 鍦板潃
+	 */
+	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
+	String NACOS_DEV_ADDR = "192.168.93.133:38848";
+
+	/**
+	 * nacos prod 鍦板潃
+	 */
+	//String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
+	String NACOS_PROD_ADDR = "192.168.93.129:38848";
+
+	/**
+	 * nacos test 鍦板潃
+	 */
+	//String NACOS_TEST_ADDR = "dev.vci-tech.com:38848";
+	String NACOS_TEST_ADDR = "192.168.93.133:38848";
+
+	/**
+	 * sentinel dev 鍦板潃
+	 */
+	//String SENTINEL_DEV_ADDR = "127.0.0.1:8858";
+
+	/**
+	 * sentinel prod 鍦板潃
+	 */
+	//String SENTINEL_PROD_ADDR = "172.30.0.58:8858";
+
+	/**
+	 * sentinel test 鍦板潃
+	 */
+	//String SENTINEL_TEST_ADDR = "172.30.0.58:8858";
+
+	/**
+	 * seata dev 鍦板潃
+	 */
+	String SEATA_DEV_ADDR = "127.0.0.1:8091";
+
+	/**
+	 * seata prod 鍦板潃
+	 */
+	String SEATA_PROD_ADDR = "172.30.0.68:8091";
+
+	/**
+	 * seata test 鍦板潃
+	 */
+	String SEATA_TEST_ADDR = "172.30.0.68:8091";
+
+	/**
+	 * zipkin dev 鍦板潃
+	 */
+	String ZIPKIN_DEV_ADDR = "http://dev.vci-tech.com:38006";
+
+	/**
+	 * zipkin prod 鍦板潃
+	 */
+	String ZIPKIN_PROD_ADDR = "http://172.30.0.71:9411";
+
+	/**
+	 * zipkin test 鍦板潃
+	 */
+	String ZIPKIN_TEST_ADDR = "http://172.30.0.71:9411";
+
+	/**
+	 * elk dev 鍦板潃
+	 */
+	String ELK_DEV_ADDR = "dev.vci-tech.com:38002";
+
+	/**
+	 * elk prod 鍦板潃
+	 */
+	String ELK_PROD_ADDR = "dev.vci-tech.com:38002";
+
+	/**
+	 * elk test 鍦板潃
+	 */
+	String ELK_TEST_ADDR = "dev.vci-tech.com:38002";
+
+	/**
+	 * seata file妯″紡
+	 */
+	String FILE_MODE = "file";
+
+	/**
+	 * seata nacos妯″紡
+	 */
+	String NACOS_MODE = "nacos";
+
+	/**
+	 * seata default妯″紡
+	 */
+	String DEFAULT_MODE = "default";
+
+	/**
+	 * seata group鍚庣紑
+	 */
+	String GROUP_NAME = "-group";
+
+	/**
+	 * seata 鏈嶅姟缁勬牸寮�
+	 *
+	 * @param appName 鏈嶅姟鍚�
+	 * @return group
+	 */
+	static String seataServiceGroup(String appName) {
+		return appName.concat(GROUP_NAME);
+	}
+
+	/**
+	 * 鍔ㄦ�佽幏鍙杗acos鍦板潃
+	 *
+	 * @param profile 鐜鍙橀噺
+	 * @return addr
+	 */
+	static String nacosAddr(String profile) {
+		switch (profile) {
+			case (AppConstant.PROD_CODE):
+				return NACOS_PROD_ADDR;
+			case (AppConstant.TEST_CODE):
+				return NACOS_TEST_ADDR;
+			default:
+				return NACOS_DEV_ADDR;
+		}
+	}
+
+	/**
+	 * 鍔ㄦ�佽幏鍙杝entinel鍦板潃
+	 *
+	 * @param profile 鐜鍙橀噺
+	 * @return addr
+	 */
+/*	static String sentinelAddr(String profile) {
+		switch (profile) {
+			case (AppConstant.PROD_CODE):
+				return SENTINEL_PROD_ADDR;
+			case (AppConstant.TEST_CODE):
+				return SENTINEL_TEST_ADDR;
+			default:
+				return SENTINEL_DEV_ADDR;
+		}
+	}*/
+
+	/**
+	 * 鍔ㄦ�佽幏鍙杝eata鍦板潃
+	 *
+	 * @param profile 鐜鍙橀噺
+	 * @return addr
+	 */
+	static String seataAddr(String profile) {
+		switch (profile) {
+			case (AppConstant.PROD_CODE):
+				return SEATA_PROD_ADDR;
+			case (AppConstant.TEST_CODE):
+				return SEATA_TEST_ADDR;
+			default:
+				return SEATA_DEV_ADDR;
+		}
+	}
+
+	/**
+	 * 鍔ㄦ�佽幏鍙杬ipkin鍦板潃
+	 *
+	 * @param profile 鐜鍙橀噺
+	 * @return addr
+	 */
+	static String zipkinAddr(String profile) {
+		switch (profile) {
+			case (AppConstant.PROD_CODE):
+				return ZIPKIN_PROD_ADDR;
+			case (AppConstant.TEST_CODE):
+				return ZIPKIN_TEST_ADDR;
+			default:
+				return ZIPKIN_DEV_ADDR;
+		}
+	}
+
+	/**
+	 * 鍔ㄦ�佽幏鍙杄lk鍦板潃
+	 *
+	 * @param profile 鐜鍙橀噺
+	 * @return addr
+	 */
+	static String elkAddr(String profile) {
+		switch (profile) {
+			case (AppConstant.PROD_CODE):
+				return ELK_PROD_ADDR;
+			case (AppConstant.TEST_CODE):
+				return ELK_TEST_ADDR;
+			default:
+				return ELK_DEV_ADDR;
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/TenantConstant.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/TenantConstant.java
new file mode 100644
index 0000000..b888be4
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/TenantConstant.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.common.constant;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 绉熸埛甯搁噺
+ *
+ * @author Chill
+ */
+public interface TenantConstant {
+
+	/**
+	 * 绉熸埛榛樿瀵嗙爜KEY
+	 */
+	String PASSWORD_KEY = "tenant.default.password";
+
+	/**
+	 * 绉熸埛榛樿璐﹀彿棰濆害KEY
+	 */
+	//String ACCOUNT_NUMBER_KEY = "tenant.default.accountNumber";
+
+	/**
+	 * 绉熸埛榛樿鑿滃崟闆嗗悎KEY
+	 */
+	String ACCOUNT_MENU_CODE_KEY = "tenant.default.menuCode";
+
+	/**
+	 * 绉熸埛榛樿瀵嗙爜
+	 */
+	String DEFAULT_PASSWORD = "123456";
+
+	/**
+	 * 绉熸埛鎺堟潈鐮侀粯璁�16浣嶅瘑閽�
+	 */
+	String DES_KEY = "0000000000000000";
+
+	/**
+	 * 绉熸埛榛樿璐﹀彿棰濆害
+	 */
+	//Integer DEFAULT_ACCOUNT_NUMBER = -1;
+
+	/**
+	 * 绉熸埛榛樿鑿滃崟闆嗗悎
+	 */
+	List<String> MENU_CODES = Arrays.asList(
+		"desk", "flow", "work", "monitor", "Resource", "role", "user", "dept", "dictbiz", "topmenu"
+	);
+
+}
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/launch/LauncherServiceImpl.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/launch/LauncherServiceImpl.java
new file mode 100644
index 0000000..5f05d3b
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/launch/LauncherServiceImpl.java
@@ -0,0 +1,62 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.common.launch;
+
+import com.vci.ubcs.common.constant.LauncherConstant;
+import org.springblade.core.auto.service.AutoService;
+import org.springblade.core.launch.service.LauncherService;
+import org.springblade.core.launch.utils.PropsUtil;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+
+import java.util.Properties;
+
+/**
+ * 鍚姩鍙傛暟鎷撳睍
+ *
+ * @author smallchil
+ */
+@AutoService(LauncherService.class)
+public class LauncherServiceImpl implements LauncherService {
+
+	@Override
+	public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) {
+		Properties props = System.getProperties();
+		// 閫氱敤娉ㄥ唽
+		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
+		PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
+		System.out.println( LauncherConstant.nacosAddr(profile));
+		//PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
+		PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile));
+		PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");
+
+		// 寮�鍚痚lk鏃ュ織
+		PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile));
+
+		// seata娉ㄥ唽鍦板潃
+		// PropsUtil.setProperty(props, "seata.service.grouplist.default", LauncherConstant.seataAddr(profile));
+		// seata娉ㄥ唽group鏍煎紡
+		// PropsUtil.setProperty(props, "seata.tx-service-group", LauncherConstant.seataServiceGroup(appName));
+		// seata閰嶇疆鏈嶅姟group
+		// PropsUtil.setProperty(props, "seata.service.vgroup-mapping.".concat(LauncherConstant.seataServiceGroup(appName)), LauncherConstant.DEFAULT_MODE);
+		// seata娉ㄥ唽妯″紡閰嶇疆
+		// PropsUtil.setProperty(props, "seata.registry.type", LauncherConstant.NACOS_MODE);
+		// PropsUtil.setProperty(props, "seata.registry.nacos.server-addr", LauncherConstant.nacosAddr(profile));
+		// PropsUtil.setProperty(props, "seata.config.type", LauncherConstant.NACOS_MODE);
+		// PropsUtil.setProperty(props, "seata.config.nacos.server-addr", LauncherConstant.nacosAddr(profile));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java
new file mode 100644
index 0000000..2ded4e0
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java
@@ -0,0 +1,26 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.common.utils;
+
+/**
+ * 閫氱敤宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class CommonUtil {
+
+}
diff --git a/Source/BladeX/blade-common/src/main/resources/banner.txt b/Source/UBCS/ubcs-common/src/main/resources/banner.txt
similarity index 100%
rename from Source/BladeX/blade-common/src/main/resources/banner.txt
rename to Source/UBCS/ubcs-common/src/main/resources/banner.txt
diff --git a/Source/BladeX/blade-gateway/Dockerfile b/Source/UBCS/ubcs-gateway/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-gateway/Dockerfile
rename to Source/UBCS/ubcs-gateway/Dockerfile
diff --git a/Source/UBCS/ubcs-gateway/pom.xml b/Source/UBCS/ubcs-gateway/pom.xml
new file mode 100644
index 0000000..c9be5b0
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/pom.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>UBCS</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-gateway</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-launch</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-web</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-undertow</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springblade</groupId>
+                    <artifactId>blade-core-launch</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-metrics</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-jwt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+        <!--Spring-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-gateway</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bootstrap</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-starter-client</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/GateWayApplication.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/GateWayApplication.java
new file mode 100644
index 0000000..cb30b4a
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/GateWayApplication.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway;
+
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 椤圭洰鍚姩
+ *
+ * @author Chill
+ */
+@EnableScheduling
+@EnableDiscoveryClient
+@SpringBootApplication
+public class GateWayApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_GATEWAY_NAME, GateWayApplication.class, args);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/ErrorHandlerConfiguration.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/ErrorHandlerConfiguration.java
new file mode 100644
index 0000000..4ba8537
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/ErrorHandlerConfiguration.java
@@ -0,0 +1,44 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.config;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.vci.ubcs.gateway.handler.ErrorExceptionHandler;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 寮傚父澶勭悊閰嶇疆绫�
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AutoConfigureBefore(ErrorWebFluxAutoConfiguration.class)
+@EnableConfigurationProperties({ServerProperties.class})
+public class ErrorHandlerConfiguration {
+
+	@Bean
+	public ErrorExceptionHandler globalExceptionHandler(ObjectMapper objectMapper) {
+		return new ErrorExceptionHandler(objectMapper);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/RouterFunctionConfiguration.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/RouterFunctionConfiguration.java
new file mode 100644
index 0000000..03034fd
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/RouterFunctionConfiguration.java
@@ -0,0 +1,81 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.config;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import com.vci.ubcs.gateway.props.AuthProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.web.cors.reactive.CorsUtils;
+import org.springframework.web.server.ServerWebExchange;
+import org.springframework.web.server.WebFilter;
+import org.springframework.web.server.WebFilterChain;
+import reactor.core.publisher.Mono;
+
+/**
+ * 璺敱閰嶇疆淇℃伅
+ *
+ * @author Chill
+ */
+@Slf4j
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+@EnableConfigurationProperties({AuthProperties.class})
+public class RouterFunctionConfiguration {
+
+	/**
+	 * 杩欓噷涓烘敮鎸佺殑璇锋眰澶达紝濡傛灉鏈夎嚜瀹氫箟鐨刪eader瀛楁璇疯嚜宸辨坊鍔�
+	 */
+	private static final String ALLOWED_HEADERS = "X-Requested-With, Tenant-Id, Blade-Auth, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, client, knfie4j-gateway-request, knife4j-gateway-code, request-origion";
+	private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD";
+	private static final String ALLOWED_ORIGIN = "*";
+	private static final String ALLOWED_EXPOSE = "*";
+	private static final String MAX_AGE = "18000L";
+
+	/**
+	 * 璺ㄥ煙閰嶇疆
+	 */
+	@Bean
+	public WebFilter corsFilter() {
+		return (ServerWebExchange ctx, WebFilterChain chain) -> {
+			ServerHttpRequest request = ctx.getRequest();
+			if (CorsUtils.isCorsRequest(request)) {
+				ServerHttpResponse response = ctx.getResponse();
+				HttpHeaders headers = response.getHeaders();
+				headers.add("Access-Control-Allow-Headers", ALLOWED_HEADERS);
+				headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS);
+				headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN);
+				headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE);
+				headers.add("Access-Control-Max-Age", MAX_AGE);
+				headers.add("Access-Control-Allow-Credentials", "true");
+				if (request.getMethod() == HttpMethod.OPTIONS) {
+					response.setStatusCode(HttpStatus.OK);
+					return Mono.empty();
+				}
+			}
+			return chain.filter(ctx);
+		};
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteService.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteService.java
new file mode 100644
index 0000000..9af352c
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteService.java
@@ -0,0 +1,101 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.dynamic;
+
+import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
+import org.springframework.cloud.gateway.route.RouteDefinition;
+import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationEventPublisherAware;
+import org.springframework.stereotype.Service;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+
+/**
+ * 鍔ㄦ�佽矾鐢变笟鍔$被
+ *
+ * @author Chill
+ */
+@Service
+public class DynamicRouteService implements ApplicationEventPublisherAware {
+
+	private final RouteDefinitionWriter routeDefinitionWriter;
+
+	private ApplicationEventPublisher publisher;
+
+	public DynamicRouteService(RouteDefinitionWriter routeDefinitionWriter) {
+		this.routeDefinitionWriter = routeDefinitionWriter;
+	}
+
+	@Override
+	public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
+		this.publisher = applicationEventPublisher;
+	}
+
+	/**
+	 * 澧炲姞璺敱
+	 */
+	public String save(RouteDefinition definition) {
+		try {
+			routeDefinitionWriter.save(Mono.just(definition)).subscribe();
+			this.publisher.publishEvent(new RefreshRoutesEvent(this));
+			return "save success";
+		} catch (Exception e) {
+			e.printStackTrace();
+			return "save failure";
+		}
+	}
+
+	/**
+	 * 鏇存柊璺敱
+	 */
+	public String update(RouteDefinition definition) {
+		try {
+			this.routeDefinitionWriter.delete(Mono.just(definition.getId()));
+			this.routeDefinitionWriter.save(Mono.just(definition)).subscribe();
+			this.publisher.publishEvent(new RefreshRoutesEvent(this));
+			return "update success";
+		} catch (Exception e) {
+			e.printStackTrace();
+			return "update failure";
+		}
+	}
+
+	/**
+	 * 鏇存柊璺敱
+	 */
+	public String updateList(List<RouteDefinition> routeDefinitions) {
+		routeDefinitions.forEach(this::update);
+		return "update done";
+	}
+
+	/**
+	 * 鍒犻櫎璺敱
+	 */
+	public String delete(String id) {
+		try {
+			this.routeDefinitionWriter.delete(Mono.just(id));
+			return "delete success";
+		} catch (Exception e) {
+			e.printStackTrace();
+			return "delete failure";
+		}
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteServiceListener.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteServiceListener.java
new file mode 100644
index 0000000..80b63c7
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteServiceListener.java
@@ -0,0 +1,96 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.dynamic;
+
+import com.alibaba.cloud.nacos.NacosConfigProperties;
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.nacos.api.NacosFactory;
+import com.alibaba.nacos.api.PropertyKeyConst;
+import com.alibaba.nacos.api.config.ConfigService;
+import com.alibaba.nacos.api.config.listener.Listener;
+import com.alibaba.nacos.api.exception.NacosException;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.launch.constant.NacosConstant;
+import org.springblade.core.launch.props.BladeProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.cloud.gateway.route.RouteDefinition;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.Executor;
+
+/**
+ * 鍔ㄦ�佽矾鐢辩洃鍚櫒
+ *
+ * @author Chill
+ */
+@Order
+@Slf4j
+@Component
+@RefreshScope
+public class DynamicRouteServiceListener {
+
+	private final DynamicRouteService dynamicRouteService;
+	private final NacosDiscoveryProperties nacosDiscoveryProperties;
+	private final NacosConfigProperties nacosConfigProperties;
+	private final BladeProperties bladeProperties;
+
+	public DynamicRouteServiceListener(DynamicRouteService dynamicRouteService, NacosDiscoveryProperties nacosDiscoveryProperties, NacosConfigProperties nacosConfigProperties, BladeProperties bladeProperties) {
+		this.dynamicRouteService = dynamicRouteService;
+		this.nacosDiscoveryProperties = nacosDiscoveryProperties;
+		this.nacosConfigProperties = nacosConfigProperties;
+		this.bladeProperties = bladeProperties;
+		dynamicRouteServiceListener();
+	}
+
+	/**
+	 * 鐩戝惉Nacos涓嬪彂鐨勫姩鎬佽矾鐢遍厤缃�
+	 */
+	private void dynamicRouteServiceListener() {
+		try {
+			String dataId = NacosConstant.dataId(bladeProperties.getName(), bladeProperties.getEnv(), NacosConstant.NACOS_CONFIG_JSON_FORMAT);
+			String group = nacosConfigProperties.getGroup();
+			Properties properties = new Properties();
+			properties.setProperty(PropertyKeyConst.SERVER_ADDR, nacosDiscoveryProperties.getServerAddr());
+			properties.setProperty(PropertyKeyConst.NAMESPACE, nacosDiscoveryProperties.getNamespace());
+			ConfigService configService = NacosFactory.createConfigService(properties);
+			configService.addListener(dataId, group, new Listener() {
+				@Override
+				public void receiveConfigInfo(String configInfo) {
+					List<RouteDefinition> routeDefinitions = JSON.parseArray(configInfo, RouteDefinition.class);
+					dynamicRouteService.updateList(routeDefinitions);
+				}
+
+				@Override
+				public Executor getExecutor() {
+					return null;
+				}
+			});
+			String configInfo = configService.getConfig(dataId, group, 5000);
+			if (configInfo != null) {
+				List<RouteDefinition> routeDefinitions = JSON.parseArray(configInfo, RouteDefinition.class);
+				dynamicRouteService.updateList(routeDefinitions);
+			}
+		} catch (NacosException ignored) {
+			ignored.printStackTrace();
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayFilter.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayFilter.java
new file mode 100644
index 0000000..41185e6
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayFilter.java
@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.dynamic;
+
+import lombok.Data;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 杩囨护鍣ㄥ畾涔夋ā鍨�
+ *
+ * @author Chill
+ */
+@Data
+public class GatewayFilter {
+
+	/**
+	 * 杩囨护鍣ㄥ搴旂殑Name
+	 */
+	private String name;
+
+	/**
+	 * 瀵瑰簲鐨勮矾鐢辫鍒�
+	 */
+	private Map<String, String> args = new LinkedHashMap<>();
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayPredicate.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayPredicate.java
new file mode 100644
index 0000000..7d1f6c7
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayPredicate.java
@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.dynamic;
+
+import lombok.Data;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 璺敱鏂█瀹氫箟妯″瀷
+ *
+ * @author Chill
+ */
+@Data
+public class GatewayPredicate {
+
+	/**
+	 * 鏂█瀵瑰簲鐨凬ame
+	 */
+	private String name;
+
+	/**
+	 * 閰嶇疆鐨勬柇瑷�瑙勫垯
+	 */
+	private Map<String, String> args = new LinkedHashMap<>();
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayRoute.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayRoute.java
new file mode 100644
index 0000000..a85ed01
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayRoute.java
@@ -0,0 +1,57 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.dynamic;
+
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Gateway鐨勮矾鐢卞畾涔夋ā鍨�
+ *
+ * @author Chill
+ */
+@Data
+public class GatewayRoute {
+
+	/**
+	 * 璺敱鐨刬d
+	 */
+	private String id;
+
+	/**
+	 * 璺敱鏂█闆嗗悎閰嶇疆
+	 */
+	private List<GatewayPredicate> predicates = new ArrayList<>();
+
+	/**
+	 * 璺敱杩囨护鍣ㄩ泦鍚堥厤缃�
+	 */
+	private List<GatewayFilter> filters = new ArrayList<>();
+
+	/**
+	 * 璺敱瑙勫垯杞彂鐨勭洰鏍噓ri
+	 */
+	private String uri;
+
+	/**
+	 * 璺敱鎵ц鐨勯『搴�
+	 */
+	private int order = 0;
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/AuthFilter.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/AuthFilter.java
new file mode 100644
index 0000000..d460b85
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/AuthFilter.java
@@ -0,0 +1,120 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.filter;
+
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.vci.ubcs.gateway.provider.AuthProvider;
+import com.vci.ubcs.gateway.provider.RequestProvider;
+import com.vci.ubcs.gateway.provider.ResponseProvider;
+import io.jsonwebtoken.Claims;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.jwt.JwtUtil;
+import org.springblade.core.jwt.props.JwtProperties;
+import org.springblade.core.launch.constant.TokenConstant;
+import com.vci.ubcs.gateway.props.AuthProperties;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.stereotype.Component;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 閴存潈璁よ瘉
+ *
+ * @author Chill
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class AuthFilter implements GlobalFilter, Ordered {
+	private final AuthProperties authProperties;
+	private final ObjectMapper objectMapper;
+	private final JwtProperties jwtProperties;
+	private final AntPathMatcher antPathMatcher = new AntPathMatcher();
+
+	@Override
+	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+		//鏍¢獙 Token 鏀捐
+		String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
+		String path = exchange.getRequest().getURI().getPath();
+		if (isSkip(path) || isSkip(originalRequestUrl)) {
+			return chain.filter(exchange);
+		}
+		//鏍¢獙 Token 鍚堟硶鎬�
+		ServerHttpResponse resp = exchange.getResponse();
+		String headerToken = exchange.getRequest().getHeaders().getFirst(AuthProvider.AUTH_KEY);
+		String paramToken = exchange.getRequest().getQueryParams().getFirst(AuthProvider.AUTH_KEY);
+		if (StringUtils.isBlank(headerToken) && StringUtils.isBlank(paramToken)) {
+			return unAuth(resp, "缂哄け浠ょ墝,閴存潈澶辫触");
+		}
+		String auth = StringUtils.isBlank(headerToken) ? paramToken : headerToken;
+		String token = JwtUtil.getToken(auth);
+		Claims claims = JwtUtil.parseJWT(token);
+		if (token == null || claims == null) {
+			return unAuth(resp, "璇锋眰鏈巿鏉�");
+		}
+		//鍒ゆ柇 Token 鐘舵��
+		if (jwtProperties.getState()) {
+			String tenantId = String.valueOf(claims.get(TokenConstant.TENANT_ID));
+			String userId = String.valueOf(claims.get(TokenConstant.USER_ID));
+			String accessToken = JwtUtil.getAccessToken(tenantId, userId, token);
+			if (!token.equalsIgnoreCase(accessToken)) {
+				return unAuth(resp, "浠ょ墝宸插け鏁�");
+			}
+		}
+		return chain.filter(exchange);
+	}
+
+	private boolean isSkip(String path) {
+		return AuthProvider.getDefaultSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
+			|| authProperties.getSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
+ 			|| authProperties.getAuth().stream().anyMatch(auth -> antPathMatcher.match(auth.getPattern(), path))
+ 			|| authProperties.getBasic().stream().anyMatch(basic -> antPathMatcher.match(basic.getPattern(), path))
+			|| authProperties.getSign().stream().anyMatch(sign -> antPathMatcher.match(sign.getPattern(), path));
+	}
+
+	private Mono<Void> unAuth(ServerHttpResponse resp, String msg) {
+		resp.setStatusCode(HttpStatus.UNAUTHORIZED);
+		resp.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
+		String result = "";
+		try {
+			result = objectMapper.writeValueAsString(ResponseProvider.unAuth(msg));
+		} catch (JsonProcessingException e) {
+			log.error(e.getMessage(), e);
+		}
+		DataBuffer buffer = resp.bufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8));
+		return resp.writeWith(Flux.just(buffer));
+	}
+
+
+	@Override
+	public int getOrder() {
+		return -100;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalRequestLogFilter.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalRequestLogFilter.java
new file mode 100644
index 0000000..a7ad0b6
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalRequestLogFilter.java
@@ -0,0 +1,112 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.gateway.filter;
+
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.vci.ubcs.gateway.provider.AuthProvider;
+import com.vci.ubcs.gateway.provider.RequestProvider;
+import io.jsonwebtoken.Claims;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.jwt.JwtUtil;
+import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * webflux 鏃ュ織璇锋眰璁板綍锛屾柟渚垮紑鍙戣皟璇曘�傝姹傛棩蹇楄繃婊ゅ櫒鎺掑簭灏介噺浣庛��
+ *
+ * <p>
+ * 娉ㄦ剰锛氭殏鏃朵笉鏀寔缁撴瀯浣撴墦鍗帮紝鎯冲疄鐜帮紝璇风湅涓嬮潰鐨勯摼鎺ャ��
+ * https://stackoverflow.com/questions/45240005/how-to-log-request-and-response-bodies-in-spring-webflux
+ * https://github.com/Silvmike/webflux-demo/blob/master/tests/src/test/java/ru/hardcoders/demo/webflux/web_handler/filters/logging
+ * </p>
+ *
+ * @author dream.lu
+ */
+@Slf4j
+@Configuration(proxyBeanMethods = false)
+@RequiredArgsConstructor
+@ConditionalOnProperty(value = "blade.log.request.enabled", havingValue = "true", matchIfMissing = true)
+public class GlobalRequestLogFilter implements GlobalFilter, Ordered {
+	private final WebEndpointProperties endpointProperties;
+
+	@Override
+	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+		ServerHttpRequest request = exchange.getRequest();
+		// 鎵撳嵃璇锋眰璺緞
+		String path = request.getPath().pathWithinApplication().value();
+
+		// 蹇界暐 endpoint 璇锋眰
+		String endpointBasePath = endpointProperties.getBasePath();
+		if (StringUtils.isNotBlank(endpointBasePath) && path.startsWith(endpointBasePath)) {
+			return chain.filter(exchange);
+		}
+
+		String requestUrl = RequestProvider.getOriginalRequestUrl(exchange);
+
+		// 鏋勫缓鎴愪竴鏉¢暱 鏃ュ織锛岄伩鍏嶅苟鍙戜笅鏃ュ織閿欎贡
+		StringBuilder beforeReqLog = new StringBuilder(300);
+		// 鏃ュ織鍙傛暟
+		List<Object> beforeReqArgs = new ArrayList<>();
+		beforeReqLog.append("\n\n================ Gateway Request Start  ================\n");
+		// 鎵撳嵃璺敱
+		beforeReqLog.append("===> {}: {}\n");
+		// 鍙傛暟
+		String requestMethod = request.getMethodValue();
+		beforeReqArgs.add(requestMethod);
+		beforeReqArgs.add(requestUrl);
+
+		// 鎵撳嵃璇锋眰澶�
+		HttpHeaders headers = request.getHeaders();
+		headers.forEach((headerName, headerValue) -> {
+			beforeReqLog.append("===Headers===  {}: {}\n");
+			beforeReqArgs.add(headerName);
+			if (AuthProvider.AUTH_KEY.toLowerCase().equals(headerName)) {
+				String value = headerValue.get(0);
+				String token = JwtUtil.getToken(value);
+				Claims claims = JwtUtil.parseJWT(token);
+				beforeReqArgs.add((claims == null) ? "" : claims.toString());
+				beforeReqLog.append("===Headers===  {}: {}\n");
+				beforeReqArgs.add(headerName.concat("-original"));
+				beforeReqArgs.add(headerValue.toArray());
+			} else {
+				beforeReqArgs.add(headerValue.toArray());
+			}
+		});
+
+		beforeReqLog.append("================  Gateway Request End  =================\n");
+		// 鎵撳嵃鎵ц鏃堕棿
+		log.info(beforeReqLog.toString(), beforeReqArgs.toArray());
+		return chain.filter(exchange);
+	}
+
+	@Override
+	public int getOrder() {
+		return Ordered.LOWEST_PRECEDENCE;
+	}
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalResponseLogFilter.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalResponseLogFilter.java
new file mode 100644
index 0000000..3f26937
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalResponseLogFilter.java
@@ -0,0 +1,99 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.gateway.filter;
+
+import com.alibaba.nacos.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.server.ServerWebExchange;
+import org.springframework.web.util.UriComponentsBuilder;
+import reactor.core.publisher.Mono;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * webflux 鐩稿簲鏃ュ織锛屾柟渚垮紑鍙戣皟璇曪紝娉ㄦ剰鎺掑簭瑕佷紭鍏堛��
+ *
+ * @author dream.lu
+ */
+@Slf4j
+@Configuration(proxyBeanMethods = false)
+@RequiredArgsConstructor
+@ConditionalOnProperty(value = "blade.log.request.enabled", havingValue = "true", matchIfMissing = true)
+public class GlobalResponseLogFilter implements GlobalFilter, Ordered {
+	private final WebEndpointProperties endpointProperties;
+
+	@Override
+	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+		ServerHttpRequest request = exchange.getRequest();
+		// 鎵撳嵃璇锋眰璺緞
+		String path = request.getPath().pathWithinApplication().value();
+		// 蹇界暐 endpoint 璇锋眰
+		String endpointBasePath = endpointProperties.getBasePath();
+		if (StringUtils.isNotBlank(endpointBasePath) && path.startsWith(endpointBasePath)) {
+			return chain.filter(exchange);
+		}
+		return chain.filter(exchange).then(
+			Mono.fromRunnable(() -> {
+				MultiValueMap<String, String> queryParams = request.getQueryParams();
+				String requestUrl = UriComponentsBuilder.fromPath(path).queryParams(queryParams).build().toUriString();
+
+				// 鏋勫缓鎴愪竴鏉¢暱 鏃ュ織锛岄伩鍏嶅苟鍙戜笅鏃ュ織閿欎贡
+				StringBuilder responseLog = new StringBuilder(300);
+				// 鏃ュ織鍙傛暟
+				List<Object> responseArgs = new ArrayList<>();
+				responseLog.append("\n\n================ Gateway Response Start  ================\n");
+				ServerHttpResponse response = exchange.getResponse();
+				// 鎵撳嵃璺敱 200 get: /api/xxx/xxx
+				responseLog.append("<=== {} {}: {}\n");
+				// 鍙傛暟
+				String requestMethod = request.getMethodValue();
+				responseArgs.add(response.getStatusCode().value());
+				responseArgs.add(requestMethod);
+				responseArgs.add(requestUrl);
+
+				// 鎵撳嵃璇锋眰澶�
+				HttpHeaders headers = response.getHeaders();
+				headers.forEach((headerName, headerValue) -> {
+					responseLog.append("===Headers===  {}: {}\n");
+					responseArgs.add(headerName);
+					responseArgs.add(headerValue.toArray());
+				});
+
+				responseLog.append("================  Gateway Response End  =================\n");
+				// 鎵撳嵃鎵ц鏃堕棿
+				log.info(responseLog.toString(), responseArgs.toArray());
+			})
+		);
+	}
+
+	@Override
+	public int getOrder() {
+		return Ordered.HIGHEST_PRECEDENCE;
+	}
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/RequestFilter.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/RequestFilter.java
new file mode 100644
index 0000000..f5dee58
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/RequestFilter.java
@@ -0,0 +1,63 @@
+package com.vci.ubcs.gateway.filter;
+
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
+import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
+import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.addOriginalRequestUrl;
+
+/**
+ * <p>
+ * 鍏ㄥ眬鎷︽埅鍣紝浣滅敤鎵�鏈夌殑寰湇鍔�
+ * <p>
+ * 1. 瀵硅姹傚ご涓弬鏁拌繘琛屽鐞� from 鍙傛暟杩涜娓呮礂
+ * 2. 閲嶅啓StripPrefix = 1,鏀寔鍏ㄥ眬
+ *
+ * @author lengleng
+ */
+@Component
+public class RequestFilter implements GlobalFilter, Ordered {
+
+	/**
+	 * Process the Web request and (optionally) delegate to the next
+	 * {@code WebFilter} through the given {@link GatewayFilterChain}.
+	 *
+	 * @param exchange the current server exchange
+	 * @param chain    provides a way to delegate to the next filter
+	 * @return {@code Mono<Void>} to indicate when request processing is complete
+	 */
+	@Override
+	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+		// 1. 娓呮礂璇锋眰澶翠腑from 鍙傛暟
+		ServerHttpRequest request = exchange.getRequest().mutate()
+			.headers(httpHeaders -> httpHeaders.remove("X"))
+			.build();
+
+		// 2. 閲嶅啓StripPrefix
+		addOriginalRequestUrl(exchange, request.getURI());
+		String rawPath = request.getURI().getRawPath();
+		String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/"))
+			.skip(1L).collect(Collectors.joining("/"));
+		ServerHttpRequest newRequest = request.mutate()
+			.path(newPath)
+			.build();
+		exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
+
+		return chain.filter(exchange.mutate().request(newRequest.mutate().build()).build());
+	}
+
+	@Override
+	public int getOrder() {
+		return -1000;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/handler/ErrorExceptionHandler.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/handler/ErrorExceptionHandler.java
new file mode 100644
index 0000000..4e74ccb
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/handler/ErrorExceptionHandler.java
@@ -0,0 +1,96 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.handler;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.vci.ubcs.gateway.provider.ResponseProvider;
+import lombok.RequiredArgsConstructor;
+import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
+import org.springframework.core.annotation.Order;
+import org.springframework.core.io.buffer.DataBufferFactory;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.web.server.ResponseStatusException;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.util.Map;
+
+/**
+ * 寮傚父澶勭悊
+ *
+ * @author Chill
+ */
+@Order(-1)
+@RequiredArgsConstructor
+public class ErrorExceptionHandler implements ErrorWebExceptionHandler {
+
+	private final ObjectMapper objectMapper;
+
+	@Override
+	public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
+		ServerHttpRequest request = exchange.getRequest();
+		ServerHttpResponse response = exchange.getResponse();
+
+		if (response.isCommitted()) {
+			return Mono.error(ex);
+		}
+
+		response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
+		if (ex instanceof ResponseStatusException) {
+			response.setStatusCode(((ResponseStatusException) ex).getStatus());
+		}
+
+		return response.writeWith(Mono.fromSupplier(() -> {
+			DataBufferFactory bufferFactory = response.bufferFactory();
+			try {
+				int status = 500;
+				if (response.getStatusCode() != null) {
+					status = response.getStatusCode().value();
+				}
+				Map<String, Object> result = ResponseProvider.response(status, this.buildMessage(request, ex));
+				return bufferFactory.wrap(objectMapper.writeValueAsBytes(result));
+			} catch (JsonProcessingException e) {
+				return bufferFactory.wrap(new byte[0]);
+			}
+		}));
+	}
+
+
+	/**
+	 * 鏋勫缓寮傚父淇℃伅
+	 */
+	private String buildMessage(ServerHttpRequest request, Throwable ex) {
+		String uri = request.getURI().toString();
+		if (uri.endsWith("doc.html")) {
+			return "[Swagger鑱氬悎缃戝叧] 宸茶縼绉昏嚦 [blade-swagger] 鏈嶅姟锛岃寮�鍚� [blade-swagger] 鏈嶅姟骞惰闂� [http://127.0.0.1:18000/doc.html]";
+		}
+		StringBuilder message = new StringBuilder("Failed to handle request [");
+		message.append(request.getMethodValue());
+		message.append(" ");
+		message.append(request.getURI());
+		message.append("]");
+		if (ex != null) {
+			message.append(": ");
+			message.append(ex.getMessage());
+		}
+		return message.toString();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/props/AuthProperties.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/props/AuthProperties.java
new file mode 100644
index 0000000..afa5dd4
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/props/AuthProperties.java
@@ -0,0 +1,59 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.props;
+
+import com.vci.ubcs.gateway.provider.AuthSecure;
+import com.vci.ubcs.gateway.provider.BasicSecure;
+import com.vci.ubcs.gateway.provider.SignSecure;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏉冮檺杩囨护
+ *
+ * @author Chill
+ */
+@Data
+@RefreshScope
+@ConfigurationProperties("blade.secure")
+public class AuthProperties {
+
+	/**
+	 * 鏀捐API闆嗗悎
+	 */
+	private final List<String> skipUrl = new ArrayList<>();
+
+	/**
+	 * 鑷畾涔夋巿鏉冮厤缃�
+	 */
+	private final List<AuthSecure> auth = new ArrayList<>();
+
+	/**
+	 * 鍩虹璁よ瘉閰嶇疆
+	 */
+	private final List<BasicSecure> basic = new ArrayList<>();
+
+	/**
+	 * 绛惧悕璁よ瘉閰嶇疆
+	 */
+	private final List<SignSecure> sign = new ArrayList<>();
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java
new file mode 100644
index 0000000..49598e2
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java
@@ -0,0 +1,67 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.provider;
+
+import org.springblade.core.launch.constant.TokenConstant;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 閴存潈閰嶇疆
+ *
+ * @author Chill
+ */
+public class AuthProvider {
+
+	public static final String AUTH_KEY = TokenConstant.HEADER;
+	private static final List<String> DEFAULT_SKIP_URL = new ArrayList<>();
+
+	static {
+		DEFAULT_SKIP_URL.add("/example");
+		DEFAULT_SKIP_URL.add("/oauth/token/**");
+		DEFAULT_SKIP_URL.add("/oauth/captcha/**");
+		DEFAULT_SKIP_URL.add("/oauth/clear-cache/**");
+		DEFAULT_SKIP_URL.add("/oauth/user-info");
+		DEFAULT_SKIP_URL.add("/oauth/render/**");
+		DEFAULT_SKIP_URL.add("/oauth/callback/**");
+		DEFAULT_SKIP_URL.add("/oauth/revoke/**");
+		DEFAULT_SKIP_URL.add("/oauth/refresh/**");
+		DEFAULT_SKIP_URL.add("/token/**");
+		DEFAULT_SKIP_URL.add("/actuator/**");
+		DEFAULT_SKIP_URL.add("/v2/api-docs/**");
+		DEFAULT_SKIP_URL.add("/auth/**");
+		DEFAULT_SKIP_URL.add("/log/**");
+		DEFAULT_SKIP_URL.add("/menu/routes");
+		DEFAULT_SKIP_URL.add("/menu/auth-routes");
+		DEFAULT_SKIP_URL.add("/menu/top-menu");
+		DEFAULT_SKIP_URL.add("/tenant/info");
+		DEFAULT_SKIP_URL.add("/process/Resource-view");
+		DEFAULT_SKIP_URL.add("/process/diagram-view");
+		DEFAULT_SKIP_URL.add("/manager/check-upload");
+		DEFAULT_SKIP_URL.add("/error/**");
+		DEFAULT_SKIP_URL.add("/assets/**");
+	}
+
+	/**
+	 * 榛樿鏃犻渶閴存潈鐨凙PI
+	 */
+	public static List<String> getDefaultSkipUrl() {
+		return DEFAULT_SKIP_URL;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthSecure.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthSecure.java
new file mode 100644
index 0000000..61bff52
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthSecure.java
@@ -0,0 +1,37 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.provider;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 鑷畾涔夋巿鏉冭鍒�
+ *
+ * @author Chill
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class AuthSecure {
+	/**
+	 * 璇锋眰璺緞
+	 */
+	private String pattern;
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/BasicSecure.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/BasicSecure.java
new file mode 100644
index 0000000..76cf94d
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/BasicSecure.java
@@ -0,0 +1,37 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.provider;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 鍩虹鎺堟潈瑙勫垯
+ *
+ * @author Chill
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BasicSecure {
+	/**
+	 * 璇锋眰璺緞
+	 */
+	private String pattern;
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/RequestProvider.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/RequestProvider.java
new file mode 100644
index 0000000..3bae0fb
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/RequestProvider.java
@@ -0,0 +1,49 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.provider;
+
+import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.server.ServerWebExchange;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import java.net.URI;
+import java.util.LinkedHashSet;
+
+/**
+ * RequestProvider
+ *
+ * @author Chill
+ */
+public class RequestProvider {
+
+	/**
+	 * 鑾峰彇鍘熷url
+	 *
+	 * @param exchange
+	 * @return
+	 */
+	public static String getOriginalRequestUrl(ServerWebExchange exchange) {
+		ServerHttpRequest request = exchange.getRequest();
+		LinkedHashSet<URI> uris = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
+		URI requestUri = uris.stream().findFirst().orElse(request.getURI());
+		MultiValueMap<String, String> queryParams = request.getQueryParams();
+		return UriComponentsBuilder.fromPath(requestUri.getRawPath()).queryParams(queryParams).build().toUriString();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/ResponseProvider.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/ResponseProvider.java
new file mode 100644
index 0000000..19d1afe
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/ResponseProvider.java
@@ -0,0 +1,84 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.provider;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 璇锋眰鍝嶅簲杩斿洖
+ *
+ * @author Chill
+ */
+public class ResponseProvider {
+
+	/**
+	 * 鎴愬姛
+	 *
+	 * @param message 淇℃伅
+	 * @return
+	 */
+	public static Map<String, Object> success(String message) {
+		return response(200, message);
+	}
+
+	/**
+	 * 澶辫触
+	 *
+	 * @param message 淇℃伅
+	 * @return
+	 */
+	public static Map<String, Object> fail(String message) {
+		return response(400, message);
+	}
+
+	/**
+	 * 鏈巿鏉�
+	 *
+	 * @param message 淇℃伅
+	 * @return
+	 */
+	public static Map<String, Object> unAuth(String message) {
+		return response(401, message);
+	}
+
+	/**
+	 * 鏈嶅姟鍣ㄥ紓甯�
+	 *
+	 * @param message 淇℃伅
+	 * @return
+	 */
+	public static Map<String, Object> error(String message) {
+		return response(500, message);
+	}
+
+	/**
+	 * 鏋勫缓杩斿洖鐨凧SON鏁版嵁鏍煎紡
+	 *
+	 * @param status  鐘舵�佺爜
+	 * @param message 淇℃伅
+	 * @return
+	 */
+	public static Map<String, Object> response(int status, String message) {
+		Map<String, Object> map = new HashMap<>(16);
+		map.put("code", status);
+		map.put("msg", message);
+		map.put("data", null);
+		return map;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/SignSecure.java b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/SignSecure.java
new file mode 100644
index 0000000..a41026c
--- /dev/null
+++ b/Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/SignSecure.java
@@ -0,0 +1,37 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.gateway.provider;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 绛惧悕鎺堟潈瑙勫垯
+ *
+ * @author Chill
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SignSecure {
+	/**
+	 * 璇锋眰璺緞
+	 */
+	private String pattern;
+
+}
diff --git a/Source/BladeX/blade-gateway/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-gateway/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-gateway/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-gateway/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml b/Source/UBCS/ubcs-gateway/src/main/resources/bootstrap.yml
similarity index 100%
rename from Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml
rename to Source/UBCS/ubcs-gateway/src/main/resources/bootstrap.yml
diff --git a/Source/UBCS/ubcs-ops-api/pom.xml b/Source/UBCS/ubcs-ops-api/pom.xml
new file mode 100644
index 0000000..462601a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>UBCS</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-ops-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>3.0.1.RELEASE</version>
+    <packaging>pom</packaging>
+    <description>BladeX 寰湇鍔PI闆嗗悎</description>
+
+    <modules>
+        <module>ubcs-flow-api</module>
+        <module>ubcs-resource-api</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-mybatis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                    <finalName>${project.name}</finalName>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml
new file mode 100644
index 0000000..e93129f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-flow-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+
+
+</project>
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/constant/ProcessConstant.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/constant/ProcessConstant.java
new file mode 100644
index 0000000..ba80732
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/constant/ProcessConstant.java
@@ -0,0 +1,61 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.constant;
+
+/**
+ * 娴佺▼甯搁噺.
+ *
+ * @author Chill
+ */
+public interface ProcessConstant {
+
+	/**
+	 * 璇峰亣娴佺▼鏍囪瘑
+	 */
+	String LEAVE_KEY = "Leave";
+
+	/**
+	 * 鎶ラ攢娴佺▼鏍囪瘑
+	 */
+	String EXPENSE_KEY = "Expense";
+
+	/**
+	 * 鍚屾剰鏍囪瘑
+	 */
+	String PASS_KEY = "pass";
+
+	/**
+	 * 鍚屾剰浠e彿
+	 */
+	String PASS_ALIAS = "ok";
+
+	/**
+	 * 鍚屾剰榛樿鎵瑰
+	 */
+	String PASS_COMMENT = "鍚屾剰";
+
+	/**
+	 * 椹冲洖榛樿鎵瑰
+	 */
+	String NOT_PASS_COMMENT = "椹冲洖";
+
+	/**
+	 * 鍒涘缓浜哄彉閲忓悕
+	 */
+	String TASK_VARIABLE_CREATE_USER = "createUser";
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java
new file mode 100644
index 0000000..bc0c590
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java
@@ -0,0 +1,179 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.entity;
+
+import com.vci.ubcs.flow.core.constant.ProcessConstant;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 宸ヤ綔娴侀�氱敤瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+public class BladeFlow implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 浠诲姟缂栧彿
+	 */
+	private String taskId;
+	/**
+	 * 浠诲姟鍚嶇О
+	 */
+	private String taskName;
+	/**
+	 * 浠诲姟瀹氫箟Key
+	 */
+	private String taskDefinitionKey;
+	/**
+	 * 浠诲姟鎵ц浜虹紪鍙�
+	 */
+	private String assignee;
+	/**
+	 * 浠诲姟鎵ц浜哄悕绉�
+	 */
+	private String assigneeName;
+	/**
+	 * 娴佺▼鍒嗙被
+	 */
+	private String category;
+	/**
+	 * 娴佺▼鍒嗙被鍚�
+	 */
+	private String categoryName;
+	/**
+	 * 鍒涘缓鏃堕棿
+	 */
+	private Date createTime;
+	/**
+	 * 缁撴潫鏃堕棿
+	 */
+	private Date endTime;
+	/**
+	 * 绛炬敹鏃堕棿
+	 */
+	private Date claimTime;
+	/**
+	 * 鍘嗗彶浠诲姟缁撴潫鏃堕棿
+	 */
+	private Date historyTaskEndTime;
+	/**
+	 * 鎵цID
+	 */
+	private String executionId;
+	/**
+	 * 娴佺▼瀹炰緥ID
+	 */
+	private String processInstanceId;
+	/**
+	 * 娴佺▼ID
+	 */
+	private String processDefinitionId;
+	/**
+	 * 娴佺▼鏍囪瘑
+	 */
+	private String processDefinitionKey;
+	/**
+	 * 娴佺▼鍚�
+	 */
+	private String processDefinitionName;
+	/**
+	 * 娴佺▼鐗堟湰
+	 */
+	private int processDefinitionVersion;
+	/**
+	 * 娴佺▼璇存槑
+	 */
+	private String processDefinitionDesc;
+	/**
+	 * 娴佺▼绠�鍥惧悕
+	 */
+	private String processDefinitionDiagramResName;
+	/**
+	 * 娴佺▼閲嶅懡鍚�
+	 */
+	private String processDefinitionResName;
+	/**
+	 * 鍘嗗彶浠诲姟娴佺▼瀹炰緥ID 鏌ョ湅娴佺▼鍥句細鐢ㄥ埌
+	 */
+	private String historyProcessInstanceId;
+	/**
+	 * 娴佺▼瀹炰緥鏄惁缁撴潫
+	 */
+	private String processIsFinished;
+	/**
+	 * 鍘嗗彶娲诲姩ID
+	 */
+	private String historyActivityId;
+	/**
+	 * 鍘嗗彶娲诲姩娴佺▼
+	 */
+	private String historyActivityName;
+	/**
+	 * 鍘嗗彶娲诲姩鑰楁椂
+	 */
+	private String historyActivityDurationTime;
+	/**
+	 * 涓氬姟缁戝畾Table
+	 */
+	private String businessTable;
+	/**
+	 * 涓氬姟缁戝畾ID
+	 */
+	private String businessId;
+	/**
+	 * 浠诲姟鐘舵��
+	 */
+	private String status;
+	/**
+	 * 浠诲姟鎰忚
+	 */
+	private String comment;
+	/**
+	 * 鏄惁閫氳繃
+	 */
+	private boolean isPass;
+	/**
+	 * 鏄惁閫氳繃浠e彿
+	 */
+	private String flag;
+	/**
+	 * 寮�濮嬫煡璇㈡棩鏈�
+	 */
+	private Date beginDate;
+	/**
+	 * 缁撴潫鏌ヨ鏃ユ湡
+	 */
+	private Date endDate;
+	/**
+	 * 娴佺▼鍙傛暟
+	 */
+	private Map<String, Object> variables;
+
+	/**
+	 * 鑾峰彇鏄惁閫氳繃
+	 */
+	public boolean isPass() {
+		return ProcessConstant.PASS_ALIAS.equals(flag) || ProcessConstant.PASS_COMMENT.equals(comment);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/FlowEntity.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/FlowEntity.java
new file mode 100644
index 0000000..37e5b5f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/FlowEntity.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * FlowEntity
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FlowEntity extends BaseEntity {
+
+	@TableField(exist = false)
+	private BladeFlow flow;
+
+	public BladeFlow getFlow() {
+		if (flow == null) {
+			flow = new BladeFlow();
+		}
+		return flow;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/enums/FlowModeEnum.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/enums/FlowModeEnum.java
new file mode 100644
index 0000000..9a68240
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/enums/FlowModeEnum.java
@@ -0,0 +1,45 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 娴佺▼绫诲瀷鏋氫妇
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum FlowModeEnum {
+
+	/**
+	 * 閫氱敤娴佺▼
+	 */
+	COMMON("common", 1),
+
+	/**
+	 * 瀹氬埗娴佺▼
+	 */
+	CUSTOM("custom", 2),
+	;
+
+	final String name;
+	final int mode;
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClient.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClient.java
new file mode 100644
index 0000000..d65e7f3
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClient.java
@@ -0,0 +1,100 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.feign;
+
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Map;
+
+/**
+ * 宸ヤ綔娴佽繙绋嬭皟鐢ㄦ帴鍙�.
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_FLOW_NAME,
+	fallback = IFlowClientFallback.class
+)
+public interface IFlowClient {
+
+	String API_PREFIX = "/client";
+	String START_PROCESS_INSTANCE_BY_ID = API_PREFIX + "/start-process-instance-by-id";
+	String START_PROCESS_INSTANCE_BY_KEY = API_PREFIX + "/start-process-instance-by-key";
+	String COMPLETE_TASK = API_PREFIX + "/complete-task";
+	String TASK_VARIABLE = API_PREFIX + "/task-variable";
+	String TASK_VARIABLES = API_PREFIX + "/task-variables";
+
+	/**
+	 * 寮�鍚祦绋�
+	 *
+	 * @param processDefinitionId 娴佺▼id
+	 * @param businessKey         涓氬姟key
+	 * @param variables           鍙傛暟
+	 * @return BladeFlow
+	 */
+	@PostMapping(START_PROCESS_INSTANCE_BY_ID)
+	R<BladeFlow> startProcessInstanceById(@RequestParam("processDefinitionId") String processDefinitionId, @RequestParam("businessKey") String businessKey, @RequestBody Map<String, Object> variables);
+
+	/**
+	 * 寮�鍚祦绋�
+	 *
+	 * @param processDefinitionKey 娴佺▼鏍囪瘑
+	 * @param businessKey          涓氬姟key
+	 * @param variables            鍙傛暟
+	 * @return BladeFlow
+	 */
+	@PostMapping(START_PROCESS_INSTANCE_BY_KEY)
+	R<BladeFlow> startProcessInstanceByKey(@RequestParam("processDefinitionKey") String processDefinitionKey, @RequestParam("businessKey") String businessKey, @RequestBody Map<String, Object> variables);
+
+	/**
+	 * 瀹屾垚浠诲姟
+	 *
+	 * @param taskId            浠诲姟id
+	 * @param processInstanceId 娴佺▼瀹炰緥id
+	 * @param comment           璇勮
+	 * @param variables         鍙傛暟
+	 * @return R
+	 */
+	@PostMapping(COMPLETE_TASK)
+	R completeTask(@RequestParam("taskId") String taskId, @RequestParam("processInstanceId") String processInstanceId, @RequestParam("comment") String comment, @RequestBody Map<String, Object> variables);
+
+	/**
+	 * 鑾峰彇娴佺▼鍙橀噺
+	 *
+	 * @param taskId       浠诲姟id
+	 * @param variableName 鍙橀噺鍚�
+	 * @return R
+	 */
+	@GetMapping(TASK_VARIABLE)
+	R<Object> taskVariable(@RequestParam("taskId") String taskId, @RequestParam("variableName") String variableName);
+
+	/**
+	 * 鑾峰彇娴佺▼鍙橀噺闆嗗悎
+	 *
+	 * @param taskId 浠诲姟id
+	 * @return R
+	 */
+	@GetMapping(TASK_VARIABLES)
+	R<Map<String, Object>> taskVariables(@RequestParam("taskId") String taskId);
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClientFallback.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClientFallback.java
new file mode 100644
index 0000000..5148a22
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClientFallback.java
@@ -0,0 +1,58 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.feign;
+
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 娴佺▼杩滅▼璋冪敤澶辫触澶勭悊绫�
+ *
+ * @author Chill
+ */
+@Component
+public class IFlowClientFallback implements IFlowClient {
+
+	@Override
+	public R<BladeFlow> startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+	@Override
+	public R<BladeFlow> startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+	@Override
+	public R completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+	@Override
+	public R<Object> taskVariable(String taskId, String variableName) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+	@Override
+	public R<Map<String, Object>> taskVariables(String taskId) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/FlowUtil.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/FlowUtil.java
new file mode 100644
index 0000000..03d99aa
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/FlowUtil.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.utils;
+
+import com.vci.ubcs.flow.core.constant.ProcessConstant;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 宸ヤ綔娴佸伐鍏风被
+ *
+ * @author Chill
+ */
+public class FlowUtil {
+
+	/**
+	 * 瀹氫箟娴佺▼key瀵瑰簲鐨勮〃鍚�
+	 */
+	private final static Map<String, String> BUSINESS_TABLE = new HashMap<>();
+
+	static {
+		BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "pl_wf_process_leave");
+	}
+
+	/**
+	 * 閫氳繃娴佺▼key鑾峰彇涓氬姟琛ㄥ悕
+	 *
+	 * @param key 娴佺▼key
+	 */
+	public static String getBusinessTable(String key) {
+		String businessTable = BUSINESS_TABLE.get(key);
+		if (Func.isEmpty(businessTable)) {
+			throw new RuntimeException("娴佺▼鍚姩澶辫触,鏈壘鍒扮浉鍏充笟鍔¤〃");
+		}
+		return businessTable;
+	}
+
+	/**
+	 * 鑾峰彇涓氬姟鏍囪瘑
+	 *
+	 * @param businessTable 涓氬姟琛�
+	 * @param businessId    涓氬姟琛ㄤ富閿�
+	 * @return businessKey
+	 */
+	public static String getBusinessKey(String businessTable, String businessId) {
+		return StringUtil.format("{}:{}", businessTable, businessId);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/TaskUtil.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/TaskUtil.java
new file mode 100644
index 0000000..cad48d4
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/TaskUtil.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.core.utils;
+
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+
+import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
+
+/**
+ * 宸ヤ綔娴佷换鍔″伐鍏风被
+ *
+ * @author Chill
+ */
+public class TaskUtil {
+
+	/**
+	 * 鑾峰彇浠诲姟鐢ㄦ埛鏍煎紡
+	 *
+	 * @return taskUser
+	 */
+	public static String getTaskUser() {
+		return StringUtil.format("{}{}", TASK_USR_PREFIX, AuthUtil.getUserId());
+	}
+
+	/**
+	 * 鑾峰彇浠诲姟鐢ㄦ埛鏍煎紡
+	 *
+	 * @param userId 鐢ㄦ埛id
+	 * @return taskUser
+	 */
+	public static String getTaskUser(String userId) {
+		return StringUtil.format("{}{}", TASK_USR_PREFIX, userId);
+	}
+
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛涓婚敭
+	 *
+	 * @param taskUser 浠诲姟鐢ㄦ埛
+	 * @return userId
+	 */
+	public static Long getUserId(String taskUser) {
+		return Func.toLong(StringUtil.removePrefix(taskUser, TASK_USR_PREFIX));
+	}
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛缁勬牸寮�
+	 *
+	 * @return candidateGroup
+	 */
+	public static String getCandidateGroup() {
+		return AuthUtil.getUserRole();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/pom.xml b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/pom.xml
new file mode 100644
index 0000000..3f9973d
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-resource-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-sms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-tenant</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Attach.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Attach.java
new file mode 100644
index 0000000..24ae52e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Attach.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 闄勪欢琛ㄥ疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_attach")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Attach瀵硅薄", description = "闄勪欢琛�")
+public class Attach extends TenantEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 闄勪欢鍦板潃
+	 */
+	@ApiModelProperty(value = "闄勪欢鍦板潃")
+	private String link;
+	/**
+	 * 闄勪欢鍩熷悕
+	 */
+	@ApiModelProperty(value = "闄勪欢鍩熷悕")
+	private String domainUrl;
+	/**
+	 * 闄勪欢鍚嶇О
+	 */
+	@ApiModelProperty(value = "闄勪欢鍚嶇О")
+	private String name;
+	/**
+	 * 闄勪欢鍘熷悕
+	 */
+	@ApiModelProperty(value = "闄勪欢鍘熷悕")
+	private String originalName;
+	/**
+	 * 闄勪欢鎷撳睍鍚�
+	 */
+	@ApiModelProperty(value = "闄勪欢鎷撳睍鍚�")
+	private String extension;
+	/**
+	 * 闄勪欢澶у皬
+	 */
+	@ApiModelProperty(value = "闄勪欢澶у皬")
+	private Long attachSize;
+
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Oss.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Oss.java
new file mode 100644
index 0000000..c8fa4b4
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Oss.java
@@ -0,0 +1,87 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("pl_sys_oss")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Oss瀵硅薄", description = "Oss瀵硅薄")
+public class Oss extends TenantEntity {
+
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 鎵�灞炲垎绫�
+	 */
+	@ApiModelProperty(value = "鎵�灞炲垎绫�")
+	private Integer category;
+
+	/**
+	 * 璧勬簮缂栧彿
+	 */
+	@ApiModelProperty(value = "璧勬簮缂栧彿")
+	private String ossCode;
+
+	/**
+	 * oss鍦板潃
+	 */
+	@ApiModelProperty(value = "璧勬簮鍦板潃")
+	private String endpoint;
+	/**
+	 * accessKey
+	 */
+	@ApiModelProperty(value = "accessKey")
+	private String accessKey;
+	/**
+	 * secretKey
+	 */
+	@ApiModelProperty(value = "secretKey")
+	private String secretKey;
+	/**
+	 * 绌洪棿鍚�
+	 */
+	@ApiModelProperty(value = "绌洪棿鍚�")
+	private String bucketName;
+	/**
+	 * 搴旂敤ID TencentCOS闇�瑕�
+	 */
+	@ApiModelProperty(value = "搴旂敤ID")
+	private String appId;
+	/**
+	 * 鍦板煙绠�绉� TencentCOS闇�瑕�
+	 */
+	@ApiModelProperty(value = "鍦板煙绠�绉�")
+	private String region;
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Sms.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Sms.java
new file mode 100644
index 0000000..479156f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Sms.java
@@ -0,0 +1,82 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 鐭俊閰嶇疆琛ㄥ疄浣撶被
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("pl_sys_sms")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Sms瀵硅薄", description = "鐭俊閰嶇疆琛�")
+public class Sms extends TenantEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 璧勬簮缂栧彿
+	 */
+	@ApiModelProperty(value = "璧勬簮缂栧彿")
+	private String smsCode;
+
+	/**
+	 * 妯℃澘ID
+	 */
+	@ApiModelProperty(value = "妯℃澘ID")
+	private String templateId;
+	/**
+	 * 鍒嗙被
+	 */
+	@ApiModelProperty(value = "鍒嗙被")
+	private Integer category;
+	/**
+	 * accessKey
+	 */
+	@ApiModelProperty(value = "accessKey")
+	private String accessKey;
+	/**
+	 * secretKey
+	 */
+	@ApiModelProperty(value = "secretKey")
+	private String secretKey;
+	/**
+	 * regionId
+	 */
+	@ApiModelProperty(value = "regionId")
+	private String regionId;
+	/**
+	 * 鐭俊绛惧悕
+	 */
+	@ApiModelProperty(value = "鐭俊绛惧悕")
+	private String signName;
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/enums/SmsCodeEnum.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/enums/SmsCodeEnum.java
new file mode 100644
index 0000000..b2479ce
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/enums/SmsCodeEnum.java
@@ -0,0 +1,62 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.StringPool;
+
+/**
+ * Sms璧勬簮缂栫爜鏋氫妇绫�
+ *
+ * @author Chill
+ * @apiNote 璇ユ灇涓剧被瀵瑰簲鐭俊閰嶇疆妯″潡鐨勮祫婧愮紪鐮侊紝鍙牴鎹笟鍔¢渶姹傝嚜琛屾嫇灞�
+ */
+@Getter
+@AllArgsConstructor
+public enum SmsCodeEnum {
+
+	/**
+	 * 榛樿缂栧彿
+	 */
+	DEFAULT(StringPool.EMPTY, 1),
+
+	/**
+	 * 楠岃瘉鐮佺紪鍙�
+	 */
+	VALIDATE("validate", 2),
+
+	/**
+	 * 閫氱煡鍏憡缂栧彿
+	 */
+	NOTICE("notice", 3),
+
+	/**
+	 * 涓嬪崟閫氱煡缂栧彿
+	 */
+	ORDER("order", 4),
+
+	/**
+	 * 浼氳閫氱煡缂栧彿
+	 */
+	MEETING("meeting", 5),
+	;
+
+	final String name;
+	final int category;
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClient.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClient.java
new file mode 100644
index 0000000..3d37f63
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClient.java
@@ -0,0 +1,74 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.feign;
+
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.sms.model.SmsResponse;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * ISmsClient
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_RESOURCE_NAME,
+	fallback = ISmsClientFallback.class
+)
+public interface ISmsClient {
+	String API_PREFIX = "/client";
+	String SEND_MESSAGE = API_PREFIX + "/send-message";
+	String SEND_VALIDATE = API_PREFIX + "/send-validate";
+	String VALIDATE_MESSAGE = API_PREFIX + "/validate-message";
+
+	/**
+	 * 閫氱敤鐭俊鍙戦��
+	 *
+	 * @param code   璧勬簮缂栧彿
+	 * @param params 妯℃澘鍙傛暟
+	 * @param phones 鎵嬫満鍙烽泦鍚�
+	 * @return R
+	 */
+	@PostMapping(SEND_MESSAGE)
+	R<SmsResponse> sendMessage(@RequestParam("code") String code, @RequestParam("params") String params, @RequestParam("phones") String phones);
+
+	/**
+	 * 鐭俊楠岃瘉鐮佸彂閫�
+	 *
+	 * @param code  璧勬簮缂栧彿
+	 * @param phone 鎵嬫満鍙�
+	 * @return R
+	 */
+	@PostMapping(SEND_VALIDATE)
+	R sendValidate(@RequestParam("code") String code, @RequestParam("phone") String phone);
+
+	/**
+	 * 鏍¢獙鐭俊
+	 *
+	 * @param code  璧勬簮缂栧彿
+	 * @param id    鏍¢獙id
+	 * @param value 鏍¢獙鍊�
+	 * @param phone 鎵嬫満鍙�
+	 * @return R
+	 */
+	@PostMapping(VALIDATE_MESSAGE)
+	R validateMessage(@RequestParam("code") String code, @RequestParam("id") String id, @RequestParam("value") String value, @RequestParam("phone") String phone);
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClientFallback.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClientFallback.java
new file mode 100644
index 0000000..82238ca
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClientFallback.java
@@ -0,0 +1,44 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.feign;
+
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+/**
+ * 娴佺▼杩滅▼璋冪敤澶辫触澶勭悊绫�
+ *
+ * @author Chill
+ */
+@Component
+public class ISmsClientFallback implements ISmsClient {
+	@Override
+	public R sendMessage(String code, String params, String phones) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+	@Override
+	public R sendValidate(String code, String phone) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+	@Override
+	public R validateMessage(String code, String id, String value, String phone) {
+		return R.fail("杩滅▼璋冪敤澶辫触");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/utils/SmsUtil.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/utils/SmsUtil.java
new file mode 100644
index 0000000..0c389b8
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/utils/SmsUtil.java
@@ -0,0 +1,113 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.utils;
+
+import org.springblade.core.sms.model.SmsCode;
+import org.springblade.core.sms.model.SmsResponse;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.utils.RandomType;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringUtil;
+import com.vci.ubcs.resource.feign.ISmsClient;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鐭俊鏈嶅姟宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class SmsUtil {
+
+	public static final String PARAM_KEY = "code";
+	public static final String SEND_SUCCESS = "鐭俊鍙戦�佹垚鍔�";
+	public static final String SEND_FAIL = "鐭俊鍙戦�佸け璐�";
+	public static final String VALIDATE_SUCCESS = "鐭俊鏍¢獙鎴愬姛";
+	public static final String VALIDATE_FAIL = "鐭俊鏍¢獙澶辫触";
+
+	private static ISmsClient smsClient;
+
+	/**
+	 * 鑾峰彇鐭俊鏈嶅姟鏋勫缓绫�
+	 *
+	 * @return SmsBuilder
+	 */
+	public static ISmsClient getSmsClient() {
+		if (smsClient == null) {
+			smsClient = SpringUtil.getBean(ISmsClient.class);
+		}
+		return smsClient;
+	}
+
+	/**
+	 * 鑾峰彇鐭俊楠岃瘉鐮佸弬鏁�
+	 *
+	 * @return 楠岃瘉鐮佸弬鏁�
+	 */
+	public static Map<String, String> getValidateParams() {
+		Map<String, String> params = new HashMap<>(1);
+		params.put(PARAM_KEY, StringUtil.random(6, RandomType.INT));
+		return params;
+	}
+
+	/**
+	 * 鍙戦�佺煭淇�
+	 *
+	 * @param code   璧勬簮缂栧彿
+	 * @param params 妯℃澘鍙傛暟
+	 * @param phones 鎵嬫満鍙烽泦鍚�
+	 * @return 鍙戦�佺粨鏋�
+	 */
+	public static SmsResponse sendMessage(String code, Map<String, String> params, String phones) {
+		R<SmsResponse> result = getSmsClient().sendMessage(code, JsonUtil.toJson(params), phones);
+		return result.getData();
+	}
+
+	/**
+	 * 鍙戦�侀獙璇佺爜
+	 *
+	 * @param code  璧勬簮缂栧彿
+	 * @param phone 鎵嬫満鍙�
+	 * @return 鍙戦�佺粨鏋�
+	 */
+	public static SmsCode sendValidate(String code, String phone) {
+		SmsCode smsCode = new SmsCode();
+		R result = getSmsClient().sendValidate(code, phone);
+		if (result.isSuccess()) {
+			smsCode = JsonUtil.parse(JsonUtil.toJson(result.getData()), SmsCode.class);
+		} else {
+			smsCode.setSuccess(Boolean.FALSE);
+		}
+		return smsCode;
+	}
+
+	/**
+	 * 鏍¢獙鐭俊
+	 *
+	 * @param code  璧勬簮缂栧彿
+	 * @param id    鏍¢獙id
+	 * @param value 鏍¢獙鍊�
+	 * @return 鍙戦�佺粨鏋�
+	 */
+	public static boolean validateMessage(String code, String id, String value, String phone) {
+		R result = getSmsClient().validateMessage(code, id, value, phone);
+		return result.isSuccess();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/AttachVO.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/AttachVO.java
new file mode 100644
index 0000000..db2d188
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/AttachVO.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.resource.entity.Attach;
+
+/**
+ * 闄勪欢琛ㄨ鍥惧疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "AttachVO瀵硅薄", description = "闄勪欢琛�")
+public class AttachVO extends Attach {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/OssVO.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/OssVO.java
new file mode 100644
index 0000000..216cf2d
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/OssVO.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.resource.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.resource.entity.Oss;
+
+/**
+ * OssVO
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "OssVO瀵硅薄", description = "瀵硅薄瀛樺偍琛�")
+public class OssVO extends Oss {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鍒嗙被鍚�
+	 */
+	private String categoryName;
+
+	/**
+	 * 鏄惁鍚敤
+	 */
+	private String statusName;
+
+}
diff --git a/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/SmsVO.java b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/SmsVO.java
new file mode 100644
index 0000000..08696f8
--- /dev/null
+++ b/Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/SmsVO.java
@@ -0,0 +1,45 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.resource.entity.Sms;
+
+/**
+ * 鐭俊閰嶇疆琛ㄨ鍥惧疄浣撶被
+ *
+ * @author BladeX
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "SmsVO瀵硅薄", description = "鐭俊閰嶇疆琛�")
+public class SmsVO extends Sms {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鍒嗙被鍚�
+	 */
+	private String categoryName;
+
+	/**
+	 * 鏄惁鍚敤
+	 */
+	private String statusName;
+
+}
diff --git a/Source/UBCS/ubcs-ops/pom.xml b/Source/UBCS/ubcs-ops/pom.xml
new file mode 100644
index 0000000..4c4cffb
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>UBCS</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-ops</artifactId>
+    <name>${project.artifactId}</name>
+    <version>3.0.1.RELEASE</version>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>ubcs-admin</module>
+        <module>ubcs-develop</module>
+        <module>ubcs-flow</module>
+        <module>ubcs-log</module>
+        <module>ubcs-report</module>
+        <module>ubcs-resource</module>
+        <module>ubcs-swagger</module>
+        <module>ubcs-xxljob</module>
+        <module>ubcs-xxljob-admin</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-metrics</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/BladeX/blade-ops/blade-admin/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-admin/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-admin/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-admin/Dockerfile
diff --git a/Source/BladeX/blade-ops/blade-admin/README.md b/Source/UBCS/ubcs-ops/ubcs-admin/README.md
similarity index 100%
rename from Source/BladeX/blade-ops/blade-admin/README.md
rename to Source/UBCS/ubcs-ops/ubcs-admin/README.md
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/pom.xml b/Source/UBCS/ubcs-ops/ubcs-admin/pom.xml
new file mode 100644
index 0000000..f37c2eb
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/pom.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-admin</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springblade</groupId>
+                    <artifactId>blade-core-launch</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-launch</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-web</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-undertow</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-prometheus</artifactId>
+        </dependency>
+        <!-- Nacos -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.alibaba.nacos</groupId>
+                    <artifactId>nacos-client</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.alibaba.nacos</groupId>
+                    <artifactId>nacos-client</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.nacos</groupId>
+            <artifactId>nacos-client</artifactId>
+        </dependency>
+        <!--Admin-Server-->
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-starter-server</artifactId>
+        </dependency>
+        <!--Security-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        <!--<dependency>
+            <groupId>org.springframework.security.oauth.boot</groupId>
+            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
+        </dependency>-->
+        <!--Taobao-Sdk-->
+        <dependency>
+            <groupId>com.taobao</groupId>
+            <artifactId>taobao-sdk</artifactId>
+            <version>20201116</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/AdminApplication.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/AdminApplication.java
new file mode 100644
index 0000000..5f31c46
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/AdminApplication.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.admin;
+
+import de.codecentric.boot.admin.server.config.EnableAdminServer;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+/**
+ * admin鍚姩鍣�
+ *
+ * @author Chill
+ */
+@EnableAdminServer
+@EnableDiscoveryClient
+@SpringBootApplication
+public class AdminApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_ADMIN_NAME, AdminApplication.class, args);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/AdminConfiguration.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/AdminConfiguration.java
new file mode 100644
index 0000000..e0aed63
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/AdminConfiguration.java
@@ -0,0 +1,32 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.admin.config;
+
+import com.vci.ubcs.admin.dingtalk.MonitorProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 鍚姩鍣�
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@EnableConfigurationProperties(MonitorProperties.class)
+public class AdminConfiguration {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/DingTalkConfiguration.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/DingTalkConfiguration.java
new file mode 100644
index 0000000..4b0a0e3
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/DingTalkConfiguration.java
@@ -0,0 +1,52 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.admin.config;
+
+import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
+import com.vci.ubcs.admin.dingtalk.DingTalkNotifier;
+import com.vci.ubcs.admin.dingtalk.DingTalkService;
+import com.vci.ubcs.admin.dingtalk.MonitorProperties;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.web.reactive.function.client.WebClient;
+
+/**
+ * 閽夐拤鑷姩閰嶇疆
+ *
+ * @author L.cm
+ */
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnProperty(value = "monitor.ding-talk.enabled", havingValue = "true")
+public class DingTalkConfiguration {
+
+	@Bean
+	public DingTalkService dingTalkService(MonitorProperties properties,
+										   WebClient.Builder builder) {
+		return new DingTalkService(properties, builder.build());
+	}
+
+	@Bean
+	public DingTalkNotifier dingTalkNotifier(MonitorProperties properties,
+											 DingTalkService dingTalkService,
+											 InstanceRepository repository,
+											 Environment environment) {
+		return new DingTalkNotifier(dingTalkService, properties, environment, repository);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/SecurityConfiguration.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/SecurityConfiguration.java
new file mode 100644
index 0000000..1b1003c
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/SecurityConfiguration.java
@@ -0,0 +1,73 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.admin.config;
+
+import de.codecentric.boot.admin.server.config.AdminServerProperties;
+import com.vci.ubcs.admin.security.InternalAuthorizationManager;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
+import org.springframework.security.config.web.server.ServerHttpSecurity;
+import org.springframework.security.web.server.SecurityWebFilterChain;
+import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
+
+import java.net.URI;
+
+/**
+ * 鐩戞帶瀹夊叏閰嶇疆
+ *
+ * @author L.cm
+ */
+@EnableWebFluxSecurity
+@Configuration(proxyBeanMethods = false)
+@EnableConfigurationProperties(AdminServerProperties.class)
+public class SecurityConfiguration {
+	private final String contextPath;
+
+	public SecurityConfiguration(AdminServerProperties adminServerProperties) {
+		this.contextPath = adminServerProperties.getContextPath();
+	}
+
+	@Bean
+	public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
+		// @formatter:off
+		RedirectServerAuthenticationSuccessHandler successHandler = new RedirectServerAuthenticationSuccessHandler();
+		successHandler.setLocation(URI.create(contextPath + "/"));
+		return http.headers().frameOptions().disable().and()
+			.authorizeExchange()
+			// 鏀惧紑闈欐�佹枃浠跺拰鐧婚檰
+			.pathMatchers(
+				contextPath + "/assets/**"
+				, contextPath + "/login"
+				, contextPath + "/v1/agent/**"
+				, contextPath + "/v1/catalog/**"
+				, contextPath + "/v1/health/**"
+			).permitAll()
+			// 鍐呯綉鍙闂� actuator
+			.pathMatchers(contextPath + "/actuator", contextPath + "/actuator/**").access(new InternalAuthorizationManager())
+			.anyExchange().authenticated().and()
+			.formLogin().loginPage(contextPath + "/login")
+			.authenticationSuccessHandler(successHandler).and()
+			.logout().logoutUrl(contextPath + "/logout").and()
+			.httpBasic().disable()
+			.csrf().disable()
+			.build();
+		// @formatter:on
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkNotifier.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkNotifier.java
new file mode 100644
index 0000000..f19ec11
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkNotifier.java
@@ -0,0 +1,105 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.admin.dingtalk;
+
+import de.codecentric.boot.admin.server.domain.entities.Instance;
+import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
+import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
+import de.codecentric.boot.admin.server.domain.events.InstanceStatusChangedEvent;
+import de.codecentric.boot.admin.server.domain.values.Registration;
+import de.codecentric.boot.admin.server.domain.values.StatusInfo;
+import de.codecentric.boot.admin.server.notify.AbstractEventNotifier;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.env.Environment;
+import org.springframework.lang.NonNull;
+import reactor.core.publisher.Mono;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 鏈嶅姟涓婁笅绾垮憡璀�
+ *
+ * <p>
+ * 娉ㄦ剰锛欰bstractStatusChangeNotifier 杩欎釜浜嬩欢鏈夋瘺鐥�
+ * </p>
+ *
+ * @author L.cm
+ */
+@Slf4j
+public class DingTalkNotifier extends AbstractEventNotifier {
+	private final DingTalkService dingTalkService;
+	private final MonitorProperties properties;
+	private final Environment environment;
+	public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+	public DingTalkNotifier(DingTalkService dingTalkService, MonitorProperties properties,
+							Environment environment, InstanceRepository repository) {
+		super(repository);
+		this.dingTalkService = dingTalkService;
+		this.properties = properties;
+		this.environment = environment;
+	}
+
+	@NonNull
+	@Override
+	protected Mono<Void> doNotify(@NonNull InstanceEvent event, @NonNull Instance instance) {
+		if (event instanceof InstanceStatusChangedEvent) {
+			// 鏋勯�犺姹傜粨鏋�
+			return createAndPushMsg(event, instance);
+		}
+		return Mono.empty();
+	}
+
+	private Mono<Void> createAndPushMsg(InstanceEvent event, Instance instance) {
+		Registration registration = instance.getRegistration();
+		// 鏈嶅姟鍚�
+		String appName = registration.getName();
+		// 鏈嶅姟鍦板潃
+		String serviceUrl = registration.getServiceUrl();
+		StatusInfo status = instance.getStatusInfo();
+		// 鏃堕棿
+		LocalDateTime localDateTime = LocalDateTime.ofInstant(event.getTimestamp(), ZoneId.systemDefault());
+		MonitorProperties.DingTalk dingTalk = properties.getDingTalk();
+		String title = dingTalk.getService().getTitle();
+
+		String message = "## **" + title + "**\n" +
+			"#### **銆愭湇鍔°��** " + appName + "\n" +
+			"#### **銆愮幆澧冦��** " + environment.getActiveProfiles()[0] + "\n" +
+			"#### **銆愬湴鍧�銆�** " + serviceUrl + "\n" +
+			"#### **銆愮姸鎬併��** " + statusCn(status) + "\n" +
+			"#### **銆愭椂闂淬��** " + DATETIME_FORMATTER.format(localDateTime) + "\n" +
+			"#### **銆愯鎯呫��** " + dingTalk.getLink() + "\n";
+
+		return dingTalkService.pushMsg(title, message);
+	}
+
+	private String statusCn(StatusInfo status) {
+		if (status.isUp()) {
+			return "搴旂敤涓婄嚎锛圛S UP锛�";
+		} else if (status.isDown()) {
+			return "搴旂敤瀹曟満锛圛S DOWN锛�";
+		} else if (status.isOffline()) {
+			return "搴旂敤鎺夌嚎锛圛S OFFLINE锛�";
+		} else if (status.isUnknown()) {
+			return "鏈煡鐘舵�侊紙UNKNOWN锛�";
+		} else {
+			return "寮傚父鐘舵��";
+		}
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkService.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkService.java
new file mode 100644
index 0000000..e20c878
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkService.java
@@ -0,0 +1,110 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.admin.dingtalk;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
+import org.springframework.util.Base64Utils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.util.UriUtils;
+import reactor.core.publisher.Mono;
+
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 閽夐拤 鏈嶅姟
+ *
+ * @author L.cm
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class DingTalkService {
+	private static final String DING_TALK_ROBOT_URL = "https://oapi.dingtalk.com/robot/send?access_token=";
+	private final MonitorProperties properties;
+	private final WebClient webClient;
+
+	/**
+	 * 鍙戦�佹秷鎭�
+	 *
+	 * @param title title
+	 * @param text  娑堟伅
+	 */
+	public Mono<Void> pushMsg(String title, String text) {
+		log.info("閽夐拤娑堟伅锛歔鍒涘缓娑堟伅浣揮title:{}, text:{}", title, text);
+
+		HashMap<String, String> params = new HashMap<>(2);
+		params.put("title", title);
+		params.put("text", text);
+
+		Map<String, Object> body = new HashMap<>(2);
+		body.put("msgtype", "markdown");
+		body.put("markdown", params);
+		log.info("鍒涘缓娑堟伅浣� json锛歿}", body);
+
+		MonitorProperties.DingTalk dingTalk = properties.getDingTalk();
+		String accessToken = dingTalk.getAccessToken();
+		if (!StringUtils.hasText(accessToken)) {
+			log.error("DingTalk alert config accessToken ${monitor.ding-talk.access-token} is blank.");
+			return Mono.empty();
+		}
+
+		String urlString = DING_TALK_ROBOT_URL + dingTalk.getAccessToken();
+		// 鏈夌閽ヨ绛惧悕
+		String secret = dingTalk.getSecret();
+		if (StringUtils.hasText(secret)) {
+			long timestamp = System.currentTimeMillis();
+			urlString += String.format("&timestamp=%s&sign=%s", timestamp, getSign(secret, timestamp));
+		}
+		return webClient.post()
+			.uri(URI.create(urlString))
+			.contentType(MediaType.APPLICATION_JSON)
+			.body(BodyInserters.fromValue(body))
+			.retrieve()
+			.bodyToMono(String.class)
+			.doOnSuccess((result) -> log.info("閽夐拤娑堟伅锛歔娑堟伅杩斿洖]result:{}", result))
+			.then();
+	}
+
+	private static String getSign(String secret, long timestamp) {
+		String stringToSign = timestamp + "\n" + secret;
+		byte[] hmacSha256Bytes = digestHmac(stringToSign, secret);
+		return UriUtils.encode(Base64Utils.encodeToString(hmacSha256Bytes), StandardCharsets.UTF_8);
+	}
+
+	public static byte[] digestHmac(String data, String key) {
+		SecretKey secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
+		try {
+			Mac mac = Mac.getInstance(secretKey.getAlgorithm());
+			mac.init(secretKey);
+			return mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
+		} catch (NoSuchAlgorithmException | InvalidKeyException e) {
+			throw new RuntimeException(e.getMessage());
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/MonitorProperties.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/MonitorProperties.java
new file mode 100644
index 0000000..0397f1e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/MonitorProperties.java
@@ -0,0 +1,67 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.admin.dingtalk;
+
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+
+/**
+ * 鐩戞帶閰嶇疆
+ *
+ * @author L.cm
+ */
+@Getter
+@Setter
+@RefreshScope
+@ConfigurationProperties("monitor")
+public class MonitorProperties {
+	private DingTalk dingTalk = new DingTalk();
+
+	@Getter
+	@Setter
+	public static class DingTalk {
+		/**
+		 * 鍚敤閽夐拤鍛婅锛岄粯璁や负 true
+		 */
+		private boolean enabled = false;
+		/**
+		 * 閽夐拤鏈哄櫒浜� token
+		 */
+		private String accessToken;
+		/**
+		 * 绛惧悕锛氬鏋滄湁 secret 鍒欒繘琛岀鍚嶏紝鍏煎鑰佹帴鍙�
+		 */
+		private String secret;
+		/**
+		 * 鍦板潃閰嶇疆
+		 */
+		private String link;
+		private Service service = new Service();
+	}
+
+	@Getter
+	@Setter
+	public static class Service {
+		/**
+		 * 鏈嶅姟 鐘舵�� title
+		 */
+		private String title = "鏈嶅姟鐘舵�侀�氱煡";
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/InternalAuthorizationManager.java b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/InternalAuthorizationManager.java
new file mode 100644
index 0000000..f61fce9
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/InternalAuthorizationManager.java
@@ -0,0 +1,75 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package com.vci.ubcs.admin.security;
+
+import org.springblade.core.launch.utils.INetUtil;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.security.authorization.AuthorizationDecision;
+import org.springframework.security.authorization.ReactiveAuthorizationManager;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.server.authorization.AuthorizationContext;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.net.InetSocketAddress;
+import java.util.Optional;
+
+/**
+ * 鍐呯綉璁よ瘉绠$悊锛屽唴缃戞斁琛岋紝澶栫綉璁よ瘉
+ *
+ * @author L.cm
+ */
+public class InternalAuthorizationManager implements ReactiveAuthorizationManager<AuthorizationContext> {
+	private static final String HEADER_X_FORWARDED_FOR = "X-Forwarded-For";
+
+	@Override
+	public Mono<AuthorizationDecision> check(Mono<Authentication> authentication, AuthorizationContext context) {
+		return Mono.just(getAuthorizationDecision(context));
+	}
+
+	private static AuthorizationDecision getAuthorizationDecision(AuthorizationContext context) {
+		return new AuthorizationDecision(isInternalNet(context));
+	}
+
+	/**
+	 * 鍒ゆ柇鏄惁鍐呯綉 ip 璇锋眰
+	 *
+	 * @param context AuthorizationContext
+	 * @return 鏄惁鍐呯綉 ip
+	 */
+	private static boolean isInternalNet(AuthorizationContext context) {
+		ServerHttpRequest request = Optional.ofNullable(context)
+			.map(AuthorizationContext::getExchange)
+			.map(ServerWebExchange::getRequest)
+			.orElse(null);
+		if (request == null) {
+			return false;
+		}
+		HttpHeaders headers = request.getHeaders();
+		// 濡傛灉娌℃湁 X-Forwarded-For 浠h〃涓� admin 鎷夊彇
+		if (!headers.containsKey(HEADER_X_FORWARDED_FOR)) {
+			return true;
+		}
+		return Optional.of(request)
+			.map(ServerHttpRequest::getRemoteAddress)
+			.map(InetSocketAddress::getAddress)
+			.map(INetUtil::isInternalIp)
+			.orElse(false);
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml b/Source/UBCS/ubcs-ops/ubcs-admin/src/main/resources/bootstrap.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml
rename to Source/UBCS/ubcs-ops/ubcs-admin/src/main/resources/bootstrap.yml
diff --git a/Source/BladeX/blade-ops/blade-develop/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-develop/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-develop/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-develop/Dockerfile
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/pom.xml b/Source/UBCS/ubcs-ops/ubcs-develop/pom.xml
new file mode 100644
index 0000000..a678fb7
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>ubcs-ops</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-develop</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-develop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-dict-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/DevelopApplication.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/DevelopApplication.java
new file mode 100644
index 0000000..d7f9fc7
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/DevelopApplication.java
@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * Develop鍚姩鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class DevelopApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_DEVELOP_NAME, DevelopApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/CodeController.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/CodeController.java
new file mode 100644
index 0000000..996aed9
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/CodeController.java
@@ -0,0 +1,188 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.develop.entity.Code;
+import com.vci.ubcs.develop.entity.Datasource;
+import com.vci.ubcs.develop.entity.Model;
+import com.vci.ubcs.develop.entity.ModelPrototype;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import com.vci.ubcs.develop.service.ICodeService;
+import com.vci.ubcs.develop.service.IDatasourceService;
+import com.vci.ubcs.develop.service.IModelPrototypeService;
+import com.vci.ubcs.develop.service.IModelService;
+import org.springblade.develop.support.BladeCodeGenerator;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/code")
+@Api(value = "浠g爜鐢熸垚", tags = "浠g爜鐢熸垚")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+public class CodeController extends BladeController {
+
+	private final ICodeService codeService;
+	private final IDatasourceService datasourceService;
+	private final IModelService modelService;
+	private final IModelPrototypeService modelPrototypeService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆code")
+	public R<Code> detail(Code code) {
+		Code detail = codeService.getOne(Condition.getQueryWrapper(code));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "codeName", value = "妯″潡鍚�", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "tableName", value = "琛ㄥ悕", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "modelName", value = "瀹炰綋鍚�", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆code")
+	public R<IPage<Code>> list(@ApiIgnore @RequestParam Map<String, Object> code, Query query) {
+		IPage<Code> pages = codeService.page(Condition.getPage(query), Condition.getQueryWrapper(code, Code.class));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆code")
+	public R submit(@Valid @RequestBody Code code) {
+		return R.status(codeService.submit(code));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(codeService.removeByIds(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 澶嶅埗
+	 */
+	@PostMapping("/copy")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "澶嶅埗", notes = "浼犲叆id")
+	public R copy(@ApiParam(value = "涓婚敭", required = true) @RequestParam Long id) {
+		Code code = codeService.getById(id);
+		code.setId(null);
+		code.setCodeName(code.getCodeName() + "-copy");
+		return R.status(codeService.save(code));
+	}
+
+	/**
+	 * 浠g爜鐢熸垚
+	 */
+	@PostMapping("/gen-code")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "浠g爜鐢熸垚", notes = "浼犲叆ids")
+	public R genCode(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		Collection<Code> codes = codeService.listByIds(Func.toLongList(ids));
+		codes.forEach(code -> {
+			BladeCodeGenerator generator = new BladeCodeGenerator();
+			// 璁剧疆鍩虹妯″瀷
+			Model model = modelService.getById(code.getModelId());
+			generator.setModelCode(model.getModelCode());
+			generator.setModelClass(model.getModelClass());
+			// 璁剧疆妯″瀷闆嗗悎
+			List<ModelPrototype> prototypes = modelPrototypeService.prototypeList(model.getId());
+			generator.setModel(JsonUtil.readMap(JsonUtil.toJson(model)));
+			generator.setPrototypes(JsonUtil.readListMap(JsonUtil.toJson(prototypes)));
+			if (StringUtil.isNotBlank(code.getSubModelId())) {
+				Model subModel = modelService.getById(Func.toLong(code.getSubModelId()));
+				List<ModelPrototype> subPrototypes = modelPrototypeService.prototypeList(subModel.getId());
+				generator.setSubModel(JsonUtil.readMap(JsonUtil.toJson(subModel)));
+				generator.setSubPrototypes(JsonUtil.readListMap(JsonUtil.toJson(subPrototypes)));
+			}
+			// 璁剧疆鏁版嵁婧�
+			Datasource datasource = datasourceService.getById(model.getDatasourceId());
+			generator.setDriverName(datasource.getDriverClass());
+			generator.setUrl(datasource.getUrl());
+			generator.setUsername(datasource.getUsername());
+			generator.setPassword(datasource.getPassword());
+			// 璁剧疆鍩虹閰嶇疆
+			generator.setCodeStyle(code.getCodeStyle());
+			generator.setCodeName(code.getCodeName());
+			generator.setServiceName(code.getServiceName());
+			generator.setPackageName(code.getPackageName());
+			generator.setPackageDir(code.getApiPath());
+			generator.setPackageWebDir(code.getWebPath());
+			generator.setTablePrefix(Func.toStrArray(code.getTablePrefix()));
+			generator.setIncludeTables(Func.toStrArray(code.getTableName()));
+			// 璁剧疆妯$増淇℃伅
+			generator.setTemplateType(code.getTemplateType());
+			generator.setAuthor(code.getAuthor());
+			generator.setSubModelId(code.getSubModelId());
+			generator.setSubFkId(code.getSubFkId());
+			generator.setTreeId(code.getTreeId());
+			generator.setTreePid(code.getTreePid());
+			generator.setTreeName(code.getTreeName());
+			// 璁剧疆鏄惁缁ф壙鍩虹涓氬姟瀛楁
+			generator.setHasSuperEntity(code.getBaseMode() == 2);
+			// 璁剧疆鏄惁寮�鍚寘瑁呭櫒妯″紡
+			generator.setHasWrapper(code.getWrapMode() == 2);
+			// 璁剧疆鏄惁寮�鍚繙绋嬭皟鐢ㄦā寮�
+			generator.setHasFeign(code.getFeignMode() == 2);
+			// 璁剧疆鎺у埗鍣ㄦ湇鍔″悕鍓嶇紑
+			generator.setHasServiceName(Boolean.TRUE);
+			// 鍚姩浠g爜鐢熸垚
+			generator.run();
+		});
+		return R.success("浠g爜鐢熸垚鎴愬姛");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/DatasourceController.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/DatasourceController.java
new file mode 100644
index 0000000..55986ea
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/DatasourceController.java
@@ -0,0 +1,128 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.develop.entity.Datasource;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.develop.service.IDatasourceService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 鏁版嵁婧愰厤缃〃 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/datasource")
+@Api(value = "鏁版嵁婧愰厤缃〃", tags = "鏁版嵁婧愰厤缃〃鎺ュ彛")
+public class DatasourceController extends BladeController {
+
+	private final IDatasourceService datasourceService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆datasource")
+	public R<Datasource> detail(Datasource datasource) {
+		Datasource detail = datasourceService.getOne(Condition.getQueryWrapper(datasource));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉 鏁版嵁婧愰厤缃〃
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆datasource")
+	public R<IPage<Datasource>> list(Datasource datasource, Query query) {
+		IPage<Datasource> pages = datasourceService.page(Condition.getPage(query), Condition.getQueryWrapper(datasource));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 鏁版嵁婧愰厤缃〃
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆datasource")
+	public R save(@Valid @RequestBody Datasource datasource) {
+		return R.status(datasourceService.save(datasource));
+	}
+
+	/**
+	 * 淇敼 鏁版嵁婧愰厤缃〃
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆datasource")
+	public R update(@Valid @RequestBody Datasource datasource) {
+		return R.status(datasourceService.updateById(datasource));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 鏁版嵁婧愰厤缃〃
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆datasource")
+	public R submit(@Valid @RequestBody Datasource datasource) {
+		datasource.setUrl(datasource.getUrl().replace("&amp;", "&"));
+		return R.status(datasourceService.saveOrUpdate(datasource));
+	}
+
+
+	/**
+	 * 鍒犻櫎 鏁版嵁婧愰厤缃〃
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(datasourceService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 鏁版嵁婧愬垪琛�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "鏌ヨ鍒楄〃")
+	public R<List<Datasource>> select() {
+		List<Datasource> list = datasourceService.list();
+		return R.data(list);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelController.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelController.java
new file mode 100644
index 0000000..0fb67c8
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelController.java
@@ -0,0 +1,228 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.develop.entity.Datasource;
+import com.vci.ubcs.develop.entity.Model;
+import com.vci.ubcs.develop.entity.ModelPrototype;
+import com.vci.ubcs.develop.service.IDatasourceService;
+import com.vci.ubcs.develop.service.IModelPrototypeService;
+import com.vci.ubcs.develop.service.IModelService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏁版嵁妯″瀷琛� 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/model")
+@Api(value = "鏁版嵁妯″瀷琛�", tags = "鏁版嵁妯″瀷琛ㄦ帴鍙�")
+public class ModelController extends BladeController {
+
+	private final IModelService modelService;
+	private final IModelPrototypeService modelPrototypeService;
+	private final IDatasourceService datasourceService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆model")
+	public R<Model> detail(Model model) {
+		Model detail = modelService.getOne(Condition.getQueryWrapper(model));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉 鏁版嵁妯″瀷琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆model")
+	public R<IPage<Model>> list(Model model, Query query) {
+		IPage<Model> pages = modelService.page(Condition.getPage(query), Condition.getQueryWrapper(model));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 鏁版嵁妯″瀷琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆model")
+	public R save(@Valid @RequestBody Model model) {
+		return R.status(modelService.save(model));
+	}
+
+	/**
+	 * 淇敼 鏁版嵁妯″瀷琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆model")
+	public R update(@Valid @RequestBody Model model) {
+		return R.status(modelService.updateById(model));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 鏁版嵁妯″瀷琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆model")
+	public R submit(@Valid @RequestBody Model model) {
+		return R.status(modelService.saveOrUpdate(model));
+	}
+
+	/**
+	 * 鍒犻櫎 鏁版嵁妯″瀷琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(modelService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 妯″瀷鍒楄〃
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "妯″瀷鍒楄〃", notes = "妯″瀷鍒楄〃")
+	public R<List<Model>> select() {
+		List<Model> list = modelService.list();
+		list.forEach(model -> model.setModelName(model.getModelTable() + StringPool.COLON + StringPool.SPACE + model.getModelName()));
+		return R.data(list);
+	}
+
+	/**
+	 * 鑾峰彇鐗╃悊琛ㄥ垪琛�
+	 */
+	@GetMapping("/table-list")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鐗╃悊琛ㄥ垪琛�", notes = "浼犲叆datasourceId")
+	public R<List<TableInfo>> tableList(Long datasourceId) {
+		Datasource datasource = datasourceService.getById(datasourceId);
+		ConfigBuilder config = getConfigBuilder(datasource);
+		List<TableInfo> tableInfoList = config.getTableInfoList().stream()
+			.filter(tableInfo -> !StringUtil.startsWithIgnoreCase(tableInfo.getName(), "ACT_"))
+			.map(tableInfo -> tableInfo.setComment(tableInfo.getName() + StringPool.COLON + tableInfo.getComment()))
+			.collect(Collectors.toList());
+		return R.data(tableInfoList);
+	}
+
+	/**
+	 * 鑾峰彇鐗╃悊琛ㄤ俊鎭�
+	 */
+	@GetMapping("/table-info")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "鐗╃悊琛ㄤ俊鎭�", notes = "浼犲叆model淇℃伅")
+	public R<TableInfo> tableInfo(Long modelId, String tableName, Long datasourceId) {
+		if (StringUtil.isBlank(tableName)) {
+			Model model = modelService.getById(modelId);
+			tableName = model.getModelTable();
+		}
+		TableInfo tableInfo = getTableInfo(tableName, datasourceId);
+		return R.data(tableInfo);
+	}
+
+	/**
+	 * 鑾峰彇瀛楁淇℃伅
+	 */
+	@GetMapping("/model-prototype")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "鐗╃悊琛ㄥ瓧娈典俊鎭�", notes = "浼犲叆modelId涓巇atasourceId")
+	public R modelPrototype(Long modelId, Long datasourceId) {
+		List<ModelPrototype> modelPrototypeList = modelPrototypeService.list(Wrappers.<ModelPrototype>query().lambda().eq(ModelPrototype::getModelId, modelId));
+		if (modelPrototypeList.size() > 0) {
+			return R.data(modelPrototypeList);
+		}
+		Model model = modelService.getById(modelId);
+		String tableName = model.getModelTable();
+		TableInfo tableInfo = getTableInfo(tableName, datasourceId);
+		if (tableInfo != null) {
+			return R.data(tableInfo.getFields());
+		} else {
+			return R.fail("鏈幏寰楃浉鍏宠〃淇℃伅");
+		}
+	}
+
+	/**
+	 * 鑾峰彇琛ㄤ俊鎭�
+	 *
+	 * @param tableName    琛ㄥ悕
+	 * @param datasourceId 鏁版嵁婧愪富閿�
+	 */
+	private TableInfo getTableInfo(String tableName, Long datasourceId) {
+		Datasource datasource = datasourceService.getById(datasourceId);
+		ConfigBuilder config = getConfigBuilder(datasource);
+		List<TableInfo> tableInfoList = config.getTableInfoList();
+		TableInfo tableInfo = null;
+		Iterator<TableInfo> iterator = tableInfoList.stream().filter(table -> table.getName().equals(tableName)).collect(Collectors.toList()).iterator();
+		if (iterator.hasNext()) {
+			tableInfo = iterator.next();
+			tableInfo.setEntityName(tableInfo.getEntityName().replace(StringUtil.firstCharToUpper(tableName.split(StringPool.UNDERSCORE)[0]), StringPool.EMPTY));
+		}
+		return tableInfo;
+	}
+
+	/**
+	 * 鑾峰彇琛ㄩ厤缃俊鎭�
+	 *
+	 * @param datasource 鏁版嵁婧愪俊鎭�
+	 */
+	private ConfigBuilder getConfigBuilder(Datasource datasource) {
+		StrategyConfig strategyConfig = new StrategyConfig.Builder()
+			.entityBuilder()
+			.naming(NamingStrategy.underline_to_camel)
+			.columnNaming(NamingStrategy.underline_to_camel).build();
+		DataSourceConfig datasourceConfig = new DataSourceConfig.Builder(
+			datasource.getUrl(), datasource.getUsername(), datasource.getPassword()
+		).build();
+		return new ConfigBuilder(null, datasourceConfig, strategyConfig, null, null, null);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelPrototypeController.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelPrototypeController.java
new file mode 100644
index 0000000..3b0fa72
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelPrototypeController.java
@@ -0,0 +1,136 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.develop.entity.ModelPrototype;
+import com.vci.ubcs.develop.service.IModelPrototypeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 鏁版嵁鍘熷瀷琛� 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/model-prototype")
+@Api(value = "鏁版嵁鍘熷瀷琛�", tags = "鏁版嵁鍘熷瀷琛ㄦ帴鍙�")
+public class ModelPrototypeController extends BladeController {
+
+	private final IModelPrototypeService modelPrototypeService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆modelPrototype")
+	public R<ModelPrototype> detail(ModelPrototype modelPrototype) {
+		ModelPrototype detail = modelPrototypeService.getOne(Condition.getQueryWrapper(modelPrototype));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉 鏁版嵁鍘熷瀷琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆modelPrototype")
+	public R<IPage<ModelPrototype>> list(ModelPrototype modelPrototype, Query query) {
+		IPage<ModelPrototype> pages = modelPrototypeService.page(Condition.getPage(query), Condition.getQueryWrapper(modelPrototype));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 鏁版嵁鍘熷瀷琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆modelPrototype")
+	public R save(@Valid @RequestBody ModelPrototype modelPrototype) {
+		return R.status(modelPrototypeService.save(modelPrototype));
+	}
+
+	/**
+	 * 淇敼 鏁版嵁鍘熷瀷琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆modelPrototype")
+	public R update(@Valid @RequestBody ModelPrototype modelPrototype) {
+		return R.status(modelPrototypeService.updateById(modelPrototype));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 鏁版嵁鍘熷瀷琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆modelPrototype")
+	public R submit(@Valid @RequestBody ModelPrototype modelPrototype) {
+		return R.status(modelPrototypeService.saveOrUpdate(modelPrototype));
+	}
+
+	/**
+	 * 鎵归噺鏂板鎴栦慨鏀� 鏁版嵁鍘熷瀷琛�
+	 */
+	@PostMapping("/submit-list")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鎵归噺鏂板鎴栦慨鏀�", notes = "浼犲叆modelPrototype闆嗗悎")
+	public R submitList(@Valid @RequestBody List<ModelPrototype> modelPrototypes) {
+		return R.status(modelPrototypeService.submitList(modelPrototypes));
+	}
+
+	/**
+	 * 鍒犻櫎 鏁版嵁鍘熷瀷琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(modelPrototypeService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 鏁版嵁鍘熷瀷鍒楄〃
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "鏁版嵁鍘熷瀷鍒楄〃", notes = "鏁版嵁鍘熷瀷鍒楄〃")
+	public R<List<ModelPrototype>> select(@ApiParam(value = "鏁版嵁妯″瀷Id", required = true) @RequestParam Long modelId) {
+		List<ModelPrototype> list = modelPrototypeService.list(Wrappers.<ModelPrototype>query().lambda().eq(ModelPrototype::getModelId, modelId));
+		list.forEach(prototype -> prototype.setComment(prototype.getJdbcName() + StringPool.COLON + StringPool.SPACE + prototype.getComment()));
+		return R.data(list);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/dto/ModelDTO.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/dto/ModelDTO.java
new file mode 100644
index 0000000..9683c90
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/dto/ModelDTO.java
@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.dto;
+
+import com.vci.ubcs.develop.entity.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.develop.entity.ModelPrototype;
+
+import java.util.List;
+
+/**
+ * 浠g爜妯″瀷DTO
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ModelDTO extends Model {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 浠g爜寤烘ā鍘熷瀷
+	 */
+	private List<ModelPrototype> prototypes;
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Code.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Code.java
new file mode 100644
index 0000000..61356d1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Code.java
@@ -0,0 +1,180 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_code")
+@ApiModel(value = "Code瀵硅薄", description = "Code瀵硅薄")
+public class Code implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鏁版嵁妯″瀷涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鏁版嵁妯″瀷涓婚敭")
+	private Long modelId;
+
+	/**
+	 * 妯″潡鍚嶇О
+	 */
+	@ApiModelProperty(value = "鏈嶅姟鍚嶇О")
+	private String serviceName;
+
+	/**
+	 * 妯″潡鍚嶇О
+	 */
+	@ApiModelProperty(value = "妯″潡鍚嶇О")
+	private String codeName;
+
+	/**
+	 * 琛ㄥ悕
+	 */
+	@ApiModelProperty(value = "琛ㄥ悕")
+	private String tableName;
+
+	/**
+	 * 瀹炰綋鍚�
+	 */
+	@ApiModelProperty(value = "琛ㄥ墠缂�")
+	private String tablePrefix;
+
+	/**
+	 * 涓婚敭鍚�
+	 */
+	@ApiModelProperty(value = "涓婚敭鍚�")
+	private String pkName;
+
+	/**
+	 * 鍚庣鍖呭悕
+	 */
+	@ApiModelProperty(value = "鍚庣鍖呭悕")
+	private String packageName;
+
+	/**
+	 * 妯$増绫诲瀷
+	 */
+	@ApiModelProperty(value = "妯$増绫诲瀷")
+	private String templateType;
+
+	/**
+	 * 浣滆�呬俊鎭�
+	 */
+	@ApiModelProperty(value = "浣滆�呬俊鎭�")
+	private String author;
+
+	/**
+	 * 瀛愯〃妯″瀷涓婚敭
+	 */
+	@ApiModelProperty(value = "瀛愯〃妯″瀷涓婚敭")
+	private String subModelId;
+
+	/**
+	 * 瀛愯〃缁戝畾澶栭敭
+	 */
+	@ApiModelProperty(value = "瀛愯〃缁戝畾澶栭敭")
+	private String subFkId;
+
+	/**
+	 * 鏍戜富閿瓧娈�
+	 */
+	@ApiModelProperty(value = "鏍戜富閿瓧娈�")
+	private String treeId;
+
+	/**
+	 * 鏍戠埗涓婚敭瀛楁
+	 */
+	@ApiModelProperty(value = "鏍戠埗涓婚敭瀛楁")
+	private String treePid;
+
+	/**
+	 * 鏍戝悕绉板瓧娈�
+	 */
+	@ApiModelProperty(value = "鏍戝悕绉板瓧娈�")
+	private String treeName;
+
+	/**
+	 * 鍩虹涓氬姟妯″紡
+	 */
+	@ApiModelProperty(value = "鍩虹涓氬姟妯″紡")
+	private Integer baseMode;
+
+	/**
+	 * 鍖呰鍣ㄦā寮�
+	 */
+	@ApiModelProperty(value = "鍖呰鍣ㄦā寮�")
+	private Integer wrapMode;
+
+	/**
+	 * 杩滅▼璋冪敤妯″紡
+	 */
+	@ApiModelProperty(value = "杩滅▼璋冪敤妯″紡")
+	private Integer feignMode;
+
+	/**
+	 * 浠g爜椋庢牸
+	 */
+	@ApiModelProperty(value = "浠g爜椋庢牸")
+	private String codeStyle;
+
+	/**
+	 * 鍚庣璺緞
+	 */
+	@ApiModelProperty(value = "鍚庣璺緞")
+	private String apiPath;
+
+	/**
+	 * 鍓嶇璺緞
+	 */
+	@ApiModelProperty(value = "鍓嶇璺緞")
+	private String webPath;
+
+	/**
+	 * 鏄惁宸插垹闄�
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "鏄惁宸插垹闄�")
+	private Integer isDeleted;
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Datasource.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Datasource.java
new file mode 100644
index 0000000..338111f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Datasource.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 鏁版嵁婧愰厤缃〃瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_sys_datasource")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Datasource瀵硅薄", description = "鏁版嵁婧愰厤缃〃")
+public class Datasource extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鍚嶇О
+	 */
+	@ApiModelProperty(value = "鍚嶇О")
+	private String name;
+	/**
+	 * 椹卞姩绫�
+	 */
+	@ApiModelProperty(value = "椹卞姩绫�")
+	private String driverClass;
+	/**
+	 * 杩炴帴鍦板潃
+	 */
+	@ApiModelProperty(value = "杩炴帴鍦板潃")
+	private String url;
+	/**
+	 * 鐢ㄦ埛鍚�
+	 */
+	@ApiModelProperty(value = "鐢ㄦ埛鍚�")
+	private String username;
+	/**
+	 * 瀵嗙爜
+	 */
+	@ApiModelProperty(value = "瀵嗙爜")
+	private String password;
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Model.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Model.java
new file mode 100644
index 0000000..fd3e1ee
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Model.java
@@ -0,0 +1,74 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 鏁版嵁妯″瀷琛ㄥ疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_model")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Model瀵硅薄", description = "鏁版嵁妯″瀷琛�")
+public class Model extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鏁版嵁婧愪富閿�
+	 */
+	@ApiModelProperty(value = "鏁版嵁婧愪富閿�")
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long datasourceId;
+	/**
+	 * 妯″瀷鍚嶇О
+	 */
+	@ApiModelProperty(value = "妯″瀷鍚嶇О")
+	private String modelName;
+	/**
+	 * 妯″瀷缂栧彿
+	 */
+	@ApiModelProperty(value = "妯″瀷缂栧彿")
+	private String modelCode;
+	/**
+	 * 鐗╃悊琛ㄥ悕
+	 */
+	@ApiModelProperty(value = "鐗╃悊琛ㄥ悕")
+	private String modelTable;
+	/**
+	 * 妯″瀷绫诲悕
+	 */
+	@ApiModelProperty(value = "妯″瀷绫诲悕")
+	private String modelClass;
+	/**
+	 * 妯″瀷澶囨敞
+	 */
+	@ApiModelProperty(value = "妯″瀷澶囨敞")
+	private String modelRemark;
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/ModelPrototype.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/ModelPrototype.java
new file mode 100644
index 0000000..f507c18
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/ModelPrototype.java
@@ -0,0 +1,119 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 鏁版嵁鍘熷瀷琛ㄥ疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_model_prototype")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ModelPrototype瀵硅薄", description = "鏁版嵁鍘熷瀷琛�")
+public class ModelPrototype extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 妯″瀷涓婚敭
+	 */
+	@ApiModelProperty(value = "妯″瀷涓婚敭")
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long modelId;
+	/**
+	 * 鐗╃悊鍒楀悕
+	 */
+	@ApiModelProperty(value = "鐗╃悊鍒楀悕")
+	private String jdbcName;
+	/**
+	 * 鐗╃悊绫诲瀷
+	 */
+	@ApiModelProperty(value = "鐗╃悊绫诲瀷")
+	private String jdbcType;
+	/**
+	 * 瀹炰綋鍒楀悕
+	 */
+	@ApiModelProperty(value = "瀹炰綋鍒楀悕")
+	private String propertyName;
+	/**
+	 * 瀹炰綋绫诲瀷
+	 */
+	@ApiModelProperty(value = "瀹炰綋绫诲瀷")
+	private String propertyType;
+	/**
+	 * 瀹炰綋绫诲瀷寮曠敤
+	 */
+	@ApiModelProperty(value = "瀹炰綋绫诲瀷寮曠敤")
+	private String propertyEntity;
+	/**
+	 * 娉ㄩ噴璇存槑
+	 */
+	@ApiModelProperty(value = "娉ㄩ噴璇存槑")
+	private String comment;
+	/**
+	 * 鍒楄〃鏄剧ず
+	 */
+	@ApiModelProperty(value = "鍒楄〃鏄剧ず")
+	private Integer isList;
+	/**
+	 * 琛ㄥ崟鏄剧ず
+	 */
+	@ApiModelProperty(value = "琛ㄥ崟鏄剧ず")
+	private Integer isForm;
+	/**
+	 * 鐙崰涓�琛�
+	 */
+	@ApiModelProperty(value = "鐙崰涓�琛�")
+	private Integer isRow;
+	/**
+	 * 缁勪欢绫诲瀷
+	 */
+	@ApiModelProperty(value = "缁勪欢绫诲瀷")
+	private String componentType;
+	/**
+	 * 瀛楀吀缂栫爜
+	 */
+	@ApiModelProperty(value = "瀛楀吀缂栫爜")
+	private String dictCode;
+	/**
+	 * 鏄惁蹇呭~
+	 */
+	@ApiModelProperty(value = "鏄惁蹇呭~")
+	private Integer isRequired;
+	/**
+	 * 鏌ヨ閰嶇疆
+	 */
+	@ApiModelProperty(value = "鏌ヨ閰嶇疆")
+	private Integer isQuery;
+	/**
+	 * 鏌ヨ绫诲瀷
+	 */
+	@ApiModelProperty(value = "鏌ヨ绫诲瀷")
+	private String queryType;
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/CodeMapper.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/CodeMapper.java
new file mode 100644
index 0000000..2abfe6f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/CodeMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.develop.entity.Code;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface CodeMapper extends BaseMapper<Code> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/DatasourceMapper.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/DatasourceMapper.java
new file mode 100644
index 0000000..09bf5bc
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/DatasourceMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.develop.entity.Datasource;
+
+/**
+ * 鏁版嵁婧愰厤缃〃 Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface DatasourceMapper extends BaseMapper<Datasource> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelMapper.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelMapper.java
new file mode 100644
index 0000000..53748fd
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.develop.entity.Model;
+
+/**
+ * 鏁版嵁妯″瀷琛� Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface ModelMapper extends BaseMapper<Model> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelPrototypeMapper.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelPrototypeMapper.java
new file mode 100644
index 0000000..63c9f43
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelPrototypeMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.develop.entity.ModelPrototype;
+
+/**
+ * 鏁版嵁鍘熷瀷琛� Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface ModelPrototypeMapper extends BaseMapper<ModelPrototype> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/ICodeService.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/ICodeService.java
new file mode 100644
index 0000000..d2a14b1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/ICodeService.java
@@ -0,0 +1,38 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.develop.entity.Code;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface ICodeService extends IService<Code> {
+
+	/**
+	 * 鎻愪氦
+	 *
+	 * @param code
+	 * @return
+	 */
+	boolean submit(Code code);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IDatasourceService.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IDatasourceService.java
new file mode 100644
index 0000000..fb07286
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IDatasourceService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service;
+
+import com.vci.ubcs.develop.entity.Datasource;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * 鏁版嵁婧愰厤缃〃 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IDatasourceService extends BaseService<Datasource> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelPrototypeService.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelPrototypeService.java
new file mode 100644
index 0000000..85b942f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelPrototypeService.java
@@ -0,0 +1,47 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service;
+
+import com.vci.ubcs.develop.entity.ModelPrototype;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 鏁版嵁鍘熷瀷琛� 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IModelPrototypeService extends BaseService<ModelPrototype> {
+
+	/**
+	 * 鎵归噺鎻愪氦
+	 *
+	 * @param modelPrototypes 鍘熷瀷闆嗗悎
+	 * @return boolean
+	 */
+	boolean submitList(List<ModelPrototype> modelPrototypes);
+
+	/**
+	 * 鍘熷瀷鍒楄〃
+	 *
+	 * @param modelId 妯″瀷ID
+	 * @return List<ModelPrototype>
+	 */
+	List<ModelPrototype> prototypeList(Long modelId);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelService.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelService.java
new file mode 100644
index 0000000..130c355
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service;
+
+import com.vci.ubcs.develop.entity.Model;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * 鏁版嵁妯″瀷琛� 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IModelService extends BaseService<Model> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/CodeServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/CodeServiceImpl.java
new file mode 100644
index 0000000..3078aa1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/CodeServiceImpl.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.develop.entity.Code;
+import com.vci.ubcs.develop.mapper.CodeMapper;
+import com.vci.ubcs.develop.service.ICodeService;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class CodeServiceImpl extends ServiceImpl<CodeMapper, Code> implements ICodeService {
+
+	@Override
+	public boolean submit(Code code) {
+		code.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return saveOrUpdate(code);
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/DatasourceServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/DatasourceServiceImpl.java
new file mode 100644
index 0000000..b9ec65a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/DatasourceServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service.impl;
+
+import com.vci.ubcs.develop.entity.Datasource;
+import com.vci.ubcs.develop.mapper.DatasourceMapper;
+import com.vci.ubcs.develop.service.IDatasourceService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏁版嵁婧愰厤缃〃 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class DatasourceServiceImpl extends BaseServiceImpl<DatasourceMapper, Datasource> implements IDatasourceService {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelPrototypeServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelPrototypeServiceImpl.java
new file mode 100644
index 0000000..db60063
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelPrototypeServiceImpl.java
@@ -0,0 +1,55 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.develop.entity.ModelPrototype;
+import com.vci.ubcs.develop.mapper.ModelPrototypeMapper;
+import com.vci.ubcs.develop.service.IModelPrototypeService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 鏁版嵁鍘熷瀷琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class ModelPrototypeServiceImpl extends BaseServiceImpl<ModelPrototypeMapper, ModelPrototype> implements IModelPrototypeService {
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean submitList(List<ModelPrototype> modelPrototypes) {
+		modelPrototypes.forEach(modelPrototype -> {
+			if (modelPrototype.getId() == null) {
+				this.save(modelPrototype);
+			} else {
+				this.updateById(modelPrototype);
+			}
+		});
+		return true;
+	}
+
+	@Override
+	public List<ModelPrototype> prototypeList(Long modelId) {
+		return this.list(Wrappers.<ModelPrototype>lambdaQuery().eq(ModelPrototype::getModelId, modelId));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelServiceImpl.java
new file mode 100644
index 0000000..1f9f566
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.develop.service.impl;
+
+import com.vci.ubcs.develop.entity.Model;
+import com.vci.ubcs.develop.mapper.ModelMapper;
+import com.vci.ubcs.develop.service.IModelService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏁版嵁妯″瀷琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class ModelServiceImpl extends BaseServiceImpl<ModelMapper, Model> implements IModelService {
+
+}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-develop/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-develop/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/CodeMapper.xml b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/CodeMapper.xml
new file mode 100644
index 0000000..2480563
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/CodeMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.develop.mapper.CodeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="codeResultMap" type="com.vci.ubcs.develop.entity.Code">
+        <id column="id" property="id"/>
+        <result column="datasource_id" property="modelId"/>
+        <result column="service_name" property="serviceName"/>
+        <result column="code_name" property="codeName"/>
+        <result column="table_name" property="tableName"/>
+        <result column="pk_name" property="pkName"/>
+        <result column="base_mode" property="baseMode"/>
+        <result column="wrap_mode" property="wrapMode"/>
+        <result column="table_prefix" property="tablePrefix"/>
+        <result column="package_name" property="packageName"/>
+        <result column="api_path" property="apiPath"/>
+        <result column="web_path" property="webPath"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/DatasourceMapper.xml b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/DatasourceMapper.xml
new file mode 100644
index 0000000..c657039
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/DatasourceMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.develop.mapper.DatasourceMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="datasourceResultMap" type="com.vci.ubcs.develop.entity.Datasource">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="driver_class" property="driverClass"/>
+        <result column="url" property="url"/>
+        <result column="username" property="username"/>
+        <result column="password" property="password"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelMapper.xml b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelMapper.xml
new file mode 100644
index 0000000..aa7ad6f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.develop.mapper.ModelMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="modelResultMap" type="com.vci.ubcs.develop.entity.Model">
+        <id column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="datasource_id" property="datasourceId"/>
+        <result column="model_name" property="modelName"/>
+        <result column="model_code" property="modelCode"/>
+        <result column="model_table" property="modelTable"/>
+        <result column="model_class" property="modelClass"/>
+        <result column="model_remark" property="modelRemark"/>
+    </resultMap>
+
+
+    <select id="selectModelPage" resultMap="modelResultMap">
+        select * from blade_model where is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelPrototypeMapper.xml b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelPrototypeMapper.xml
new file mode 100644
index 0000000..c0cda9b
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelPrototypeMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.develop.mapper.ModelPrototypeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="modelPrototypeResultMap" type="com.vci.ubcs.develop.entity.ModelPrototype">
+        <id column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="jdbc_name" property="jdbcName"/>
+        <result column="jdbc_type" property="jdbcType"/>
+        <result column="comment" property="comment"/>
+        <result column="property_type" property="propertyType"/>
+        <result column="property_entity" property="propertyEntity"/>
+        <result column="property_name" property="propertyName"/>
+        <result column="is_form" property="isForm"/>
+        <result column="is_row" property="isRow"/>
+        <result column="component_type" property="componentType"/>
+        <result column="dict_code" property="dictCode"/>
+        <result column="is_required" property="isRequired"/>
+        <result column="is_list" property="isList"/>
+        <result column="is_query" property="isQuery"/>
+        <result column="query_type" property="queryType"/>
+    </resultMap>
+
+
+    <select id="selectModelPrototypePage" resultMap="modelPrototypeResultMap">
+        select * from blade_model_prototype where is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/resources/templates/code.properties b/Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/templates/code.properties
similarity index 100%
rename from Source/BladeX/blade-ops/blade-develop/src/main/resources/templates/code.properties
rename to Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/templates/code.properties
diff --git a/Source/UBCS/ubcs-ops/ubcs-develop/src/test/java/com/vci/test/CodeGenerator.java b/Source/UBCS/ubcs-ops/ubcs-develop/src/test/java/com/vci/test/CodeGenerator.java
new file mode 100644
index 0000000..c5d16f5
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-develop/src/test/java/com/vci/test/CodeGenerator.java
@@ -0,0 +1,95 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.test;
+
+
+import org.springblade.develop.constant.DevelopConstant;
+import org.springblade.develop.support.BladeCodeGenerator;
+
+/**
+ * 浠g爜鐢熸垚鍣�
+ *
+ * @author Chill
+ */
+public class CodeGenerator {
+
+	/**
+	 * 浠g爜鐢熸垚鐨勬ā鍧楀悕
+	 */
+	public static String CODE_NAME = "璧勬簮绠$悊";
+	/**
+	 * 浠g爜鎵�鍦ㄦ湇鍔″悕
+	 */
+	public static String SERVICE_NAME = "blade-develop";
+	/**
+	 * 浠g爜鐢熸垚鐨勫寘鍚�
+	 */
+	public static String PACKAGE_NAME = "org.springblade.develop";
+	/**
+	 * 鍓嶇浠g爜鐢熸垚椋庢牸
+	 */
+	public static String CODE_STYLE = DevelopConstant.SABER_NAME;
+	/**
+	 * 鍓嶇浠g爜鐢熸垚鍦板潃
+	 */
+	public static String PACKAGE_WEB_DIR = "/Users/chill/Workspaces/product/Saber";
+	/**
+	 * 闇�瑕佸幓鎺夌殑琛ㄥ墠缂�
+	 */
+	public static String[] TABLE_PREFIX = {"blade_"};
+	/**
+	 * 闇�瑕佺敓鎴愮殑琛ㄥ悕(涓よ�呭彧鑳藉彇鍏朵竴)
+	 */
+	public static String[] INCLUDE_TABLES = {"pl_sys_datasource"};
+	/**
+	 * 闇�瑕佹帓闄ょ殑琛ㄥ悕(涓よ�呭彧鑳藉彇鍏朵竴)
+	 */
+	public static String[] EXCLUDE_TABLES = {};
+	/**
+	 * 鏄惁鍖呭惈鍩虹涓氬姟瀛楁
+	 */
+	public static Boolean HAS_SUPER_ENTITY = Boolean.TRUE;
+	/**
+	 * 鏄惁鍖呭惈杩滅▼璋冪敤
+	 */
+	private static Boolean HAS_FEIGN = Boolean.TRUE;
+	/**
+	 * 鍩虹涓氬姟瀛楁
+	 */
+	public static String[] SUPER_ENTITY_COLUMNS = {"id", "create_time", "create_user", "create_dept", "update_time", "update_user", "status", "is_deleted"};
+
+
+	/**
+	 * RUN THIS
+	 */
+	public static void main(String[] args) {
+		BladeCodeGenerator generator = new BladeCodeGenerator();
+		generator.setCodeName(CODE_NAME);
+		generator.setServiceName(SERVICE_NAME);
+		generator.setCodeStyle(CODE_STYLE);
+		generator.setPackageName(PACKAGE_NAME);
+		generator.setPackageWebDir(PACKAGE_WEB_DIR);
+		generator.setTablePrefix(TABLE_PREFIX);
+		generator.setIncludeTables(INCLUDE_TABLES);
+		generator.setExcludeTables(EXCLUDE_TABLES);
+		generator.setHasSuperEntity(HAS_SUPER_ENTITY);
+		generator.setHasFeign(HAS_FEIGN);
+		generator.setSuperEntityColumns(SUPER_ENTITY_COLUMNS);
+		generator.run();
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-develop/src/test/resources/templates/code.properties b/Source/UBCS/ubcs-ops/ubcs-develop/src/test/resources/templates/code.properties
similarity index 100%
rename from Source/BladeX/blade-ops/blade-develop/src/test/resources/templates/code.properties
rename to Source/UBCS/ubcs-ops/ubcs-develop/src/test/resources/templates/code.properties
diff --git a/Source/BladeX/blade-ops/blade-flow/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-flow/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-flow/Dockerfile
diff --git a/Source/BladeX/blade-ops/blade-flow/doc/nacos/blade-flow-dev.yaml b/Source/UBCS/ubcs-ops/ubcs-flow/doc/nacos/blade-flow-dev.yaml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/doc/nacos/blade-flow-dev.yaml
rename to Source/UBCS/ubcs-ops/ubcs-flow/doc/nacos/blade-flow-dev.yaml
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/pom.xml b/Source/UBCS/ubcs-ops/ubcs-flow/pom.xml
new file mode 100644
index 0000000..ecbcb50
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/pom.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-flow</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!-- Blade -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <!--<dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-transaction</artifactId>
+        </dependency>-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-dict-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-scope-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-user-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-flow-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <!-- 宸ヤ綔娴� -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-flowable</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <!--瑙e喅涓嶆敮鎸佺殑瀛楃闆嗛棶棰�-->
+        <dependency>
+            <groupId>com.oracle.database.nls</groupId>
+            <artifactId>orai18n</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/FlowApplication.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/FlowApplication.java
new file mode 100644
index 0000000..06ab3e3
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/FlowApplication.java
@@ -0,0 +1,37 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * Flowable鍚姩鍣�
+ *
+ * @author Chill
+ */
+//@SeataCloudApplication
+@UbcsCloudApplication
+public class FlowApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_FLOW_NAME, FlowApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java
new file mode 100644
index 0000000..a3d1c0a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java
@@ -0,0 +1,147 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.business.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.flow.business.service.FlowBusinessService;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import com.vci.ubcs.flow.engine.entity.FlowProcess;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.flowable.engine.TaskService;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 娴佺▼浜嬪姟閫氱敤鎺ュ彛
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("work")
+@Api(value = "娴佺▼浜嬪姟閫氱敤鎺ュ彛", tags = "娴佺▼浜嬪姟閫氱敤鎺ュ彛")
+public class WorkController {
+
+	private final TaskService taskService;
+	private final FlowEngineService flowEngineService;
+	private final FlowBusinessService flowBusinessService;
+
+	/**
+	 * 鍙戣捣浜嬪姟鍒楄〃椤�
+	 */
+	@GetMapping("start-list")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鍙戣捣浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼绫诲瀷")
+	public R<IPage<FlowProcess>> startList(@ApiParam("娴佺▼绫诲瀷") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
+		IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
+		return R.data(pages);
+	}
+
+	/**
+	 * 寰呯浜嬪姟鍒楄〃椤�
+	 */
+	@GetMapping("claim-list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "寰呯浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
+	public R<IPage<BladeFlow>> claimList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
+		IPage<BladeFlow> pages = flowBusinessService.selectClaimPage(Condition.getPage(query), bladeFlow);
+		return R.data(pages);
+	}
+
+	/**
+	 * 寰呭姙浜嬪姟鍒楄〃椤�
+	 */
+	@GetMapping("todo-list")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "寰呭姙浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
+	public R<IPage<BladeFlow>> todoList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
+		IPage<BladeFlow> pages = flowBusinessService.selectTodoPage(Condition.getPage(query), bladeFlow);
+		return R.data(pages);
+	}
+
+	/**
+	 * 宸插彂浜嬪姟鍒楄〃椤�
+	 */
+	@GetMapping("send-list")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "宸插彂浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
+	public R<IPage<BladeFlow>> sendList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
+		IPage<BladeFlow> pages = flowBusinessService.selectSendPage(Condition.getPage(query), bladeFlow);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鍔炵粨浜嬪姟鍒楄〃椤�
+	 */
+	@GetMapping("done-list")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鍔炵粨浜嬪姟鍒楄〃椤�", notes = "浼犲叆娴佺▼淇℃伅")
+	public R<IPage<BladeFlow>> doneList(@ApiParam("娴佺▼淇℃伅") BladeFlow bladeFlow, Query query) {
+		IPage<BladeFlow> pages = flowBusinessService.selectDonePage(Condition.getPage(query), bladeFlow);
+		return R.data(pages);
+	}
+
+	/**
+	 * 绛炬敹浜嬪姟
+	 *
+	 * @param taskId 浠诲姟id
+	 */
+	@PostMapping("claim-task")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "绛炬敹浜嬪姟", notes = "浼犲叆娴佺▼淇℃伅")
+	public R claimTask(@ApiParam("浠诲姟id") String taskId) {
+		taskService.claim(taskId, TaskUtil.getTaskUser());
+		return R.success("绛炬敹浜嬪姟鎴愬姛");
+	}
+
+	/**
+	 * 瀹屾垚浠诲姟
+	 *
+	 * @param flow 璇峰亣淇℃伅
+	 */
+	@PostMapping("complete-task")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "瀹屾垚浠诲姟", notes = "浼犲叆娴佺▼淇℃伅")
+	public R completeTask(@ApiParam("浠诲姟淇℃伅") @RequestBody BladeFlow flow) {
+		return R.status(flowBusinessService.completeTask(flow));
+	}
+
+	/**
+	 * 鍒犻櫎浠诲姟
+	 *
+	 * @param taskId 浠诲姟id
+	 * @param reason 鍒犻櫎鍘熷洜
+	 */
+	@PostMapping("delete-task")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鍒犻櫎浠诲姟", notes = "浼犲叆娴佺▼淇℃伅")
+	public R deleteTask(@ApiParam("浠诲姟id") String taskId, @ApiParam("鍒犻櫎鍘熷洜") String reason) {
+		taskService.deleteTask(taskId, reason);
+		return R.success("鍒犻櫎浠诲姟鎴愬姛");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/feign/FlowClient.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/feign/FlowClient.java
new file mode 100644
index 0000000..d093953
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/feign/FlowClient.java
@@ -0,0 +1,107 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.business.feign;
+
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.core.feign.IFlowClient;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import lombok.AllArgsConstructor;
+import org.flowable.engine.IdentityService;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.TaskService;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 娴佺▼杩滅▼璋冪敤瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+public class FlowClient implements IFlowClient {
+
+	private final RuntimeService runtimeService;
+	private final IdentityService identityService;
+	private final TaskService taskService;
+
+	@Override
+	@PostMapping(START_PROCESS_INSTANCE_BY_ID)
+	public R<BladeFlow> startProcessInstanceById(String processDefinitionId, String businessKey, @RequestBody Map<String, Object> variables) {
+		// 璁剧疆娴佺▼鍚姩鐢ㄦ埛
+		identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
+		// 寮�鍚祦绋�
+		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);
+		// 缁勮娴佺▼閫氱敤绫�
+		BladeFlow flow = new BladeFlow();
+		flow.setProcessInstanceId(processInstance.getId());
+		return R.data(flow);
+	}
+
+	@Override
+	@PostMapping(START_PROCESS_INSTANCE_BY_KEY)
+	public R<BladeFlow> startProcessInstanceByKey(String processDefinitionKey, String businessKey, @RequestBody Map<String, Object> variables) {
+		// 璁剧疆娴佺▼鍚姩鐢ㄦ埛
+		identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
+		// 寮�鍚祦绋�
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
+		// 缁勮娴佺▼閫氱敤绫�
+		BladeFlow flow = new BladeFlow();
+		flow.setProcessInstanceId(processInstance.getId());
+		return R.data(flow);
+	}
+
+	@Override
+	@PostMapping(COMPLETE_TASK)
+	public R completeTask(String taskId, String processInstanceId, String comment, @RequestBody Map<String, Object> variables) {
+		// 澧炲姞璇勮
+		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
+			taskService.addComment(taskId, processInstanceId, comment);
+		}
+		// 闈炵┖鍒ゆ柇
+		if (Func.isEmpty(variables)) {
+			variables = Kv.create();
+		}
+		// 瀹屾垚浠诲姟
+		taskService.complete(taskId, variables);
+		return R.success("娴佺▼鎻愪氦鎴愬姛");
+	}
+
+	@Override
+	@GetMapping(TASK_VARIABLE)
+	public R<Object> taskVariable(String taskId, String variableName) {
+		return R.data(taskService.getVariable(taskId, variableName));
+	}
+
+	@Override
+	@GetMapping(TASK_VARIABLES)
+	public R<Map<String, Object>> taskVariables(String taskId) {
+		return R.data(taskService.getVariables(taskId));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/FlowBusinessService.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/FlowBusinessService.java
new file mode 100644
index 0000000..86f758c
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/FlowBusinessService.java
@@ -0,0 +1,72 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.business.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+
+/**
+ * 娴佺▼涓氬姟绫�
+ *
+ * @author Chill
+ */
+public interface FlowBusinessService {
+
+	/**
+	 * 娴佺▼寰呯鍒楄〃
+	 *
+	 * @param page      鍒嗛〉宸ュ叿
+	 * @param bladeFlow 娴佺▼绫�
+	 * @return
+	 */
+	IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
+
+	/**
+	 * 娴佺▼寰呭姙鍒楄〃
+	 *
+	 * @param page      鍒嗛〉宸ュ叿
+	 * @param bladeFlow 娴佺▼绫�
+	 * @return
+	 */
+	IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
+
+	/**
+	 * 娴佺▼宸插彂鍒楄〃
+	 *
+	 * @param page      鍒嗛〉宸ュ叿
+	 * @param bladeFlow 娴佺▼绫�
+	 * @return
+	 */
+	IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
+
+	/**
+	 * 娴佺▼鍔炵粨鍒楄〃
+	 *
+	 * @param page      鍒嗛〉宸ュ叿
+	 * @param bladeFlow 娴佺▼绫�
+	 * @return
+	 */
+	IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow);
+
+	/**
+	 * 瀹屾垚浠诲姟
+	 *
+	 * @param leave 璇峰亣淇℃伅
+	 * @return boolean
+	 */
+	boolean completeTask(BladeFlow leave);
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
new file mode 100644
index 0000000..c78baca
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -0,0 +1,333 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.business.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.flow.business.service.FlowBusinessService;
+import com.vci.ubcs.flow.core.constant.ProcessConstant;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import com.vci.ubcs.flow.engine.constant.FlowEngineConstant;
+import com.vci.ubcs.flow.engine.entity.FlowProcess;
+import com.vci.ubcs.flow.engine.utils.FlowCache;
+import lombok.AllArgsConstructor;
+import org.flowable.engine.HistoryService;
+import org.flowable.engine.TaskService;
+import org.flowable.engine.history.HistoricProcessInstance;
+import org.flowable.engine.history.HistoricProcessInstanceQuery;
+import org.flowable.task.api.TaskQuery;
+import org.flowable.task.api.history.HistoricTaskInstance;
+import org.flowable.task.api.history.HistoricTaskInstanceQuery;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.stereotype.Service;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 娴佺▼涓氬姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class FlowBusinessServiceImpl implements FlowBusinessService {
+
+	private final TaskService taskService;
+	private final HistoryService historyService;
+
+	@Override
+	public IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
+		String taskUser = TaskUtil.getTaskUser();
+		String taskGroup = TaskUtil.getCandidateGroup();
+		List<BladeFlow> flowList = new LinkedList<>();
+
+		// 涓汉绛夊緟绛炬敹鐨勪换鍔�
+		TaskQuery claimUserQuery = taskService.createTaskQuery().taskCandidateUser(taskUser)
+			.includeProcessVariables().active().orderByTaskCreateTime().desc();
+		// 瀹氬埗娴佺▼绛夊緟绛炬敹鐨勪换鍔�
+		TaskQuery claimRoleWithTenantIdQuery = taskService.createTaskQuery().taskTenantId(AuthUtil.getTenantId()).taskCandidateGroupIn(Func.toStrList(taskGroup))
+			.includeProcessVariables().active().orderByTaskCreateTime().desc();
+		// 閫氱敤娴佺▼绛夊緟绛炬敹鐨勪换鍔�
+		TaskQuery claimRoleWithoutTenantIdQuery = taskService.createTaskQuery().taskWithoutTenantId().taskCandidateGroupIn(Func.toStrList(taskGroup))
+			.includeProcessVariables().active().orderByTaskCreateTime().desc();
+
+		// 鏋勫缓鍒楄〃鏁版嵁
+		buildFlowTaskList(bladeFlow, flowList, claimUserQuery, FlowEngineConstant.STATUS_CLAIM);
+		buildFlowTaskList(bladeFlow, flowList, claimRoleWithTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
+		buildFlowTaskList(bladeFlow, flowList, claimRoleWithoutTenantIdQuery, FlowEngineConstant.STATUS_CLAIM);
+
+		// 璁$畻鎬绘暟
+		long count = claimUserQuery.count() + claimRoleWithTenantIdQuery.count() + claimRoleWithoutTenantIdQuery.count();
+		// 璁剧疆椤垫暟
+		page.setSize(count);
+		// 璁剧疆鎬绘暟
+		page.setTotal(count);
+		// 璁剧疆鏁版嵁
+		page.setRecords(flowList);
+		return page;
+	}
+
+	@Override
+	public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
+		String taskUser = TaskUtil.getTaskUser();
+		List<BladeFlow> flowList = new LinkedList<>();
+
+		// 宸茬鏀剁殑浠诲姟
+		TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
+			.includeProcessVariables().orderByTaskCreateTime().desc();
+
+		// 鏋勫缓鍒楄〃鏁版嵁
+		buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
+
+		// 璁$畻鎬绘暟
+		long count = todoQuery.count();
+		// 璁剧疆椤垫暟
+		page.setSize(count);
+		// 璁剧疆鎬绘暟
+		page.setTotal(count);
+		// 璁剧疆鏁版嵁
+		page.setRecords(flowList);
+		return page;
+	}
+
+	@Override
+	public IPage<BladeFlow> selectSendPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
+		String taskUser = TaskUtil.getTaskUser();
+		List<BladeFlow> flowList = new LinkedList<>();
+
+		HistoricProcessInstanceQuery historyQuery = historyService.createHistoricProcessInstanceQuery().startedBy(taskUser).orderByProcessInstanceStartTime().desc();
+
+		if (bladeFlow.getCategory() != null) {
+			historyQuery.processDefinitionCategory(bladeFlow.getCategory());
+		}
+		if (bladeFlow.getProcessDefinitionName() != null) {
+			historyQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
+		}
+		if (bladeFlow.getBeginDate() != null) {
+			historyQuery.startedAfter(bladeFlow.getBeginDate());
+		}
+		if (bladeFlow.getEndDate() != null) {
+			historyQuery.startedBefore(bladeFlow.getEndDate());
+		}
+
+		// 鏌ヨ鍒楄〃
+		List<HistoricProcessInstance> historyList = historyQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
+
+		historyList.forEach(historicProcessInstance -> {
+			BladeFlow flow = new BladeFlow();
+			// historicProcessInstance
+			flow.setCreateTime(historicProcessInstance.getStartTime());
+			flow.setEndTime(historicProcessInstance.getEndTime());
+			flow.setVariables(historicProcessInstance.getProcessVariables());
+			String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
+			if (businessKey.length > 1) {
+				flow.setBusinessTable(businessKey[0]);
+				flow.setBusinessId(businessKey[1]);
+			}
+			flow.setHistoryActivityName(historicProcessInstance.getName());
+			flow.setProcessInstanceId(historicProcessInstance.getId());
+			flow.setHistoryProcessInstanceId(historicProcessInstance.getId());
+			// ProcessDefinition
+			FlowProcess processDefinition = FlowCache.getProcessDefinition(historicProcessInstance.getProcessDefinitionId());
+			flow.setProcessDefinitionId(processDefinition.getId());
+			flow.setProcessDefinitionName(processDefinition.getName());
+			flow.setProcessDefinitionVersion(processDefinition.getVersion());
+			flow.setProcessDefinitionKey(processDefinition.getKey());
+			flow.setCategory(processDefinition.getCategory());
+			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
+			flow.setProcessInstanceId(historicProcessInstance.getId());
+			// HistoricTaskInstance
+			List<HistoricTaskInstance> historyTasks = historyService.createHistoricTaskInstanceQuery().processInstanceId(historicProcessInstance.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
+			if (Func.isNotEmpty(historyTasks)) {
+				HistoricTaskInstance historyTask = historyTasks.iterator().next();
+				flow.setTaskId(historyTask.getId());
+				flow.setTaskName(historyTask.getName());
+				flow.setTaskDefinitionKey(historyTask.getTaskDefinitionKey());
+			}
+			// Status
+			if (historicProcessInstance.getEndActivityId() != null) {
+				flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
+			} else {
+				flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
+			}
+			flow.setStatus(FlowEngineConstant.STATUS_FINISH);
+			flowList.add(flow);
+		});
+
+		// 璁$畻鎬绘暟
+		long count = historyQuery.count();
+		// 璁剧疆鎬绘暟
+		page.setTotal(count);
+		page.setRecords(flowList);
+		return page;
+	}
+
+	@Override
+	public IPage<BladeFlow> selectDonePage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
+		String taskUser = TaskUtil.getTaskUser();
+		List<BladeFlow> flowList = new LinkedList<>();
+
+		HistoricTaskInstanceQuery doneQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(taskUser).finished()
+			.includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc();
+
+		if (bladeFlow.getCategory() != null) {
+			doneQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
+		}
+		if (bladeFlow.getProcessDefinitionName() != null) {
+			doneQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
+		}
+		if (bladeFlow.getBeginDate() != null) {
+			doneQuery.taskCompletedAfter(bladeFlow.getBeginDate());
+		}
+		if (bladeFlow.getEndDate() != null) {
+			doneQuery.taskCompletedBefore(bladeFlow.getEndDate());
+		}
+
+		// 鏌ヨ鍒楄〃
+		List<HistoricTaskInstance> doneList = doneQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
+		doneList.forEach(historicTaskInstance -> {
+			BladeFlow flow = new BladeFlow();
+			flow.setTaskId(historicTaskInstance.getId());
+			flow.setTaskDefinitionKey(historicTaskInstance.getTaskDefinitionKey());
+			flow.setTaskName(historicTaskInstance.getName());
+			flow.setAssignee(historicTaskInstance.getAssignee());
+			flow.setCreateTime(historicTaskInstance.getCreateTime());
+			flow.setExecutionId(historicTaskInstance.getExecutionId());
+			flow.setHistoryTaskEndTime(historicTaskInstance.getEndTime());
+			flow.setVariables(historicTaskInstance.getProcessVariables());
+
+			FlowProcess processDefinition = FlowCache.getProcessDefinition(historicTaskInstance.getProcessDefinitionId());
+			flow.setProcessDefinitionId(processDefinition.getId());
+			flow.setProcessDefinitionName(processDefinition.getName());
+			flow.setProcessDefinitionKey(processDefinition.getKey());
+			flow.setProcessDefinitionVersion(processDefinition.getVersion());
+			flow.setCategory(processDefinition.getCategory());
+			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
+
+			flow.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
+			flow.setHistoryProcessInstanceId(historicTaskInstance.getProcessInstanceId());
+			HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance((historicTaskInstance.getProcessInstanceId()));
+			if (Func.isNotEmpty(historicProcessInstance)) {
+				String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
+				flow.setBusinessTable(businessKey[0]);
+				flow.setBusinessId(businessKey[1]);
+				if (historicProcessInstance.getEndActivityId() != null) {
+					flow.setProcessIsFinished(FlowEngineConstant.STATUS_FINISHED);
+				} else {
+					flow.setProcessIsFinished(FlowEngineConstant.STATUS_UNFINISHED);
+				}
+			}
+			flow.setStatus(FlowEngineConstant.STATUS_FINISH);
+			flowList.add(flow);
+		});
+		// 璁$畻鎬绘暟
+		long count = doneQuery.count();
+		// 璁剧疆鎬绘暟
+		page.setTotal(count);
+		page.setRecords(flowList);
+		return page;
+	}
+
+	@Override
+	public boolean completeTask(BladeFlow flow) {
+		String taskId = flow.getTaskId();
+		String processInstanceId = flow.getProcessInstanceId();
+		String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
+		// 澧炲姞璇勮
+		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
+			taskService.addComment(taskId, processInstanceId, comment);
+		}
+		// 鍒涘缓鍙橀噺
+		Map<String, Object> variables = flow.getVariables();
+		if (variables == null) {
+			variables = Kv.create();
+		}
+		variables.put(ProcessConstant.PASS_KEY, flow.isPass());
+		// 瀹屾垚浠诲姟
+		taskService.complete(taskId, variables);
+		return true;
+	}
+
+	/**
+	 * 鏋勫缓娴佺▼
+	 *
+	 * @param bladeFlow 娴佺▼閫氱敤绫�
+	 * @param flowList  娴佺▼鍒楄〃
+	 * @param taskQuery 浠诲姟鏌ヨ绫�
+	 * @param status    鐘舵��
+	 */
+	private void buildFlowTaskList(BladeFlow bladeFlow, List<BladeFlow> flowList, TaskQuery taskQuery, String status) {
+		if (bladeFlow.getCategory() != null) {
+			taskQuery.processCategoryIn(Func.toStrList(bladeFlow.getCategory()));
+		}
+		if (bladeFlow.getProcessDefinitionName() != null) {
+			taskQuery.processDefinitionName(bladeFlow.getProcessDefinitionName());
+		}
+		if (bladeFlow.getBeginDate() != null) {
+			taskQuery.taskCreatedAfter(bladeFlow.getBeginDate());
+		}
+		if (bladeFlow.getEndDate() != null) {
+			taskQuery.taskCreatedBefore(bladeFlow.getEndDate());
+		}
+		taskQuery.list().forEach(task -> {
+			BladeFlow flow = new BladeFlow();
+			flow.setTaskId(task.getId());
+			flow.setTaskDefinitionKey(task.getTaskDefinitionKey());
+			flow.setTaskName(task.getName());
+			flow.setAssignee(task.getAssignee());
+			flow.setCreateTime(task.getCreateTime());
+			flow.setClaimTime(task.getClaimTime());
+			flow.setExecutionId(task.getExecutionId());
+			flow.setVariables(task.getProcessVariables());
+
+			HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId());
+			if (Func.isNotEmpty(historicProcessInstance)) {
+				String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
+				flow.setBusinessTable(businessKey[0]);
+				flow.setBusinessId(businessKey[1]);
+			}
+
+			FlowProcess processDefinition = FlowCache.getProcessDefinition(task.getProcessDefinitionId());
+			flow.setCategory(processDefinition.getCategory());
+			flow.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
+			flow.setProcessDefinitionId(processDefinition.getId());
+			flow.setProcessDefinitionName(processDefinition.getName());
+			flow.setProcessDefinitionKey(processDefinition.getKey());
+			flow.setProcessDefinitionVersion(processDefinition.getVersion());
+			flow.setProcessInstanceId(task.getProcessInstanceId());
+			flow.setStatus(status);
+			flowList.add(flow);
+		});
+	}
+
+	/**
+	 * 鑾峰彇鍘嗗彶娴佺▼
+	 *
+	 * @param processInstanceId 娴佺▼瀹炰緥id
+	 * @return HistoricProcessInstance
+	 */
+	private HistoricProcessInstance getHistoricProcessInstance(String processInstanceId) {
+		return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/config/FlowableConfiguration.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/config/FlowableConfiguration.java
new file mode 100644
index 0000000..5357274
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/config/FlowableConfiguration.java
@@ -0,0 +1,44 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.config;
+
+import lombok.AllArgsConstructor;
+import org.flowable.spring.SpringProcessEngineConfiguration;
+import org.flowable.spring.boot.EngineConfigurationConfigurer;
+import org.flowable.spring.boot.FlowableProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Flowable閰嶇疆绫�
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+@EnableConfigurationProperties(FlowableProperties.class)
+public class FlowableConfiguration implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {
+	private final FlowableProperties flowableProperties;
+
+	@Override
+	public void configure(SpringProcessEngineConfiguration engineConfiguration) {
+		engineConfiguration.setActivityFontName(flowableProperties.getActivityFontName());
+		engineConfiguration.setLabelFontName(flowableProperties.getLabelFontName());
+		engineConfiguration.setAnnotationFontName(flowableProperties.getAnnotationFontName());
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java
new file mode 100644
index 0000000..758abbe
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java
@@ -0,0 +1,52 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.constant;
+
+/**
+ * 娴佺▼甯搁噺.
+ *
+ * @author zhuangqian
+ */
+public interface FlowEngineConstant {
+
+	String FLOWABLE_BASE_PACKAGES = "org.flowable.ui";
+
+	String SUFFIX = ".bpmn20.xml";
+
+	String ACTIVE = "active";
+
+	String SUSPEND = "suspend";
+
+	String STATUS_TODO = "todo";
+
+	String STATUS_CLAIM = "claim";
+
+	String STATUS_SEND = "send";
+
+	String STATUS_DONE = "done";
+
+	String STATUS_FINISHED = "finished";
+
+	String STATUS_UNFINISHED = "unfinished";
+
+	String STATUS_FINISH = "finish";
+
+	String START_EVENT = "startEvent";
+
+	String END_EVENT = "endEvent";
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowFollowController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowFollowController.java
new file mode 100644
index 0000000..3384694
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowFollowController.java
@@ -0,0 +1,68 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.flow.engine.entity.FlowExecution;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 娴佺▼鐘舵�佹帶鍒跺櫒
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@RequestMapping("follow")
+@AllArgsConstructor
+//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+public class FlowFollowController {
+
+	private final FlowEngineService flowEngineService;
+
+	/**
+	 * 娴佺▼鐘舵�佸垪琛�
+	 */
+	@GetMapping("list")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
+	public R<IPage<FlowExecution>> list(Query query, @ApiParam(value = "娴佺▼瀹炰緥id") String processInstanceId, @ApiParam(value = "娴佺▼key") String processDefinitionKey) {
+		IPage<FlowExecution> pages = flowEngineService.selectFollowPage(Condition.getPage(query), processInstanceId, processDefinitionKey);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鍒犻櫎娴佺▼瀹炰緥
+	 */
+	@PostMapping("delete-process-instance")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆涓婚敭闆嗗悎")
+	public R deleteProcessInstance(@ApiParam(value = "娴佺▼瀹炰緥id") @RequestParam String processInstanceId, @ApiParam(value = "鍒犻櫎鍘熷洜") @RequestParam String deleteReason) {
+		boolean temp = flowEngineService.deleteProcessInstance(processInstanceId, deleteReason);
+		return R.status(temp);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
new file mode 100644
index 0000000..ea24050
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
@@ -0,0 +1,121 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.flow.engine.entity.FlowProcess;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.flow.engine.constant.FlowEngineConstant;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 娴佺▼绠$悊鎺ュ彛
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@RequestMapping("manager")
+@AllArgsConstructor
+@Api(value = "娴佺▼绠$悊鎺ュ彛", tags = "娴佺▼绠$悊鎺ュ彛")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+public class FlowManagerController {
+
+	private final FlowEngineService flowEngineService;
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("list")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆娴佺▼绫诲瀷")
+	public R<IPage<FlowProcess>> list(@ApiParam("娴佺▼绫诲瀷") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) {
+		IPage<FlowProcess> pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode);
+		return R.data(pages);
+	}
+
+
+	/**
+	 * 鍙樻洿娴佺▼鐘舵��
+	 *
+	 * @param state     鐘舵��
+	 * @param processId 娴佺▼id
+	 */
+	@PostMapping("change-state")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍙樻洿娴佺▼鐘舵��", notes = "浼犲叆state,processId")
+	public R changeState(@RequestParam String state, @RequestParam String processId) {
+		String msg = flowEngineService.changeState(state, processId);
+		return R.success(msg);
+	}
+
+	/**
+	 * 鍒犻櫎閮ㄧ讲娴佺▼
+	 *
+	 * @param deploymentIds 閮ㄧ讲娴佺▼id闆嗗悎
+	 */
+	@PostMapping("delete-deployment")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒犻櫎閮ㄧ讲娴佺▼", notes = "閮ㄧ讲娴佺▼id闆嗗悎")
+	public R deleteDeployment(String deploymentIds) {
+		return R.status(flowEngineService.deleteDeployment(deploymentIds));
+	}
+
+	/**
+	 * 妫�鏌ユ祦绋嬫枃浠舵牸寮�
+	 *
+	 * @param file 娴佺▼鏂囦欢
+	 */
+	@PostMapping("check-upload")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "涓婁紶閮ㄧ讲娴佺▼鏂囦欢", notes = "浼犲叆鏂囦欢")
+	public R checkUpload(@RequestParam MultipartFile file) {
+		boolean temp = Objects.requireNonNull(file.getOriginalFilename()).endsWith(FlowEngineConstant.SUFFIX);
+		return R.data(Kv.create().set("name", file.getOriginalFilename()).set("success", temp));
+	}
+
+	/**
+	 * 涓婁紶閮ㄧ讲娴佺▼鏂囦欢
+	 *
+	 * @param files    娴佺▼鏂囦欢
+	 * @param category 绫诲瀷
+	 */
+	@PostMapping("deploy-upload")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "涓婁紶閮ㄧ讲娴佺▼鏂囦欢", notes = "浼犲叆鏂囦欢")
+	public R deployUpload(@RequestParam List<MultipartFile> files,
+						  @RequestParam String category,
+						  @RequestParam(required = false, defaultValue = "") String tenantIds) {
+		return R.status(flowEngineService.deployUpload(files, category, Func.toStrList(tenantIds)));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java
new file mode 100644
index 0000000..5e3e781
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java
@@ -0,0 +1,116 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.flow.engine.entity.FlowModel;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Map;
+
+/**
+ * 娴佺▼妯″瀷鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@RequestMapping("model")
+@AllArgsConstructor
+//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+public class FlowModelController {
+
+	private final FlowEngineService flowEngineService;
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "modelKey", value = "妯″瀷鏍囪瘑", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "妯″瀷鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
+	public R<IPage<FlowModel>> list(@ApiIgnore @RequestParam Map<String, Object> flow, Query query) {
+		IPage<FlowModel> pages = flowEngineService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, FlowModel.class)
+			.select("id,model_key modelKey,name,description,version,created,last_updated lastUpdated")
+			.orderByDesc("last_updated"));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆涓婚敭闆嗗悎")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎") @RequestParam String ids) {
+		boolean temp = flowEngineService.removeByIds(Func.toStrList(ids));
+		return R.status(temp);
+	}
+
+	/**
+	 * 閮ㄧ讲
+	 */
+	@PostMapping("/deploy")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "閮ㄧ讲", notes = "浼犲叆妯″瀷id鍜屽垎绫�")
+	public R deploy(@ApiParam(value = "妯″瀷id") @RequestParam String modelId,
+					@ApiParam(value = "宸ヤ綔娴佸垎绫�") @RequestParam String category,
+					@ApiParam(value = "绉熸埛ID") @RequestParam(required = false, defaultValue = "") String tenantIds) {
+		boolean temp = flowEngineService.deployModel(modelId, category, Func.toStrList(tenantIds));
+		return R.status(temp);
+	}
+
+	@PostMapping("submit")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "淇濆瓨/缂栬緫")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "id", value = "妯″瀷id"),
+		@ApiImplicitParam(name = "name", value = "妯″瀷鍚嶇О", required = true),
+		@ApiImplicitParam(name = "modelKey", value = "妯″瀷key", required = true),
+		@ApiImplicitParam(name = "description", value = "妯″瀷鎻忚堪"),
+		@ApiImplicitParam(name = "xml", value = "妯″瀷xml", required = true),
+	})
+	public R<FlowModel> submit(@RequestBody @ApiIgnore FlowModel model) {
+		return R.data(flowEngineService.submitModel(model));
+	}
+
+	@GetMapping("detail")
+	@ApiOperation(value = "璇︽儏")
+	@ApiOperationSupport(order = 5)
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "id", value = "妯″瀷id", required = true),
+	})
+	public R<FlowModel> detail(String id) {
+		return R.data(flowEngineService.getById(id));
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java
new file mode 100644
index 0000000..a9329c2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java
@@ -0,0 +1,96 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.controller;
+
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 娴佺▼閫氱敤鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@Slf4j
+@RestController
+@AllArgsConstructor
+@RequestMapping("process")
+public class FlowProcessController {
+
+	private static final String IMAGE_NAME = "image";
+	private final FlowEngineService flowEngineService;
+
+	/**
+	 * 鑾峰彇娴佽浆鍘嗗彶鍒楄〃
+	 *
+	 * @param processInstanceId 娴佺▼瀹炰緥id
+	 * @param startActivityId   寮�濮嬭妭鐐筰d
+	 * @param endActivityId     缁撴潫鑺傜偣id
+	 */
+	@GetMapping(value = "history-flow-list")
+	public R<List<BladeFlow>> historyFlowList(@RequestParam String processInstanceId, String startActivityId, String endActivityId) {
+		return R.data(flowEngineService.historyFlowList(processInstanceId, startActivityId, endActivityId));
+	}
+
+	/**
+	 * 娴佺▼鑺傜偣杩涚▼鍥�
+	 *
+	 * @param processDefinitionId 娴佺▼id
+	 * @param processInstanceId   娴佺▼瀹炰緥id
+	 */
+	@GetMapping(value = "model-view")
+	public R modelView(String processDefinitionId, String processInstanceId) {
+		return R.data(flowEngineService.modelView(processDefinitionId, processInstanceId));
+	}
+
+	/**
+	 * 娴佺▼鑺傜偣杩涚▼鍥�
+	 *
+	 * @param processInstanceId   娴佺▼瀹炰緥id
+	 * @param httpServletResponse http鍝嶅簲
+	 */
+	@GetMapping(value = "diagram-view")
+	public void diagramView(String processInstanceId, HttpServletResponse httpServletResponse) {
+		flowEngineService.diagramView(processInstanceId, httpServletResponse);
+	}
+
+	/**
+	 * 娴佺▼鍥惧睍绀�
+	 *
+	 * @param processDefinitionId 娴佺▼id
+	 * @param processInstanceId   瀹炰緥id
+	 * @param resourceype        璧勬簮绫诲瀷
+	 * @param response            鍝嶅簲
+	 */
+	@GetMapping("resource-view")
+	public void resourceView(@RequestParam String processDefinitionId, String processInstanceId, @RequestParam(defaultValue = IMAGE_NAME) String resourceype, HttpServletResponse response) {
+		flowEngineService.resourceView(processDefinitionId, processInstanceId, resourceype, response);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowExecution.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowExecution.java
new file mode 100644
index 0000000..335abbe
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowExecution.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 杩愯瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+public class FlowExecution implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String id;
+	private String name;
+	private String startUserId;
+	private String startUser;
+	private Date startTime;
+	private String taskDefinitionId;
+	private String taskDefinitionKey;
+	private String category;
+	private String categoryName;
+	private String processInstanceId;
+	private String processDefinitionId;
+	private String processDefinitionKey;
+	private String activityId;
+	private int suspensionState;
+	private String executionId;
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowModel.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowModel.java
new file mode 100644
index 0000000..c643e87
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowModel.java
@@ -0,0 +1,58 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 娴佺▼妯″瀷
+ *
+ * @author Chill
+ */
+@Data
+@TableName("ACT_DE_MODEL")
+public class FlowModel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	public static final int MODEL_TYPE_BPMN = 0;
+	public static final int MODEL_TYPE_FORM = 2;
+	public static final int MODEL_TYPE_APP = 3;
+	public static final int MODEL_TYPE_DECISION_TABLE = 4;
+	public static final int MODEL_TYPE_CMMN = 5;
+
+	private String id;
+	private String name;
+	private String modelKey;
+	private String description;
+	private Date created;
+	private Date lastUpdated;
+	private String createdBy;
+	private String lastUpdatedBy;
+	private Integer version;
+	private String modelEditorJson;
+	private String modelComment;
+	private Integer modelType;
+	private String tenantId;
+	private byte[] thumbnail;
+	private String modelEditorXml;
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowProcess.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowProcess.java
new file mode 100644
index 0000000..e252916
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowProcess.java
@@ -0,0 +1,65 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.entity;
+
+import com.vci.ubcs.flow.engine.utils.FlowCache;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * FlowProcess
+ *
+ * @author Chill
+ */
+@Data
+@NoArgsConstructor
+public class FlowProcess implements Serializable {
+
+	private String id;
+	private String tenantId;
+	private String name;
+	private String key;
+	private String category;
+	private String categoryName;
+	private Integer version;
+	private String deploymentId;
+	private String ResourceName;
+	private String diagramResourceName;
+	private Integer suspensionState;
+	private Date deploymentTime;
+
+	public FlowProcess(ProcessDefinitionEntityImpl entity) {
+		if (entity != null) {
+			this.id = entity.getId();
+			this.tenantId = entity.getTenantId();
+			this.name = entity.getName();
+			this.key = entity.getKey();
+			this.category = entity.getCategory();
+			this.categoryName = FlowCache.getCategoryName(entity.getCategory());
+			this.version = entity.getVersion();
+			this.deploymentId = entity.getDeploymentId();
+			this.ResourceName = entity.getResourceName();
+			this.diagramResourceName = entity.getDiagramResourceName();
+			this.suspensionState = entity.getSuspensionState();
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java
new file mode 100644
index 0000000..8ac1cc3
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java
@@ -0,0 +1,46 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.flow.engine.entity.FlowModel;
+
+import java.util.List;
+
+/**
+ * FlowMapper.
+ *
+ * @author Chill
+ */
+public interface FlowMapper extends BaseMapper<FlowModel> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 * @param page
+	 * @param flowModel
+	 * @return
+	 */
+	List<FlowModel> selectFlowPage(IPage page, FlowModel flowModel);
+
+	/**
+	 * 鑾峰彇妯″瀷
+	 * @param parentModelId
+	 * @return
+	 */
+	List<FlowModel> findByParentModelId(String parentModelId);
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java
new file mode 100644
index 0000000..2955619
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java
@@ -0,0 +1,166 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.engine.entity.FlowExecution;
+import com.vci.ubcs.flow.engine.entity.FlowModel;
+import com.vci.ubcs.flow.engine.entity.FlowProcess;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * FlowService
+ *
+ * @author Chill
+ */
+public interface FlowEngineService extends IService<FlowModel> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page      鍒嗛〉宸ュ叿
+	 * @param flowModel 娴佺▼妯″瀷
+	 * @return
+	 */
+	IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel);
+
+	/**
+	 * 娴佺▼绠$悊鍒楄〃
+	 *
+	 * @param page     鍒嗛〉宸ュ叿
+	 * @param category 鍒嗙被
+	 * @param mode     褰㈡��
+	 * @return
+	 */
+	IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode);
+
+	/**
+	 * 娴佺▼绠$悊鍒楄〃
+	 *
+	 * @param page                 鍒嗛〉宸ュ叿
+	 * @param processInstanceId    娴佺▼瀹炰緥id
+	 * @param processDefinitionKey 娴佺▼key
+	 * @return
+	 */
+	IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey);
+
+	/**
+	 * 鑾峰彇娴佽浆鍘嗗彶鍒楄〃
+	 *
+	 * @param processInstanceId 娴佺▼瀹炰緥id
+	 * @param startActivityId   寮�濮嬭妭鐐筰d
+	 * @param endActivityId     缁撴潫鑺傜偣id
+	 * @return
+	 */
+	List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId);
+
+	/**
+	 * 鍙樻洿娴佺▼鐘舵��
+	 *
+	 * @param state     鐘舵��
+	 * @param processId 娴佺▼ID
+	 * @return
+	 */
+	String changeState(String state, String processId);
+
+	/**
+	 * 鍒犻櫎閮ㄧ讲娴佺▼
+	 *
+	 * @param deploymentIds 閮ㄧ讲娴佺▼id闆嗗悎
+	 * @return
+	 */
+	boolean deleteDeployment(String deploymentIds);
+
+	/**
+	 * 涓婁紶閮ㄧ讲娴佺▼
+	 *
+	 * @param files        娴佺▼閰嶇疆鏂囦欢
+	 * @param category     娴佺▼鍒嗙被
+	 * @param tenantIdList 绉熸埛id闆嗗悎
+	 * @return
+	 */
+	boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList);
+
+	/**
+	 * 閮ㄧ讲娴佺▼
+	 *
+	 * @param modelId      妯″瀷id
+	 * @param category     鍒嗙被
+	 * @param tenantIdList 绉熸埛id闆嗗悎
+	 * @return
+	 */
+	boolean deployModel(String modelId, String category, List<String> tenantIdList);
+
+	/**
+	 * 鍒犻櫎娴佺▼瀹炰緥
+	 *
+	 * @param processInstanceId 娴佺▼瀹炰緥id
+	 * @param deleteReason      鍒犻櫎鍘熷洜
+	 * @return
+	 */
+	boolean deleteProcessInstance(String processInstanceId, String deleteReason);
+
+
+	/**
+	 * 淇濆瓨/鏇存柊妯″瀷
+	 *
+	 * @param model 妯″瀷
+	 * @return 妯″瀷
+	 */
+	FlowModel submitModel(FlowModel model);
+
+	/**
+	 * 娴佺▼鑺傜偣杩涚▼鍥�
+	 *
+	 * @param processDefinitionId
+	 * @param processInstanceId
+	 * @return
+	 */
+	Map<String, Object> modelView(String processDefinitionId, String processInstanceId);
+
+	/**
+	 * 娴佺▼鑺傜偣杩涚▼鍥�
+	 *
+	 * @param processInstanceId
+	 * @param httpServletResponse
+	 */
+	void diagramView(String processInstanceId, HttpServletResponse httpServletResponse);
+
+	/**
+	 * 娴佺▼鍥惧睍绀�
+	 *
+	 * @param processDefinitionId
+	 * @param processInstanceId
+	 * @param resourceType
+	 * @param response
+	 */
+	void resourceView(String processDefinitionId, String processInstanceId, String resourceType, HttpServletResponse response);
+
+	/**
+	 * 鑾峰彇XML
+	 *
+	 * @param model
+	 * @return
+	 */
+	byte[] getModelEditorXML(FlowModel model);
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java
new file mode 100644
index 0000000..7eb8c9b
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java
@@ -0,0 +1,559 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.core.enums.FlowModeEnum;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import com.vci.ubcs.flow.engine.constant.FlowEngineConstant;
+import com.vci.ubcs.flow.engine.entity.FlowExecution;
+import com.vci.ubcs.flow.engine.entity.FlowModel;
+import com.vci.ubcs.flow.engine.entity.FlowProcess;
+import com.vci.ubcs.flow.engine.mapper.FlowMapper;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import com.vci.ubcs.flow.engine.utils.FlowCache;
+import com.vci.ubcs.system.user.cache.UserCache;
+import com.vci.ubcs.system.user.entity.User;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.bpmn.converter.BpmnXMLConverter;
+import org.flowable.bpmn.model.BpmnModel;
+import org.flowable.bpmn.model.Process;
+import org.flowable.common.engine.impl.util.IoUtil;
+import org.flowable.common.engine.impl.util.io.StringStreamSource;
+import org.flowable.editor.language.json.converter.BpmnJsonConverter;
+import org.flowable.engine.*;
+import org.flowable.engine.history.HistoricActivityInstance;
+import org.flowable.engine.history.HistoricProcessInstance;
+import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
+import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
+import org.flowable.engine.repository.Deployment;
+import org.flowable.engine.repository.ProcessDefinition;
+import org.flowable.engine.repository.ProcessDefinitionQuery;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.engine.runtime.ProcessInstanceQuery;
+import org.flowable.engine.task.Comment;
+import org.flowable.image.ProcessDiagramGenerator;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.FileUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.*;
+
+/**
+ * 宸ヤ綔娴佹湇鍔″疄鐜扮被
+ *
+ * @author Chill
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class FlowEngineServiceImpl extends ServiceImpl<FlowMapper, FlowModel> implements FlowEngineService {
+	private static final String ALREADY_IN_STATE = "already in state";
+	private static final String USR_TASK = "userTask";
+	private static final String IMAGE_NAME = "image";
+	private static final String XML_NAME = "xml";
+	private static final Integer INT_1024 = 1024;
+	private static final BpmnJsonConverter BPMN_JSON_CONVERTER = new BpmnJsonConverter();
+	private static final BpmnXMLConverter BPMN_XML_CONVERTER = new BpmnXMLConverter();
+	private final ObjectMapper objectMapper;
+	private final RepositoryService repositoryService;
+	private final RuntimeService runtimeService;
+	private final HistoryService historyService;
+	private final TaskService taskService;
+	private final ProcessEngine processEngine;
+
+	@Override
+	public IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel) {
+		return page.setRecords(baseMapper.selectFlowPage(page, flowModel));
+	}
+
+	@Override
+	public IPage<FlowProcess> selectProcessPage(IPage<FlowProcess> page, String category, Integer mode) {
+		ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().latestVersion().orderByProcessDefinitionKey().asc();
+		// 閫氱敤娴佺▼
+		if (mode == FlowModeEnum.COMMON.getMode()) {
+			processDefinitionQuery.processDefinitionWithoutTenantId();
+		}
+		// 瀹氬埗娴佺▼
+		else if (!AuthUtil.isAdministrator()) {
+			processDefinitionQuery.processDefinitionTenantId(AuthUtil.getTenantId());
+		}
+		if (StringUtils.isNotEmpty(category)) {
+			processDefinitionQuery.processDefinitionCategory(category);
+		}
+		List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
+		List<FlowProcess> flowProcessList = new ArrayList<>();
+		processDefinitionList.forEach(processDefinition -> {
+			String deploymentId = processDefinition.getDeploymentId();
+			Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
+			FlowProcess flowProcess = new FlowProcess((ProcessDefinitionEntityImpl) processDefinition);
+			flowProcess.setDeploymentTime(deployment.getDeploymentTime());
+			flowProcessList.add(flowProcess);
+		});
+		page.setTotal(processDefinitionQuery.count());
+		page.setRecords(flowProcessList);
+		return page;
+	}
+
+	@Override
+	public IPage<FlowExecution> selectFollowPage(IPage<FlowExecution> page, String processInstanceId, String processDefinitionKey) {
+		ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
+		if (StringUtil.isNotBlank(processInstanceId)) {
+			processInstanceQuery.processInstanceId(processInstanceId);
+		}
+		if (StringUtil.isNotBlank(processDefinitionKey)) {
+			processInstanceQuery.processDefinitionKey(processDefinitionKey);
+		}
+		List<FlowExecution> flowList = new ArrayList<>();
+		List<ProcessInstance> procInsList = processInstanceQuery.listPage(Func.toInt((page.getCurrent() - 1) * page.getSize()), Func.toInt(page.getSize()));
+		procInsList.forEach(processInstance -> {
+			ExecutionEntityImpl execution = (ExecutionEntityImpl) processInstance;
+			FlowExecution flowExecution = new FlowExecution();
+			flowExecution.setId(execution.getId());
+			flowExecution.setName(execution.getName());
+			flowExecution.setStartUserId(execution.getStartUserId());
+			User taskUser = UserCache.getUserByTaskUser(execution.getStartUserId());
+			if (taskUser != null) {
+				flowExecution.setStartUser(taskUser.getName());
+			}
+			flowExecution.setStartTime(execution.getStartTime());
+			flowExecution.setExecutionId(execution.getId());
+			flowExecution.setProcessInstanceId(execution.getProcessInstanceId());
+			flowExecution.setProcessDefinitionId(execution.getProcessDefinitionId());
+			flowExecution.setProcessDefinitionKey(execution.getProcessDefinitionKey());
+			flowExecution.setSuspensionState(execution.getSuspensionState());
+			FlowProcess processDefinition = FlowCache.getProcessDefinition(execution.getProcessDefinitionId());
+			flowExecution.setCategory(processDefinition.getCategory());
+			flowExecution.setCategoryName(FlowCache.getCategoryName(processDefinition.getCategory()));
+			flowList.add(flowExecution);
+		});
+		page.setTotal(processInstanceQuery.count());
+		page.setRecords(flowList);
+		return page;
+	}
+
+	@Override
+	public List<BladeFlow> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) {
+		List<BladeFlow> flowList = new LinkedList<>();
+		List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().orderByHistoricActivityInstanceEndTime().asc().list();
+		boolean start = false;
+		Map<String, Integer> activityMap = new HashMap<>(16);
+		for (int i = 0; i < historicActivityInstanceList.size(); i++) {
+			HistoricActivityInstance historicActivityInstance = historicActivityInstanceList.get(i);
+			// 杩囨护寮�濮嬭妭鐐瑰墠鐨勮妭鐐�
+			if (StringUtil.isNotBlank(startActivityId) && startActivityId.equals(historicActivityInstance.getActivityId())) {
+				start = true;
+			}
+			if (StringUtil.isNotBlank(startActivityId) && !start) {
+				continue;
+			}
+			// 鏄剧ず寮�濮嬭妭鐐瑰拰缁撴潫鑺傜偣锛屽苟涓旀墽琛屼汉涓嶄负绌虹殑浠诲姟
+			if (StringUtils.equals(USR_TASK, historicActivityInstance.getActivityType())
+				|| FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())
+				|| FlowEngineConstant.END_EVENT.equals(historicActivityInstance.getActivityType())) {
+				// 缁欒妭鐐瑰鍔犲簭鍙�
+				Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
+				if (activityNum == null) {
+					activityMap.put(historicActivityInstance.getActivityId(), activityMap.size());
+				}
+				BladeFlow flow = new BladeFlow();
+				flow.setHistoryActivityId(historicActivityInstance.getActivityId());
+				flow.setHistoryActivityName(historicActivityInstance.getActivityName());
+				flow.setCreateTime(historicActivityInstance.getStartTime());
+				flow.setEndTime(historicActivityInstance.getEndTime());
+				String durationTime = DateUtil.secondToTime(Func.toLong(historicActivityInstance.getDurationInMillis(), 0L) / 1000);
+				flow.setHistoryActivityDurationTime(durationTime);
+				// 鑾峰彇娴佺▼鍙戣捣浜哄悕绉�
+				if (FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())) {
+					List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).orderByProcessInstanceStartTime().asc().list();
+					if (processInstanceList.size() > 0) {
+						if (StringUtil.isNotBlank(processInstanceList.get(0).getStartUserId())) {
+							String taskUser = processInstanceList.get(0).getStartUserId();
+							User user = UserCache.getUser(TaskUtil.getUserId(taskUser));
+							if (user != null) {
+								flow.setAssignee(historicActivityInstance.getAssignee());
+								flow.setAssigneeName(user.getName());
+							}
+						}
+					}
+				}
+				// 鑾峰彇浠诲姟鎵ц浜哄悕绉�
+				if (StringUtil.isNotBlank(historicActivityInstance.getAssignee())) {
+					User user = UserCache.getUser(TaskUtil.getUserId(historicActivityInstance.getAssignee()));
+					if (user != null) {
+						flow.setAssignee(historicActivityInstance.getAssignee());
+						flow.setAssigneeName(user.getName());
+					}
+				}
+				// 鑾峰彇鎰忚璇勮鍐呭
+				if (StringUtil.isNotBlank(historicActivityInstance.getTaskId())) {
+					List<Comment> commentList = taskService.getTaskComments(historicActivityInstance.getTaskId());
+					if (commentList.size() > 0) {
+						flow.setComment(commentList.get(0).getFullMessage());
+					}
+				}
+				flowList.add(flow);
+			}
+			// 杩囨护缁撴潫鑺傜偣鍚庣殑鑺傜偣
+			if (StringUtils.isNotBlank(endActivityId) && endActivityId.equals(historicActivityInstance.getActivityId())) {
+				boolean temp = false;
+				Integer activityNum = activityMap.get(historicActivityInstance.getActivityId());
+				// 璇ユ椿鍔ㄨ妭鐐癸紝鍚庣画鑺傜偣鏄惁鍦ㄧ粨鏉熻妭鐐逛箣鍓嶏紝鍦ㄥ悗缁妭鐐逛腑鏄惁瀛樺湪
+				for (int j = i + 1; j < historicActivityInstanceList.size(); j++) {
+					HistoricActivityInstance hi = historicActivityInstanceList.get(j);
+					Integer activityNumA = activityMap.get(hi.getActivityId());
+					boolean numberTemp = activityNumA != null && activityNumA < activityNum;
+					boolean equalsTemp = StringUtils.equals(hi.getActivityId(), historicActivityInstance.getActivityId());
+					if (numberTemp || equalsTemp) {
+						temp = true;
+					}
+				}
+				if (!temp) {
+					break;
+				}
+			}
+		}
+		return flowList;
+	}
+
+	@Override
+	public String changeState(String state, String processId) {
+		try {
+			if (state.equals(FlowEngineConstant.ACTIVE)) {
+				repositoryService.activateProcessDefinitionById(processId, true, null);
+				return StringUtil.format("婵�娲籌D涓� [{}] 鐨勬祦绋嬫垚鍔�", processId);
+			} else if (state.equals(FlowEngineConstant.SUSPEND)) {
+				repositoryService.suspendProcessDefinitionById(processId, true, null);
+				return StringUtil.format("鎸傝捣ID涓� [{}] 鐨勬祦绋嬫垚鍔�", processId);
+			} else {
+				return "鏆傛棤娴佺▼鍙樻洿";
+			}
+		} catch (Exception e) {
+			if (e.getMessage().contains(ALREADY_IN_STATE)) {
+				return StringUtil.format("ID涓� [{}] 鐨勬祦绋嬪凡鏄鐘舵�侊紝鏃犻渶鎿嶄綔", processId);
+			}
+			return e.getMessage();
+		}
+	}
+
+	@Override
+	public boolean deleteDeployment(String deploymentIds) {
+		Func.toStrList(deploymentIds).forEach(deploymentId -> repositoryService.deleteDeployment(deploymentId, true));
+		return true;
+	}
+
+	@Override
+	public boolean deployUpload(List<MultipartFile> files, String category, List<String> tenantIdList) {
+		files.forEach(file -> {
+			try {
+				String fileName = file.getOriginalFilename();
+				InputStream fileInputStream = file.getInputStream();
+				byte[] bytes = FileUtil.copyToByteArray(fileInputStream);
+				if (Func.isNotEmpty(tenantIdList)) {
+					tenantIdList.forEach(tenantId -> {
+						Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).tenantId(tenantId).deploy();
+						deploy(deployment, category);
+					});
+				} else {
+					Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).deploy();
+					deploy(deployment, category);
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		});
+		return true;
+	}
+
+	@Override
+	public boolean deployModel(String modelId, String category, List<String> tenantIdList) {
+		FlowModel model = this.getById(modelId);
+		if (model == null) {
+			throw new ServiceException("鏈壘鍒版ā鍨� id: " + modelId);
+		}
+		byte[] bytes = getBpmnXML(model);
+		String processName = model.getName();
+		if (!StringUtil.endsWithIgnoreCase(processName, FlowEngineConstant.SUFFIX)) {
+			processName += FlowEngineConstant.SUFFIX;
+		}
+		String finalProcessName = processName;
+		if (Func.isNotEmpty(tenantIdList)) {
+			tenantIdList.forEach(tenantId -> {
+				Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).tenantId(tenantId).deploy();
+				deploy(deployment, category);
+			});
+		} else {
+			Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).deploy();
+			deploy(deployment, category);
+		}
+		return true;
+	}
+
+	@Override
+	public boolean deleteProcessInstance(String processInstanceId, String deleteReason) {
+		runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
+		return true;
+	}
+
+	private void deploy(Deployment deployment, String category) {
+		log.debug("娴佺▼閮ㄧ讲--------deploy:  " + deployment + "  鍒嗙被---------->" + category);
+		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
+		StringBuilder logBuilder = new StringBuilder(500);
+		List<Object> logArgs = new ArrayList<>();
+		// 璁剧疆娴佺▼鍒嗙被
+		for (ProcessDefinition processDefinition : list) {
+			if (StringUtil.isNotBlank(category)) {
+				repositoryService.setProcessDefinitionCategory(processDefinition.getId(), category);
+			}
+			logBuilder.append("閮ㄧ讲鎴愬姛,娴佺▼ID={} \n");
+			logArgs.add(processDefinition.getId());
+		}
+		if (list.size() == 0) {
+			throw new ServiceException("閮ㄧ讲澶辫触,鏈壘鍒版祦绋�");
+		} else {
+			log.info(logBuilder.toString(), logArgs.toArray());
+		}
+	}
+
+	@Override
+	public FlowModel submitModel(FlowModel model) {
+		FlowModel flowModel = new FlowModel();
+		flowModel.setId(model.getId());
+		flowModel.setVersion(Func.toInt(model.getVersion(), 0) + 1);
+		flowModel.setName(model.getName());
+		flowModel.setModelKey(model.getModelKey());
+		flowModel.setModelType(FlowModel.MODEL_TYPE_BPMN);
+		flowModel.setCreatedBy(TaskUtil.getTaskUser());
+		flowModel.setDescription(model.getDescription());
+		flowModel.setLastUpdated(Calendar.getInstance().getTime());
+		flowModel.setLastUpdatedBy(TaskUtil.getTaskUser());
+		flowModel.setTenantId(AuthUtil.getTenantId());
+		flowModel.setModelEditorXml(model.getModelEditorXml());
+		if (StringUtil.isBlank(model.getId())) {
+			flowModel.setCreated(Calendar.getInstance().getTime());
+		}
+		if (StringUtil.isNotBlank(model.getModelEditorXml())) {
+			flowModel.setModelEditorJson(getBpmnJson(model.getModelEditorXml()));
+		}
+		this.saveOrUpdate(flowModel);
+		return flowModel;
+	}
+
+	@Override
+	public Map<String, Object> modelView(String processDefinitionId, String processInstanceId) {
+		Map<String, Object> result = new HashMap<>();
+		// 鑺傜偣鏍囪
+		if (StringUtil.isNotBlank(processInstanceId)) {
+			result.put("flow", this.historyFlowList(processInstanceId, null, null));
+			HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery()
+				.processInstanceId(processInstanceId)
+				.singleResult();
+			processDefinitionId = processInstance.getProcessDefinitionId();
+		}
+		BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
+		// 娴佺▼鍥惧睍绀�
+		result.put("xml", new String(new BpmnXMLConverter().convertToXML(bpmnModel)));
+		return result;
+	}
+
+	@Override
+	public void diagramView(String processInstanceId, HttpServletResponse httpServletResponse) {
+		// 鑾峰緱褰撳墠娲诲姩鐨勮妭鐐�
+		String processDefinitionId;
+		// 濡傛灉娴佺▼宸茬粡缁撴潫锛屽垯寰楀埌缁撴潫鑺傜偣
+		if (this.isFinished(processInstanceId)) {
+			HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+			processDefinitionId = pi.getProcessDefinitionId();
+		} else {
+			// 濡傛灉娴佺▼娌℃湁缁撴潫锛屽垯鍙栧綋鍓嶆椿鍔ㄨ妭鐐�
+			// 鏍规嵁娴佺▼瀹炰緥ID鑾峰緱褰撳墠澶勪簬娲诲姩鐘舵�佺殑ActivityId鍚堥泦
+			ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+			processDefinitionId = pi.getProcessDefinitionId();
+		}
+		List<String> highLightedActivities = new ArrayList<>();
+
+		// 鑾峰緱娲诲姩鐨勮妭鐐�
+		List<HistoricActivityInstance> highLightedActivityList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
+
+		for (HistoricActivityInstance tempActivity : highLightedActivityList) {
+			String activityId = tempActivity.getActivityId();
+			highLightedActivities.add(activityId);
+		}
+
+		List<String> flows = new ArrayList<>();
+		// 鑾峰彇娴佺▼鍥�
+		BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
+		ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration();
+
+		ProcessDiagramGenerator diagramGenerator = engConf.getProcessDiagramGenerator();
+		InputStream in = diagramGenerator.generateDiagram(bpmnModel, "bmp", highLightedActivities, flows, engConf.getActivityFontName(),
+			engConf.getLabelFontName(), engConf.getAnnotationFontName(), engConf.getClassLoader(), 1.0, true);
+		OutputStream out = null;
+		byte[] buf = new byte[1024];
+		int length;
+		try {
+			out = httpServletResponse.getOutputStream();
+			while ((length = in.read(buf)) != -1) {
+				out.write(buf, 0, length);
+			}
+		} catch (IOException e) {
+			log.error("鎿嶄綔寮傚父", e);
+		} finally {
+			IoUtil.closeSilently(out);
+			IoUtil.closeSilently(in);
+		}
+	}
+
+	@Override
+	public void resourceView(String processDefinitionId, String processInstanceId, String resourceType, HttpServletResponse response) {
+		if (StringUtil.isAllBlank(processDefinitionId, processInstanceId)) {
+			return;
+		}
+		if (StringUtil.isBlank(processDefinitionId)) {
+			ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+			processDefinitionId = processInstance.getProcessDefinitionId();
+		}
+		ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
+		String resourceName = "";
+		if (resourceType.equals(IMAGE_NAME)) {
+			resourceName = processDefinition.getDiagramResourceName();
+		} else if (resourceType.equals(XML_NAME)) {
+			resourceName = processDefinition.getResourceName();
+		}
+		try {
+			InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName);
+			byte[] b = new byte[1024];
+			int len;
+			while ((len = resourceAsStream.read(b, 0, INT_1024)) != -1) {
+				response.getOutputStream().write(b, 0, len);
+			}
+		} catch (Exception exception) {
+			exception.printStackTrace();
+		}
+	}
+
+	@Override
+	public byte[] getModelEditorXML(FlowModel model) {
+		return getBpmnXML(model);
+	}
+
+	/**
+	 * 鏄惁宸插畬缁�
+	 *
+	 * @param processInstanceId 娴佺▼瀹炰緥id
+	 * @return bool
+	 */
+	private boolean isFinished(String processInstanceId) {
+		return historyService.createHistoricProcessInstanceQuery().finished()
+			.processInstanceId(processInstanceId).count() > 0;
+	}
+
+
+	/**
+	 * xml杞琤pmn json
+	 *
+	 * @param xml xml
+	 * @return json
+	 */
+	private String getBpmnJson(String xml) {
+		return BPMN_JSON_CONVERTER.convertToJson(getBpmnModel(xml)).toString();
+	}
+
+	/**
+	 * xml杞琤pmnModel
+	 *
+	 * @param xml xml
+	 * @return bpmnModel
+	 */
+	private BpmnModel getBpmnModel(String xml) {
+		return BPMN_XML_CONVERTER.convertToBpmnModel(new StringStreamSource(xml), false, false);
+	}
+
+	private byte[] getBpmnXML(FlowModel model) {
+		BpmnModel bpmnModel = getBpmnModel(model);
+		return getBpmnXML(bpmnModel);
+	}
+
+	private byte[] getBpmnXML(BpmnModel bpmnModel) {
+		for (Process process : bpmnModel.getProcesses()) {
+			if (StringUtils.isNotEmpty(process.getId())) {
+				char firstCharacter = process.getId().charAt(0);
+				if (Character.isDigit(firstCharacter)) {
+					process.setId("a" + process.getId());
+				}
+			}
+		}
+		return BPMN_XML_CONVERTER.convertToXML(bpmnModel);
+	}
+
+	private BpmnModel getBpmnModel(FlowModel model) {
+		BpmnModel bpmnModel;
+		try {
+			Map<String, FlowModel> formMap = new HashMap<>(16);
+			Map<String, FlowModel> decisionTableMap = new HashMap<>(16);
+
+			List<FlowModel> referencedModels = baseMapper.findByParentModelId(model.getId());
+			for (FlowModel childModel : referencedModels) {
+				if (FlowModel.MODEL_TYPE_FORM == childModel.getModelType()) {
+					formMap.put(childModel.getId(), childModel);
+
+				} else if (FlowModel.MODEL_TYPE_DECISION_TABLE == childModel.getModelType()) {
+					decisionTableMap.put(childModel.getId(), childModel);
+				}
+			}
+			bpmnModel = getBpmnModel(model, formMap, decisionTableMap);
+		} catch (Exception e) {
+			log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
+			throw new ServiceException("Could not generate BPMN 2.0 model");
+		}
+		return bpmnModel;
+	}
+
+	private BpmnModel getBpmnModel(FlowModel model, Map<String, FlowModel> formMap, Map<String, FlowModel> decisionTableMap) {
+		try {
+			ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(model.getModelEditorJson());
+			Map<String, String> formKeyMap = new HashMap<>(16);
+			for (FlowModel formModel : formMap.values()) {
+				formKeyMap.put(formModel.getId(), formModel.getModelKey());
+			}
+			Map<String, String> decisionTableKeyMap = new HashMap<>(16);
+			for (FlowModel decisionTableModel : decisionTableMap.values()) {
+				decisionTableKeyMap.put(decisionTableModel.getId(), decisionTableModel.getModelKey());
+			}
+			return BPMN_JSON_CONVERTER.convertToBpmnModel(editorJsonNode, formKeyMap, decisionTableKeyMap);
+		} catch (Exception e) {
+			log.error("Could not generate BPMN 2.0 model for {}", model.getId(), e);
+			throw new ServiceException("Could not generate BPMN 2.0 model");
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/utils/FlowCache.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/utils/FlowCache.java
new file mode 100644
index 0000000..1cd821d
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/utils/FlowCache.java
@@ -0,0 +1,78 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.utils;
+
+import com.vci.ubcs.flow.engine.entity.FlowProcess;
+import org.flowable.engine.RepositoryService;
+import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
+import org.flowable.engine.repository.ProcessDefinition;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.cache.DictCache;
+
+import static org.springblade.core.cache.constant.CacheConstant.FLOW_CACHE;
+
+/**
+ * 娴佺▼缂撳瓨
+ *
+ * @author Chill
+ */
+public class FlowCache {
+
+	private static final String FLOW_DEFINITION_ID = "definition:id:";
+	private static RepositoryService repositoryService;
+
+	private static RepositoryService getRepositoryService() {
+		if (repositoryService == null) {
+			repositoryService = SpringUtil.getBean(RepositoryService.class);
+		}
+		return repositoryService;
+	}
+
+	/**
+	 * 鑾峰緱娴佺▼瀹氫箟瀵硅薄
+	 *
+	 * @param processDefinitionId 娴佺▼瀵硅薄id
+	 * @return
+	 */
+	public static FlowProcess getProcessDefinition(String processDefinitionId) {
+		return CacheUtil.get(FLOW_CACHE, FLOW_DEFINITION_ID, processDefinitionId, () -> {
+			ProcessDefinition processDefinition = getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
+			ProcessDefinitionEntityImpl processDefinitionEntity = BeanUtil.copy(processDefinition, ProcessDefinitionEntityImpl.class);
+			return new FlowProcess(processDefinitionEntity);
+		});
+	}
+
+	/**
+	 * 鑾峰彇娴佺▼绫诲瀷鍚�
+	 *
+	 * @param category 娴佺▼绫诲瀷
+	 * @return
+	 */
+	public static String getCategoryName(String category) {
+		String[] categoryArr = category.split(StringPool.UNDERSCORE);
+		if (categoryArr.length <= 1) {
+			return StringPool.EMPTY;
+		} else {
+			return DictCache.getValue(category.split(StringPool.UNDERSCORE)[0], Func.toInt(category.split(StringPool.UNDERSCORE)[1]));
+		}
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-test.yml
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application.yml
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml
new file mode 100644
index 0000000..91e52fa
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.flow.engine.mapper.FlowMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="flowModelResultMap" type="com.vci.ubcs.flow.engine.entity.FlowModel">
+        <result column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="model_key" property="modelKey"/>
+        <result column="description" property="description"/>
+        <result column="model_comment" property="modelComment"/>
+        <result column="created" property="created"/>
+        <result column="created_by" property="createdBy"/>
+        <result column="last_updated" property="lastUpdated"/>
+        <result column="last_updated_by" property="lastUpdatedBy"/>
+        <result column="version" property="version"/>
+        <result column="model_editor_json" property="modelEditorJson"/>
+        <result column="thumbnail" property="thumbnail"/>
+        <result column="model_type" property="modelType"/>
+        <result column="tenant_id" property="tenantId"/>
+    </resultMap>
+
+    <select id="selectFlowPage" resultMap="flowModelResultMap">
+        SELECT
+            a.id,
+            a.name,
+            a.model_key,
+            a.description,
+            a.model_comment,
+            a.created,
+            a.created_by,
+            a.last_updated,
+            a.last_updated_by,
+            a.version,
+            a.model_editor_json,
+            a.thumbnail,
+            a.model_type,
+            a.tenant_id
+        FROM
+            ACT_DE_MODEL a
+        WHERE
+            1 = 1
+        ORDER BY
+            a.created DESC
+    </select>
+
+    <select id="findByParentModelId" parameterType="string" resultMap="flowModelResultMap">
+        select model.* from ACT_DE_MODEL_RELATION modelrelation
+                                inner join ACT_DE_MODEL model on modelrelation.model_id = model.id
+        where modelrelation.parent_model_id = #{_parameter}
+    </select>
+
+</mapper>
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/BladeTest.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/BladeTest.java
new file mode 100644
index 0000000..c391239
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/BladeTest.java
@@ -0,0 +1,46 @@
+package com.vci.flow.test;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springblade.core.test.BladeBootTest;
+import org.springblade.core.test.BladeSpringExtension;
+import org.springblade.core.tool.utils.StringUtil;
+import com.vci.ubcs.flow.engine.entity.FlowModel;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * Blade鍗曞厓娴嬭瘯
+ *
+ * @author Chill
+ */
+@ExtendWith(BladeSpringExtension.class)
+@BladeBootTest(appName = "blade-flow", enableLoader = true)
+public class BladeTest {
+
+	@Autowired
+	private FlowEngineService service;
+
+	@Test
+	public void contextLoads() {
+		System.out.println("=====鏁版嵁杩佺Щ鍚姩=====");
+
+		// 鑾峰彇 ACT_DE_MODEL 琛ㄩ渶瑕佽浆鎹㈢殑鏁版嵁
+		List<FlowModel> list = service.list();
+		// 寰幆杞崲
+		list.forEach(flowModel -> {
+			if (StringUtil.isBlank(flowModel.getModelEditorXml())) {
+				service.update(Wrappers.<FlowModel>lambdaUpdate()
+					.set(FlowModel::getModelEditorXml, new String(service.getModelEditorXML(flowModel)))
+					.ge(FlowModel::getId, flowModel.getId())
+				);
+			}
+		});
+
+		System.out.println("=====鏁版嵁杩佺Щ瀹屾瘯=====");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java
new file mode 100644
index 0000000..172d3d2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.flow.test.launch;
+
+import com.vci.ubcs.common.constant.LauncherConstant;
+import org.springblade.core.auto.service.AutoService;
+import org.springblade.core.launch.service.LauncherService;
+import org.springblade.core.launch.utils.PropsUtil;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+
+import java.util.Properties;
+
+/**
+ * 鍚姩鍙傛暟鎷撳睍
+ *
+ * @author smallchil
+ */
+@AutoService(LauncherService.class)
+public class LauncherTestServiceImpl implements LauncherService {
+
+	@Override
+	public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) {
+		Properties props = System.getProperties();
+		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
+		PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
+		PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-flow/src/test/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/test/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-flow/src/test/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/test/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-flow/src/test/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/test/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-test.yml
diff --git a/Source/BladeX/blade-ops/blade-flow/src/test/resources/application.yml b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-flow/src/test/resources/application.yml
rename to Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application.yml
diff --git a/Source/BladeX/blade-ops/blade-log/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-log/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-log/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-log/Dockerfile
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/pom.xml b/Source/UBCS/ubcs-ops/ubcs-log/pom.xml
new file mode 100644
index 0000000..8457e14
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-log</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-tenant</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/LogApplication.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/LogApplication.java
new file mode 100644
index 0000000..ce08be0
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/LogApplication.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * 鏃ュ織鏈嶅姟
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class LogApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_LOG_NAME, LogApplication.class, args);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogApiController.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogApiController.java
new file mode 100644
index 0000000..6b54bf4
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogApiController.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.core.log.model.LogApi;
+import com.vci.ubcs.core.log.service.ILogApiService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Map;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/api")
+public class LogApiController {
+
+	private final ILogApiService logService;
+
+	/**
+	 * 鏌ヨ鍗曟潯
+	 */
+	@GetMapping("/detail")
+	public R<LogApi> detail(LogApi log) {
+		return R.data(logService.getOne(Condition.getQueryWrapper(log)));
+	}
+
+	/**
+	 * 鏌ヨ澶氭潯(鍒嗛〉)
+	 */
+	@GetMapping("/list")
+	public R<IPage<LogApi>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
+		IPage<LogApi> pages = logService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(log, LogApi.class));
+		return R.data(pages);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogErrorController.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogErrorController.java
new file mode 100644
index 0000000..9dd38c6
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogErrorController.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.core.log.model.LogError;
+import com.vci.ubcs.core.log.service.ILogErrorService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Map;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/error")
+public class LogErrorController {
+
+	private final ILogErrorService errorLogService;
+
+	/**
+	 * 鏌ヨ鍗曟潯
+	 */
+	@GetMapping("/detail")
+	public R<LogError> detail(LogError logError) {
+		return R.data(errorLogService.getOne(Condition.getQueryWrapper(logError)));
+	}
+
+	/**
+	 * 鏌ヨ澶氭潯(鍒嗛〉)
+	 */
+	@GetMapping("/list")
+	public R<IPage<LogError>> list(@ApiIgnore @RequestParam Map<String, Object> logError, Query query) {
+		IPage<LogError> pages = errorLogService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(logError, LogError.class));
+		return R.data(pages);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogUsualController.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogUsualController.java
new file mode 100644
index 0000000..aa50f15
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogUsualController.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.core.log.model.LogUsual;
+import com.vci.ubcs.core.log.service.ILogUsualService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Map;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/usual")
+public class LogUsualController {
+
+	private final ILogUsualService logService;
+
+	/**
+	 * 鏌ヨ鍗曟潯
+	 */
+	@GetMapping("/detail")
+	public R<LogUsual> detail(LogUsual log) {
+		return R.data(logService.getOne(Condition.getQueryWrapper(log)));
+	}
+
+	/**
+	 * 鏌ヨ澶氭潯(鍒嗛〉)
+	 */
+	@GetMapping("/list")
+	public R<IPage<LogUsual>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
+		IPage<LogUsual> pages = logService.page(Condition.getPage(query), Condition.getQueryWrapper(log, LogUsual.class));
+		return R.data(pages);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/feign/LogClient.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/feign/LogClient.java
new file mode 100644
index 0000000..399c48a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/feign/LogClient.java
@@ -0,0 +1,68 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.feign;
+
+import com.vci.ubcs.core.log.model.LogApi;
+import com.vci.ubcs.core.log.model.LogError;
+import com.vci.ubcs.core.log.model.LogUsual;
+import com.vci.ubcs.core.log.service.ILogApiService;
+import com.vci.ubcs.core.log.service.ILogErrorService;
+import com.vci.ubcs.core.log.service.ILogUsualService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 鏃ュ織鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+public class LogClient implements ILogClient {
+
+	private final ILogUsualService usualLogService;
+
+	private final ILogApiService apiLogService;
+
+	private final ILogErrorService errorLogService;
+
+	@Override
+	@PostMapping(API_PREFIX + "/saveUsualLog")
+	public R<Boolean> saveUsualLog(@RequestBody LogUsual log) {
+		log.setParams(log.getParams().replace("&amp;", "&"));
+		return R.data(usualLogService.save(log));
+	}
+
+	@Override
+	@PostMapping(API_PREFIX + "/saveApiLog")
+	public R<Boolean> saveApiLog(@RequestBody LogApi log) {
+		log.setParams(log.getParams().replace("&amp;", "&"));
+		return R.data(apiLogService.save(log));
+	}
+
+	@Override
+	@PostMapping(API_PREFIX + "/saveErrorLog")
+	public R<Boolean> saveErrorLog(@RequestBody LogError log) {
+		log.setParams(log.getParams().replace("&amp;", "&"));
+		return R.data(errorLogService.save(log));
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogApiMapper.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogApiMapper.java
new file mode 100644
index 0000000..6570b60
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogApiMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.core.log.model.LogApi;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface LogApiMapper extends BaseMapper<LogApi> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogErrorMapper.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogErrorMapper.java
new file mode 100644
index 0000000..1227bea
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogErrorMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.core.log.model.LogError;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface LogErrorMapper extends BaseMapper<LogError> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogUsualMapper.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogUsualMapper.java
new file mode 100644
index 0000000..e9191db
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogUsualMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.core.log.model.LogUsual;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface LogUsualMapper extends BaseMapper<LogUsual> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogApiService.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogApiService.java
new file mode 100644
index 0000000..fa70369
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogApiService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.core.log.model.LogApi;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface ILogApiService extends IService<LogApi> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogErrorService.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogErrorService.java
new file mode 100644
index 0000000..8183b92
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogErrorService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.core.log.model.LogError;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface ILogErrorService extends IService<LogError> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogUsualService.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogUsualService.java
new file mode 100644
index 0000000..67add94
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogUsualService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.core.log.model.LogUsual;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface ILogUsualService extends IService<LogUsual> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogApiServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogApiServiceImpl.java
new file mode 100644
index 0000000..930521e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogApiServiceImpl.java
@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.core.log.mapper.LogApiMapper;
+import com.vci.ubcs.core.log.model.LogApi;
+import com.vci.ubcs.core.log.service.ILogApiService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApi> implements ILogApiService {
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogErrorServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogErrorServiceImpl.java
new file mode 100644
index 0000000..1f397f1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogErrorServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.core.log.mapper.LogErrorMapper;
+import com.vci.ubcs.core.log.model.LogError;
+import com.vci.ubcs.core.log.service.ILogErrorService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class LogErrorServiceImpl extends ServiceImpl<LogErrorMapper, LogError> implements ILogErrorService {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogUsualServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogUsualServiceImpl.java
new file mode 100644
index 0000000..e448085
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogUsualServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.core.log.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.core.log.mapper.LogUsualMapper;
+import com.vci.ubcs.core.log.model.LogUsual;
+import com.vci.ubcs.core.log.service.ILogUsualService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class LogUsualServiceImpl extends ServiceImpl<LogUsualMapper, LogUsual> implements ILogUsualService {
+
+}
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-log/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-log/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogApiMapper.xml b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogApiMapper.xml
new file mode 100644
index 0000000..66c5865
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogApiMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.core.log.mapper.LogApiMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="logResultMap" type="org.springblade.core.log.model.LogApi">
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="service_id" property="serviceId"/>
+        <result column="server_host" property="serverHost"/>
+        <result column="server_ip" property="serverIp"/>
+        <result column="env" property="env"/>
+        <result column="type" property="type"/>
+        <result column="title" property="title"/>
+        <result column="method" property="method"/>
+        <result column="request_uri" property="requestUri"/>
+        <result column="user_agent" property="userAgent"/>
+        <result column="remote_ip" property="remoteIp"/>
+        <result column="method_class" property="methodClass"/>
+        <result column="method_name" property="methodName"/>
+        <result column="params" property="params"/>
+        <result column="time" property="time"/>
+        <result column="create_by" property="createBy"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogErrorMapper.xml b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogErrorMapper.xml
new file mode 100644
index 0000000..a289602
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogErrorMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.core.log.mapper.LogErrorMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="errorLogResultMap" type="org.springblade.core.log.model.LogError">
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="service_id" property="serviceId"/>
+        <result column="server_host" property="serverHost"/>
+        <result column="server_ip" property="serverIp"/>
+        <result column="env" property="env"/>
+        <result column="method" property="method"/>
+        <result column="request_uri" property="requestUri"/>
+        <result column="user_agent" property="userAgent"/>
+        <result column="stack_trace" property="stackTrace"/>
+        <result column="exception_name" property="exceptionName"/>
+        <result column="message" property="message"/>
+        <result column="line_number" property="lineNumber"/>
+        <result column="method_class" property="methodClass"/>
+        <result column="file_name" property="fileName"/>
+        <result column="method_name" property="methodName"/>
+        <result column="params" property="params"/>
+        <result column="create_by" property="createBy"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogUsualMapper.xml b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogUsualMapper.xml
new file mode 100644
index 0000000..e4e5ad9
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogUsualMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.core.log.mapper.LogUsualMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="logResultMap" type="org.springblade.core.log.model.LogUsual">
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="service_id" property="serviceId"/>
+        <result column="server_host" property="serverHost"/>
+        <result column="server_ip" property="serverIp"/>
+        <result column="env" property="env"/>
+        <result column="log_level" property="logLevel"/>
+        <result column="log_data" property="logData"/>
+        <result column="method" property="method"/>
+        <result column="request_uri" property="requestUri"/>
+        <result column="user_agent" property="userAgent"/>
+        <result column="params" property="params"/>
+        <result column="create_by" property="createBy"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/BladeX/blade-ops/blade-report/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-report/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-report/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-report/Dockerfile
diff --git a/Source/UBCS/ubcs-ops/ubcs-report/pom.xml b/Source/UBCS/ubcs-ops/ubcs-report/pom.xml
new file mode 100644
index 0000000..83ff7b9
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-report/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-report</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-tenant</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-report</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/ReportApplication.java b/Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/ReportApplication.java
new file mode 100644
index 0000000..cf6adec
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/ReportApplication.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.report;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * UReport鍚姩鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class ReportApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_REPORT_NAME, ReportApplication.class, args);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/config/BladeReportConfiguration.java b/Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/config/BladeReportConfiguration.java
new file mode 100644
index 0000000..cd043c2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/config/BladeReportConfiguration.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.report.config;
+
+import com.vci.ubcs.core.report.datasource.ReportDataSource;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+
+/**
+ * 鎶ヨ〃閰嶇疆绫�
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnProperty(value = "report.enabled", havingValue = "true", matchIfMissing = true)
+public class BladeReportConfiguration {
+
+	/**
+	 * 鑷畾涔夋姤琛ㄥ彲閫夋暟鎹簮
+	 */
+	@Bean
+	public ReportDataSource reportDataSource(DataSource dataSource) {
+		return new ReportDataSource(dataSource);
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-report/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-report/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-report/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-report/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-report/src/main/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-report/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-test.yml
diff --git a/Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml b/Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml
rename to Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application.yml
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-resource/Dockerfile
new file mode 100644
index 0000000..fb972e5
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/Dockerfile
@@ -0,0 +1,15 @@
+FROM bladex/alpine-java:openjdk8-openj9_cn_slim
+
+MAINTAINER bladejava@qq.com
+
+RUN mkdir -p /blade/Resource
+
+WORKDIR /blade/Resource
+
+EXPOSE 36007
+
+ADD ./target/blade-Resource.jar ./app.jar
+
+ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
+
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/pom.xml b/Source/UBCS/ubcs-ops/ubcs-resource/pom.xml
new file mode 100644
index 0000000..f845521
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/pom.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-resource</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <!--Oss-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-oss</artifactId>
+        </dependency>
+        <!--Sms-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-sms</artifactId>
+        </dependency>
+        <!--MinIO-->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+        </dependency>
+        <!--Alioss-->
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+        </dependency>
+        <!--AliSms-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+        </dependency>
+        <!--鑵捐COS-->
+        <dependency>
+            <groupId>com.qcloud</groupId>
+            <artifactId>cos_api</artifactId>
+        </dependency>
+        <!--鑵捐SMS-->
+        <dependency>
+            <groupId>com.github.qcloudsms</groupId>
+            <artifactId>qcloudsms</artifactId>
+        </dependency>
+        <!--QiNiu-->
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+        </dependency>
+        <!--YunPian-->
+        <dependency>
+            <groupId>com.yunpian.sdk</groupId>
+            <artifactId>yunpian-java-sdk</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-resource-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-dict-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/ResourceApplication.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/ResourceApplication.java
new file mode 100644
index 0000000..0a8b77e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/ResourceApplication.java
@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * 璧勬簮鍚姩鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class ResourceApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_REPORT_NAME, ResourceApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/AliOssBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/AliOssBuilder.java
new file mode 100644
index 0000000..ea9dbda
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/AliOssBuilder.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.oss;
+
+import com.aliyun.oss.ClientConfiguration;
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.common.auth.CredentialsProvider;
+import com.aliyun.oss.common.auth.DefaultCredentialProvider;
+import com.vci.ubcs.resource.entity.Oss;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.AliossTemplate;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+
+/**
+ * 闃块噷浜戝瓨鍌ㄦ瀯寤虹被
+ *
+ * @author Chill
+ */
+public class AliOssBuilder {
+
+	@SneakyThrows
+	public static OssTemplate template(Oss oss, OssRule ossRule) {
+		// 鍒涘缓ClientConfiguration銆侰lientConfiguration鏄疧SSClient鐨勯厤缃被锛屽彲閰嶇疆浠g悊銆佽繛鎺ヨ秴鏃躲�佹渶澶ц繛鎺ユ暟绛夊弬鏁般��
+		ClientConfiguration conf = new ClientConfiguration();
+		// 璁剧疆OSSClient鍏佽鎵撳紑鐨勬渶澶TTP杩炴帴鏁帮紝榛樿涓�1024涓��
+		conf.setMaxConnections(1024);
+		// 璁剧疆Socket灞備紶杈撴暟鎹殑瓒呮椂鏃堕棿锛岄粯璁や负50000姣銆�
+		conf.setSocketTimeout(50000);
+		// 璁剧疆寤虹珛杩炴帴鐨勮秴鏃舵椂闂达紝榛樿涓�50000姣銆�
+		conf.setConnectionTimeout(50000);
+		// 璁剧疆浠庤繛鎺ユ睜涓幏鍙栬繛鎺ョ殑瓒呮椂鏃堕棿锛堝崟浣嶏細姣锛夛紝榛樿涓嶈秴鏃躲��
+		conf.setConnectionRequestTimeout(1000);
+		// 璁剧疆杩炴帴绌洪棽瓒呮椂鏃堕棿銆傝秴鏃跺垯鍏抽棴杩炴帴锛岄粯璁や负60000姣銆�
+		conf.setIdleConnectionTime(60000);
+		// 璁剧疆澶辫触璇锋眰閲嶈瘯娆℃暟锛岄粯璁や负3娆°��
+		conf.setMaxErrorRetry(5);
+		OssProperties ossProperties = new OssProperties();
+		ossProperties.setEndpoint(oss.getEndpoint());
+		ossProperties.setAccessKey(oss.getAccessKey());
+		ossProperties.setSecretKey(oss.getSecretKey());
+		ossProperties.setBucketName(oss.getBucketName());
+		CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ossProperties.getAccessKey(), ossProperties.getSecretKey());
+		OSSClient ossClient = new OSSClient(ossProperties.getEndpoint(), credentialsProvider, conf);
+		return new AliossTemplate(ossClient, ossProperties, ossRule);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/MinioOssBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/MinioOssBuilder.java
new file mode 100644
index 0000000..45a18f3
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/MinioOssBuilder.java
@@ -0,0 +1,48 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.oss;
+
+import com.vci.ubcs.resource.entity.Oss;
+import io.minio.MinioClient;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.MinioTemplate;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+
+/**
+ * Minio浜戝瓨鍌ㄦ瀯寤虹被
+ *
+ * @author Chill
+ */
+public class MinioOssBuilder {
+
+	@SneakyThrows
+	public static OssTemplate template(Oss oss, OssRule ossRule) {
+		MinioClient minioClient = MinioClient.builder()
+			.endpoint(oss.getEndpoint())
+			.credentials(oss.getAccessKey(), oss.getSecretKey())
+			.build();
+		OssProperties ossProperties = new OssProperties();
+		ossProperties.setEndpoint(oss.getEndpoint());
+		ossProperties.setAccessKey(oss.getAccessKey());
+		ossProperties.setSecretKey(oss.getSecretKey());
+		ossProperties.setBucketName(oss.getBucketName());
+		return new MinioTemplate(minioClient, ossRule, ossProperties);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/OssBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/OssBuilder.java
new file mode 100644
index 0000000..c882801
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/OssBuilder.java
@@ -0,0 +1,160 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.oss;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.resource.entity.Oss;
+import com.vci.ubcs.resource.service.IOssService;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.enums.OssEnum;
+import org.springblade.core.oss.enums.OssStatusEnum;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.BladeOssRule;
+import org.springblade.core.oss.rule.OssRule;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.core.tool.utils.WebUtil;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
+
+/**
+ * Oss浜戝瓨鍌ㄧ粺涓�鏋勫缓绫�
+ *
+ * @author Chill
+ */
+public class OssBuilder {
+
+	public static final String OSS_CODE = "oss:code:";
+	public static final String OSS_PARAM_KEY = "code";
+
+	private final OssProperties ossProperties;
+	private final IOssService ossService;
+
+	public OssBuilder(OssProperties ossProperties, IOssService ossService) {
+		this.ossProperties = ossProperties;
+		this.ossService = ossService;
+	}
+
+	/**
+	 * OssTemplate閰嶇疆缂撳瓨姹�
+	 */
+	private final Map<String, OssTemplate> templatePool = new ConcurrentHashMap<>();
+
+	/**
+	 * oss閰嶇疆缂撳瓨姹�
+	 */
+	private final Map<String, Oss> ossPool = new ConcurrentHashMap<>();
+
+	/**
+	 * 鑾峰彇template
+	 *
+	 * @return OssTemplate
+	 */
+	public OssTemplate template() {
+		return template(StringPool.EMPTY);
+	}
+
+	/**
+	 * 鑾峰彇template
+	 *
+	 * @param code 璧勬簮缂栧彿
+	 * @return OssTemplate
+	 */
+	public OssTemplate template(String code) {
+		String tenantId = AuthUtil.getTenantId();
+		Oss oss = getOss(tenantId, code);
+		Oss ossCached = ossPool.get(tenantId);
+		OssTemplate template = templatePool.get(tenantId);
+		// 鑻ヤ负绌烘垨鑰呬笉涓�鑷达紝鍒欓噸鏂板姞杞�
+		if (Func.hasEmpty(template, ossCached) || !oss.getEndpoint().equals(ossCached.getEndpoint()) || !oss.getAccessKey().equals(ossCached.getAccessKey())) {
+			synchronized (OssBuilder.class) {
+				template = templatePool.get(tenantId);
+				if (Func.hasEmpty(template, ossCached) || !oss.getEndpoint().equals(ossCached.getEndpoint()) || !oss.getAccessKey().equals(ossCached.getAccessKey())) {
+					OssRule ossRule;
+					// 鑻ラ噰鐢ㄩ粯璁よ缃垯寮�鍚绉熸埛妯″紡, 鑻ユ槸鐢ㄦ埛鑷畾涔塷ss鍒欎笉寮�鍚�
+					if (oss.getEndpoint().equals(ossProperties.getEndpoint()) && oss.getAccessKey().equals(ossProperties.getAccessKey()) && ossProperties.getTenantMode()) {
+						ossRule = new BladeOssRule(Boolean.TRUE);
+					} else {
+						ossRule = new BladeOssRule(Boolean.FALSE);
+					}
+					if (oss.getCategory() == OssEnum.MINIO.getCategory()) {
+						template = MinioOssBuilder.template(oss, ossRule);
+					} else if (oss.getCategory() == OssEnum.QINIU.getCategory()) {
+						template = QiniuOssBuilder.template(oss, ossRule);
+					} else if (oss.getCategory() == OssEnum.ALI.getCategory()) {
+						template = AliOssBuilder.template(oss, ossRule);
+					} else if (oss.getCategory() == OssEnum.TENCENT.getCategory()) {
+						template = TencentOssBuilder.template(oss, ossRule);
+					}
+					templatePool.put(tenantId, template);
+					ossPool.put(tenantId, oss);
+				}
+			}
+		}
+		return template;
+	}
+
+	/**
+	 * 鑾峰彇瀵硅薄瀛樺偍瀹炰綋
+	 *
+	 * @param tenantId 绉熸埛ID
+	 * @return Oss
+	 */
+	public Oss getOss(String tenantId, String code) {
+		String key = tenantId;
+		LambdaQueryWrapper<Oss> lqw = Wrappers.<Oss>query().lambda().eq(Oss::getTenantId, tenantId);
+		// 鑾峰彇浼犲弬鐨勮祫婧愮紪鍙峰苟鏌ヨ锛岃嫢鏈夊垯杩斿洖锛岃嫢娌℃湁鍒欒皟鍚敤鐨勯厤缃�
+		String ossCode = StringUtil.isBlank(code) ? WebUtil.getParameter(OSS_PARAM_KEY) : code;
+		if (StringUtil.isNotBlank(ossCode)) {
+			key = key.concat(StringPool.DASH).concat(ossCode);
+			lqw.eq(Oss::getOssCode, ossCode);
+		} else {
+			lqw.eq(Oss::getStatus, OssStatusEnum.ENABLE.getNum());
+		}
+		Oss oss = CacheUtil.get(RESOURCE_CACHE, OSS_CODE, key, () -> {
+			Oss o = ossService.getOne(lqw);
+			// 鑻ヤ负绌哄垯璋冪敤榛樿閰嶇疆
+			if ((Func.isEmpty(o))) {
+				Oss defaultOss = new Oss();
+				defaultOss.setId(0L);
+				defaultOss.setCategory(OssEnum.of(ossProperties.getName()).getCategory());
+				defaultOss.setEndpoint(ossProperties.getEndpoint());
+				defaultOss.setBucketName(ossProperties.getBucketName());
+				defaultOss.setAccessKey(ossProperties.getAccessKey());
+				defaultOss.setSecretKey(ossProperties.getSecretKey());
+				return defaultOss;
+			} else {
+				return o;
+			}
+		});
+		if (oss == null || oss.getId() == null) {
+			throw new ServiceException("鏈幏鍙栧埌瀵瑰簲鐨勫璞″瓨鍌ㄩ厤缃�");
+		} else {
+			return oss;
+		}
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/QiniuOssBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/QiniuOssBuilder.java
new file mode 100644
index 0000000..d0c6614
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/QiniuOssBuilder.java
@@ -0,0 +1,52 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.oss;
+
+import com.qiniu.storage.BucketManager;
+import com.qiniu.storage.Configuration;
+import com.qiniu.storage.Region;
+import com.qiniu.storage.UploadManager;
+import com.qiniu.util.Auth;
+import com.vci.ubcs.resource.entity.Oss;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.QiniuTemplate;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+
+/**
+ * 涓冪墰浜戝瓨鍌ㄦ瀯寤虹被
+ *
+ * @author Chill
+ */
+public class QiniuOssBuilder {
+
+	@SneakyThrows
+	public static OssTemplate template(Oss oss, OssRule ossRule) {
+		Configuration cfg = new Configuration(Region.autoRegion());
+		Auth auth = Auth.create(oss.getAccessKey(), oss.getSecretKey());
+		UploadManager uploadManager = new UploadManager(cfg);
+		BucketManager bucketManager = new BucketManager(auth, cfg);
+		OssProperties ossProperties = new OssProperties();
+		ossProperties.setEndpoint(oss.getEndpoint());
+		ossProperties.setAccessKey(oss.getAccessKey());
+		ossProperties.setSecretKey(oss.getSecretKey());
+		ossProperties.setBucketName(oss.getBucketName());
+		return new QiniuTemplate(auth, uploadManager, bucketManager, ossProperties, ossRule);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/TencentOssBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/TencentOssBuilder.java
new file mode 100644
index 0000000..d502b26
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/TencentOssBuilder.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.oss;
+
+import com.qcloud.cos.COSClient;
+import com.qcloud.cos.ClientConfig;
+import com.qcloud.cos.auth.BasicCOSCredentials;
+import com.qcloud.cos.auth.COSCredentials;
+import com.qcloud.cos.region.Region;
+import com.vci.ubcs.resource.entity.Oss;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+import org.springblade.core.oss.TencentCosTemplate;
+
+/**
+ * 鑵捐浜戝瓨鍌ㄦ瀯寤虹被
+ *
+ * @author Chill
+ */
+public class TencentOssBuilder {
+
+	@SneakyThrows
+	public static OssTemplate template(Oss oss, OssRule ossRule) {
+		// 鍒涘缓閰嶇疆绫�
+		OssProperties ossProperties = new OssProperties();
+		ossProperties.setEndpoint(oss.getEndpoint());
+		ossProperties.setAccessKey(oss.getAccessKey());
+		ossProperties.setSecretKey(oss.getSecretKey());
+		ossProperties.setBucketName(oss.getBucketName());
+		ossProperties.setAppId(oss.getAppId());
+		ossProperties.setRegion(oss.getRegion());
+		// 鍒濆鍖栫敤鎴疯韩浠戒俊鎭紙secretId, secretKey锛�
+		COSCredentials credentials = new BasicCOSCredentials(ossProperties.getAccessKey(), ossProperties.getSecretKey());
+		// 璁剧疆 bucket 鐨勫尯鍩�, COS 鍦板煙鐨勭畝绉拌鍙傜収 https://cloud.tencent.com/document/product/436/6224
+		Region region = new Region(ossProperties.getRegion());
+		// clientConfig 涓寘鍚簡璁剧疆 region, https(榛樿 http), 瓒呮椂, 浠g悊绛� set 鏂规硶, 浣跨敤鍙弬瑙佹簮鐮佹垨鑰呭父瑙侀棶棰� Java SDK 閮ㄥ垎銆�
+		ClientConfig clientConfig = new ClientConfig(region);
+		// 璁剧疆OSSClient鍏佽鎵撳紑鐨勬渶澶TTP杩炴帴鏁帮紝榛樿涓�1024涓��
+		clientConfig.setMaxConnectionsCount(1024);
+		// 璁剧疆Socket灞備紶杈撴暟鎹殑瓒呮椂鏃堕棿锛岄粯璁や负50000姣銆�
+		clientConfig.setSocketTimeout(50000);
+		// 璁剧疆寤虹珛杩炴帴鐨勮秴鏃舵椂闂达紝榛樿涓�50000姣銆�
+		clientConfig.setConnectionTimeout(50000);
+		// 璁剧疆浠庤繛鎺ユ睜涓幏鍙栬繛鎺ョ殑瓒呮椂鏃堕棿锛堝崟浣嶏細姣锛夛紝榛樿涓嶈秴鏃躲��
+		clientConfig.setConnectionRequestTimeout(1000);
+		COSClient cosClient = new COSClient(credentials, clientConfig);
+		return new TencentCosTemplate(cosClient, ossProperties, ossRule);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/AliSmsBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/AliSmsBuilder.java
new file mode 100644
index 0000000..d1d0940
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/AliSmsBuilder.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.sms;
+
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.profile.DefaultProfile;
+import com.aliyuncs.profile.IClientProfile;
+import com.vci.ubcs.resource.entity.Sms;
+import lombok.SneakyThrows;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.sms.SmsTemplate;
+import org.springblade.core.sms.AliSmsTemplate;
+import org.springblade.core.sms.props.SmsProperties;
+
+/**
+ * 闃块噷浜戠煭淇℃瀯寤虹被
+ *
+ * @author Chill
+ */
+public class AliSmsBuilder {
+
+	@SneakyThrows
+	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
+		SmsProperties smsProperties = new SmsProperties();
+		smsProperties.setTemplateId(sms.getTemplateId());
+		smsProperties.setAccessKey(sms.getAccessKey());
+		smsProperties.setSecretKey(sms.getSecretKey());
+		smsProperties.setRegionId(sms.getRegionId());
+		smsProperties.setSignName(sms.getSignName());
+		IClientProfile profile = DefaultProfile.getProfile(smsProperties.getRegionId(), smsProperties.getAccessKey(), smsProperties.getSecretKey());
+		IAcsClient acsClient = new DefaultAcsClient(profile);
+		return new AliSmsTemplate(smsProperties, acsClient, bladeRedis);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/QiniuSmsBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/QiniuSmsBuilder.java
new file mode 100644
index 0000000..c0c88c3
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/QiniuSmsBuilder.java
@@ -0,0 +1,47 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.sms;
+
+import com.qiniu.sms.SmsManager;
+import com.qiniu.util.Auth;
+import com.vci.ubcs.resource.entity.Sms;
+import lombok.SneakyThrows;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.sms.SmsTemplate;
+import org.springblade.core.sms.props.SmsProperties;
+import org.springblade.core.sms.QiniuSmsTemplate;
+
+/**
+ * 涓冪墰浜戠煭淇℃瀯寤虹被
+ *
+ * @author Chill
+ */
+public class QiniuSmsBuilder {
+
+	@SneakyThrows
+	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
+		SmsProperties smsProperties = new SmsProperties();
+		smsProperties.setTemplateId(sms.getTemplateId());
+		smsProperties.setAccessKey(sms.getAccessKey());
+		smsProperties.setSecretKey(sms.getSecretKey());
+		smsProperties.setSignName(sms.getSignName());
+		Auth auth = Auth.create(smsProperties.getAccessKey(), smsProperties.getSecretKey());
+		SmsManager smsManager = new SmsManager(auth);
+		return new QiniuSmsTemplate(smsProperties, smsManager, bladeRedis);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/SmsBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/SmsBuilder.java
new file mode 100644
index 0000000..3e67761
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/SmsBuilder.java
@@ -0,0 +1,157 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.sms;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.resource.entity.Sms;
+import com.vci.ubcs.resource.service.ISmsService;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.sms.SmsTemplate;
+import org.springblade.core.sms.enums.SmsEnum;
+import org.springblade.core.sms.enums.SmsStatusEnum;
+import org.springblade.core.sms.props.SmsProperties;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.core.tool.utils.WebUtil;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
+
+/**
+ * Sms鐭俊鏈嶅姟缁熶竴鏋勫缓绫�
+ *
+ * @author Chill
+ */
+public class SmsBuilder {
+
+	public static final String SMS_CODE = "sms:code:";
+	public static final String SMS_PARAM_KEY = "code";
+
+	private final SmsProperties smsProperties;
+	private final ISmsService smsService;
+	private final BladeRedis bladeRedis;
+
+
+	public SmsBuilder(SmsProperties smsProperties, ISmsService smsService, BladeRedis bladeRedis) {
+		this.smsProperties = smsProperties;
+		this.smsService = smsService;
+		this.bladeRedis = bladeRedis;
+	}
+
+	/**
+	 * SmsTemplate閰嶇疆缂撳瓨姹�
+	 */
+	private final Map<String, SmsTemplate> templatePool = new ConcurrentHashMap<>();
+
+	/**
+	 * Sms閰嶇疆缂撳瓨姹�
+	 */
+	private final Map<String, Sms> smsPool = new ConcurrentHashMap<>();
+
+
+	/**
+	 * 鑾峰彇template
+	 *
+	 * @return SmsTemplate
+	 */
+	public SmsTemplate template() {
+		return template(StringPool.EMPTY);
+	}
+
+	/**
+	 * 鑾峰彇template
+	 *
+	 * @param code 璧勬簮缂栧彿
+	 * @return SmsTemplate
+	 */
+	public SmsTemplate template(String code) {
+		String tenantId = AuthUtil.getTenantId();
+		Sms sms = getSms(tenantId, code);
+		Sms smsCached = smsPool.get(tenantId);
+		SmsTemplate template = templatePool.get(tenantId);
+		// 鑻ヤ负绌烘垨鑰呬笉涓�鑷达紝鍒欓噸鏂板姞杞�
+		if (Func.hasEmpty(template, smsCached) || !sms.getTemplateId().equals(smsCached.getTemplateId()) || !sms.getAccessKey().equals(smsCached.getAccessKey())) {
+			synchronized (SmsBuilder.class) {
+				template = templatePool.get(tenantId);
+				if (Func.hasEmpty(template, smsCached) || !sms.getTemplateId().equals(smsCached.getTemplateId()) || !sms.getAccessKey().equals(smsCached.getAccessKey())) {
+					if (sms.getCategory() == SmsEnum.YUNPIAN.getCategory()) {
+						template = YunpianSmsBuilder.template(sms, bladeRedis);
+					} else if (sms.getCategory() == SmsEnum.QINIU.getCategory()) {
+						template = QiniuSmsBuilder.template(sms, bladeRedis);
+					} else if (sms.getCategory() == SmsEnum.ALI.getCategory()) {
+						template = AliSmsBuilder.template(sms, bladeRedis);
+					} else if (sms.getCategory() == SmsEnum.TENCENT.getCategory()) {
+						template = TencentSmsBuilder.template(sms, bladeRedis);
+					}
+					templatePool.put(tenantId, template);
+					smsPool.put(tenantId, sms);
+				}
+			}
+		}
+		return template;
+	}
+
+
+	/**
+	 * 鑾峰彇鐭俊瀹炰綋
+	 *
+	 * @param tenantId 绉熸埛ID
+	 * @return Sms
+	 */
+	public Sms getSms(String tenantId, String code) {
+		String key = tenantId;
+		LambdaQueryWrapper<Sms> lqw = Wrappers.<Sms>query().lambda().eq(Sms::getTenantId, tenantId);
+		// 鑾峰彇浼犲弬鐨勮祫婧愮紪鍙峰苟鏌ヨ锛岃嫢鏈夊垯杩斿洖锛岃嫢娌℃湁鍒欒皟鍚敤鐨勯厤缃�
+		String smsCode = StringUtil.isBlank(code) ? WebUtil.getParameter(SMS_PARAM_KEY) : code;
+		if (StringUtil.isNotBlank(smsCode)) {
+			key = key.concat(StringPool.DASH).concat(smsCode);
+			lqw.eq(Sms::getSmsCode, smsCode);
+		} else {
+			lqw.eq(Sms::getStatus, SmsStatusEnum.ENABLE.getNum());
+		}
+		Sms sms = CacheUtil.get(RESOURCE_CACHE, SMS_CODE, key, () -> {
+			Sms s = smsService.getOne(lqw);
+			// 鑻ヤ负绌哄垯璋冪敤榛樿閰嶇疆
+			if ((Func.isEmpty(s))) {
+				Sms defaultSms = new Sms();
+				defaultSms.setId(0L);
+				defaultSms.setTemplateId(smsProperties.getTemplateId());
+				defaultSms.setRegionId(smsProperties.getRegionId());
+				defaultSms.setCategory(SmsEnum.of(smsProperties.getName()).getCategory());
+				defaultSms.setAccessKey(smsProperties.getAccessKey());
+				defaultSms.setSecretKey(smsProperties.getSecretKey());
+				defaultSms.setSignName(smsProperties.getSignName());
+				return defaultSms;
+			} else {
+				return s;
+			}
+		});
+		if (sms == null || sms.getId() == null) {
+			throw new ServiceException("鏈幏鍙栧埌瀵瑰簲鐨勭煭淇¢厤缃�");
+		} else {
+			return sms;
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/TencentSmsBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/TencentSmsBuilder.java
new file mode 100644
index 0000000..0c0fe68
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/TencentSmsBuilder.java
@@ -0,0 +1,46 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.sms;
+
+import com.github.qcloudsms.SmsMultiSender;
+import com.vci.ubcs.resource.entity.Sms;
+import lombok.SneakyThrows;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.sms.SmsTemplate;
+import org.springblade.core.sms.props.SmsProperties;
+import org.springblade.core.sms.TencentSmsTemplate;
+import org.springblade.core.tool.utils.Func;
+
+/**
+ * 鑵捐浜戠煭淇℃瀯寤虹被
+ *
+ * @author Chill
+ */
+public class TencentSmsBuilder {
+
+	@SneakyThrows
+	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
+		SmsProperties smsProperties = new SmsProperties();
+		smsProperties.setTemplateId(sms.getTemplateId());
+		smsProperties.setAccessKey(sms.getAccessKey());
+		smsProperties.setSecretKey(sms.getSecretKey());
+		smsProperties.setSignName(sms.getSignName());
+		SmsMultiSender smsSender = new SmsMultiSender(Func.toInt(smsProperties.getAccessKey()), sms.getSecretKey());
+		return new TencentSmsTemplate(smsProperties, smsSender, bladeRedis);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/YunpianSmsBuilder.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/YunpianSmsBuilder.java
new file mode 100644
index 0000000..ab6843e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/YunpianSmsBuilder.java
@@ -0,0 +1,44 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.builder.sms;
+
+import com.vci.ubcs.resource.entity.Sms;
+import com.yunpian.sdk.YunpianClient;
+import lombok.SneakyThrows;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.sms.SmsTemplate;
+import org.springblade.core.sms.props.SmsProperties;
+import org.springblade.core.sms.YunpianSmsTemplate;
+
+/**
+ * 浜戠墖鐭俊鏋勫缓绫�
+ *
+ * @author Chill
+ */
+public class YunpianSmsBuilder {
+
+	@SneakyThrows
+	public static SmsTemplate template(Sms sms, BladeRedis bladeRedis) {
+		SmsProperties smsProperties = new SmsProperties();
+		smsProperties.setTemplateId(sms.getTemplateId());
+		smsProperties.setAccessKey(sms.getAccessKey());
+		smsProperties.setSignName(sms.getSignName());
+		YunpianClient client = new YunpianClient(smsProperties.getAccessKey()).init();
+		return new YunpianSmsTemplate(smsProperties, client, bladeRedis);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeOssConfiguration.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeOssConfiguration.java
new file mode 100644
index 0000000..b1b63f9
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeOssConfiguration.java
@@ -0,0 +1,44 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.config;
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.oss.props.OssProperties;
+import com.vci.ubcs.resource.builder.oss.OssBuilder;
+import com.vci.ubcs.resource.service.IOssService;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Oss閰嶇疆绫�
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+public class BladeOssConfiguration {
+
+	private final OssProperties ossProperties;
+
+	private final IOssService ossService;
+
+	@Bean
+	public OssBuilder ossBuilder() {
+		return new OssBuilder(ossProperties, ossService);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeSmsConfiguration.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeSmsConfiguration.java
new file mode 100644
index 0000000..009421f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeSmsConfiguration.java
@@ -0,0 +1,47 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.config;
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.sms.props.SmsProperties;
+import com.vci.ubcs.resource.builder.sms.SmsBuilder;
+import com.vci.ubcs.resource.service.ISmsService;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Sms閰嶇疆绫�
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+public class BladeSmsConfiguration {
+
+	private final SmsProperties smsProperties;
+
+	private final ISmsService smsService;
+
+	private final BladeRedis bladeRedis;
+
+	@Bean
+	public SmsBuilder smsBuilder() {
+		return new SmsBuilder(smsProperties, smsService, bladeRedis);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/AttachController.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/AttachController.java
new file mode 100644
index 0000000..3a04595
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/AttachController.java
@@ -0,0 +1,127 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.resource.entity.Attach;
+import com.vci.ubcs.resource.service.IAttachService;
+import com.vci.ubcs.resource.vo.AttachVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 闄勪欢琛� 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/attach")
+@Api(value = "闄勪欢", tags = "闄勪欢")
+public class AttachController extends BladeController {
+
+	private final IAttachService attachService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆attach")
+	public R<Attach> detail(Attach attach) {
+		Attach detail = attachService.getOne(Condition.getQueryWrapper(attach));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉 闄勪欢琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆attach")
+	public R<IPage<Attach>> list(Attach attach, Query query) {
+		IPage<Attach> pages = attachService.page(Condition.getPage(query), Condition.getQueryWrapper(attach));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鑷畾涔夊垎椤� 闄勪欢琛�
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆attach")
+	public R<IPage<AttachVO>> page(AttachVO attach, Query query) {
+		IPage<AttachVO> pages = attachService.selectAttachPage(Condition.getPage(query), attach);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 闄勪欢琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆attach")
+	public R save(@Valid @RequestBody Attach attach) {
+		return R.status(attachService.save(attach));
+	}
+
+	/**
+	 * 淇敼 闄勪欢琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆attach")
+	public R update(@Valid @RequestBody Attach attach) {
+		return R.status(attachService.updateById(attach));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 闄勪欢琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆attach")
+	public R submit(@Valid @RequestBody Attach attach) {
+		return R.status(attachService.saveOrUpdate(attach));
+	}
+
+
+	/**
+	 * 鍒犻櫎 闄勪欢琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(attachService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/OssController.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/OssController.java
new file mode 100644
index 0000000..fd01d58
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/OssController.java
@@ -0,0 +1,149 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.resource.entity.Oss;
+import com.vci.ubcs.resource.service.IOssService;
+import com.vci.ubcs.resource.vo.OssVO;
+import com.vci.ubcs.resource.wrapper.OssWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+
+import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author BladeX
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+@RequestMapping("/oss")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+@Api(value = "瀵硅薄瀛樺偍鎺ュ彛", tags = "瀵硅薄瀛樺偍鎺ュ彛")
+public class OssController extends BladeController {
+
+	private final IOssService ossService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆oss")
+	public R<OssVO> detail(Oss oss) {
+		Oss detail = ossService.getOne(Condition.getQueryWrapper(oss));
+		return R.data(OssWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆oss")
+	public R<IPage<OssVO>> list(Oss oss, Query query) {
+		IPage<Oss> pages = ossService.page(Condition.getPage(query), Condition.getQueryWrapper(oss));
+		return R.data(OssWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆oss")
+	public R<IPage<OssVO>> page(OssVO oss, Query query) {
+		IPage<OssVO> pages = ossService.selectOssPage(Condition.getPage(query), oss);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆oss")
+	public R save(@Valid @RequestBody Oss oss) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(ossService.save(oss));
+	}
+
+	/**
+	 * 淇敼
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆oss")
+	public R update(@Valid @RequestBody Oss oss) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(ossService.updateById(oss));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆oss")
+	public R submit(@Valid @RequestBody Oss oss) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(ossService.submit(oss));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(ossService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+	/**
+	 * 鍚敤
+	 */
+	@PostMapping("/enable")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "閰嶇疆鍚敤", notes = "浼犲叆id")
+	public R enable(@ApiParam(value = "涓婚敭", required = true) @RequestParam Long id) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(ossService.enable(id));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/SmsController.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/SmsController.java
new file mode 100644
index 0000000..69a26fc
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/SmsController.java
@@ -0,0 +1,150 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.resource.entity.Sms;
+import com.vci.ubcs.resource.service.ISmsService;
+import com.vci.ubcs.resource.vo.SmsVO;
+import com.vci.ubcs.resource.wrapper.SmsWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+
+import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE;
+
+/**
+ * 鐭俊閰嶇疆琛� 鎺у埗鍣�
+ *
+ * @author BladeX
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+@RequestMapping("/sms")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+@Api(value = "鐭俊閰嶇疆琛�", tags = "鐭俊閰嶇疆琛ㄦ帴鍙�")
+public class SmsController extends BladeController {
+
+	private final ISmsService smsService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆sms")
+	public R<SmsVO> detail(Sms sms) {
+		Sms detail = smsService.getOne(Condition.getQueryWrapper(sms));
+		return R.data(SmsWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒嗛〉 鐭俊閰嶇疆琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆sms")
+	public R<IPage<SmsVO>> list(Sms sms, Query query) {
+		IPage<Sms> pages = smsService.page(Condition.getPage(query), Condition.getQueryWrapper(sms));
+		return R.data(SmsWrapper.build().pageVO(pages));
+	}
+
+
+	/**
+	 * 鑷畾涔夊垎椤� 鐭俊閰嶇疆琛�
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆sms")
+	public R<IPage<SmsVO>> page(SmsVO sms, Query query) {
+		IPage<SmsVO> pages = smsService.selectSmsPage(Condition.getPage(query), sms);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 鐭俊閰嶇疆琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆sms")
+	public R save(@Valid @RequestBody Sms sms) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(smsService.save(sms));
+	}
+
+	/**
+	 * 淇敼 鐭俊閰嶇疆琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆sms")
+	public R update(@Valid @RequestBody Sms sms) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(smsService.updateById(sms));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 鐭俊閰嶇疆琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆sms")
+	public R submit(@Valid @RequestBody Sms sms) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(smsService.submit(sms));
+	}
+
+
+	/**
+	 * 鍒犻櫎 鐭俊閰嶇疆琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(smsService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 鍚敤
+	 */
+	@PostMapping("/enable")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "閰嶇疆鍚敤", notes = "浼犲叆id")
+	public R enable(@ApiParam(value = "涓婚敭", required = true) @RequestParam Long id) {
+		CacheUtil.clear(RESOURCE_CACHE);
+		return R.status(smsService.enable(id));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/OssEndpoint.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/OssEndpoint.java
new file mode 100644
index 0000000..9252704
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/OssEndpoint.java
@@ -0,0 +1,244 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.endpoint;
+
+import com.vci.ubcs.resource.entity.Attach;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.oss.model.OssFile;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.FileUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.resource.builder.oss.OssBuilder;
+import com.vci.ubcs.resource.service.IAttachService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 瀵硅薄瀛樺偍绔偣
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/oss/endpoint")
+@Api(value = "瀵硅薄瀛樺偍绔偣", tags = "瀵硅薄瀛樺偍绔偣")
+public class OssEndpoint {
+
+	/**
+	 * 瀵硅薄瀛樺偍鏋勫缓绫�
+	 */
+	private final OssBuilder ossBuilder;
+
+	/**
+	 * 闄勪欢琛ㄦ湇鍔�
+	 */
+	private final IAttachService attachService;
+
+	/**
+	 * 鍒涘缓瀛樺偍妗�
+	 *
+	 * @param bucketName 瀛樺偍妗跺悕绉�
+	 * @return Bucket
+	 */
+	@SneakyThrows
+	@PostMapping("/make-bucket")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R makeBucket(@RequestParam String bucketName) {
+		ossBuilder.template().makeBucket(bucketName);
+		return R.success("鍒涘缓鎴愬姛");
+	}
+
+	/**
+	 * 鍒涘缓瀛樺偍妗�
+	 *
+	 * @param bucketName 瀛樺偍妗跺悕绉�
+	 * @return R
+	 */
+	@SneakyThrows
+	@PostMapping("/remove-bucket")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R removeBucket(@RequestParam String bucketName) {
+		ossBuilder.template().removeBucket(bucketName);
+		return R.success("鍒犻櫎鎴愬姛");
+	}
+
+	/**
+	 * 鎷疯礉鏂囦欢
+	 *
+	 * @param fileName       瀛樺偍妗跺璞″悕绉�
+	 * @param destBucketName 鐩爣瀛樺偍妗跺悕绉�
+	 * @param destFileName   鐩爣瀛樺偍妗跺璞″悕绉�
+	 * @return R
+	 */
+	@SneakyThrows
+	@PostMapping("/copy-file")
+	public R copyFile(@RequestParam String fileName, @RequestParam String destBucketName, String destFileName) {
+		ossBuilder.template().copyFile(fileName, destBucketName, destFileName);
+		return R.success("鎿嶄綔鎴愬姛");
+	}
+
+	/**
+	 * 鑾峰彇鏂囦欢淇℃伅
+	 *
+	 * @param fileName 瀛樺偍妗跺璞″悕绉�
+	 * @return InputStream
+	 */
+	@SneakyThrows
+	@GetMapping("/stat-file")
+	public R<OssFile> statFile(@RequestParam String fileName) {
+		return R.data(ossBuilder.template().statFile(fileName));
+	}
+
+	/**
+	 * 鑾峰彇鏂囦欢鐩稿璺緞
+	 *
+	 * @param fileName 瀛樺偍妗跺璞″悕绉�
+	 * @return String
+	 */
+	@SneakyThrows
+	@GetMapping("/file-path")
+	public R<String> filePath(@RequestParam String fileName) {
+		return R.data(ossBuilder.template().filePath(fileName));
+	}
+
+
+	/**
+	 * 鑾峰彇鏂囦欢澶栭摼
+	 *
+	 * @param fileName 瀛樺偍妗跺璞″悕绉�
+	 * @return String
+	 */
+	@SneakyThrows
+	@GetMapping("/file-link")
+	public R<String> fileLink(@RequestParam String fileName) {
+		return R.data(ossBuilder.template().fileLink(fileName));
+	}
+
+	/**
+	 * 涓婁紶鏂囦欢
+	 *
+	 * @param file 鏂囦欢
+	 * @return ObjectStat
+	 */
+	@SneakyThrows
+	@PostMapping("/put-file")
+	public R<BladeFile> putFile(@RequestParam MultipartFile file) {
+		BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(), file.getInputStream());
+		return R.data(bladeFile);
+	}
+
+	/**
+	 * 涓婁紶鏂囦欢
+	 *
+	 * @param fileName 瀛樺偍妗跺璞″悕绉�
+	 * @param file     鏂囦欢
+	 * @return ObjectStat
+	 */
+	@SneakyThrows
+	@PostMapping("/put-file-by-name")
+	public R<BladeFile> putFile(@RequestParam String fileName, @RequestParam MultipartFile file) {
+		BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
+		return R.data(bladeFile);
+	}
+
+	/**
+	 * 涓婁紶鏂囦欢骞朵繚瀛樿嚦闄勪欢琛�
+	 *
+	 * @param file 鏂囦欢
+	 * @return ObjectStat
+	 */
+	@SneakyThrows
+	@PostMapping("/put-file-attach")
+	public R<BladeFile> putFileAttach(@RequestParam MultipartFile file) {
+		String fileName = file.getOriginalFilename();
+		BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
+		Long attachId = buildAttach(fileName, file.getSize(), bladeFile);
+		bladeFile.setAttachId(attachId);
+		return R.data(bladeFile);
+	}
+
+	/**
+	 * 涓婁紶鏂囦欢骞朵繚瀛樿嚦闄勪欢琛�
+	 *
+	 * @param fileName 瀛樺偍妗跺璞″悕绉�
+	 * @param file     鏂囦欢
+	 * @return ObjectStat
+	 */
+	@SneakyThrows
+	@PostMapping("/put-file-attach-by-name")
+	public R<BladeFile> putFileAttach(@RequestParam String fileName, @RequestParam MultipartFile file) {
+		BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
+		Long attachId = buildAttach(fileName, file.getSize(), bladeFile);
+		bladeFile.setAttachId(attachId);
+		return R.data(bladeFile);
+	}
+
+	/**
+	 * 鏋勫缓闄勪欢琛�
+	 *
+	 * @param fileName  鏂囦欢鍚�
+	 * @param fileSize  鏂囦欢澶у皬
+	 * @param bladeFile 瀵硅薄瀛樺偍鏂囦欢
+	 * @return attachId
+	 */
+	private Long buildAttach(String fileName, Long fileSize, BladeFile bladeFile) {
+		String fileExtension = FileUtil.getFileExtension(fileName);
+		Attach attach = new Attach();
+		attach.setDomainUrl(bladeFile.getDomain());
+		attach.setLink(bladeFile.getLink());
+		attach.setName(bladeFile.getName());
+		attach.setOriginalName(bladeFile.getOriginalName());
+		attach.setAttachSize(fileSize);
+		attach.setExtension(fileExtension);
+		attachService.save(attach);
+		return attach.getId();
+	}
+
+	/**
+	 * 鍒犻櫎鏂囦欢
+	 *
+	 * @param fileName 瀛樺偍妗跺璞″悕绉�
+	 * @return R
+	 */
+	@SneakyThrows
+	@PostMapping("/remove-file")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R removeFile(@RequestParam String fileName) {
+		ossBuilder.template().removeFile(fileName);
+		return R.success("鎿嶄綔鎴愬姛");
+	}
+
+	/**
+	 * 鎵归噺鍒犻櫎鏂囦欢
+	 *
+	 * @param fileNames 瀛樺偍妗跺璞″悕绉伴泦鍚�
+	 * @return R
+	 */
+	@SneakyThrows
+	@PostMapping("/remove-files")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R removeFiles(@RequestParam String fileNames) {
+		ossBuilder.template().removeFiles(Func.toStrList(fileNames));
+		return R.success("鎿嶄綔鎴愬姛");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/SmsEndpoint.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/SmsEndpoint.java
new file mode 100644
index 0000000..e698f52
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/SmsEndpoint.java
@@ -0,0 +1,175 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.endpoint;
+
+import com.vci.ubcs.resource.utils.SmsUtil;
+import com.vci.ubcs.resource.builder.sms.SmsBuilder;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.springblade.core.sms.model.SmsCode;
+import org.springblade.core.sms.model.SmsData;
+import org.springblade.core.sms.model.SmsResponse;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鐭俊鏈嶅姟绔偣
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/sms/endpoint")
+@Api(value = "鐭俊鏈嶅姟绔偣", tags = "鐭俊鏈嶅姟绔偣")
+public class SmsEndpoint {
+
+	/**
+	 * 鐭俊鏈嶅姟鏋勫缓绫�
+	 */
+	private final SmsBuilder smsBuilder;
+
+	//================================= 鐭俊鏈嶅姟鏍¢獙 =================================
+
+	/**
+	 * 鐭俊楠岃瘉鐮佸彂閫�
+	 *
+	 * @param phone 鎵嬫満鍙�
+	 */
+	@SneakyThrows
+	@PostMapping("/send-validate")
+	public R sendValidate(@RequestParam String phone) {
+		Map<String, String> params = SmsUtil.getValidateParams();
+		SmsCode smsCode = smsBuilder.template().sendValidate(new SmsData(params).setKey(SmsUtil.PARAM_KEY), phone);
+		return smsCode.isSuccess() ? R.data(smsCode, SmsUtil.SEND_SUCCESS) : R.fail(SmsUtil.SEND_FAIL);
+	}
+
+	/**
+	 * 鏍¢獙鐭俊
+	 *
+	 * @param smsCode 鐭俊鏍¢獙淇℃伅
+	 */
+	@SneakyThrows
+	@PostMapping("/validate-message")
+	public R validateMessage(SmsCode smsCode) {
+		boolean validate = smsBuilder.template().validateMessage(smsCode);
+		return validate ? R.success(SmsUtil.VALIDATE_SUCCESS) : R.fail(SmsUtil.VALIDATE_FAIL);
+	}
+
+	//========== 閫氱敤鐭俊鑷畾涔夊彂閫�(鏀寔鑷畾涔塸arams鍙傛暟浼犻��, 鎺ㄨ崘鐢ㄤ簬娴嬭瘯, 涓嶆帹鑽愮敤浜庣敓浜х幆澧�) ==========
+
+	/**
+	 * 鍙戦�佷俊鎭�
+	 *
+	 * @param params 鑷畾涔夌煭淇″弬鏁�
+	 * @param phones 鎵嬫満鍙烽泦鍚�
+	 */
+	@SneakyThrows
+	@PostMapping("/send-message")
+	public R sendMessage(@RequestParam String code, @RequestParam String params, @RequestParam String phones) {
+		SmsData smsData = new SmsData(JsonUtil.readMap(params, String.class, String.class));
+		return send(code, smsData, phones);
+	}
+
+	//========== 鎸囧畾鐭俊鏈嶅姟鍙戦��(鍙牴鎹悇绉嶅満鏅嚜瀹氭嫇灞曞畾鍒�, 鎹熷け鐏垫椿鎬у鍔犲畨鍏ㄦ��, 鎺ㄨ崘鐢ㄤ簬鐢熶骇鐜) ==========
+
+	/**
+	 * 鐭俊閫氱煡
+	 *
+	 * @param phones 鎵嬫満鍙烽泦鍚�
+	 */
+	@SneakyThrows
+	@PostMapping("/send-notice")
+	public R sendNotice(@RequestParam String phones) {
+		Map<String, String> params = new HashMap<>(3);
+		params.put("title", "閫氱煡鏍囬");
+		params.put("content", "閫氱煡鍐呭");
+		params.put("date", "閫氱煡鏃堕棿");
+		SmsData smsData = new SmsData(params);
+		return send(smsData, phones);
+	}
+
+	/**
+	 * 璁㈠崟閫氱煡
+	 *
+	 * @param phones 鎵嬫満鍙烽泦鍚�
+	 */
+	@SneakyThrows
+	@PostMapping("/send-order")
+	public R sendOrder(@RequestParam String phones) {
+		Map<String, String> params = new HashMap<>(3);
+		params.put("orderNo", "璁㈠崟缂栧彿");
+		params.put("packageNo", "蹇�掑崟鍙�");
+		params.put("user", "鏀朵欢浜�");
+		SmsData smsData = new SmsData(params);
+		return send(smsData, phones);
+	}
+
+	/**
+	 * 浼氳閫氱煡
+	 *
+	 * @param phones 鎵嬫満鍙烽泦鍚�
+	 */
+	@SneakyThrows
+	@PostMapping("/send-meeting")
+	public R sendMeeting(@RequestParam String phones) {
+		Map<String, String> params = new HashMap<>(2);
+		params.put("roomId", "浼氳瀹�");
+		params.put("topic", "浼氳涓婚");
+		params.put("date", "浼氳鏃堕棿");
+		SmsData smsData = new SmsData(params);
+		return send(smsData, phones);
+	}
+
+	//================================= 閫氱敤鐭俊鍙戦�佹帴鍙� =================================
+
+	/**
+	 * 閫氱敤鐭俊鍙戦�佹帴鍙�
+	 *
+	 * @param smsData 鐭俊鍐呭
+	 * @param phones  鎵嬫満鍙峰垪琛�
+	 * @return 鏄惁鍙戦�佹垚鍔�
+	 */
+	private R send(SmsData smsData, String phones) {
+		SmsResponse response = smsBuilder.template().sendMessage(smsData, Func.toStrList(phones));
+		return response.isSuccess() ? R.success(SmsUtil.SEND_SUCCESS) : R.fail(SmsUtil.SEND_FAIL);
+	}
+
+	/**
+	 * 閫氱敤鐭俊鍙戦�佹帴鍙�
+	 *
+	 * @param code    璧勬簮缂栧彿
+	 * @param smsData 鐭俊鍐呭
+	 * @param phones  鎵嬫満鍙峰垪琛�
+	 * @return 鏄惁鍙戦�佹垚鍔�
+	 */
+	private R send(String code, SmsData smsData, String phones) {
+		SmsResponse response = smsBuilder.template(code).sendMessage(smsData, Func.toStrList(phones));
+		return response.isSuccess() ? R.success(SmsUtil.SEND_SUCCESS) : R.fail(SmsUtil.SEND_FAIL);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/feign/SmsClient.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/feign/SmsClient.java
new file mode 100644
index 0000000..ae9f441
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/feign/SmsClient.java
@@ -0,0 +1,69 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.feign;
+
+import com.vci.ubcs.resource.utils.SmsUtil;
+import lombok.AllArgsConstructor;
+import com.vci.ubcs.resource.builder.sms.SmsBuilder;
+import org.springblade.core.sms.model.SmsCode;
+import org.springblade.core.sms.model.SmsData;
+import org.springblade.core.sms.model.SmsResponse;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 鐭俊杩滅▼璋冪敤鏈嶅姟
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+public class SmsClient implements ISmsClient {
+
+	private final SmsBuilder smsBuilder;
+
+	@Override
+	@PostMapping(SEND_MESSAGE)
+	public R<SmsResponse> sendMessage(String code, String params, String phones) {
+		SmsData smsData = new SmsData(JsonUtil.readMap(params, String.class, String.class));
+		SmsResponse response = smsBuilder.template(code).sendMessage(smsData, Func.toStrList(phones));
+		return R.data(response);
+	}
+
+	@Override
+	@PostMapping(SEND_VALIDATE)
+	public R sendValidate(String code, String phone) {
+		Map<String, String> params = SmsUtil.getValidateParams();
+		SmsCode smsCode = smsBuilder.template(code).sendValidate(new SmsData(params).setKey(SmsUtil.PARAM_KEY), phone);
+		return smsCode.isSuccess() ? R.data(smsCode, SmsUtil.SEND_SUCCESS) : R.fail(SmsUtil.SEND_FAIL);
+	}
+
+	@Override
+	@PostMapping(VALIDATE_MESSAGE)
+	public R validateMessage(String code, String id, String value, String phone) {
+		SmsCode smsCode = new SmsCode().setId(id).setValue(value).setPhone(phone);
+		boolean validate = smsBuilder.template(code).validateMessage(smsCode);
+		return validate ? R.success(SmsUtil.VALIDATE_SUCCESS) : R.fail(SmsUtil.VALIDATE_FAIL);
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/AttachMapper.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/AttachMapper.java
new file mode 100644
index 0000000..1d7dde5
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/AttachMapper.java
@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.resource.entity.Attach;
+import com.vci.ubcs.resource.vo.AttachVO;
+
+import java.util.List;
+
+/**
+ * 闄勪欢琛� Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface AttachMapper extends BaseMapper<Attach> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param attach
+	 * @return
+	 */
+	List<AttachVO> selectAttachPage(IPage page, AttachVO attach);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/OssMapper.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/OssMapper.java
new file mode 100644
index 0000000..3def676
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/OssMapper.java
@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.resource.entity.Oss;
+import com.vci.ubcs.resource.vo.OssVO;
+
+import java.util.List;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author BladeX
+ */
+public interface OssMapper extends BaseMapper<Oss> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param oss
+	 * @return
+	 */
+	List<OssVO> selectOssPage(IPage page, OssVO oss);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/SmsMapper.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/SmsMapper.java
new file mode 100644
index 0000000..52a818b
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/SmsMapper.java
@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.mapper;
+
+import com.vci.ubcs.resource.entity.Sms;
+import com.vci.ubcs.resource.vo.SmsVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 鐭俊閰嶇疆琛� Mapper 鎺ュ彛
+ *
+ * @author BladeX
+ */
+public interface SmsMapper extends BaseMapper<Sms> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param sms
+	 * @return
+	 */
+	List<SmsVO> selectSmsPage(IPage page, SmsVO sms);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IAttachService.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IAttachService.java
new file mode 100644
index 0000000..03b2684
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IAttachService.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.resource.entity.Attach;
+import com.vci.ubcs.resource.vo.AttachVO;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * 闄勪欢琛� 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IAttachService extends BaseService<Attach> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param attach
+	 * @return
+	 */
+	IPage<AttachVO> selectAttachPage(IPage<AttachVO> page, AttachVO attach);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IOssService.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IOssService.java
new file mode 100644
index 0000000..70a3aaf
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IOssService.java
@@ -0,0 +1,56 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.resource.entity.Oss;
+import com.vci.ubcs.resource.vo.OssVO;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author BladeX
+ */
+public interface IOssService extends BaseService<Oss> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param oss
+	 * @return
+	 */
+	IPage<OssVO> selectOssPage(IPage<OssVO> page, OssVO oss);
+
+	/**
+	 * 鎻愪氦oss淇℃伅
+	 *
+	 * @param oss
+	 * @return
+	 */
+	boolean submit(Oss oss);
+
+	/**
+	 * 鍚姩閰嶇疆
+	 *
+	 * @param id
+	 * @return
+	 */
+	boolean enable(Long id);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/ISmsService.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/ISmsService.java
new file mode 100644
index 0000000..7612a60
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/ISmsService.java
@@ -0,0 +1,56 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.resource.entity.Sms;
+import com.vci.ubcs.resource.vo.SmsVO;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * 鐭俊閰嶇疆琛� 鏈嶅姟绫�
+ *
+ * @author BladeX
+ */
+public interface ISmsService extends BaseService<Sms> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param sms
+	 * @return
+	 */
+	IPage<SmsVO> selectSmsPage(IPage<SmsVO> page, SmsVO sms);
+
+	/**
+	 * 鎻愪氦oss淇℃伅
+	 *
+	 * @param oss
+	 * @return
+	 */
+	boolean submit(Sms oss);
+
+	/**
+	 * 鍚姩閰嶇疆
+	 *
+	 * @param id
+	 * @return
+	 */
+	boolean enable(Long id);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/AttachServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/AttachServiceImpl.java
new file mode 100644
index 0000000..d742c7a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/AttachServiceImpl.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.resource.entity.Attach;
+import com.vci.ubcs.resource.mapper.AttachMapper;
+import com.vci.ubcs.resource.service.IAttachService;
+import com.vci.ubcs.resource.vo.AttachVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 闄勪欢琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class AttachServiceImpl extends BaseServiceImpl<AttachMapper, Attach> implements IAttachService {
+
+	@Override
+	public IPage<AttachVO> selectAttachPage(IPage<AttachVO> page, AttachVO attach) {
+		return page.setRecords(baseMapper.selectAttachPage(page, attach));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/OssServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/OssServiceImpl.java
new file mode 100644
index 0000000..9757cab
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/OssServiceImpl.java
@@ -0,0 +1,67 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.resource.entity.Oss;
+import com.vci.ubcs.resource.mapper.OssMapper;
+import com.vci.ubcs.resource.service.IOssService;
+import com.vci.ubcs.resource.vo.OssVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author BladeX
+ */
+@Service
+public class OssServiceImpl extends BaseServiceImpl<OssMapper, Oss> implements IOssService {
+
+	@Override
+	public IPage<OssVO> selectOssPage(IPage<OssVO> page, OssVO oss) {
+		return page.setRecords(baseMapper.selectOssPage(page, oss));
+	}
+
+	@Override
+	public boolean submit(Oss oss) {
+		LambdaQueryWrapper<Oss> lqw = Wrappers.<Oss>query().lambda()
+			.eq(Oss::getOssCode, oss.getOssCode()).eq(Oss::getTenantId, AuthUtil.getTenantId());
+		Long cnt = baseMapper.selectCount(Func.isEmpty(oss.getId()) ? lqw : lqw.notIn(Oss::getId, oss.getId()));
+		if (cnt > 0L) {
+			throw new ServiceException("褰撳墠璧勬簮缂栧彿宸插瓨鍦�!");
+		}
+		return this.saveOrUpdate(oss);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean enable(Long id) {
+		// 鍏堢鐢�
+		boolean temp1 = this.update(Wrappers.<Oss>update().lambda().set(Oss::getStatus, 1));
+		// 鍦ㄥ惎鐢�
+		boolean temp2 = this.update(Wrappers.<Oss>update().lambda().set(Oss::getStatus, 2).eq(Oss::getId, id));
+		return temp1 && temp2;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/SmsServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/SmsServiceImpl.java
new file mode 100644
index 0000000..eb0d555
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/SmsServiceImpl.java
@@ -0,0 +1,67 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.resource.entity.Sms;
+import com.vci.ubcs.resource.mapper.SmsMapper;
+import com.vci.ubcs.resource.service.ISmsService;
+import com.vci.ubcs.resource.vo.SmsVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 鐭俊閰嶇疆琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author BladeX
+ */
+@Service
+public class SmsServiceImpl extends BaseServiceImpl<SmsMapper, Sms> implements ISmsService {
+
+	@Override
+	public IPage<SmsVO> selectSmsPage(IPage<SmsVO> page, SmsVO sms) {
+		return page.setRecords(baseMapper.selectSmsPage(page, sms));
+	}
+
+	@Override
+	public boolean submit(Sms sms) {
+		LambdaQueryWrapper<Sms> lqw = Wrappers.<Sms>query().lambda()
+			.eq(Sms::getSmsCode, sms.getSmsCode()).eq(Sms::getTenantId, AuthUtil.getTenantId());
+		Long cnt = baseMapper.selectCount(Func.isEmpty(sms.getId()) ? lqw : lqw.notIn(Sms::getId, sms.getId()));
+		if (cnt > 0L) {
+			throw new ServiceException("褰撳墠璧勬簮缂栧彿宸插瓨鍦�!");
+		}
+		return this.saveOrUpdate(sms);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean enable(Long id) {
+		// 鍏堢鐢�
+		boolean temp1 = this.update(Wrappers.<Sms>update().lambda().set(Sms::getStatus, 1));
+		// 鍦ㄥ惎鐢�
+		boolean temp2 = this.update(Wrappers.<Sms>update().lambda().set(Sms::getStatus, 2).eq(Sms::getId, id));
+		return temp1 && temp2;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/OssWrapper.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/OssWrapper.java
new file mode 100644
index 0000000..619e2af
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/OssWrapper.java
@@ -0,0 +1,49 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.wrapper;
+
+import com.vci.ubcs.resource.entity.Oss;
+import com.vci.ubcs.resource.vo.OssVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.enums.DictEnum;
+
+import java.util.Objects;
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author BladeX
+ */
+public class OssWrapper extends BaseEntityWrapper<Oss, OssVO> {
+
+	public static OssWrapper build() {
+		return new OssWrapper();
+	}
+
+	@Override
+	public OssVO entityVO(Oss oss) {
+		OssVO ossVO = Objects.requireNonNull(BeanUtil.copy(oss, OssVO.class));
+		String categoryName = DictCache.getValue(DictEnum.OSS, oss.getCategory());
+		String statusName = DictCache.getValue(DictEnum.YES_NO, oss.getStatus());
+		ossVO.setCategoryName(categoryName);
+		ossVO.setStatusName(statusName);
+		return ossVO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/SmsWrapper.java b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/SmsWrapper.java
new file mode 100644
index 0000000..03e334e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/SmsWrapper.java
@@ -0,0 +1,49 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.resource.wrapper;
+
+import com.vci.ubcs.resource.entity.Sms;
+import com.vci.ubcs.resource.vo.SmsVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.enums.DictEnum;
+
+import java.util.Objects;
+
+/**
+ * 鐭俊閰嶇疆琛ㄥ寘瑁呯被,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author BladeX
+ */
+public class SmsWrapper extends BaseEntityWrapper<Sms, SmsVO> {
+
+	public static SmsWrapper build() {
+		return new SmsWrapper();
+	}
+
+	@Override
+	public SmsVO entityVO(Sms sms) {
+		SmsVO smsVO = Objects.requireNonNull(BeanUtil.copy(sms, SmsVO.class));
+		String categoryName = DictCache.getValue(DictEnum.SMS, sms.getCategory());
+		String statusName = DictCache.getValue(DictEnum.YES_NO, sms.getStatus());
+		smsVO.setCategoryName(categoryName);
+		smsVO.setStatusName(statusName);
+		return smsVO;
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-resource/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-resource/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-test.yml
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml
rename to Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application.yml
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/AttachMapper.xml b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/AttachMapper.xml
new file mode 100644
index 0000000..c1eec08
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/AttachMapper.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.resource.mapper.AttachMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="attachResultMap" type="com.vci.ubcs.resource.entity.Attach">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="link" property="link"/>
+        <result column="domain_url" property="domainUrl"/>
+        <result column="name" property="name"/>
+        <result column="original_name" property="originalName"/>
+        <result column="extension" property="extension"/>
+        <result column="attach_size" property="attachSize"/>
+    </resultMap>
+
+
+    <select id="selectAttachPage" resultMap="attachResultMap">
+        select * from blade_attach where is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/OssMapper.xml b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/OssMapper.xml
new file mode 100644
index 0000000..790d23b
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/OssMapper.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.resource.mapper.OssMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="ossResultMap" type="com.vci.ubcs.resource.entity.Oss">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="oss_code" property="ossCode"/>
+        <result column="category" property="category"/>
+        <result column="endpoint" property="endpoint"/>
+        <result column="access_key" property="accessKey"/>
+        <result column="secret_key" property="secretKey"/>
+        <result column="bucket_name" property="bucketName"/>
+        <result column="app_id" property="appId"/>
+        <result column="region" property="region"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+
+    <select id="selectOssPage" resultMap="ossResultMap">
+        select * from pl_sys_oss where is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/SmsMapper.xml b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/SmsMapper.xml
new file mode 100644
index 0000000..ea9ebc2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/SmsMapper.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.resource.mapper.SmsMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="smsResultMap" type="com.vci.ubcs.resource.entity.Sms">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="sms_code" property="smsCode"/>
+        <result column="template_id" property="templateId"/>
+        <result column="category" property="category"/>
+        <result column="access_key" property="accessKey"/>
+        <result column="secret_key" property="secretKey"/>
+        <result column="region_id" property="regionId"/>
+        <result column="sign_name" property="signName"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+
+    <select id="selectSmsPage" resultMap="smsResultMap">
+        select * from pl_sys_sms where is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/BladeX/blade-ops/blade-swagger/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-swagger/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-swagger/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-swagger/Dockerfile
diff --git a/Source/UBCS/ubcs-ops/ubcs-swagger/pom.xml b/Source/UBCS/ubcs-ops/ubcs-swagger/pom.xml
new file mode 100644
index 0000000..0e24fcd
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-swagger/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-swagger</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-cloud</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-aggregation-spring-boot-starter</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/java/com/vci/ubcs/swagger/SwaggerApplication.java b/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/java/com/vci/ubcs/swagger/SwaggerApplication.java
new file mode 100644
index 0000000..b368940
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/java/com/vci/ubcs/swagger/SwaggerApplication.java
@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.swagger;
+
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * swagger鑱氬悎鍚姩鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class SwaggerApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_SWAGGER_NAME, SwaggerApplication.class, args);
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-swagger/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-swagger/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-swagger/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-test.yml
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml b/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml
rename to Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application.yml
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt b/Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/banner.txt
similarity index 100%
rename from Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt
rename to Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/banner.txt
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/Dockerfile
diff --git "a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..180c757
--- /dev/null
+++ "b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md"
@@ -0,0 +1,1740 @@
+## 銆婂垎甯冨紡浠诲姟璋冨害骞冲彴XXL-JOB銆�
+
+[![Actions Status](https://github.com/xuxueli/xxl-job/workflows/Java%20CI/badge.svg)](https://github.com/xuxueli/xxl-job/actions)
+[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/)
+[![GitHub release](https://img.shields.io/github/release/xuxueli/xxl-job.svg)](https://github.com/xuxueli/xxl-job/releases)
+[![GitHub stars](https://img.shields.io/github/stars/xuxueli/xxl-job)](https://github.com/xuxueli/xxl-job/)
+[![Docker Status](https://img.shields.io/docker/pulls/xuxueli/xxl-job-admin)](https://hub.docker.com/r/xuxueli/xxl-job-admin/)
+[![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](http://www.gnu.org/licenses/gpl-3.0.html)
+[![donate](https://img.shields.io/badge/%24-donate-ff69b4.svg?style=flat)](https://www.xuxueli.com/page/donate.html)
+
+[TOCM]
+
+[TOC]
+
+## 涓�銆佺畝浠�
+
+### 1.1 姒傝堪
+XXL-JOB鏄竴涓垎甯冨紡浠诲姟璋冨害骞冲彴锛屽叾鏍稿績璁捐鐩爣鏄紑鍙戣繀閫熴�佸涔犵畝鍗曘�佽交閲忕骇銆佹槗鎵╁睍銆傜幇宸插紑鏀炬簮浠g爜骞舵帴鍏ュ瀹跺叕鍙哥嚎涓婁骇鍝佺嚎锛屽紑绠卞嵆鐢ㄣ��
+
+### 1.2 绀惧尯浜ゆ祦    
+- [绀惧尯浜ゆ祦](https://www.xuxueli.com/page/community.html)
+
+### 1.3 鐗规��
+- 1銆佺畝鍗曪細鏀寔閫氳繃Web椤甸潰瀵逛换鍔¤繘琛孋RUD鎿嶄綔锛屾搷浣滅畝鍗曪紝涓�鍒嗛挓涓婃墜锛�
+- 2銆佸姩鎬侊細鏀寔鍔ㄦ�佷慨鏀逛换鍔$姸鎬併�佸惎鍔�/鍋滄浠诲姟锛屼互鍙婄粓姝㈣繍琛屼腑浠诲姟锛屽嵆鏃剁敓鏁堬紱
+- 3銆佽皟搴︿腑蹇僅A锛堜腑蹇冨紡锛夛細璋冨害閲囩敤涓績寮忚璁★紝鈥滆皟搴︿腑蹇冣�濊嚜鐮旇皟搴︾粍浠跺苟鏀寔闆嗙兢閮ㄧ讲锛屽彲淇濊瘉璋冨害涓績HA锛�
+- 4銆佹墽琛屽櫒HA锛堝垎甯冨紡锛夛細浠诲姟鍒嗗竷寮忔墽琛岋紝浠诲姟"鎵ц鍣�"鏀寔闆嗙兢閮ㄧ讲锛屽彲淇濊瘉浠诲姟鎵цHA锛�
+- 5銆佹敞鍐屼腑蹇�: 鎵ц鍣ㄤ細鍛ㄦ湡鎬ц嚜鍔ㄦ敞鍐屼换鍔�, 璋冨害涓績灏嗕細鑷姩鍙戠幇娉ㄥ唽鐨勪换鍔″苟瑙﹀彂鎵ц銆傚悓鏃讹紝涔熸敮鎸佹墜鍔ㄥ綍鍏ユ墽琛屽櫒鍦板潃锛�
+- 6銆佸脊鎬ф墿瀹圭缉瀹癸細涓�鏃︽湁鏂版墽琛屽櫒鏈哄櫒涓婄嚎鎴栬�呬笅绾匡紝涓嬫璋冨害鏃跺皢浼氶噸鏂板垎閰嶄换鍔★紱
+- 7銆佽矾鐢辩瓥鐣ワ細鎵ц鍣ㄩ泦缇ら儴缃叉椂鎻愪緵涓板瘜鐨勮矾鐢辩瓥鐣ワ紝鍖呮嫭锛氱涓�涓�佹渶鍚庝竴涓�佽疆璇€�侀殢鏈恒�佷竴鑷存�ASH銆佹渶涓嶇粡甯镐娇鐢ㄣ�佹渶杩戞渶涔呮湭浣跨敤銆佹晠闅滆浆绉汇�佸繖纰岃浆绉荤瓑锛�
+- 8銆佹晠闅滆浆绉伙細浠诲姟璺敱绛栫暐閫夋嫨"鏁呴殰杞Щ"鎯呭喌涓嬶紝濡傛灉鎵ц鍣ㄩ泦缇や腑鏌愪竴鍙版満鍣ㄦ晠闅滐紝灏嗕細鑷姩Failover鍒囨崲鍒颁竴鍙版甯哥殑鎵ц鍣ㄥ彂閫佽皟搴﹁姹傘��
+- 9銆侀樆濉炲鐞嗙瓥鐣ワ細璋冨害杩囦簬瀵嗛泦鎵ц鍣ㄦ潵涓嶅強澶勭悊鏃剁殑澶勭悊绛栫暐锛岀瓥鐣ュ寘鎷細鍗曟満涓茶锛堥粯璁わ級銆佷涪寮冨悗缁皟搴︺�佽鐩栦箣鍓嶈皟搴︼紱
+- 10銆佷换鍔¤秴鏃舵帶鍒讹細鏀寔鑷畾涔変换鍔¤秴鏃舵椂闂达紝浠诲姟杩愯瓒呮椂灏嗕細涓诲姩涓柇浠诲姟锛�
+- 11銆佷换鍔″け璐ラ噸璇曪細鏀寔鑷畾涔変换鍔″け璐ラ噸璇曟鏁帮紝褰撲换鍔″け璐ユ椂灏嗕細鎸夌収棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇曪紱鍏朵腑鍒嗙墖浠诲姟鏀寔鍒嗙墖绮掑害鐨勫け璐ラ噸璇曪紱
+- 12銆佷换鍔″け璐ュ憡璀︼紱榛樿鎻愪緵閭欢鏂瑰紡澶辫触鍛婅锛屽悓鏃堕鐣欐墿灞曟帴鍙o紝鍙柟渚跨殑鎵╁睍鐭俊銆侀拤閽夌瓑鍛婅鏂瑰紡锛�
+- 13銆佸垎鐗囧箍鎾换鍔★細鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屼换鍔¤矾鐢辩瓥鐣ラ�夋嫨"鍒嗙墖骞挎挱"鎯呭喌涓嬶紝涓�娆′换鍔¤皟搴﹀皢浼氬箍鎾Е鍙戦泦缇や腑鎵�鏈夋墽琛屽櫒鎵ц涓�娆′换鍔★紝鍙牴鎹垎鐗囧弬鏁板紑鍙戝垎鐗囦换鍔★紱
+- 14銆佸姩鎬佸垎鐗囷細鍒嗙墖骞挎挱浠诲姟浠ユ墽琛屽櫒涓虹淮搴﹁繘琛屽垎鐗囷紝鏀寔鍔ㄦ�佹墿瀹规墽琛屽櫒闆嗙兢浠庤�屽姩鎬佸鍔犲垎鐗囨暟閲忥紝鍗忓悓杩涜涓氬姟澶勭悊锛涘湪杩涜澶ф暟鎹噺涓氬姟鎿嶄綔鏃跺彲鏄捐憲鎻愬崌浠诲姟澶勭悊鑳藉姏鍜岄�熷害銆�
+- 15銆佷簨浠惰Е鍙戯細闄や簡"Cron鏂瑰紡"鍜�"浠诲姟渚濊禆鏂瑰紡"瑙﹀彂浠诲姟鎵ц涔嬪锛屾敮鎸佸熀浜庝簨浠剁殑瑙﹀彂浠诲姟鏂瑰紡銆傝皟搴︿腑蹇冩彁渚涜Е鍙戜换鍔″崟娆℃墽琛岀殑API鏈嶅姟锛屽彲鏍规嵁涓氬姟浜嬩欢鐏垫椿瑙﹀彂銆�
+- 16銆佷换鍔¤繘搴︾洃鎺э細鏀寔瀹炴椂鐩戞帶浠诲姟杩涘害锛�
+- 17銆丷olling瀹炴椂鏃ュ織锛氭敮鎸佸湪绾挎煡鐪嬭皟搴︾粨鏋滐紝骞朵笖鏀寔浠olling鏂瑰紡瀹炴椂鏌ョ湅鎵ц鍣ㄨ緭鍑虹殑瀹屾暣鐨勬墽琛屾棩蹇楋紱
+- 18銆丟LUE锛氭彁渚沇eb IDE锛屾敮鎸佸湪绾垮紑鍙戜换鍔¢�昏緫浠g爜锛屽姩鎬佸彂甯冿紝瀹炴椂缂栬瘧鐢熸晥锛岀渷鐣ラ儴缃蹭笂绾跨殑杩囩▼銆傛敮鎸�30涓増鏈殑鍘嗗彶鐗堟湰鍥炴函銆�
+- 19銆佽剼鏈换鍔★細鏀寔浠LUE妯″紡寮�鍙戝拰杩愯鑴氭湰浠诲姟锛屽寘鎷琒hell銆丳ython銆丯odeJS銆丳HP銆丳owerShell绛夌被鍨嬭剼鏈�;
+- 20銆佸懡浠よ浠诲姟锛氬師鐢熸彁渚涢�氱敤鍛戒护琛屼换鍔andler锛圔ean浠诲姟锛�"CommandJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚涘懡浠よ鍗冲彲锛�
+- 21銆佷换鍔′緷璧栵細鏀寔閰嶇疆瀛愪换鍔′緷璧栵紝褰撶埗浠诲姟鎵ц缁撴潫涓旀墽琛屾垚鍔熷悗灏嗕細涓诲姩瑙﹀彂涓�娆″瓙浠诲姟鐨勬墽琛�, 澶氫釜瀛愪换鍔$敤閫楀彿鍒嗛殧锛�
+- 22銆佷竴鑷存�э細鈥滆皟搴︿腑蹇冣�濋�氳繃DB閿佷繚璇侀泦缇ゅ垎甯冨紡璋冨害鐨勪竴鑷存��, 涓�娆′换鍔¤皟搴﹀彧浼氳Е鍙戜竴娆℃墽琛岋紱
+- 23銆佽嚜瀹氫箟浠诲姟鍙傛暟锛氭敮鎸佸湪绾块厤缃皟搴︿换鍔″叆鍙傦紝鍗虫椂鐢熸晥锛�
+- 24銆佽皟搴︾嚎绋嬫睜锛氳皟搴︾郴缁熷绾跨▼瑙﹀彂璋冨害杩愯锛岀‘淇濊皟搴︾簿纭墽琛岋紝涓嶈鍫靛锛�
+- 25銆佹暟鎹姞瀵嗭細璋冨害涓績鍜屾墽琛屽櫒涔嬮棿鐨勯�氳杩涜鏁版嵁鍔犲瘑锛屾彁鍗囪皟搴︿俊鎭畨鍏ㄦ�э紱
+- 26銆侀偖浠舵姤璀︼細浠诲姟澶辫触鏃舵敮鎸侀偖浠舵姤璀︼紝鏀寔閰嶇疆澶氶偖浠跺湴鍧�缇ゅ彂鎶ヨ閭欢锛�
+- 27銆佹帹閫乵aven涓ぎ浠撳簱: 灏嗕細鎶婃渶鏂扮ǔ瀹氱増鎺ㄩ�佸埌maven涓ぎ浠撳簱, 鏂逛究鐢ㄦ埛鎺ュ叆鍜屼娇鐢�;
+- 28銆佽繍琛屾姤琛細鏀寔瀹炴椂鏌ョ湅杩愯鏁版嵁锛屽浠诲姟鏁伴噺銆佽皟搴︽鏁般�佹墽琛屽櫒鏁伴噺绛夛紱浠ュ強璋冨害鎶ヨ〃锛屽璋冨害鏃ユ湡鍒嗗竷鍥撅紝璋冨害鎴愬姛鍒嗗竷鍥剧瓑锛�
+- 29銆佸叏寮傛锛氫换鍔¤皟搴︽祦绋嬪叏寮傛鍖栬璁″疄鐜帮紝濡傚紓姝ヨ皟搴︺�佸紓姝ヨ繍琛屻�佸紓姝ュ洖璋冪瓑锛屾湁鏁堝瀵嗛泦璋冨害杩涜娴侀噺鍓婂嘲锛岀悊璁轰笂鏀寔浠绘剰鏃堕暱浠诲姟鐨勮繍琛岋紱
+- 30銆佽法骞冲彴锛氬師鐢熸彁渚涢�氱敤HTTP浠诲姟Handler锛圔ean浠诲姟锛�"HttpJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚汬TTP閾炬帴鍗冲彲锛屼笉闄愬埗璇█銆佸钩鍙帮紱
+- 31銆佸浗闄呭寲锛氳皟搴︿腑蹇冩敮鎸佸浗闄呭寲璁剧疆锛屾彁渚涗腑鏂囥�佽嫳鏂囦袱绉嶅彲閫夎瑷�锛岄粯璁や负涓枃锛�
+- 32銆佸鍣ㄥ寲锛氭彁渚涘畼鏂筪ocker闀滃儚锛屽苟瀹炴椂鏇存柊鎺ㄩ�乨ockerhub锛岃繘涓�姝ュ疄鐜颁骇鍝佸紑绠卞嵆鐢紱
+- 33銆佺嚎绋嬫睜闅旂锛氳皟搴︾嚎绋嬫睜杩涜闅旂鎷嗗垎锛屾參浠诲姟鑷姩闄嶇骇杩涘叆"Slow"绾跨▼姹狅紝閬垮厤鑰楀敖璋冨害绾跨▼锛屾彁楂樼郴缁熺ǔ瀹氭�э紱
+- 34銆佺敤鎴风鐞嗭細鏀寔鍦ㄧ嚎绠$悊绯荤粺鐢ㄦ埛锛屽瓨鍦ㄧ鐞嗗憳銆佹櫘閫氱敤鎴蜂袱绉嶈鑹诧紱
+- 35銆佹潈闄愭帶鍒讹細鎵ц鍣ㄧ淮搴﹁繘琛屾潈闄愭帶鍒讹紝绠$悊鍛樻嫢鏈夊叏閲忔潈闄愶紝鏅�氱敤鎴烽渶瑕佸垎閰嶆墽琛屽櫒鏉冮檺鍚庢墠鍏佽鐩稿叧鎿嶄綔锛�
+
+
+### 1.4 鍙戝睍
+浜�2015骞翠腑锛屾垜鍦╣ithub涓婂垱寤篨XL-JOB椤圭洰浠撳簱骞舵彁浜ょ涓�涓猚ommit锛岄殢涔嬭繘琛岀郴缁熺粨鏋勮璁★紝UI閫夊瀷锛屼氦浜掕璁♀�︹��
+
+浜�2015-11鏈堬紝XXL-JOB缁堜簬RELEASE浜嗙涓�涓ぇ鐗堟湰V1.0锛� 闅忓悗鎴戝皢涔嬪彂甯冨埌OSCHINA锛孹XL-JOB鍦∣SCHINA涓婅幏寰椾簡@绾㈣柉鐨勭儹闂ㄦ帹鑽愶紝鍚屾湡鍒嗗埆杈惧埌浜哋SCHINA鐨勨�滅儹闂ㄥ姩寮光�濇帓琛岀涓�鍜実it.oschina鐨勫紑婧愯蒋浠舵湀鐑害鎺掕绗竴锛屽湪姝ょ壒鍒劅璋㈢孩钖紝鎰熻阿澶у鐨勫叧娉ㄥ拰鏀寔銆�
+
+浜�2015-12鏈堬紝鎴戝皢XXL-JOB鍙戣〃鍒版垜鍙稿唴閮ㄧ煡璇嗗簱锛屽苟涓斿緱鍒板唴閮ㄥ悓浜嬭鍙��
+
+浜�2016-01鏈堬紝鎴戝徃灞曞紑XXL-JOB鐨勫唴閮ㄦ帴鍏ュ拰瀹氬埗宸ヤ綔锛屽湪姝ゆ劅璋㈣鏌愬拰灏规煇涓や綅鍚屼簨鐨勮础鐚紝鍚屾椂涔熸劅璋㈠唴閮ㄥ叾浠栫粰涓庡叧娉ㄤ笌鏀寔鐨勫悓浜嬨��
+
+浜�2017-05-13锛屽湪涓婃捣涓惧姙鐨� "[绗�62鏈熷紑婧愪腑鍥芥簮鍒涗細](https://www.oschina.net/event/2236961)" 鐨� "鏀剧爜杩囨潵" 鐜妭锛屾垜鐧诲彴瀵筙XL-JOB鍋氫簡婕旇锛屽彴涓嬩簲鐧句綅鍦ㄥ満瑙備紬鍙嶅搷鐑儓锛圼鍥炬枃鍥為【](https://www.oschina.net/question/2686220_2242120) 锛夈��
+
+浜�2017-10-22锛屽張鎷嶄簯 Open Talk 鑱斿悎 Spring Cloud 涓浗绀惧尯涓惧姙鐨� "[杩涘嚮鐨勫井鏈嶅姟瀹炴垬娲句笂娴风珯](https://opentalk.upyun.com/303.html)"锛屾垜鐧诲彴瀵筙XL-JOB鍋氫簡婕旇锛岀幇鍦鸿浼楀弽鍝嶇儹鐑堝苟鍦ㄤ細鍚庝笌XXL-JOB鐢ㄦ埛鐑儓璁ㄨ浜ゆ祦銆�
+
+浜�2017-12-11锛孹XL-JOB鏈夊垢鍙備細銆奫InfoQ ArchSummit鍏ㄧ悆鏋舵瀯甯堝嘲浼歖(http://bj2017.archsummit.com/)銆嬶紝骞惰鎷嶆媿璐锋灦鏋勬�荤洃"鏉ㄦ尝鑰佸笀"鍦ㄤ笓棰� "[寰湇鍔″師鐞嗐�佸熀纭�鏋舵瀯鍜屽紑婧愬疄璺礭(http://bj2017.archsummit.com/training/2)" 涓幇鍦轰粙缁嶃��
+
+浜�2017-12-18锛孹XL-JOB鍙備笌"[2017骞村害鏈�鍙楁杩庝腑鍥藉紑婧愯蒋浠禲(http://www.oschina.net/project/top_cn_2017?sort=1)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑绾︿節鍗冧釜鍥戒骇寮�婧愰」鐩腑瑙掗�愶紝鏈�缁堣繘鍏ヤ簡鍓�30寮恒��
+
+浜�2018-01-15锛孹XL-JOB鍙備笌"[2017鐮佷簯鏈�鐏紑婧愰」鐩甝(https://www.oschina.net/news/92438/2017-mayun-top-50)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑绾﹀叚鍗冧簲鐧句釜鐮佷簯椤圭洰涓閫愶紝鏈�缁堣繘鍘讳簡鍓�20寮恒��
+
+浜�2018-04-14锛宨TechPlus鍦ㄤ笂娴蜂妇鍔炵殑 "[2018浜掕仈缃戝紑鍙戣�呭ぇ浼歖(http://www.itdks.com/eventlist/detail/2065)"锛屾垜鐧诲彴瀵筙XL-JOB鍋氫簡婕旇锛岀幇鍦鸿浼楀弽鍝嶇儹鐑堝苟鍦ㄤ細鍚庝笌XXL-JOB鐢ㄦ埛鐑儓璁ㄨ浜ゆ祦銆�
+
+浜�2018-05-27锛屽湪涓婃捣涓惧姙鐨� "[绗�75鏈熷紑婧愪腑鍥芥簮鍒涗細](https://www.oschina.net/event/2278742)" 鐨� "鏋舵瀯" 涓婚涓撳満锛屾垜鐧诲彴杩涜鈥滃熀纭�鏋舵瀯涓庝腑闂翠欢鍥捐氨鈥濅富棰樻紨璁诧紝鍙颁笅涓婂崈浣嶅湪鍦鸿浼楀弽鍝嶇儹鐑堬紙[鍥炬枃鍥為【](https://www.oschina.net/question/3802184_2280606) 锛夈��
+
+浜�2018-12-05锛孹XL-JOB鍙備笌"[2018骞村害鏈�鍙楁杩庝腑鍥藉紑婧愯蒋浠禲(https://www.oschina.net/project/top_cn_2018?sort=1)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑涓�涓囧涓紑婧愰」鐩腑瑙掗�愶紝鏈�缁堟帓鍚嶇19鍚嶃��
+
+浜�2019-12-10锛孹XL-JOB鍙備笌"[2019骞村害鏈�鍙楁杩庝腑鍥藉紑婧愯蒋浠禲(https://www.oschina.net/project/top_cn_2019)"璇勬瘮锛屽湪褰撴椂宸插綍鍏ョ殑涓�涓囧涓紑婧愰」鐩腑瑙掗�愶紝鏈�缁堟帓鍚�"寮�鍙戞鏋跺拰鍩虹缁勪欢绫�"绗�9鍚嶃��
+
+> 鎴戝徃澶т紬鐐硅瘎鐩墠宸叉帴鍏XL-JOB锛屽唴閮ㄥ埆鍚嶃�奆errari銆嬶紙Ferrari鍩轰簬XXL-JOB鐨刅1.1鐗堟湰瀹氬埗鑰屾垚锛屾柊鎺ュ叆搴旂敤鎺ㄨ崘鍗囩骇鏈�鏂扮増鏈級銆�
+鎹渶鏂扮粺璁�, 鑷�2016-01-21鎺ュ叆鑷�2017-12-01鏈熼棿锛岃绯荤粺宸茶皟搴︾害100涓囨锛岃〃鐜颁紭寮傘�傛柊鎺ュ叆搴旂敤鎺ㄨ崘浣跨敤鏈�鏂扮増鏈紝鍥犱负缁忚繃鏁板崄涓増鏈殑鏇存柊锛岀郴缁熺殑浠诲姟妯″瀷銆乁I浜や簰妯″瀷浠ュ強搴曞眰璋冨害閫氳妯″瀷閮芥湁浜嗚緝澶х殑浼樺寲鍜屾彁鍗囷紝鏍稿績鍔熻兘鏇村姞绋冲畾楂樻晥銆�
+
+鑷充粖锛孹XL-JOB宸叉帴鍏ュ瀹跺叕鍙哥殑绾夸笂浜у搧绾匡紝鎺ュ叆鍦烘櫙濡傜數鍟嗕笟鍔★紝O2O涓氬姟鍜屽ぇ鏁版嵁浣滀笟绛夛紝鎴鏈�鏂扮粺璁℃椂闂翠负姝紝XXL-JOB宸叉帴鍏ョ殑鍏徃鍖呮嫭涓嶉檺浜庯細
+    
+	- 1銆佸ぇ浼楃偣璇勩�愮編鍥㈢偣璇勩��
+	- 2銆佸北涓滃鑰岀綉缁滅鎶�鏈夐檺鍏徃锛�
+	- 3銆佸畨寰芥収閫氫簰鑱旂鎶�鏈夐檺鍏徃锛�
+	- 4銆佷汉浜鸿仛璐㈤噾鏈嶏紱
+	- 5銆佷笂娴锋妫d俊鎭鎶�鑲′唤鏈夐檺鍏徃
+	- 6銆佽繍婊℃弧銆愯繍婊℃弧銆�
+	- 7銆佺背鍏舵灄 (涓浗鍖�)銆愮背鍏舵灄銆�
+	- 8銆佸濡堣仈鐩�
+	- 9銆佷節妯卞ぉ涓嬶紙鍖椾含锛変俊鎭妧鏈湁闄愬叕鍙�
+	- 10銆佷竾鏅媺鏂鎶�鏈夐檺鍏徃銆愪竴鍔犳墜鏈恒��
+	- 11銆佷笂娴蜂嚎淇濆仴搴风鐞嗘湁闄愬叕鍙�
+	- 12銆佹捣灏旈Θ鍘ㄣ�愭捣灏斻��
+	- 13銆佹渤鍗楀ぇ绾㈠寘鐢靛瓙鍟嗗姟鏈夐檺鍏徃
+	- 14銆佹垚閮介『鐐圭鎶�鏈夐檺鍏徃
+	- 15銆佹繁鍦冲競鎬′簹閫�
+	- 16銆佹繁鍦抽害浜氫俊绉戞妧鑲′唤鏈夐檺鍏徃
+	- 17銆佷笂娴峰崥鑾圭鎶�淇℃伅鎶�鏈湁闄愬叕鍙�
+	- 18銆佷腑鍥藉钩瀹夌鎶�鏈夐檺鍏徃銆愪腑鍥藉钩瀹夈��
+	- 19銆佹澀宸炵煡鏃朵俊鎭鎶�鏈夐檺鍏徃
+	- 20銆佸崥鑾圭鎶�锛堜笂娴凤級鏈夐檺鍏徃
+	- 21銆佹垚閮戒緷鑳借偂浠芥湁闄愯矗浠诲叕鍙�
+	- 22銆佹箹鍗楅珮闃抽�氳仈淇℃伅鎶�鏈湁闄愬叕鍙�
+	- 23銆佹繁鍦冲競閭﹀痉鏂囧寲鍙戝睍鏈夐檺鍏徃
+	- 24銆佺寤洪樋鎬濆彲缃戠粶鏁欒偛鏈夐檺鍏徃
+	- 25銆佷紭淇′簩鎵嬭溅銆愪紭淇°��
+	- 26銆佷笂娴锋偁娓稿爞鎶曡祫鍙戝睍鑲′唤鏈夐檺鍏徃銆愭偁娓稿爞銆�
+	- 27銆佸寳浜矇绗旇摑澶╃鎶�鏈夐檺鍏徃
+	- 28銆佷腑绉�绉戞妧(鏃犻敗)鏈夐檺鍏徃
+	- 29銆佹姹夌┖蹇冪鎶�鏈夐檺鍏徃
+	- 30銆佸寳浜殏铓侀鏆寸鎶�鏈夐檺鍏徃
+	- 31銆佸洓宸濅簰瀹滆揪绉戞妧鏈夐檺鍏徃
+	- 32銆侀挶鍖呰浜戯紙鍖椾含锛夌鎶�鏈夐檺鍏徃
+	- 33銆侀噸搴嗘鎵嶉泦鍥�
+    - 34銆佸挭鍜曚簰鍔ㄥū涔愭湁闄愬叕鍙搞�愪腑鍥界Щ鍔ㄣ��
+    - 35銆佸寳浜浜﹁吘绉戞妧鏈夐檺鍏徃
+    - 36銆佸闀垮紩鎿�(鍖椾含)淇℃伅鎶�鏈湁闄愬叕鍙�
+    - 37銆佸寳浜嫳璐濇�濈鎶�鏈夐檺鍏徃
+    - 38銆佸垰娉伴泦鍥�
+    - 39銆佹繁鍦虫嘲涔呬俊鎭郴缁熻偂浠芥湁闄愬叕鍙�
+    - 40銆侀殢琛屼粯鏀粯鏈夐檺鍏徃
+    - 41銆佸箍宸炵�氬啘缃戠粶绉戞妧鏈夐檺鍏徃
+    - 42銆佷韩鐐圭鎶�鏈夐檺鍏徃
+    - 43銆佹澀宸炴瘮鏅虹鎶�鏈夐檺鍏徃
+    - 44銆佸湷涓寸晫绾跨綉缁滅鎶�鏈夐檺鍏徃
+    - 45銆佸箍宸炵煡璇嗗湀缃戠粶绉戞妧鏈夐檺鍏徃
+    - 46銆佸浗瑾夊晢涓氫笂娴锋湁闄愬叕鍙�
+    - 47銆佹捣灏旀秷璐归噾铻嶆湁闄愬叕鍙革紝鍡ㄤ粯銆佸鑺便�愭捣灏斻��
+    - 48銆佸箍宸炲反鍥鹃瞾淇℃伅绉戞妧鏈夐檺鍏徃
+    - 49銆佹繁鍦冲競楣忔捣杩愮數瀛愭暟鎹氦鎹㈡湁闄愬叕鍙�
+    - 50銆佹繁鍦冲競浜氶鐢靛瓙鍟嗗姟鏈夐檺鍏徃
+    - 51銆佷笂娴疯叮鍖荤綉缁滄湁闄愬叕鍙�
+    - 52銆佽仛閲戣祫鏈�
+    - 53銆佸寳浜埗姣嶉偊缃戠粶绉戞妧鏈夐檺鍏徃
+    - 54銆佷腑灞卞厓璧蒋浠剁鎶�鏈夐檺鍏徃
+    - 55銆佷腑鍟嗘儬姘�(鍖椾含)鐢靛瓙鍟嗗姟鏈夐檺鍏徃
+    - 56銆佸嚡浜泦鍥�
+    - 57銆佸崕澶忕エ鑱旓紙鍖椾含锛夌鎶�鏈夐檺鍏徃
+    - 58銆佹媿鎷嶈捶銆愭媿鎷嶈捶銆�
+    - 59銆佸寳浜皻寰锋満鏋勫湪绾挎暀鑲叉湁闄愬叕鍙�
+    - 60銆佷换瀛愯鑲′唤鏈夐檺鍏徃
+    - 61銆佸寳浜椂鎬佺數瀛愬晢鍔℃湁闄愬叕鍙�
+    - 62銆佹繁鍦冲嵎鐨綉缁滅鎶�鏈夐檺鍏徃
+    - 63銆佸寳浜畨鍗氶�氱鎶�鑲′唤鏈夐檺鍏徃
+    - 64銆佹湭鏉ユ棤绾跨綉
+    - 65銆佸帵闂ㄧ摲绂х綉缁滄湁闄愬叕鍙�
+    - 66銆佸寳浜�掕摑绉戣蒋浠惰偂浠芥湁闄愬叕鍙�
+    - 67銆侀儜宸炲垱娴疯蒋浠剁鎶�鍏徃
+    - 68銆佸寳浜浗妲愪俊鎭鎶�鏈夐檺鍏徃
+    - 69銆佹氮娼蒋浠堕泦鍥�
+    - 70銆佸绔嬫亽(鍖椾含)淇℃伅鎶�鏈湁闄愬叕鍙�
+    - 71銆佸箍宸炴瀬杩呭淇℃伅绉戞妧鏈夐檺鍏徃
+    - 72銆佽但鍩猴紙涓浗锛夐泦鍥㈣偂浠芥湁闄愬叕鍙�
+    - 73銆佹捣鎶曟眹
+    - 74銆佷笂娴锋鼎鐩婂垱涓氬鍖栧櫒绠$悊鑲′唤鏈夐檺鍏徃
+    - 75銆佹眽绾虫.锛堝帵闂級鏁版嵁鑲′唤鏈夐檺鍏徃
+    - 76銆佸畨淇′俊鎵�
+    - 77銆佸矚鍎掕储瀵�
+    - 78銆佹嵎閬撹蒋浠�
+    - 79銆佹箹鍖椾韩涓冪綉缁滅鎶�鏈夐檺鍏徃
+    - 80銆佹箹鍗楀垱鍙戠鎶�璐d换鏈夐檺鍏徃
+    - 81銆佹繁鍦冲皬瀹夋椂浠d簰鑱旂綉閲戣瀺鏈嶅姟鏈夐檺鍏徃
+    - 82銆佹箹鍖椾韩涓冪綉缁滅鎶�鏈夐檺鍏徃
+    - 83銆侀挶鍖呰浜�(鍖椾含)绉戞妧鏈夐檺鍏徃
+    - 84銆�360閲戣瀺銆�360銆�
+    - 85銆佹槗浼佺
+    - 86銆佹懇璐濓紙涓婃捣锛夌敓鐗╃鎶�鏈夐檺鍏徃
+    - 87銆佸箍涓滆姱鏅烘収绉戞妧鏈夐檺鍏徃
+    - 88銆佽仈鎯抽泦鍥€�愯仈鎯炽��
+    - 89銆佹�吔鍏呯數
+    - 90銆佽鍦嗘苯杞�
+    - 91銆佹繁鍦冲簵搴楅�氱鎶�閭鍏徃
+    - 92銆佷含涓溿�愪含涓溿��
+    - 93銆佺背搴勭悊璐�
+    - 94銆佸挅鍟℃槗铻�
+    - 95銆佹ⅶ妗愯瘹閫�
+    - 96銆佹亽澶у湴浜с�愭亽澶с��
+    - 97銆佹槅鏄庨緳鎱�
+    - 98銆佷笂娴锋订鐟惰蒋浠�
+    - 99銆佹槗淇°�愮綉鏄撱��
+    - 100銆侀摐鏉胯
+    - 101銆佹澀宸炰簯鑻ョ綉缁滅鎶�鏈夐檺鍏徃
+    - 102銆佺壒鐧炬儬锛堜腑鍥斤級鏈夐檺鍏徃
+    - 103銆佸父灞变紬鍗¤繍鍔涗緵搴旈摼绠$悊鏈夐檺鍏徃
+    - 104銆佹繁鍦崇珛鍒涚數瀛愬晢鍔℃湁闄愬叕鍙�
+    - 105銆佹澀宸炴櫤璇虹鎶�鑲′唤鏈夐檺鍏徃
+    - 106銆佸寳浜簯婕句俊鎭鎶�鏈夐檺鍏徃
+    - 107銆佹繁鍦冲競澶氶摱绉戞妧鏈夐檺鍏徃
+    - 108銆佷翰瀹濆疂
+    - 109銆佷笂娴峰崥鍗¤蒋浠剁鎶�鏈夐檺鍏徃
+    - 110銆佹櫤鎱ф爲鍦ㄧ嚎鏁欒偛骞冲彴
+    - 111銆佺背鏃忛噾铻�
+    - 112銆佸寳浜景妫笘绾�
+    - 113銆佷簯鍗楁粐鍖婚��
+    - 114銆佸箍宸炲競鍒嗛缃戠粶绉戞妧鏈夐檺璐d换鍏徃
+    - 115銆佹禉姹熷井鑳界鎶�鏈夐檺鍏徃
+    - 116銆佷笂娴烽Θ椋炵數瀛愬晢鍔℃湁闄愬叕鍙�
+    - 117銆佷笂娴峰疂灏婄數瀛愬晢鍔℃湁闄愬叕鍙�
+    - 118銆佺洿瀹㈤�氱鎶�鎶�鏈湁闄愬叕鍙�
+    - 119銆佺搴︾鎶�鏈夐檺鍏徃
+    - 120銆佷笂娴锋暟鎱х郴缁熸妧鏈湁闄愬叕鍙�
+    - 121銆佹垜鐨勫尰鑽綉
+    - 122銆佸绮夊钩鍙�
+    - 123銆侀搧鐢蹭簩鎵嬫満
+    - 124銆佷笂娴锋捣鏂板緱鏁版嵁鎶�鏈湁闄愬叕鍙�
+    - 125銆佹繁鍦冲競鐝嶇埍缃戜俊鎭妧鏈湁闄愬叕鍙搞�愮弽鐖辩綉銆�
+    - 126銆佸皬铚滆渹
+    - 127銆佸悏鑽f暟绉戞妧
+    - 128銆佷笂娴锋伜鍩熶俊鎭鎶�鏈夐檺鍏徃
+    - 129銆佸箍宸炶崝鏀綉缁滄湁闄愬叕鍙搞�愯崝鏋滷M銆�
+    - 130銆佹澀宸為棯瀹濈鎶�鏈夐檺鍏徃
+    - 131銆佸寳浜簰鑱旀柊缃戠鎶�鍙戝睍鏈夐檺鍏徃
+    - 132銆佽獕閬撶鎶�
+    - 133銆佸北瑗垮厗鐩涙埧鍦颁骇寮�鍙戞湁闄愬叕鍙�
+    - 134銆佸寳浜摑鐫块�氳揪绉戞妧鏈夐檺鍏徃
+    - 135銆佹湀浜皬灞嬶紙涓浗锛夋湁闄愬叕鍙搞�愯摑鏈堜寒銆�
+    - 136銆侀潚宀涘浗鐟炰俊鎭妧鏈湁闄愬叕鍙�
+    - 137銆佸崥闆呬簯璁$畻锛堝寳浜級鏈夐檺鍏徃
+    - 138銆佸崕娉拌瘉鍒搁娓瓙鍏徃
+    - 139銆佹澀宸炰笢鏂归�氫俊杞欢鎶�鏈湁闄愬叕鍙�
+    - 140銆佹姹夊崥鏅熷畨鍏ㄦ妧鏈偂浠芥湁闄愬叕鍙�
+    - 141銆佹繁鍦冲競鍏害浜哄拰绉戞妧鏈夐檺鍏徃
+    - 142銆佹澀宸炶叮缁寸鎶�鏈夐檺鍏徃锛堝皬褰憋級
+    - 143銆佸畞娉㈠崟杞︿緺涔嬪绉戞妧鏈夐檺鍏徃銆愬崟杞︿緺銆�
+    - 144銆佷竵涓佷簯搴蜂俊鎭鎶�锛堝寳浜級鏈夐檺鍏徃
+    - 145銆佷簯閽辫
+    - 146銆佸崡浜腑鍏村姏缁�
+    - 147銆佷笂娴风熃鏄岄�氫俊鎶�鏈湁闄愬叕鍙�
+    - 148銆佹繁鍦宠惃绉戠鎶�
+    - 149銆佷腑閫氭湇鍒涚珛绉戞妧鏈夐檺璐d换鍏徃
+    - 150銆佹繁鍦冲競瀵瑰簞绉戞妧鏈夐檺鍏徃
+    - 151銆佷笂璇佹墍淇℃伅缃戠粶鏈夐檺鍏徃
+    - 152銆佹澀宸炵伀鐑т簯绉戞妧鏈夐檺鍏徃銆愬绀肩邯銆�
+    - 153銆佸ぉ娲ラ潚鑺掓灉绉戞妧鏈夐檺鍏徃銆愯姃鏋滃ご鏉°��
+    - 154銆侀暱椋炲厜绾ゅ厜缂嗚偂浠芥湁闄愬叕鍙�
+    - 155銆佷笘绾嚡姝岋紙鍖椾含锛夊尰鐤楃鎶�鏈夐檺鍏徃
+    - 156銆佹禉姹熼湒姊撴帶鑲℃湁闄愬叕鍙�
+    - 157銆佹睙瑗胯吘椋炵綉缁滄妧鏈湁闄愬叕鍙�
+    - 158銆佸畨杩呯墿娴佹湁闄愬叕鍙�
+    - 159銆佽倝鑱旂綉
+    - 160銆佸寳浜寳骞挎褰卞箍鍛婁紶濯掓湁闄愬叕鍙�
+    - 161銆佷笂娴锋暟鎱х郴缁熸妧鏈湁闄愬叕鍙�
+    - 162銆佸ぇ蹇楀ぉ鎴�
+    - 163銆佷笂娴蜂簯楣婂尰
+    - 164銆佷笂娴蜂簯楣婂尰
+    - 165銆佸ⅷ杩瑰ぉ姘斻�愬ⅷ杩瑰ぉ姘斻��
+    - 166銆佷笂娴烽�告淇℃伅绉戞妧鏈夐檺鍏徃
+    - 167銆佹矃鏈嬬墿鑱�
+    - 168銆佹澀宸炴亽鐢熶簯铻嶇綉缁滅鎶�鏈夐檺鍏徃
+    - 169銆佺豢绫宠仈鍒�
+    - 170銆侀噸搴嗘槗瀹犵鎶�鏈夐檺鍏徃
+    - 171銆佸畨寰藉紩鑸鎶�鏈夐檺鍏徃锛堜箰鑱岀綉锛�
+    - 172銆佷笂娴锋暟鑱斿尰淇′紒涓氬彂灞曟湁闄愬叕鍙�
+    - 173銆佽壇褰缓鏉�
+    - 174銆佹澀宸炴眰鏄悓鍒涚綉缁滅鎶�鏈夐檺鍏徃
+    - 175銆佽嵎椹浗闄�
+    - 176銆佺偣闆囩綉
+    - 177銆佹繁鍦冲競鍗庢槦鍏夌數鎶�鏈湁闄愬叕鍙�
+    - 178銆佸帵闂ㄧ宸為拱杞欢绉戞妧鏈夐檺鍏徃
+    - 179銆佹繁鍦冲競鎷涘晢淇¤浜哄淇濋櫓鏈夐檺鍏徃
+    - 180銆佷笂娴峰ソ灞嬬綉淇℃伅鎶�鏈湁闄愬叕鍙�
+    - 181銆佹捣淇¢泦鍥€�愭捣淇°��
+    - 182銆佷俊鍑屽彲淇℃伅绉戞妧锛堜笂娴凤級鏈夐檺鍏徃
+    - 183銆侀暱鏄ュぉ鎴愮鎶�鍙戝睍鏈夐檺鍏徃
+    - 184銆佺敤鍙嬮噾铻嶄俊鎭妧鏈偂浠芥湁闄愬叕鍙搞�愮敤鍙嬨��
+    - 185銆佸寳浜挅鍟℃槗铻嶆湁闄愬叕鍙�
+    - 186銆佸浗鎶曠憺閾跺熀閲戠鐞嗘湁闄愬叕鍙�
+    - 187銆佹檵鏉�(涓婃捣)缃戠粶淇℃伅鎶�鏈湁闄愬叕鍙�
+    - 188銆佹繁鍦冲競闅忔墜绉戞妧鏈夐檺鍏徃銆愰殢鎵嬭銆�
+    - 189銆佹繁鍦虫按鍔$鎶�鏈夐檺鍏徃
+    - 190銆佹槗浼佺銆愭槗浼佺銆�
+    - 191銆佸寳浜浜戠鎶�
+    - 192銆佸崡浜渹娉颁簰鑱旂綉绉戞妧鏈夐檺鍏徃
+    - 193銆佺珷楸肩洿鎾�
+    - 194銆佸澶氬绉戞妧
+    - 195銆佸ぉ娲ュ競绁炲窞鍟嗛緳绉戞妧鑲′唤鏈夐檺鍏徃
+    - 196銆佸博蹇冪鎶�
+    - 197銆佽溅鐮佺鎶�锛堝寳浜級鏈夐檺鍏徃
+    - 198銆佽吹闃冲競鎶曡祫鎺ц偂闆嗗洟
+    - 199銆佸悍鏃楄偂浠�
+    - 200銆侀緳鑵惧嚭琛�
+    - 201銆佹澀宸炲崕閲忚蒋浠�
+    - 202銆佸悎鑲ラ《宀尰鐤楃鎶�鏈夐檺鍏徃
+    - 203銆侀噸搴嗚〃杈惧紡绉戞妧鏈夐檺鍏徃
+    - 204銆佷笂娴风背閬撲俊鎭鎶�鏈夐檺鍏徃
+    - 205銆佸寳浜泭鍙嬩細绉戞妧鏈夐檺鍏徃
+    - 206銆佸寳浜瀺璐數瀛愬晢鍔℃湁闄愬叕鍙�
+    - 207銆佷腑鍥藉姹囦氦鏄撲腑蹇�
+    - 208銆佷腑鍥藉杩愯偂浠芥湁闄愬叕鍙�
+    - 209銆佷腑鍥戒笂娴锋檽鍦堟暀鑲茬鎶�鏈夐檺鍏徃
+    - 210銆佹櫘鑱旇蒋浠惰偂浠芥湁闄愬叕鍙�
+    - 211銆佸寳浜钃濊蒋浠惰偂浠芥湁闄愬叕鍙�
+    - 212銆佹睙鑻忔柉璇虹墿鑱旂鎶�鏈夐檺鍏徃
+    - 213銆佸寳浜悳鐙�-鐙愬弸銆愭悳鐙愩��
+    - 214銆佹柊澶ч檰缃戝晢閲戣瀺
+    - 215銆佸北涓滅鐮佷腑绋庝俊鎭鎶�鏈夐檺鍏徃
+    - 216銆佹渤鍗楁眹椤虹綉缁滅鎶�鏈夐檺鍏徃
+    - 217銆佸寳浜崕澶忔�濇簮绉戞妧鍙戝睍鏈夐檺鍏徃
+    - 218銆佷笂娴蜂笢鏅俊鎭鎶�鏈夐檺鍏徃
+    - 219銆佷笂娴烽福鍕冪綉缁滅鎶�鏈夐檺鍏徃
+    - 220銆佸箍涓滃鑻戞暀鑲插彂灞曟湁闄愬叕鍙�
+    - 221銆佹繁鍦冲己鏃剁鎶�鏈夐檺鍏徃
+    - 222銆佷笂娴蜂簯鐮轰俊鎭鎶�鏈夐檺鍏徃
+    - 223銆侀噸搴嗘剦瀹㈣缃戠粶鏈夐檺鍏徃
+    - 224銆佹暟浜�
+    - 225銆佸浗瀹剁數缃戣繍妫�閮�
+    - 226銆佹澀宸炴壘瓒�
+    - 227銆佹旦椴镐簯璁$畻绉戞妧鑲′唤鏈夐檺鍏徃
+    - 228銆佺澶ц椋炪�愮澶ц椋炪��
+    - 229銆佹澀宸炶瑁呯綉缁滅鎶�鏈夐檺鍏徃
+    - 230銆佸嵆鏈夊垎鏈熼噾铻�
+    - 231銆佹繁鍦虫硶鍙稿痉淇℃伅绉戞妧鏈夐檺鍏徃
+    - 232銆佷笂娴峰崥澶嶄俊鎭鎶�鏈夐檺鍏徃
+    - 233銆佹澀宸炰簯鍢変簯璁$畻鏈夐檺鍏徃
+    - 234銆佹湁瀹舵皯瀹�(鏈夊缇庡)
+    - 235銆佸寳浜耽閿�閫氳蒋浠舵妧鏈湁闄愬叕鍙�
+    - 236銆佹禉姹熻仛鏈夎储閲戣瀺鏈嶅姟澶栧寘鏈夐檺鍏徃
+    - 237銆佹槗鏃忔櫤姹�(鍖椾含)绉戞妧鏈夐檺鍏徃
+    - 238銆佸悎鑲ラ《宀尰鐤楃鎶�寮�鍙戞湁闄愬叕鍙�
+    - 239銆佽溅鑸瑰疂(娣卞湷)鏃彥绉戞妧鏈夐檺鍏徃)
+    - 240銆佸箍宸炲瘜鍔涘湴浜ф湁闄愬叕鍙�
+    - 241銆佹阿璇撅紙涓婃捣锛夋暀鑲茬鎶�鏈夐檺鍏徃
+    - 242銆佹姹夋蔼缁嗚優缃戠粶鎶�鏈湁闄愬叕鍙�
+    - 243銆佹澀宸炴湁浜戠鎶�鏈夐檺鍏徃
+    - 244銆佷笂娴蜂粰璞嗘櫤鑳芥満鍣ㄤ汉鏈夐檺鍏徃
+    - 245銆佹媺鍗℃媺鏀粯鑲′唤鏈夐檺鍏徃銆愭媺鍗℃媺銆�
+    - 246銆佽檸褰╁嵃鑹鸿偂浠芥湁闄愬叕鍙�
+    - 247銆佸寳浜暟寰鎶�鏈夐檺鍏徃
+    - 248銆佸箍涓滄櫤鐟炵鎶�鏈夐檺鍏徃
+    - 249銆佹壘閽㈢綉
+    - 250銆佷節鏈虹綉
+    - 251銆佹澀宸炶窇璺戠綉缁滅鎶�鏈夐檺鍏徃
+    - 252銆佹繁鍦虫湭鏉ヤ簯闆�
+    - 253銆佹澀宸炴瘡鏃ョ粰鍔涚鎶�鏈夐檺鍏徃
+    - 254銆佷笂娴烽綈鐘囦俊鎭鎶�鏈夐檺鍏徃
+    - 255銆佹淮婊村嚭琛屻�愭淮婊淬��
+    - 256銆佸悎鑲ヤ簯璇婁俊鎭鎶�鏈夐檺鍏徃
+    - 257銆佷簯鐭ュ0鏅鸿兘绉戞妧鑲′唤鏈夐檺鍏徃
+    - 258銆佸崡浜潶閬撶鎶�鏈夐檺鍏徃
+    - 259銆佺埍涔愪紭锛堜簩鎵嬪钩鍙帮級
+    - 260銆佺尗鐪肩數褰憋紙绉佹湁鍖栭儴缃诧級銆愮尗鐪肩數褰便��
+    - 261銆佺編鍥㈠ぇ璞★紙绉佹湁鍖栭儴缃诧級銆愮編鍥㈠ぇ璞°��
+    - 262銆佷綔涓氬府鏁欒偛绉戞妧锛堝寳浜級鏈夐檺鍏徃銆愪綔涓氬府銆�
+    - 263銆佸寳浜皬骞寸硶浜掕仈缃戞妧鏈湁闄愬叕鍙�
+    - 264銆佸北涓滅煩闃佃蒋浠跺伐绋嬭偂浠芥湁闄愬叕鍙�
+    - 265銆侀檿瑗垮浗椹胯蒋浠剁鎶�鏈夐檺鍏徃
+    - 266銆佸悰寮�淇℃伅绉戞妧
+    - 267銆佹潙楦熺綉缁滅鎶�鏈夐檺璐d换鍏徃
+    - 268銆佷簯鍗楀浗闄呬俊鎵樻湁闄愬叕鍙�
+    - 269銆侀噾鏅烘暀鑲�
+    - 270銆佺彔娴峰競绛戝发绉戞妧鏈夐檺鍏徃
+    - 271銆佷笂娴风櫨鑳滆蒋浠惰偂浠芥湁闄愬叕鍙�
+    - 272銆佹繁鍦冲競绉戠浘绉戞妧鏈夐檺鍏徃
+    - 273銆佸搱鍟板嚭琛屻�愬搱鍟般��
+    - 274銆侀�旇檸鍏昏溅銆愰�旇檸銆�
+    - 275銆佸崱鎬濅紭娲句汉鍔涜祫婧愰泦鍥�
+    - 276銆佸崡浜涓烘櫤鎱ц蒋浠剁鎶�鏈夐檺鍏徃
+    - 277銆佹澀宸炲煄甯傚ぇ鑴戠鎶�鏈夐檺鍏徃
+    - 278銆佺尶杈呭銆愮尶杈呭銆�
+    - 279銆佹礇闃冲仴鍒涚綉缁滅鎶�鏈夐檺鍏徃
+    - 280銆侀瓟鍔涜�虫湹
+    - 281銆佷嚎闃充俊閫�
+    - 282銆佷笂娴锋嫑椴ょ鎶�鏈夐檺鍏徃
+    - 283銆佸洓宸濆晢鏃呮棤蹇х鎶�鏈嶅姟鏈夐檺鍏徃
+    - 284銆乁U璺戣吙
+    - 285銆佸寳浜�佽檸璇佸埜銆愯�佽檸璇佸埜銆�
+    - 286銆佹偁娲荤渷鍚э紙鍖椾含锛夌綉缁滅鎶�鏈夐檺鍏徃
+    - 287銆丗5鏈潵鍟嗗簵
+    - 288銆佹繁鍦崇幆闃抽�氫俊鎭妧鏈湁闄愬叕鍙�
+    - 289銆侀仩鍌抽浕淇�
+	- 鈥︹��
+
+> 鏇村鎺ュ叆鐨勫叕鍙革紝娆㈣繋鍦� [鐧昏鍦板潃](https://github.com/xuxueli/xxl-job/issues/1 ) 鐧昏锛岀櫥璁颁粎浠呬负浜嗕骇鍝佹帹骞裤��
+
+娆㈣繋澶у鐨勫叧娉ㄥ拰浣跨敤锛孹XL-JOB涔熷皢鎷ユ姳鍙樺寲锛屾寔缁彂灞曘��
+
+
+### 1.5 涓嬭浇
+
+#### 鏂囨。鍦板潃
+
+- [涓枃鏂囨。](https://www.xuxueli.com/xxl-job/)
+- [English Documentation](https://www.xuxueli.com/xxl-job/en/)
+
+#### 婧愮爜浠撳簱鍦板潃
+
+婧愮爜浠撳簱鍦板潃 | Release Download
+--- | ---
+[https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job) | [Download](https://github.com/xuxueli/xxl-job/releases)  
+[http://gitee.com/xuxueli0323/xxl-job](http://gitee.com/xuxueli0323/xxl-job) | [Download](http://gitee.com/xuxueli0323/xxl-job/releases)
+
+
+#### 涓ぎ浠撳簱鍦板潃
+
+```
+<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
+<dependency>
+    <groupId>com.xuxueli</groupId>
+    <artifactId>xxl-job-core</artifactId>
+    <version>${鏈�鏂扮ǔ瀹氱増鏈瑌</version>
+</dependency>
+```
+
+
+### 1.6 鐜
+- Maven3+
+- Jdk1.7+
+- Mysql5.7+
+
+
+## 浜屻�佸揩閫熷叆闂�
+
+### 2.1 鍒濆鍖栤�滆皟搴︽暟鎹簱鈥�
+璇蜂笅杞介」鐩簮鐮佸苟瑙e帇锛岃幏鍙� "璋冨害鏁版嵁搴撳垵濮嬪寲SQL鑴氭湰" 骞舵墽琛屽嵆鍙��
+
+"璋冨害鏁版嵁搴撳垵濮嬪寲SQL鑴氭湰" 浣嶇疆涓�:
+
+    /xxl-job/doc/db/tables_xxl_job.sql
+
+璋冨害涓績鏀寔闆嗙兢閮ㄧ讲锛岄泦缇ゆ儏鍐典笅鍚勮妭鐐瑰姟蹇呰繛鎺ュ悓涓�涓猰ysql瀹炰緥;
+
+濡傛灉mysql鍋氫富浠�,璋冨害涓績闆嗙兢鑺傜偣鍔″繀寮哄埗璧颁富搴�;
+
+### 2.2 缂栬瘧婧愮爜
+瑙e帇婧愮爜,鎸夌収maven鏍煎紡灏嗘簮鐮佸鍏DE, 浣跨敤maven杩涜缂栬瘧鍗冲彲锛屾簮鐮佺粨鏋勫涓嬶細
+
+    xxl-job-admin锛氳皟搴︿腑蹇�
+    xxl-job-core锛氬叕鍏变緷璧�
+    xxl-job-executor-samples锛氭墽琛屽櫒Sample绀轰緥锛堥�夋嫨鍚堥�傜殑鐗堟湰鎵ц鍣紝鍙洿鎺ヤ娇鐢紝涔熷彲浠ュ弬鑰冨叾骞跺皢鐜版湁椤圭洰鏀归�犳垚鎵ц鍣級
+        锛歺xl-job-executor-sample-springboot锛歋pringboot鐗堟湰锛岄�氳繃Springboot绠$悊鎵ц鍣紝鎺ㄨ崘杩欑鏂瑰紡锛�
+        锛歺xl-job-executor-sample-spring锛歋pring鐗堟湰锛岄�氳繃Spring瀹瑰櫒绠$悊鎵ц鍣紝姣旇緝閫氱敤锛�
+        锛歺xl-job-executor-sample-frameless锛氭棤妗嗘灦鐗堟湰锛�
+        锛歺xl-job-executor-sample-jfinal锛欽Final鐗堟湰锛岄�氳繃JFinal绠$悊鎵ц鍣紱
+        锛歺xl-job-executor-sample-nutz锛歂utz鐗堟湰锛岄�氳繃Nutz绠$悊鎵ц鍣紱
+        锛歺xl-job-executor-sample-jboot锛歫boot鐗堟湰锛岄�氳繃jboot绠$悊鎵ц鍣紱
+        
+
+### 2.3 閰嶇疆閮ㄧ讲鈥滆皟搴︿腑蹇冣��
+
+    璋冨害涓績椤圭洰锛歺xl-job-admin
+    浣滅敤锛氱粺涓�绠$悊浠诲姟璋冨害骞冲彴涓婅皟搴︿换鍔★紝璐熻矗瑙﹀彂璋冨害鎵ц锛屽苟涓旀彁渚涗换鍔$鐞嗗钩鍙般��
+
+#### 姝ラ涓�锛氳皟搴︿腑蹇冮厤缃細
+璋冨害涓績閰嶇疆鏂囦欢鍦板潃锛�
+
+    /xxl-job/xxl-job-admin/src/main/resources/application.properties
+
+
+璋冨害涓績閰嶇疆鍐呭璇存槑锛�
+
+    ### 璋冨害涓績JDBC閾炬帴锛氶摼鎺ュ湴鍧�璇蜂繚鎸佸拰 2.1绔犺妭 鎵�鍒涘缓鐨勮皟搴︽暟鎹簱鐨勫湴鍧�涓�鑷�
+    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
+    spring.datasource.username=root
+    spring.datasource.password=root_pwd
+    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+    
+    ### 鎶ヨ閭
+    spring.mail.host=smtp.qq.com
+    spring.mail.port=25
+    spring.mail.username=xxx@qq.com
+    spring.mail.password=xxx
+    spring.mail.properties.mail.smtp.auth=true
+    spring.mail.properties.mail.smtp.starttls.enable=true
+    spring.mail.properties.mail.smtp.starttls.required=true
+    spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
+    
+    ### 璋冨害涓績閫氳TOKEN [閫夊~]锛氶潪绌烘椂鍚敤锛�
+    xxl.job.accessToken=
+    
+    ### 璋冨害涓績鍥介檯鍖栭厤缃� [閫夊~]锛� 榛樿涓虹┖锛岃〃绀轰腑鏂�; "en" 琛ㄧず鑻辨枃锛�
+    xxl.job.i18n=
+    
+    ## 璋冨害绾跨▼姹犳渶澶х嚎绋嬮厤缃�愬繀濉��
+    xxl.job.triggerpool.fast.max=200
+    xxl.job.triggerpool.slow.max=100
+    
+    ### 璋冨害涓績鏃ュ織琛ㄦ暟鎹繚瀛樺ぉ鏁� [蹇呭~]锛氳繃鏈熸棩蹇楄嚜鍔ㄦ竻鐞嗭紱闄愬埗澶т簬绛変簬7鏃剁敓鏁堬紝鍚﹀垯, 濡�-1锛屽叧闂嚜鍔ㄦ竻鐞嗗姛鑳斤紱
+    xxl.job.logretentiondays=30
+    
+    
+
+#### 姝ラ浜岋細閮ㄧ讲椤圭洰锛�
+濡傛灉宸茬粡姝g‘杩涜涓婅堪閰嶇疆锛屽彲灏嗛」鐩紪璇戞墦鍖呴儴缃层��
+
+璋冨害涓績璁块棶鍦板潃锛歨ttp://localhost:8080/xxl-job-admin (璇ュ湴鍧�鎵ц鍣ㄥ皢浼氫娇鐢ㄥ埌锛屼綔涓哄洖璋冨湴鍧�)
+
+榛樿鐧诲綍璐﹀彿 "admin/123456", 鐧诲綍鍚庤繍琛岀晫闈㈠涓嬪浘鎵�绀恒��
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_6yC0.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+鑷虫鈥滆皟搴︿腑蹇冣�濋」鐩凡缁忛儴缃叉垚鍔熴��
+
+#### 姝ラ涓夛細璋冨害涓績闆嗙兢锛堝彲閫夛級锛�
+璋冨害涓績鏀寔闆嗙兢閮ㄧ讲锛屾彁鍗囪皟搴︾郴缁熷鐏惧拰鍙敤鎬с��
+
+璋冨害涓績闆嗙兢閮ㄧ讲鏃讹紝鍑犵偣瑕佹眰鍜屽缓璁細
+- DB閰嶇疆淇濇寔涓�鑷达紱
+- 闆嗙兢鏈哄櫒鏃堕挓淇濇寔涓�鑷达紙鍗曟満闆嗙兢蹇借锛夛紱
+- 寤鸿锛氭帹鑽愰�氳繃nginx涓鸿皟搴︿腑蹇冮泦缇ゅ仛璐熻浇鍧囪 锛屽垎閰嶅煙鍚嶃�傝皟搴︿腑蹇冭闂�佹墽琛屽櫒鍥炶皟閰嶇疆銆佽皟鐢ˋPI鏈嶅姟绛夋搷浣滃潎閫氳繃璇ュ煙鍚嶈繘琛屻��
+
+
+#### 鍏朵粬锛欴ocker 闀滃儚鏂瑰紡鎼缓璋冨害涓績锛�
+
+- 涓嬭浇闀滃儚
+
+```
+// Docker鍦板潃锛歨ttps://hub.docker.com/r/xuxueli/xxl-job-admin/     (寤鸿鎸囧畾鐗堟湰鍙�)
+docker pull xuxueli/xxl-job-admin
+```
+
+- 鍒涘缓瀹瑰櫒骞惰繍琛�
+
+```
+docker run -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin
+
+/**
+* 濡傞渶鑷畾涔� mysql 绛夐厤缃紝鍙�氳繃 "PARAMS" 鎸囧畾锛屽弬鏁版牸寮� RAMS="--key=value  --key2=value2" 锛�
+* 閰嶇疆椤瑰弬鑰冩枃浠讹細/xxl-job/xxl-job-admin/src/main/Autowireds/application.properties
+*/
+docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin
+```
+
+
+### 2.4 閰嶇疆閮ㄧ讲鈥滄墽琛屽櫒椤圭洰鈥�
+
+    鈥滄墽琛屽櫒鈥濋」鐩細xxl-job-executor-sample-springboot (鎻愪緵澶氱鐗堟湰鎵ц鍣ㄤ緵閫夋嫨锛岀幇浠� springboot 鐗堟湰涓轰緥锛屽彲鐩存帴浣跨敤锛屼篃鍙互鍙傝�冨叾骞跺皢鐜版湁椤圭洰鏀归�犳垚鎵ц鍣�)
+    浣滅敤锛氳礋璐f帴鏀垛�滆皟搴︿腑蹇冣�濈殑璋冨害骞舵墽琛岋紱鍙洿鎺ラ儴缃叉墽琛屽櫒锛屼篃鍙互灏嗘墽琛屽櫒闆嗘垚鍒扮幇鏈変笟鍔¢」鐩腑銆�
+    
+#### 姝ラ涓�锛歮aven渚濊禆
+纭pom鏂囦欢涓紩鍏ヤ簡 "xxl-job-core" 鐨刴aven渚濊禆锛�
+    
+#### 姝ラ浜岋細鎵ц鍣ㄩ厤缃�
+鎵ц鍣ㄩ厤缃紝閰嶇疆鏂囦欢鍦板潃锛�
+
+    /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/Autowireds/application.properties
+
+鎵ц鍣ㄩ厤缃紝閰嶇疆鍐呭璇存槑锛�
+
+    ### 璋冨害涓績閮ㄧ讲璺熷湴鍧� [閫夊~]锛氬璋冨害涓績闆嗙兢閮ㄧ讲瀛樺湪澶氫釜鍦板潃鍒欑敤閫楀彿鍒嗛殧銆傛墽琛屽櫒灏嗕細浣跨敤璇ュ湴鍧�杩涜"鎵ц鍣ㄥ績璺虫敞鍐�"鍜�"浠诲姟缁撴灉鍥炶皟"锛涗负绌哄垯鍏抽棴鑷姩娉ㄥ唽锛�
+    xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
+    
+    ### 鎵ц鍣ˋppName [閫夊~]锛氭墽琛屽櫒蹇冭烦娉ㄥ唽鍒嗙粍渚濇嵁锛涗负绌哄垯鍏抽棴鑷姩娉ㄥ唽
+    xxl.job.executor.appname=xxl-job-executor-sample
+    
+    ### 鎵ц鍣↖P [閫夊~]锛氶粯璁や负绌鸿〃绀鸿嚜鍔ㄨ幏鍙朓P锛屽缃戝崱鏃跺彲鎵嬪姩璁剧疆鎸囧畾IP锛岃IP涓嶄細缁戝畾Host浠呬綔涓洪�氳瀹炵敤锛涘湴鍧�淇℃伅鐢ㄤ簬 "鎵ц鍣ㄦ敞鍐�" 鍜� "璋冨害涓績璇锋眰骞惰Е鍙戜换鍔�"锛�
+    xxl.job.executor.ip=
+    
+    ### 鎵ц鍣ㄧ鍙e彿 [閫夊~]锛氬皬浜庣瓑浜�0鍒欒嚜鍔ㄨ幏鍙栵紱榛樿绔彛涓�9999锛屽崟鏈洪儴缃插涓墽琛屽櫒鏃讹紝娉ㄦ剰瑕侀厤缃笉鍚屾墽琛屽櫒绔彛锛�
+    xxl.job.executor.port=9999
+    
+    ### 鎵ц鍣ㄩ�氳TOKEN [閫夊~]锛氶潪绌烘椂鍚敤锛�
+    xxl.job.accessToken=
+        
+    ### 鎵ц鍣ㄨ繍琛屾棩蹇楁枃浠跺瓨鍌ㄧ鐩樿矾寰� [閫夊~] 锛氶渶瑕佸璇ヨ矾寰勬嫢鏈夎鍐欐潈闄愶紱涓虹┖鍒欎娇鐢ㄩ粯璁よ矾寰勶紱
+    xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
+    
+    ### 鎵ц鍣ㄦ棩蹇楁枃浠朵繚瀛樺ぉ鏁� [閫夊~] 锛� 杩囨湡鏃ュ織鑷姩娓呯悊, 闄愬埗鍊煎ぇ浜庣瓑浜�3鏃剁敓鏁�; 鍚﹀垯, 濡�-1, 鍏抽棴鑷姩娓呯悊鍔熻兘锛�
+    xxl.job.executor.logretentiondays=30
+    
+
+#### 姝ラ涓夛細鎵ц鍣ㄧ粍浠堕厤缃�
+
+鎵ц鍣ㄧ粍浠讹紝閰嶇疆鏂囦欢鍦板潃锛�
+
+    /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
+
+鎵ц鍣ㄧ粍浠讹紝閰嶇疆鍐呭璇存槑锛�
+
+```
+@Bean
+public XxlJobSpringExecutor xxlJobExecutor() {
+    logger.info(">>>>>>>>>>> xxl-job config init.");
+    XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+    xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
+    xxlJobSpringExecutor.setAppName(appName);
+    xxlJobSpringExecutor.setIp(ip);
+    xxlJobSpringExecutor.setPort(port);
+    xxlJobSpringExecutor.setAccessToken(accessToken);
+    xxlJobSpringExecutor.setLogPath(logPath);
+    xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
+
+    return xxlJobSpringExecutor;
+}
+```
+
+#### 姝ラ鍥涳細閮ㄧ讲鎵ц鍣ㄩ」鐩細
+濡傛灉宸茬粡姝g‘杩涜涓婅堪閰嶇疆锛屽彲灏嗘墽琛屽櫒椤圭洰缂栬瘧鎵撻儴缃诧紝绯荤粺鎻愪緵澶氱鎵ц鍣⊿ample绀轰緥椤圭洰锛岄�夋嫨鍏朵腑涓�涓嵆鍙紝鍚勮嚜鐨勯儴缃叉柟寮忓涓嬨��
+
+    xxl-job-executor-sample-springboot锛氶」鐩紪璇戞墦鍖呮垚springboot绫诲瀷鐨勫彲鎵цJAR鍖咃紝鍛戒护鍚姩鍗冲彲锛�
+    xxl-job-executor-sample-spring锛氶」鐩紪璇戞墦鍖呮垚WAR鍖咃紝骞堕儴缃插埌tomcat涓��
+    xxl-job-executor-sample-jfinal锛氬悓涓�
+    xxl-job-executor-sample-nutz锛氬悓涓�
+    xxl-job-executor-sample-jboot锛氬悓涓�
+    
+
+鑷虫鈥滄墽琛屽櫒鈥濋」鐩凡缁忛儴缃茬粨鏉熴��
+
+#### 姝ラ浜旓細鎵ц鍣ㄩ泦缇わ紙鍙�夛級锛�
+鎵ц鍣ㄦ敮鎸侀泦缇ら儴缃诧紝鎻愬崌璋冨害绯荤粺鍙敤鎬э紝鍚屾椂鎻愬崌浠诲姟澶勭悊鑳藉姏銆�
+
+鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屽嚑鐐硅姹傚拰寤鸿锛�
+- 鎵ц鍣ㄥ洖璋冨湴鍧�锛坸xl.job.admin.addresses锛夐渶瑕佷繚鎸佷竴鑷达紱鎵ц鍣ㄦ牴鎹閰嶇疆杩涜鎵ц鍣ㄨ嚜鍔ㄦ敞鍐岀瓑鎿嶄綔銆� 
+- 鍚屼竴涓墽琛屽櫒闆嗙兢鍐匒ppName锛坸xl.job.executor.appname锛夐渶瑕佷繚鎸佷竴鑷达紱璋冨害涓績鏍规嵁璇ラ厤缃姩鎬佸彂鐜颁笉鍚岄泦缇ょ殑鍦ㄧ嚎鎵ц鍣ㄥ垪琛ㄣ��
+
+
+### 2.5 寮�鍙戠涓�涓换鍔♀�淗ello World鈥�       
+鏈ず渚嬩互鏂板缓涓�涓� 鈥淕LUE妯″紡(Java)鈥� 杩愯妯″紡鐨勪换鍔′负渚嬨�傛洿澶氭湁鍏充换鍔$殑璇︾粏閰嶇疆锛岃鏌ョ湅鈥滅珷鑺備笁锛氫换鍔¤瑙b�濄��
+锛� 鈥淕LUE妯″紡(Java)鈥濈殑鎵ц浠g爜鎵樼鍒拌皟搴︿腑蹇冨湪绾跨淮鎶わ紝鐩告瘮鈥淏ean妯″紡浠诲姟鈥濋渶瑕佸湪鎵ц鍣ㄩ」鐩紑鍙戦儴缃蹭笂绾匡紝鏇村姞绠�渚胯交閲忥級
+
+> 鍓嶆彁锛氳纭鈥滆皟搴︿腑蹇冣�濆拰鈥滄墽琛屽櫒鈥濋」鐩凡缁忔垚鍔熼儴缃插苟鍚姩锛�
+
+#### 姝ラ涓�锛氭柊寤轰换鍔★細
+鐧诲綍璋冨害涓績锛岀偣鍑讳笅鍥炬墍绀衡�滄柊寤轰换鍔♀�濇寜閽紝鏂板缓绀轰緥浠诲姟銆傜劧鍚庯紝鍙傝�冧笅闈㈡埅鍥句腑浠诲姟鐨勫弬鏁伴厤缃紝鐐瑰嚮淇濆瓨銆�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_o8HQ.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAsz.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+
+#### 姝ラ浜岋細鈥淕LUE妯″紡(Java)鈥� 浠诲姟寮�鍙戯細
+璇风偣鍑讳换鍔″彸渚� 鈥淕LUE鈥� 鎸夐挳锛岃繘鍏� 鈥淕LUE缂栬緫鍣ㄥ紑鍙戠晫闈⑩�� 锛岃涓嬪浘銆傗�淕LUE妯″紡(Java)鈥� 杩愯妯″紡鐨勪换鍔¢粯璁ゅ凡缁忓垵濮嬪寲浜嗙ず渚嬩换鍔′唬鐮侊紝鍗虫墦鍗癏ello World銆�
+锛� 鈥淕LUE妯″紡(Java)鈥� 杩愯妯″紡鐨勪换鍔″疄闄呬笂鏄竴娈电户鎵胯嚜IJobHandler鐨凧ava绫讳唬鐮侊紝瀹冨湪鎵ц鍣ㄩ」鐩腑杩愯锛屽彲浣跨敤@Autowired/@Autowire娉ㄥ叆鎵ц鍣ㄩ噷涓殑鍏朵粬鏈嶅姟锛岃缁嗕粙缁嶈鏌ョ湅绗笁绔犺妭锛�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Fgql.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_dNUJ.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+#### 姝ラ涓夛細瑙﹀彂鎵ц锛�
+璇风偣鍑讳换鍔″彸渚� 鈥滄墽琛屸�� 鎸夐挳锛屽彲鎵嬪姩瑙﹀彂涓�娆′换鍔℃墽琛岋紙閫氬父鎯呭喌涓嬶紝閫氳繃閰嶇疆Cron琛ㄨ揪寮忚繘琛屼换鍔¤皟搴﹀嚭鍙戯級銆�
+
+#### 姝ラ鍥涳細鏌ョ湅鏃ュ織锛� 
+璇风偣鍑讳换鍔″彸渚� 鈥滄棩蹇椻�� 鎸夐挳锛屽彲鍓嶅線浠诲姟鏃ュ織鐣岄潰鏌ョ湅浠诲姟鏃ュ織銆�
+鍦ㄤ换鍔℃棩蹇楃晫闈腑锛屽彲鏌ョ湅璇ヤ换鍔$殑鍘嗗彶璋冨害璁板綍浠ュ強姣忎竴娆¤皟搴︾殑浠诲姟璋冨害淇℃伅銆佹墽琛屽弬鏁板拰鎵ц淇℃伅銆傝繍琛屼腑鐨勪换鍔$偣鍑诲彸渚х殑鈥滄墽琛屾棩蹇椻�濇寜閽紝鍙繘鍏ユ棩蹇楁帶鍒跺彴鏌ョ湅瀹炴椂鎵ц鏃ュ織銆�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_inc8.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+鍦ㄦ棩蹇楁帶鍒跺彴锛屽彲浠olling鏂瑰紡瀹炴椂鏌ョ湅浠诲姟鍦ㄦ墽琛屽櫒涓�渚ц繍琛岃緭鍑虹殑鏃ュ織淇℃伅锛屽疄鏃剁洃鎺т换鍔¤繘搴︼紱
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_eYrv.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+## 涓夈�佷换鍔¤瑙�
+
+### 閰嶇疆灞炴�ц缁嗚鏄庯細
+
+    - 鎵ц鍣細浠诲姟鐨勭粦瀹氱殑鎵ц鍣紝浠诲姟瑙﹀彂璋冨害鏃跺皢浼氳嚜鍔ㄥ彂鐜版敞鍐屾垚鍔熺殑鎵ц鍣�, 瀹炵幇浠诲姟鑷姩鍙戠幇鍔熻兘; 鍙︿竴鏂归潰涔熷彲浠ユ柟渚跨殑杩涜浠诲姟鍒嗙粍銆傛瘡涓换鍔″繀椤荤粦瀹氫竴涓墽琛屽櫒, 鍙湪 "鎵ц鍣ㄧ鐞�" 杩涜璁剧疆;
+    - 浠诲姟鎻忚堪锛氫换鍔$殑鎻忚堪淇℃伅锛屼究浜庝换鍔$鐞嗭紱
+    - 璺敱绛栫暐锛氬綋鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屾彁渚涗赴瀵岀殑璺敱绛栫暐锛屽寘鎷紱
+        FIRST锛堢涓�涓級锛氬浐瀹氶�夋嫨绗竴涓満鍣紱
+        LAST锛堟渶鍚庝竴涓級锛氬浐瀹氶�夋嫨鏈�鍚庝竴涓満鍣紱
+        ROUND锛堣疆璇級锛氾紱
+        RANDOM锛堥殢鏈猴級锛氶殢鏈洪�夋嫨鍦ㄧ嚎鐨勬満鍣紱
+        CONSISTENT_HASH锛堜竴鑷存�ASH锛夛細姣忎釜浠诲姟鎸夌収Hash绠楁硶鍥哄畾閫夋嫨鏌愪竴鍙版満鍣紝涓旀墍鏈変换鍔″潎鍖�鏁e垪鍦ㄤ笉鍚屾満鍣ㄤ笂銆�
+        LEAST_FREQUENTLY_USED锛堟渶涓嶇粡甯镐娇鐢級锛氫娇鐢ㄩ鐜囨渶浣庣殑鏈哄櫒浼樺厛琚�変妇锛�
+        LEAST_RECENTLY_USED锛堟渶杩戞渶涔呮湭浣跨敤锛夛細鏈�涔呬负浣跨敤鐨勬満鍣ㄤ紭鍏堣閫変妇锛�
+        FAILOVER锛堟晠闅滆浆绉伙級锛氭寜鐓ч『搴忎緷娆¤繘琛屽績璺虫娴嬶紝绗竴涓績璺虫娴嬫垚鍔熺殑鏈哄櫒閫夊畾涓虹洰鏍囨墽琛屽櫒骞跺彂璧疯皟搴︼紱
+        BUSYOVER锛堝繖纰岃浆绉伙級锛氭寜鐓ч『搴忎緷娆¤繘琛岀┖闂叉娴嬶紝绗竴涓┖闂叉娴嬫垚鍔熺殑鏈哄櫒閫夊畾涓虹洰鏍囨墽琛屽櫒骞跺彂璧疯皟搴︼紱
+        SHARDING_BROADCAST(鍒嗙墖骞挎挱)锛氬箍鎾Е鍙戝搴旈泦缇や腑鎵�鏈夋満鍣ㄦ墽琛屼竴娆′换鍔★紝鍚屾椂绯荤粺鑷姩浼犻�掑垎鐗囧弬鏁帮紱鍙牴鎹垎鐗囧弬鏁板紑鍙戝垎鐗囦换鍔★紱
+        
+    - Cron锛氳Е鍙戜换鍔℃墽琛岀殑Cron琛ㄨ揪寮忥紱
+    - 杩愯妯″紡锛�
+        BEAN妯″紡锛氫换鍔′互JobHandler鏂瑰紡缁存姢鍦ㄦ墽琛屽櫒绔紱闇�瑕佺粨鍚� "JobHandler" 灞炴�у尮閰嶆墽琛屽櫒涓换鍔★紱
+        GLUE妯″紡(Java)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈电户鎵胯嚜IJobHandler鐨凧ava绫讳唬鐮佸苟 "groovy" 婧愮爜鏂瑰紡缁存姢锛屽畠鍦ㄦ墽琛屽櫒椤圭洰涓繍琛岋紝鍙娇鐢ˊAutowired/@Autowire娉ㄥ叆鎵ц鍣ㄩ噷涓殑鍏朵粬鏈嶅姟锛�
+        GLUE妯″紡(Shell)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "shell" 鑴氭湰锛�
+        GLUE妯″紡(Python)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "python" 鑴氭湰锛�
+        GLUE妯″紡(PHP)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "php" 鑴氭湰锛�
+        GLUE妯″紡(NodeJS)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "nodejs" 鑴氭湰锛�
+        GLUE妯″紡(PowerShell)锛氫换鍔′互婧愮爜鏂瑰紡缁存姢鍦ㄨ皟搴︿腑蹇冿紱璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "PowerShell" 鑴氭湰锛�
+    - JobHandler锛氳繍琛屾ā寮忎负 "BEAN妯″紡" 鏃剁敓鏁堬紝瀵瑰簲鎵ц鍣ㄤ腑鏂板紑鍙戠殑JobHandler绫烩�淍JobHandler鈥濇敞瑙h嚜瀹氫箟鐨剉alue鍊硷紱
+    - 闃诲澶勭悊绛栫暐锛氳皟搴﹁繃浜庡瘑闆嗘墽琛屽櫒鏉ヤ笉鍙婂鐞嗘椂鐨勫鐞嗙瓥鐣ワ紱
+        鍗曟満涓茶锛堥粯璁わ級锛氳皟搴﹁姹傝繘鍏ュ崟鏈烘墽琛屽櫒鍚庯紝璋冨害璇锋眰杩涘叆FIFO闃熷垪骞朵互涓茶鏂瑰紡杩愯锛�
+        涓㈠純鍚庣画璋冨害锛氳皟搴﹁姹傝繘鍏ュ崟鏈烘墽琛屽櫒鍚庯紝鍙戠幇鎵ц鍣ㄥ瓨鍦ㄨ繍琛岀殑璋冨害浠诲姟锛屾湰娆¤姹傚皢浼氳涓㈠純骞舵爣璁颁负澶辫触锛�
+        瑕嗙洊涔嬪墠璋冨害锛氳皟搴﹁姹傝繘鍏ュ崟鏈烘墽琛屽櫒鍚庯紝鍙戠幇鎵ц鍣ㄥ瓨鍦ㄨ繍琛岀殑璋冨害浠诲姟锛屽皢浼氱粓姝㈣繍琛屼腑鐨勮皟搴︿换鍔″苟娓呯┖闃熷垪锛岀劧鍚庤繍琛屾湰鍦拌皟搴︿换鍔★紱
+    - 瀛愪换鍔★細姣忎釜浠诲姟閮芥嫢鏈変竴涓敮涓�鐨勪换鍔D(浠诲姟ID鍙互浠庝换鍔″垪琛ㄨ幏鍙�)锛屽綋鏈换鍔℃墽琛岀粨鏉熷苟涓旀墽琛屾垚鍔熸椂锛屽皢浼氳Е鍙戝瓙浠诲姟ID鎵�瀵瑰簲鐨勪换鍔$殑涓�娆′富鍔ㄨ皟搴︺��
+    - 浠诲姟瓒呮椂鏃堕棿锛氭敮鎸佽嚜瀹氫箟浠诲姟瓒呮椂鏃堕棿锛屼换鍔¤繍琛岃秴鏃跺皢浼氫富鍔ㄤ腑鏂换鍔★紱
+    - 澶辫触閲嶈瘯娆℃暟锛涙敮鎸佽嚜瀹氫箟浠诲姟澶辫触閲嶈瘯娆℃暟锛屽綋浠诲姟澶辫触鏃跺皢浼氭寜鐓ч璁剧殑澶辫触閲嶈瘯娆℃暟涓诲姩杩涜閲嶈瘯锛�
+    - 鎶ヨ閭欢锛氫换鍔¤皟搴﹀け璐ユ椂閭欢閫氱煡鐨勯偖绠卞湴鍧�锛屾敮鎸侀厤缃閭鍦板潃锛岄厤缃涓偖绠卞湴鍧�鏃剁敤閫楀彿鍒嗛殧锛�
+    - 璐熻矗浜猴細浠诲姟鐨勮礋璐d汉锛�
+    - 鎵ц鍙傛暟锛氫换鍔℃墽琛屾墍闇�鐨勫弬鏁帮紱
+
+    
+### 3.1 BEAN妯″紡锛堢被褰㈠紡锛�
+
+鍩轰簬绫荤殑Bean妯″紡寮�鍙戞柟寮忥紝杩欐槸姣旇緝鍘熷鐨勪竴绉嶅紑鍙戞柟寮忋��
+
+- 浼樼偣锛氬吋瀹规�уソ銆佷笉闄愬埗椤圭洰鐜锛屽嵆浣挎槸鏃犳鏋堕」鐩紝濡俶ain鏂规硶鐩存帴鍚姩鐨勯」鐩篃鍙互鎻愪緵鏀寔锛屽彲浠ュ弬鑰冪ず渚嬮」鐩� "xxl-job-executor-sample-frameless"锛�
+- 缂虹偣锛氭瘡涓换鍔¢渶瑕佸崰鐢ㄤ竴涓狫ava绫伙紝姣旇緝娴垂璧勬簮锛涜�屼笖锛屼笉鏀寔鑷姩鎵弿浠诲姟娉ㄥ叆鍒版墽琛屽櫒瀹瑰櫒锛岄渶瑕佹墜鍔ㄦ敞鍏ャ��
+
+#### 姝ラ涓�锛氭墽琛屽櫒椤圭洰涓紝寮�鍙慗ob绫伙細
+
+    - 1銆佸紑鍙戜竴涓户鎵胯嚜"com.xxl.job.core.handler.IJobHandler"鐨凧obHandler绫汇��
+    - 2銆佹墜鍔ㄩ�氳繃濡備笅鏂瑰紡娉ㄥ叆鍒版墽琛屽櫒瀹瑰櫒銆�
+    ```
+    XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
+    ```
+
+#### 姝ラ浜岋細璋冨害涓績锛屾柊寤鸿皟搴︿换鍔�
+鍚庣画姝ラ鍜� "3.2 BEAN妯″紡锛堟柟娉曞舰寮忥級"涓�鑷达紝鍙互鍓嶅線鍙傝�冦��
+
+
+### 3.2 BEAN妯″紡锛堟柟娉曞舰寮忥級
+
+鍩轰簬鏂规硶鐨凚ean妯″紡寮�鍙戞柟寮忥紝杩欐槸姣旇緝鎺ㄨ崘鐨勫紑鍙戞柟寮忋��
+
+- 浼樼偣锛氭瘡涓换鍔″彧闇�瑕佸紑鍙戜竴涓柟娉曪紝娣诲姞"@XxlJob"娉ㄨВ鍗冲彲銆傛洿鍔犳柟渚裤�佸揩閫熴�備細鑷姩鎵弿浠诲姟娉ㄥ叆鍒版墽琛屽櫒瀹瑰櫒銆�
+- 缂虹偣锛氳姹係pring瀹瑰櫒鐜锛�
+
+>鍩轰簬鏂规硶寮�鍙戠殑浠诲姟锛屽簳灞備細鐢熸垚JobHandler浠g悊锛屽拰鍩轰簬绫荤殑鏂瑰紡涓�鏍凤紝浠诲姟涔熶細浠obHandler鐨勫舰寮忓瓨鍦ㄤ簬鎵ц鍣ㄤ换鍔″鍣ㄤ腑銆�
+
+#### 姝ラ涓�锛氭墽琛屽櫒椤圭洰涓紝寮�鍙慗ob鏂规硶锛�
+
+    - 1銆佸湪Spring Bean瀹炰緥涓紝寮�鍙慗ob鏂规硶锛屾柟寮忔牸寮忚姹備负 "public ReturnT<String> execute(String param)"
+    - 2銆佷负Job鏂规硶娣诲姞娉ㄨВ "@XxlJob(value="鑷畾涔塲obhandler鍚嶇О", init = "JobHandler鍒濆鍖栨柟娉�", destroy = "JobHandler閿�姣佹柟娉�")"锛屾敞瑙alue鍊煎搴旂殑鏄皟搴︿腑蹇冩柊寤轰换鍔$殑JobHandler灞炴�х殑鍊笺��
+    - 3銆佹墽琛屾棩蹇楋細闇�瑕侀�氳繃 "XxlJobLogger.log" 鎵撳嵃鎵ц鏃ュ織锛�
+    
+```
+// 鍙弬鑰僑ample绀轰緥鎵ц鍣ㄤ腑鐨� "com.xxl.job.executor.service.jobhandler.SampleXxlJob" 锛屽涓嬶細
+@XxlJob("demoJobHandler")
+public ReturnT<String> execute(String param) {
+
+    XxlJobLogger.log("hello world.");
+    return ReturnT.SUCCESS;
+}
+```
+
+#### 姝ラ浜岋細璋冨害涓績锛屾柊寤鸿皟搴︿换鍔�
+鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "BEAN妯″紡"锛孞obHandler灞炴�у~鍐欎换鍔℃敞瑙b�淍XxlJob鈥濅腑瀹氫箟鐨勫�硷紱
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAsz.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+#### 鍘熺敓鍐呯疆Bean妯″紡浠诲姟
+涓烘柟渚跨敤鎴峰弬鑰冧笌蹇�熷疄鐢紝绀轰緥鎵ц鍣ㄥ唴鍘熺敓鎻愪緵澶氫釜Bean妯″紡浠诲姟Handler锛屽彲浠ョ洿鎺ラ厤缃疄鐢紝濡備笅锛�
+
+- demoJobHandler锛氱畝鍗曠ず渚嬩换鍔★紝浠诲姟鍐呴儴妯℃嫙鑰楁椂浠诲姟閫昏緫锛岀敤鎴峰彲鍦ㄧ嚎浣撻獙Rolling Log绛夊姛鑳斤紱
+- shardingJobHandler锛氬垎鐗囩ず渚嬩换鍔★紝浠诲姟鍐呴儴妯℃嫙澶勭悊鍒嗙墖鍙傛暟锛屽彲鍙傝�冪啛鎮夊垎鐗囦换鍔★紱
+- httpJobHandler锛氶�氱敤HTTP浠诲姟Handler锛涗笟鍔℃柟鍙渶瑕佹彁渚汬TTP閾炬帴鍗冲彲锛屼笉闄愬埗璇█銆佸钩鍙帮紱
+- commandJobHandler锛氶�氱敤鍛戒护琛屼换鍔andler锛涗笟鍔℃柟鍙渶瑕佹彁渚涘懡浠よ鍗冲彲锛涘 鈥減wd鈥濆懡浠わ紱
+
+
+### 3.3 GLUE妯″紡(Java)
+浠诲姟浠ユ簮鐮佹柟寮忕淮鎶ゅ湪璋冨害涓績锛屾敮鎸侀�氳繃Web IDE鍦ㄧ嚎鏇存柊锛屽疄鏃剁紪璇戝拰鐢熸晥锛屽洜姝や笉闇�瑕佹寚瀹欽obHandler銆傚紑鍙戞祦绋嬪涓嬶細
+
+#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟锛�
+鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(Java)"锛�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_tJOq.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
+閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
+
+鐗堟湰鍥炴函鍔熻兘锛堟敮鎸�30涓増鏈殑鐗堟湰鍥炴函锛夛細鍦℅LUE浠诲姟鐨刉eb IDE鐣岄潰锛岄�夋嫨鍙充笂瑙掍笅鎷夋鈥滅増鏈洖婧�濓紝浼氬垪鍑鸿GLUE鐨勬洿鏂板巻鍙诧紝閫夋嫨鐩稿簲鐗堟湰鍗冲彲鏄剧ず璇ョ増鏈唬鐮侊紝淇濆瓨鍚嶨LUE浠g爜鍗冲洖閫�鍒板搴旂殑鍘嗗彶鐗堟湰锛�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_dNUJ.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 3.4 GLUE妯″紡(Shell)
+
+#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟   
+鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(Shell)"锛�
+
+#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
+閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
+
+璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "shell" 鑴氭湰锛�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_iUw0.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 3.4 GLUE妯″紡(Python)
+
+#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟   
+鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(Python)"锛�
+
+#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
+閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
+
+璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "python" 鑴氭湰锛�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_BPLG.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 3.5 GLUE妯″紡(NodeJS)
+
+#### 姝ラ涓�锛氳皟搴︿腑蹇冿紝鏂板缓璋冨害浠诲姟   
+鍙傝�冧笂鏂団�滈厤缃睘鎬ц缁嗚鏄庘�濆鏂板缓鐨勪换鍔¤繘琛屽弬鏁伴厤缃紝杩愯妯″紡閫変腑 "GLUE妯″紡(NodeJS)"锛�
+
+#### 姝ラ浜岋細寮�鍙戜换鍔′唬鐮侊細
+閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戯紙涔熷彲浠ュ湪IDE涓紑鍙戝畬鎴愬悗锛屽鍒剁矘璐村埌缂栬緫涓級銆�
+
+璇ユā寮忕殑浠诲姟瀹為檯涓婃槸涓�娈� "nodeJS" 鑴氭湰锛�
+
+### 3.6 GLUE妯″紡(PHP)
+鍚屼笂
+
+### 3.7 GLUE妯″紡(PowerShell)
+鍚屼笂
+
+
+
+## 鍥涖�佹搷浣滄寚鍗�
+
+### 4.1 閰嶇疆鎵ц鍣�
+鐐瑰嚮杩涘叆"鎵ц鍣ㄧ鐞�"鐣岄潰, 濡備笅鍥�:
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Hr2T.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+    1銆�"璋冨害涓績OnLine:"鍙充晶鏄剧ず鍦ㄧ嚎鐨�"璋冨害涓績"鍒楄〃, 浠诲姟鎵ц缁撴潫鍚�, 灏嗕細浠ailover鐨勬ā寮忚繘琛屽洖璋冭皟搴︿腑蹇冮�氱煡鎵ц缁撴灉, 閬垮厤鍥炶皟鐨勫崟鐐归闄�;
+    2銆�"鎵ц鍣ㄥ垪琛�" 涓樉绀哄湪绾跨殑鎵ц鍣ㄥ垪琛�, 鍙�氳繃"OnLine 鏈哄櫒"鏌ョ湅瀵瑰簲鎵ц鍣ㄧ殑闆嗙兢鏈哄櫒銆�
+
+鐐瑰嚮鎸夐挳 "+鏂板鎵ц鍣�" 寮规濡備笅鍥�, 鍙柊澧炴墽琛屽櫒閰嶇疆:
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_V3vF.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+鎵ц鍣ㄥ睘鎬ц鏄�
+
+    AppName: 鏄瘡涓墽琛屽櫒闆嗙兢鐨勫敮涓�鏍囩ずAppName, 鎵ц鍣ㄤ細鍛ㄦ湡鎬т互AppName涓哄璞¤繘琛岃嚜鍔ㄦ敞鍐屻�傚彲閫氳繃璇ラ厤缃嚜鍔ㄥ彂鐜版敞鍐屾垚鍔熺殑鎵ц鍣�, 渚涗换鍔¤皟搴︽椂浣跨敤;
+    鍚嶇О: 鎵ц鍣ㄧ殑鍚嶇О, 鍥犱负AppName闄愬埗瀛楁瘝鏁板瓧绛夌粍鎴�,鍙鎬т笉寮�, 鍚嶇О涓轰簡鎻愰珮鎵ц鍣ㄧ殑鍙鎬�;
+    鎺掑簭: 鎵ц鍣ㄧ殑鎺掑簭, 绯荤粺涓渶瑕佹墽琛屽櫒鐨勫湴鏂�,濡備换鍔℃柊澧�, 灏嗕細鎸夌収璇ユ帓搴忚鍙栧彲鐢ㄧ殑鎵ц鍣ㄥ垪琛�;
+    娉ㄥ唽鏂瑰紡锛氳皟搴︿腑蹇冭幏鍙栨墽琛屽櫒鍦板潃鐨勬柟寮忥紱
+        鑷姩娉ㄥ唽锛氭墽琛屽櫒鑷姩杩涜鎵ц鍣ㄦ敞鍐岋紝璋冨害涓績閫氳繃搴曞眰娉ㄥ唽琛ㄥ彲浠ュ姩鎬佸彂鐜版墽琛屽櫒鏈哄櫒鍦板潃锛�
+        鎵嬪姩褰曞叆锛氫汉宸ユ墜鍔ㄥ綍鍏ユ墽琛屽櫒鐨勫湴鍧�淇℃伅锛屽鍦板潃閫楀彿鍒嗛殧锛屼緵璋冨害涓績浣跨敤锛�
+    鏈哄櫒鍦板潃锛�"娉ㄥ唽鏂瑰紡"涓�"鎵嬪姩褰曞叆"鏃舵湁鏁堬紝鏀寔浜哄伐缁存姢鎵ц鍣ㄧ殑鍦板潃淇℃伅锛�
+
+### 4.2 鏂板缓浠诲姟
+杩涘叆浠诲姟绠$悊鐣岄潰锛岀偣鍑烩�滄柊澧炰换鍔♀�濇寜閽紝鍦ㄥ脊鍑虹殑鈥滄柊澧炰换鍔♀�濈晫闈㈤厤缃换鍔″睘鎬у悗淇濆瓨鍗冲彲銆傝鎯呴〉鍙傝�冪珷鑺� "涓夈�佷换鍔¤瑙�"銆�
+
+### 4.3 缂栬緫浠诲姟
+杩涘叆浠诲姟绠$悊鐣岄潰锛岄�変腑鎸囧畾浠诲姟銆傜偣鍑昏浠诲姟鍙充晶鈥滅紪杈戔�濇寜閽紝鍦ㄥ脊鍑虹殑鈥滅紪杈戜换鍔♀�濈晫闈㈡洿鏂颁换鍔″睘鎬у悗淇濆瓨鍗冲彲锛屽彲浠ヤ慨鏀硅缃殑浠诲姟灞炴�т俊鎭細
+
+### 4.4 缂栬緫GLUE浠g爜
+
+璇ユ搷浣滀粎閽堝GLUE浠诲姟銆�
+
+閫変腑鎸囧畾浠诲姟锛岀偣鍑昏浠诲姟鍙充晶鈥淕LUE鈥濇寜閽紝灏嗕細鍓嶅線GLUE浠诲姟鐨刉eb IDE鐣岄潰锛屽湪璇ョ晫闈㈡敮鎸佸浠诲姟浠g爜杩涜寮�鍙戙�傚彲鍙傝�冪珷鑺� "3.3 GLUE妯″紡(Java)"銆�
+
+### 4.5 鍚姩/鍋滄浠诲姟
+鍙浠诲姟杩涜鈥滃惎鍔ㄢ�濆拰鈥滃仠姝⑩�濇搷浣溿��
+闇�瑕佹敞鎰忕殑鏄紝姝ゅ鐨勫惎鍔�/鍋滄浠呴拡瀵逛换鍔$殑鍚庣画璋冨害瑙﹀彂琛屼负锛屼笉浼氬奖鍝嶅埌宸茬粡瑙﹀彂鐨勮皟搴︿换鍔★紝濡傞渶缁堟宸茬粡瑙﹀彂鐨勮皟搴︿换鍔★紝鍙煡鐪嬧��4.9 缁堟杩愯涓殑浠诲姟鈥�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAhX.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 4.6 鎵嬪姩瑙﹀彂涓�娆¤皟搴�
+鐐瑰嚮鈥滄墽琛屸�濇寜閽紝鍙墜鍔ㄨЕ鍙戜竴娆′换鍔¤皟搴︼紝涓嶅奖鍝嶅師鏈夎皟搴﹁鍒欍��
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAhX.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 4.7 鏌ョ湅璋冨害鏃ュ織
+鐐瑰嚮鈥滄棩蹇椻�濇寜閽紝鍙互鏌ョ湅浠诲姟鍘嗗彶璋冨害鏃ュ織銆傚湪鍘嗗彶璋冨叆鏃ュ織鐣岄潰鍙煡鐪嬫瘡娆′换鍔¤皟搴︾殑璋冨害缁撴灉銆佹墽琛岀粨鏋滅瓑锛岀偣鍑烩�滄墽琛屾棩蹇椻�濇寜閽彲鏌ョ湅鎵ц鍣ㄥ畬鏁存棩蹇椼��
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAhX.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_UDSo.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+    璋冨害鏃堕棿锛�"璋冨害涓績"瑙﹀彂鏈璋冨害骞跺悜"鎵ц鍣�"鍙戦�佷换鍔℃墽琛屼俊鍙风殑鏃堕棿锛�
+    璋冨害缁撴灉锛�"璋冨害涓績"瑙﹀彂鏈璋冨害鐨勭粨鏋滐紝200琛ㄧず鎴愬姛锛�500鎴栧叾浠栬〃绀哄け璐ワ紱
+    璋冨害澶囨敞锛�"璋冨害涓績"瑙﹀彂鏈璋冨害鐨勬棩蹇椾俊鎭紱
+    鎵ц鍣ㄥ湴鍧�锛氭湰娆′换鍔℃墽琛岀殑鏈哄櫒鍦板潃
+    杩愯妯″紡锛氳Е鍙戣皟搴︽椂浠诲姟鐨勮繍琛屾ā寮忥紝杩愯妯″紡鍙弬鑰冪珷鑺� "涓夈�佷换鍔¤瑙�"锛�
+    浠诲姟鍙傛暟锛氭湰鍦颁换鍔℃墽琛岀殑鍏ュ弬
+    鎵ц鏃堕棿锛�"鎵ц鍣�"涓湰娆′换鍔℃墽琛岀粨鏉熷悗鍥炶皟鐨勬椂闂达紱
+    鎵ц缁撴灉锛�"鎵ц鍣�"涓湰娆′换鍔℃墽琛岀殑缁撴灉锛�200琛ㄧず鎴愬姛锛�500鎴栧叾浠栬〃绀哄け璐ワ紱
+    鎵ц澶囨敞锛�"鎵ц鍣�"涓湰娆′换鍔℃墽琛岀殑鏃ュ織淇℃伅锛�
+    鎿嶄綔锛�
+        "鎵ц鏃ュ織"鎸夐挳锛氱偣鍑诲彲鏌ョ湅鏈湴浠诲姟鎵ц鐨勮缁嗘棩蹇椾俊鎭紱璇﹁鈥�4.8 鏌ョ湅鎵ц鏃ュ織鈥濓紱
+        "缁堟浠诲姟"鎸夐挳锛氱偣鍑诲彲缁堟鏈湴璋冨害瀵瑰簲鎵ц鍣ㄤ笂鏈换鍔$殑鎵ц绾跨▼锛屽寘鎷湭鎵ц鐨勯樆濉炰换鍔′竴骞惰缁堟锛�
+
+### 4.8 鏌ョ湅鎵ц鏃ュ織
+鐐瑰嚮鎵ц鏃ュ織鍙充晶鐨� 鈥滄墽琛屾棩蹇椻�� 鎸夐挳锛屽彲璺宠浆鑷虫墽琛屾棩蹇楃晫闈紝鍙互鏌ョ湅涓氬姟浠g爜涓墦鍗扮殑瀹屾暣鏃ュ織锛屽涓嬪浘锛�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_tvGI.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 4.9 缁堟杩愯涓殑浠诲姟
+浠呴拡瀵规墽琛屼腑鐨勪换鍔°��
+鍦ㄤ换鍔℃棩蹇楃晫闈紝鐐瑰嚮鍙充晶鐨勨�滅粓姝换鍔♀�濇寜閽紝灏嗕細鍚戞湰娆′换鍔″搴旂殑鎵ц鍣ㄥ彂閫佷换鍔$粓姝㈣姹傦紝灏嗕細缁堟鎺夋湰娆′换鍔★紝鍚屾椂浼氭竻绌烘帀鏁翠釜浠诲姟鎵ц闃熷垪銆�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_hIci.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+浠诲姟缁堟鏃堕�氳繃 "interrupt" 鎵ц绾跨▼鐨勬柟寮忓疄鐜�, 灏嗕細瑙﹀彂 "InterruptedException" 寮傚父銆傚洜姝ゅ鏋淛obHandler鍐呴儴catch鍒颁簡璇ュ紓甯稿苟娑堝寲鎺夌殑璇�, 浠诲姟缁堟鍔熻兘灏嗕笉鍙敤銆�
+
+鍥犳, 濡傛灉閬囧埌涓婅堪浠诲姟缁堟涓嶅彲鐢ㄧ殑鎯呭喌, 闇�瑕佸湪JobHandler涓簲璇ラ拡瀵� "InterruptedException" 寮傚父杩涜鐗规畩澶勭悊 (鍚戜笂鎶涘嚭) , 姝g‘閫昏緫濡備笅:
+```
+try{
+    // do something
+} catch (Exception e) {
+    if (e instanceof InterruptedException) {
+        throw e;
+    }
+    logger.warn("{}", e);
+}
+```
+
+鑰屼笖锛屽湪JobHandler涓紑鍚瓙绾跨▼鏃讹紝瀛愮嚎绋嬩篃涓嶅彲catch澶勭悊"InterruptedException"锛屽簲璇ヤ富鍔ㄥ悜涓婃姏鍑恒��
+
+浠诲姟缁堟鏃朵細鎵ц瀵瑰簲JobHandler鐨�"destroy()"鏂规硶锛屽彲浠ュ�熷姪璇ユ柟娉曞鐞嗕竴浜涜祫婧愬洖鏀剁殑閫昏緫銆�
+
+
+### 4.10 鍒犻櫎鎵ц鏃ュ織
+鍦ㄤ换鍔℃棩蹇楃晫闈紝閫変腑鎵ц鍣ㄥ拰浠诲姟涔嬪悗锛岀偣鍑诲彸渚х殑"鍒犻櫎"鎸夐挳灏嗕細鍑虹幇"鏃ュ織娓呯悊"寮规锛屽脊妗嗕腑鏀寔閫夋嫨涓嶅悓绫诲瀷鐨勬棩蹇楁竻鐞嗙瓥鐣ワ紝閫変腑鍚庣偣鍑�"纭畾"鎸夐挳鍗冲彲杩涜鏃ュ織娓呯悊鎿嶄綔锛�
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Ypik.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_EB65.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 4.11 鍒犻櫎浠诲姟
+鐐瑰嚮鍒犻櫎鎸夐挳锛屽彲浠ュ垹闄ゅ搴斾换鍔°��
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Z9Qr.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 4.12 鐢ㄦ埛绠$悊
+杩涘叆 "鐢ㄦ埛绠$悊" 鐣岄潰锛屽彲鏌ョ湅鍜岀鐞嗙敤鎴蜂俊鎭紱
+
+鐩墠鐢ㄦ埛鍒嗕负涓ょ瑙掕壊锛�
+- 绠$悊鍛橈細鎷ユ湁鍏ㄩ噺鏉冮檺锛屾敮鎸佸湪绾跨鐞嗙敤鎴蜂俊鎭紝涓虹敤鎴峰垎閰嶆潈闄愶紝鏉冮檺鍒嗛厤绮掑害涓烘墽琛屽櫒锛�
+- 鏅�氱敤鎴凤細浠呮嫢鏈夎鍒嗛厤鏉冮檺鐨勬墽琛屽櫒锛屽強鐩稿叧浠诲姟鐨勬搷浣滄潈闄愶紱
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_1001.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_1002.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+
+## 浜斻�佹�讳綋璁捐
+### 5.1 婧愮爜鐩綍浠嬬粛
+    - /doc :鏂囨。璧勬枡
+    - /db :鈥滆皟搴︽暟鎹簱鈥濆缓琛ㄨ剼鏈�
+    - /xxl-job-admin :璋冨害涓績锛岄」鐩簮鐮�
+    - /xxl-job-core :鍏叡Jar渚濊禆
+    - /xxl-job-executor-samples :鎵ц鍣紝Sample绀轰緥椤圭洰锛堝ぇ瀹跺彲浠ュ湪璇ラ」鐩笂杩涜寮�鍙戯紝涔熷彲浠ュ皢鐜版湁椤圭洰鏀归�犵敓鎴愭墽琛屽櫒椤圭洰锛�
+
+### 5.2 鈥滆皟搴︽暟鎹簱鈥濋厤缃�
+XXL-JOB璋冨害妯″潡鍩轰簬鑷爺璋冨害缁勪欢骞舵敮鎸侀泦缇ら儴缃诧紝璋冨害鏁版嵁搴撹〃璇存槑濡備笅锛�
+
+    - xxl_job_lock锛氫换鍔¤皟搴﹂攣琛紱
+    - xxl_job_group锛氭墽琛屽櫒淇℃伅琛紝缁存姢浠诲姟鎵ц鍣ㄤ俊鎭紱
+    - xxl_job_info锛氳皟搴︽墿灞曚俊鎭〃锛� 鐢ㄤ簬淇濆瓨XXL-JOB璋冨害浠诲姟鐨勬墿灞曚俊鎭紝濡備换鍔″垎缁勩�佷换鍔″悕銆佹満鍣ㄥ湴鍧�銆佹墽琛屽櫒銆佹墽琛屽叆鍙傚拰鎶ヨ閭欢绛夌瓑锛�
+    - xxl_job_log锛氳皟搴︽棩蹇楄〃锛� 鐢ㄤ簬淇濆瓨XXL-JOB浠诲姟璋冨害鐨勫巻鍙蹭俊鎭紝濡傝皟搴︾粨鏋溿�佹墽琛岀粨鏋溿�佽皟搴﹀叆鍙傘�佽皟搴︽満鍣ㄥ拰鎵ц鍣ㄧ瓑绛夛紱
+    - xxl_job_log_report锛氳皟搴︽棩蹇楁姤琛細鐢ㄦ埛瀛樺偍XXL-JOB浠诲姟璋冨害鏃ュ織鐨勬姤琛紝璋冨害涓績鎶ヨ〃鍔熻兘椤甸潰浼氱敤鍒帮紱
+    - xxl_job_logglue锛氫换鍔LUE鏃ュ織锛氱敤浜庝繚瀛楪LUE鏇存柊鍘嗗彶锛岀敤浜庢敮鎸丟LUE鐨勭増鏈洖婧姛鑳斤紱
+    - xxl_job_registry锛氭墽琛屽櫒娉ㄥ唽琛紝缁存姢鍦ㄧ嚎鐨勬墽琛屽櫒鍜岃皟搴︿腑蹇冩満鍣ㄥ湴鍧�淇℃伅锛�
+    - xxl_job_user锛氱郴缁熺敤鎴疯〃锛�
+
+
+### 5.3 鏋舵瀯璁捐
+#### 5.3.1 璁捐鎬濇兂
+灏嗚皟搴﹁涓烘娊璞″舰鎴愨�滆皟搴︿腑蹇冣�濆叕鍏卞钩鍙帮紝鑰屽钩鍙拌嚜韬苟涓嶆壙鎷呬笟鍔¢�昏緫锛屸�滆皟搴︿腑蹇冣�濊礋璐e彂璧疯皟搴﹁姹傘��
+
+灏嗕换鍔℃娊璞℃垚鍒嗘暎鐨凧obHandler锛屼氦鐢扁�滄墽琛屽櫒鈥濈粺涓�绠$悊锛屸�滄墽琛屽櫒鈥濊礋璐f帴鏀惰皟搴﹁姹傚苟鎵ц瀵瑰簲鐨凧obHandler涓笟鍔¢�昏緫銆�
+
+鍥犳锛屸�滆皟搴︹�濆拰鈥滀换鍔♀�濅袱閮ㄥ垎鍙互鐩镐簰瑙h�︼紝鎻愰珮绯荤粺鏁翠綋绋冲畾鎬у拰鎵╁睍鎬э紱
+
+#### 5.3.2 绯荤粺缁勬垚
+- **璋冨害妯″潡锛堣皟搴︿腑蹇冿級**锛�
+    璐熻矗绠$悊璋冨害淇℃伅锛屾寜鐓ц皟搴﹂厤缃彂鍑鸿皟搴﹁姹傦紝鑷韩涓嶆壙鎷呬笟鍔′唬鐮併�傝皟搴︾郴缁熶笌浠诲姟瑙h�︼紝鎻愰珮浜嗙郴缁熷彲鐢ㄦ�у拰绋冲畾鎬э紝鍚屾椂璋冨害绯荤粺鎬ц兘涓嶅啀鍙楅檺浜庝换鍔℃ā鍧楋紱
+    鏀寔鍙鍖栥�佺畝鍗曚笖鍔ㄦ�佺殑绠$悊璋冨害淇℃伅锛屽寘鎷换鍔℃柊寤猴紝鏇存柊锛屽垹闄わ紝GLUE寮�鍙戝拰浠诲姟鎶ヨ绛夛紝鎵�鏈変笂杩版搷浣滈兘浼氬疄鏃剁敓鏁堬紝鍚屾椂鏀寔鐩戞帶璋冨害缁撴灉浠ュ強鎵ц鏃ュ織锛屾敮鎸佹墽琛屽櫒Failover銆�
+- **鎵ц妯″潡锛堟墽琛屽櫒锛�**锛�
+    璐熻矗鎺ユ敹璋冨害璇锋眰骞舵墽琛屼换鍔¢�昏緫銆備换鍔℃ā鍧椾笓娉ㄤ簬浠诲姟鐨勬墽琛岀瓑鎿嶄綔锛屽紑鍙戝拰缁存姢鏇村姞绠�鍗曞拰楂樻晥锛�
+    鎺ユ敹鈥滆皟搴︿腑蹇冣�濈殑鎵ц璇锋眰銆佺粓姝㈣姹傚拰鏃ュ織璇锋眰绛夈��
+
+#### 5.3.3 鏋舵瀯鍥�
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Qohm.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### 5.4 璋冨害妯″潡鍓栨瀽
+#### 5.4.1 quartz鐨勪笉瓒�
+Quartz浣滀负寮�婧愪綔涓氳皟搴︿腑鐨勪郊浣艰�咃紝鏄綔涓氳皟搴︾殑棣栭�夈�備絾鏄泦缇ょ幆澧冧腑Quartz閲囩敤API鐨勬柟寮忓浠诲姟杩涜绠$悊锛屼粠鑰屽彲浠ラ伩鍏嶄笂杩伴棶棰橈紝浣嗘槸鍚屾牱瀛樺湪浠ヤ笅闂锛�
+   
+- 闂涓�锛氳皟鐢ˋPI鐨勭殑鏂瑰紡鎿嶄綔浠诲姟锛屼笉浜烘�у寲锛�
+- 闂浜岋細闇�瑕佹寔涔呭寲涓氬姟QuartzJobBean鍒板簳灞傛暟鎹〃涓紝绯荤粺渚靛叆鎬х浉褰撲弗閲嶃��
+- 闂涓夛細璋冨害閫昏緫鍜孮uartzJobBean鑰﹀悎鍦ㄥ悓涓�涓」鐩腑锛岃繖灏嗗鑷翠竴涓棶棰橈紝鍦ㄨ皟搴︿换鍔℃暟閲忛�愭笎澧炲锛屽悓鏃惰皟搴︿换鍔¢�昏緫閫愭笎鍔犻噸鐨勬儏鍐典笅锛屾鏃惰皟搴︾郴缁熺殑鎬ц兘灏嗗ぇ澶у彈闄愪簬涓氬姟锛�
+- 闂鍥涳細quartz搴曞眰浠モ�滄姠鍗犲紡鈥濊幏鍙朌B閿佸苟鐢辨姠鍗犳垚鍔熻妭鐐硅礋璐h繍琛屼换鍔★紝浼氬鑷磋妭鐐硅礋杞芥偓娈婇潪甯稿ぇ锛涜�孹XL-JOB閫氳繃鎵ц鍣ㄥ疄鐜扳�滃崗鍚屽垎閰嶅紡鈥濊繍琛屼换鍔★紝鍏呭垎鍙戞尌闆嗙兢浼樺娍锛岃礋杞藉悇鑺傜偣鍧囪 銆�
+
+XXL-JOB寮ヨˉ浜唓uartz鐨勪笂杩颁笉瓒充箣澶勩��
+
+#### 5.4.2 鑷爺璋冨害妯″潡
+XXL-JOB鏈�缁堥�夋嫨鑷爺璋冨害缁勪欢锛堟棭鏈熻皟搴︾粍浠跺熀浜嶲uartz锛夛紱涓�鏂归潰鏄负浜嗙簿绠�绯荤粺闄嶄綆鍐椾綑渚濊禆锛屽彟涓�鏂归潰鏄负浜嗘彁渚涚郴缁熺殑鍙帶搴︿笌绋冲畾鎬э紱
+
+XXL-JOB涓�滆皟搴︽ā鍧椻�濆拰鈥滀换鍔℃ā鍧椻�濆畬鍏ㄨВ鑰︼紝璋冨害妯″潡杩涜浠诲姟璋冨害鏃讹紝灏嗕細瑙f瀽涓嶅悓鐨勪换鍔″弬鏁板彂璧疯繙绋嬭皟鐢紝璋冪敤鍚勮嚜鐨勮繙绋嬫墽琛屽櫒鏈嶅姟銆傝繖绉嶈皟鐢ㄦā鍨嬬被浼糝PC璋冪敤锛岃皟搴︿腑蹇冩彁渚涜皟鐢ㄤ唬鐞嗙殑鍔熻兘锛岃�屾墽琛屽櫒鎻愪緵杩滅▼鏈嶅姟鐨勫姛鑳姐��
+
+#### 5.4.3 璋冨害涓績HA锛堥泦缇わ級
+鍩轰簬鏁版嵁搴撶殑闆嗙兢鏂规锛屾暟鎹簱閫夌敤Mysql锛涢泦缇ゅ垎甯冨紡骞跺彂鐜涓繘琛屽畾鏃朵换鍔¤皟搴︽椂锛屼細鍦ㄥ悇涓妭鐐逛細涓婃姤浠诲姟锛屽瓨鍒版暟鎹簱涓紝鎵ц鏃朵細浠庢暟鎹簱涓彇鍑鸿Е鍙戝櫒鏉ユ墽琛岋紝濡傛灉瑙﹀彂鍣ㄧ殑鍚嶇О鍜屾墽琛屾椂闂寸浉鍚岋紝鍒欏彧鏈変竴涓妭鐐瑰幓鎵ц姝や换鍔°��
+
+#### 5.4.4 璋冨害绾跨▼姹�
+璋冨害閲囩敤绾跨▼姹犳柟寮忓疄鐜帮紝閬垮厤鍗曠嚎绋嬪洜闃诲鑰屽紩璧蜂换鍔¤皟搴﹀欢杩熴��
+
+
+#### 5.4.5 骞惰璋冨害
+XXL-JOB璋冨害妯″潡榛樿閲囩敤骞惰鏈哄埗锛屽湪澶氱嚎绋嬭皟搴︾殑鎯呭喌涓嬶紝璋冨害妯″潡琚樆濉炵殑鍑犵巼寰堜綆锛屽ぇ澶ф彁楂樹簡璋冨害绯荤粺鐨勬壙杞介噺銆�
+
+XXL-JOB鐨勬瘡涓皟搴︿换鍔¤櫧鐒跺湪璋冨害妯″潡鏄苟琛岃皟搴︽墽琛岀殑锛屼絾鏄换鍔¤皟搴︿紶閫掑埌浠诲姟妯″潡鐨勨�滄墽琛屽櫒鈥濈‘瀹炰覆琛屾墽琛岀殑锛屽悓鏃舵敮鎸佷换鍔$粓姝€��
+
+#### 5.4.6 杩囨湡澶勭悊绛栫暐
+浠诲姟璋冨害閿欒繃瑙﹀彂鏃堕棿鏃剁殑澶勭悊绛栫暐锛�
+- 鍙兘鍘熷洜锛氭湇鍔¢噸鍚紱璋冨害绾跨▼琚樆濉烇紝绾跨▼琚�楀敖锛涗笂娆¤皟搴︽寔缁樆濉烇紝涓嬫璋冨害琚敊杩囷紱
+- 澶勭悊绛栫暐锛�
+    - 杩囨湡瓒�5s锛氭湰娆″拷鐣ワ紝褰撳墠鏃堕棿寮�濮嬭绠椾笅娆¤Е鍙戞椂闂�
+    - 杩囨湡5s鍐咃細绔嬪嵆瑙﹀彂涓�娆★紝褰撳墠鏃堕棿寮�濮嬭绠椾笅娆¤Е鍙戞椂闂�
+
+
+#### 5.4.7 鏃ュ織鍥炶皟鏈嶅姟
+璋冨害妯″潡鐨勨�滆皟搴︿腑蹇冣�濅綔涓篧eb鏈嶅姟閮ㄧ讲鏃讹紝涓�鏂归潰鎵挎媴璋冨害涓績鍔熻兘锛屽彟涓�鏂归潰涔熶负鎵ц鍣ㄦ彁渚汚PI鏈嶅姟銆�
+
+璋冨害涓績鎻愪緵鐨�"鏃ュ織鍥炶皟鏈嶅姟API鏈嶅姟"浠g爜浣嶇疆濡備笅锛�
+```
+xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
+```
+
+鈥滄墽琛屽櫒鈥濆湪鎺ユ敹鍒颁换鍔℃墽琛岃姹傚悗锛屾墽琛屼换鍔★紝鍦ㄦ墽琛岀粨鏉熶箣鍚庝細灏嗘墽琛岀粨鏋滃洖璋冮�氱煡鈥滆皟搴︿腑蹇冣�濓細
+
+#### 5.4.8 浠诲姟HA锛團ailover锛�
+鎵ц鍣ㄥ鑻ラ泦缇ら儴缃诧紝璋冨害涓績灏嗕細鎰熺煡鍒板湪绾跨殑鎵�鏈夋墽琛屽櫒锛屽鈥�127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999鈥濄��
+
+褰撲换鍔�"璺敱绛栫暐"閫夋嫨"鏁呴殰杞Щ(FAILOVER)"鏃讹紝褰撹皟搴︿腑蹇冩瘡娆″彂璧疯皟搴﹁姹傛椂锛屼細鎸夌収椤哄簭瀵规墽琛屽櫒鍙戝嚭蹇冭烦妫�娴嬭姹傦紝绗竴涓娴嬩负瀛樻椿鐘舵�佺殑鎵ц鍣ㄥ皢浼氳閫夊畾骞跺彂閫佽皟搴﹁姹傘��
+
+璋冨害鎴愬姛鍚庯紝鍙湪鏃ュ織鐩戞帶鐣岄潰鏌ョ湅鈥滆皟搴﹀娉ㄢ�濓紝濡備笅锛�
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_jrdI.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+鈥滆皟搴﹀娉ㄢ�濆彲浠ョ湅鍑烘湰鍦拌皟搴﹁繍琛岃建杩癸紝鎵ц鍣ㄧ殑"娉ㄥ唽鏂瑰紡"銆�"鍦板潃鍒楄〃"鍜屼换鍔$殑"璺敱绛栫暐"銆�"鏁呴殰杞Щ(FAILOVER)"璺敱绛栫暐涓嬶紝璋冨害涓績棣栧厛瀵圭涓�涓湴鍧�杩涜蹇冭烦妫�娴嬶紝蹇冭烦澶辫触鍥犳鑷姩璺宠繃锛岀浜屼釜渚濈劧蹇冭烦妫�娴嬪け璐モ�︹��
+鐩磋嚦蹇冭烦妫�娴嬬涓変釜鍦板潃鈥�127.0.0.1:9999鈥濇垚鍔燂紝閫夊畾涓衡�滅洰鏍囨墽琛屽櫒鈥濓紱鐒跺悗瀵光�滅洰鏍囨墽琛屽櫒鈥濆彂閫佽皟搴﹁姹傦紝璋冨害娴佺▼缁撴潫锛岀瓑寰呮墽琛屽櫒鍥炶皟鎵ц缁撴灉銆�
+
+#### 5.4.9 璋冨害鏃ュ織
+璋冨害涓績姣忔杩涜浠诲姟璋冨害锛岄兘浼氳褰曚竴鏉′换鍔℃棩蹇楋紝浠诲姟鏃ュ織涓昏鍖呮嫭浠ヤ笅涓夐儴鍒嗗唴瀹癸細
+
+- 浠诲姟淇℃伅锛氬寘鎷�滄墽琛屽櫒鍦板潃鈥濄�佲�淛obHandler鈥濆拰鈥滄墽琛屽弬鏁扳�濈瓑灞炴�э紝鐐瑰嚮浠诲姟ID鎸夐挳鍙煡鐪嬶紝鏍规嵁杩欎簺鍙傛暟锛屽彲浠ョ簿纭殑瀹氫綅浠诲姟鎵ц鐨勫叿浣撴満鍣ㄥ拰浠诲姟浠g爜锛�
+- 璋冨害淇℃伅锛氬寘鎷�滆皟搴︽椂闂粹�濄�佲�滆皟搴︾粨鏋溾�濆拰鈥滆皟搴︽棩蹇椻�濈瓑锛屾牴鎹繖浜涘弬鏁帮紝鍙互浜嗚В鈥滆皟搴︿腑蹇冣�濆彂璧疯皟搴﹁姹傛椂鍏蜂綋鎯呭喌銆�
+- 鎵ц淇℃伅锛氬寘鎷�滄墽琛屾椂闂粹�濄�佲�滄墽琛岀粨鏋溾�濆拰鈥滄墽琛屾棩蹇椻�濈瓑锛屾牴鎹繖浜涘弬鏁帮紝鍙互浜嗚В鍦ㄢ�滄墽琛屽櫒鈥濈浠诲姟鎵ц鐨勫叿浣撴儏鍐碉紱
+
+璋冨害鏃ュ織锛岄拡瀵瑰崟娆¤皟搴︼紝灞炴�ц鏄庡涓嬶細
+- 鎵ц鍣ㄥ湴鍧�锛氫换鍔℃墽琛岀殑鏈哄櫒鍦板潃锛�
+- JobHandler锛欱ean妯″紡琛ㄧず浠诲姟鎵ц鐨凧obHandler鍚嶇О锛�
+- 浠诲姟鍙傛暟锛氫换鍔℃墽琛岀殑鍏ュ弬锛�
+- 璋冨害鏃堕棿锛氳皟搴︿腑蹇冿紝鍙戣捣璋冨害鐨勬椂闂达紱
+- 璋冨害缁撴灉锛氳皟搴︿腑蹇冿紝鍙戣捣璋冨害鐨勭粨鏋滐紝SUCCESS鎴朏AIL锛�
+- 璋冨害澶囨敞锛氳皟搴︿腑蹇冿紝鍙戣捣璋冨害鐨勫娉ㄤ俊鎭紝濡傚湴鍧�蹇冭烦妫�娴嬫棩蹇楃瓑锛�
+- 鎵ц鏃堕棿锛氭墽琛屽櫒锛屼换鍔℃墽琛岀粨鏉熷悗鍥炶皟鐨勬椂闂达紱
+- 鎵ц缁撴灉锛氭墽琛屽櫒锛屼换鍔℃墽琛岀殑缁撴灉锛孲UCCESS鎴朏AIL锛�
+- 鎵ц澶囨敞锛氭墽琛屽櫒锛屼换鍔℃墽琛岀殑澶囨敞淇℃伅锛屽寮傚父鏃ュ織绛夛紱
+- 鎵ц鏃ュ織锛氫换鍔℃墽琛岃繃绋嬩腑锛屼笟鍔′唬鐮佷腑鎵撳嵃鐨勫畬鏁存墽琛屾棩蹇楋紝瑙佲��4.8 鏌ョ湅鎵ц鏃ュ織鈥濓紱
+
+#### 5.4.10 浠诲姟渚濊禆
+鍘熺悊锛歑XL-JOB涓瘡涓换鍔¢兘瀵瑰簲鏈変竴涓换鍔D锛屽悓鏃讹紝姣忎釜浠诲姟鏀寔璁剧疆灞炴�р�滃瓙浠诲姟ID鈥濓紝鍥犳锛岄�氳繃鈥滀换鍔D鈥濆彲浠ュ尮閰嶄换鍔′緷璧栧叧绯汇��
+
+褰撶埗浠诲姟鎵ц缁撴潫骞朵笖鎵ц鎴愬姛鏃讹紝灏嗕細鏍规嵁鈥滃瓙浠诲姟ID鈥濆尮閰嶅瓙浠诲姟渚濊禆锛屽鏋滃尮閰嶅埌瀛愪换鍔★紝灏嗕細涓诲姩瑙﹀彂涓�娆″瓙浠诲姟鐨勬墽琛屻��
+
+鍦ㄤ换鍔℃棩蹇楃晫闈紝鐐瑰嚮浠诲姟鐨勨�滄墽琛屽娉ㄢ�濈殑鈥滄煡鐪嬧�濇寜閽紝鍙互鐪嬪埌鍖归厤瀛愪换鍔′互鍙婅Е鍙戝瓙浠诲姟鎵ц鐨勬棩蹇椾俊鎭紝濡傛棤淇℃伅鍒欒〃绀烘湭瑙﹀彂瀛愪换鍔℃墽琛岋紝鍙弬鑰冧笅鍥俱��
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_Wb2o.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+![杈撳叆鍥剧墖璇存槑](https://www.xuxueli.com/doc/static/xxl-job/images/img_jOAU.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+#### 5.4.11  鍏ㄥ紓姝ュ寲 & 杞婚噺绾�
+
+- 鍏ㄥ紓姝ュ寲璁捐锛歑XL-JOB绯荤粺涓笟鍔¢�昏緫鍦ㄨ繙绋嬫墽琛屽櫒鎵ц锛岃Е鍙戞祦绋嬪叏寮傛鍖栬璁°�傜浉姣旂洿鎺ュ湪璋冨害涓績鍐呴儴鎵ц涓氬姟閫昏緫锛屾瀬澶х殑闄嶄綆浜嗚皟搴︾嚎绋嬪崰鐢ㄦ椂闂达紱
+    - 寮傛璋冨害锛氳皟搴︿腑蹇冩瘡娆′换鍔¤Е鍙戞椂浠呭彂閫佷竴娆¤皟搴﹁姹傦紝璇ヨ皟搴﹁姹傞鍏堟帹閫佲�滃紓姝ヨ皟搴﹂槦鍒椻�濓紝鐒跺悗寮傛鎺ㄩ�佺粰杩滅▼鎵ц鍣�
+    - 寮傛鎵ц锛氭墽琛屽櫒浼氬皢璇锋眰瀛樺叆鈥滃紓姝ユ墽琛岄槦鍒椻�濆苟涓旂珛鍗冲搷搴旇皟搴︿腑蹇冿紝寮傛杩愯銆�
+- 杞婚噺绾ц璁★細XXL-JOB璋冨害涓績涓瘡涓狫OB閫昏緫闈炲父 鈥滆交鈥濓紝鍦ㄥ叏寮傛鍖栫殑鍩虹涓婏紝鍗曚釜JOB涓�娆¤繍琛屽钩鍧囪�楁椂鍩烘湰鍦� "10ms" 涔嬪唴锛堝熀鏈负涓�娆¤姹傜殑缃戠粶寮�閿�锛夛紱鍥犳锛屽彲浠ヤ繚璇佷娇鐢ㄦ湁闄愮殑绾跨▼鏀拺澶ч噺鐨凧OB骞跺彂杩愯锛�
+
+寰楃泭浜庝笂杩颁袱鐐逛紭鍖栵紝鐞嗚涓婇粯璁ら厤缃笅鐨勮皟搴︿腑蹇冿紝鍗曟満鑳藉鏀拺 5000 浠诲姟骞跺彂杩愯绋冲畾杩愯锛�
+
+瀹為檯鍦烘櫙涓紝鐢变簬璋冨害涓績涓庢墽琛屽櫒缃戠粶ping寤惰繜涓嶅悓銆丏B璇诲啓鑰楁椂涓嶅悓銆佷换鍔¤皟搴﹀瘑闆嗙▼搴︿笉鍚岋紝浼氬鑷翠换鍔¢噺涓婇檺浼氫笂涓嬫尝鍔ㄣ��
+
+濡傝嫢闇�瑕佹敮鎾戞洿澶氱殑浠诲姟閲忥紝鍙互閫氳繃 "璋冨ぇ璋冨害绾跨▼鏁�" 銆�"闄嶄綆璋冨害涓績涓庢墽琛屽櫒ping寤惰繜" 鍜� "鎻愬崌鏈哄櫒閰嶇疆" 鍑犵鏂瑰紡浼樺寲銆�
+
+#### 5.4.12 鍧囪 璋冨害
+
+璋冨害涓績鍦ㄩ泦缇ら儴缃叉椂浼氳嚜鍔ㄨ繘琛屼换鍔″钩鍧囧垎閰嶏紝瑙﹀彂缁勪欢姣忔鑾峰彇涓庣嚎绋嬫睜鏁伴噺锛堣皟搴︿腑蹇冩敮鎸佽嚜瀹氫箟璋冨害绾跨▼姹犲ぇ灏忥級鐩稿叧鏁伴噺鐨勪换鍔★紝閬垮厤澶ч噺浠诲姟闆嗕腑鍦ㄥ崟涓皟搴︿腑蹇冮泦缇よ妭鐐癸紱
+
+
+### 5.5 浠诲姟 "杩愯妯″紡" 鍓栨瀽
+#### 5.5.1 "Bean妯″紡" 浠诲姟
+寮�鍙戞楠わ細鍙弬鑰� "绔犺妭涓�" 锛�
+鍘熺悊锛氭瘡涓狟ean妯″紡浠诲姟閮芥槸涓�涓猄pring鐨凚ean绫诲疄渚嬶紝瀹冭缁存姢鍦ㄢ�滄墽琛屽櫒鈥濋」鐩殑Spring瀹瑰櫒涓�備换鍔$被闇�瑕佸姞鈥淍JobHandler(value="鍚嶇О")鈥濇敞瑙o紝鍥犱负鈥滄墽琛屽櫒鈥濅細鏍规嵁璇ユ敞瑙h瘑鍒玈pring瀹瑰櫒涓殑浠诲姟銆備换鍔$被闇�瑕佺户鎵跨粺涓�鎺ュ彛鈥淚JobHandler鈥濓紝浠诲姟閫昏緫鍦╡xecute鏂规硶涓紑鍙戯紝鍥犱负鈥滄墽琛屽櫒鈥濆湪鎺ユ敹鍒拌皟搴︿腑蹇冪殑璋冨害璇锋眰鏃讹紝灏嗕細璋冪敤鈥淚JobHandler鈥濈殑execute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆�
+
+#### 5.5.2 "GLUE妯″紡(Java)" 浠诲姟
+寮�鍙戞楠わ細鍙弬鑰� "绔犺妭涓�" 锛�
+鍘熺悊锛氭瘡涓� "GLUE妯″紡(Java)" 浠诲姟鐨勪唬鐮侊紝瀹為檯涓婃槸鈥滀竴涓户鎵胯嚜鈥淚JobHandler鈥濈殑瀹炵幇绫荤殑绫讳唬鐮佲�濓紝鈥滄墽琛屽櫒鈥濇帴鏀跺埌鈥滆皟搴︿腑蹇冣�濈殑璋冨害璇锋眰鏃讹紝浼氶�氳繃Groovy绫诲姞杞藉櫒鍔犺浇姝や唬鐮侊紝瀹炰緥鍖栨垚Java瀵硅薄锛屽悓鏃舵敞鍏ユ浠g爜涓0鏄庣殑Spring鏈嶅姟锛堣纭繚Glue浠g爜涓殑鏈嶅姟鍜岀被寮曠敤鍦ㄢ�滄墽琛屽櫒鈥濋」鐩腑瀛樺湪锛夛紝鐒跺悗璋冪敤璇ュ璞$殑execute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆�
+
+#### 5.5.3 GLUE妯″紡(Shell) + GLUE妯″紡(Python) + GLUE妯″紡(NodeJS)
+寮�鍙戞楠わ細鍙弬鑰� "绔犺妭涓�" 锛�
+鍘熺悊锛氳剼鏈换鍔$殑婧愮爜鎵樼鍦ㄨ皟搴︿腑蹇冿紝鑴氭湰閫昏緫鍦ㄦ墽琛屽櫒杩愯銆傚綋瑙﹀彂鑴氭湰浠诲姟鏃讹紝鎵ц鍣ㄤ細鍔犺浇鑴氭湰婧愮爜鍦ㄦ墽琛屽櫒鏈哄櫒涓婄敓鎴愪竴浠借剼鏈枃浠讹紝鐒跺悗閫氳繃Java浠g爜璋冪敤璇ヨ剼鏈紱骞朵笖瀹炴椂灏嗚剼鏈緭鍑烘棩蹇楀啓鍒颁换鍔℃棩蹇楁枃浠朵腑锛屼粠鑰屽湪璋冨害涓績鍙互瀹炴椂鐩戞帶鑴氭湰杩愯鎯呭喌锛�
+
+鐩墠鏀寔鐨勮剼鏈被鍨嬪涓嬶細
+
+    - shell鑴氭湰锛氫换鍔¤繍琛屾ā寮忛�夋嫨涓� "GLUE妯″紡(Shell)"鏃舵敮鎸� "shell" 鑴氭湰浠诲姟锛�
+    - python鑴氭湰锛氫换鍔¤繍琛屾ā寮忛�夋嫨涓� "GLUE妯″紡(Python)"鏃舵敮鎸� "python" 鑴氭湰浠诲姟锛�
+    - nodejs鑴氭湰锛氬姟杩愯妯″紡閫夋嫨涓� "GLUE妯″紡(NodeJS)"鏃舵敮鎸� "nodejs" 鑴氭湰浠诲姟锛�
+
+鑴氭湰浠诲姟閫氳繃 Exit Code 鍒ゆ柇浠诲姟鎵ц缁撴灉锛岀姸鎬佺爜鍙弬鑰冪珷鑺� "5.15 浠诲姟鎵ц缁撴灉璇存槑"锛�
+
+#### 5.5.4 鎵ц鍣�
+鎵ц鍣ㄥ疄闄呬笂鏄竴涓唴宓岀殑Server锛岄粯璁ょ鍙�9999锛堥厤缃」锛歺xl.job.executor.port锛夈��
+
+鍦ㄩ」鐩惎鍔ㄦ椂锛屾墽琛屽櫒浼氶�氳繃鈥淍JobHandler鈥濊瘑鍒玈pring瀹瑰櫒涓�淏ean妯″紡浠诲姟鈥濓紝浠ユ敞瑙g殑value灞炴�т负key绠$悊璧锋潵銆�
+
+鈥滄墽琛屽櫒鈥濇帴鏀跺埌鈥滆皟搴︿腑蹇冣�濈殑璋冨害璇锋眰鏃讹紝濡傛灉浠诲姟绫诲瀷涓衡�淏ean妯″紡鈥濓紝灏嗕細鍖归厤Spring瀹瑰櫒涓殑鈥淏ean妯″紡浠诲姟鈥濓紝鐒跺悗璋冪敤鍏秂xecute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆傚鏋滀换鍔$被鍨嬩负鈥淕LUE妯″紡鈥濓紝灏嗕細鍔犺浇GLue浠g爜锛屽疄渚嬪寲Java瀵硅薄锛屾敞鍏ヤ緷璧栫殑Spring鏈嶅姟锛堟敞鎰忥細Glue浠g爜涓敞鍏ョ殑Spring鏈嶅姟锛屽繀椤诲瓨鍦ㄤ笌璇モ�滄墽琛屽櫒鈥濋」鐩殑Spring瀹瑰櫒涓級锛岀劧鍚庤皟鐢╡xecute鏂规硶锛屾墽琛屼换鍔¢�昏緫銆�
+
+#### 5.5.5 浠诲姟鏃ュ織
+XXL-JOB浼氫负姣忔璋冨害璇锋眰鐢熸垚涓�涓崟鐙殑鏃ュ織鏂囦欢锛岄渶瑕侀�氳繃 "XxlJobLogger.log" 鎵撳嵃鎵ц鏃ュ織锛屸�滆皟搴︿腑蹇冣�濇煡鐪嬫墽琛屾棩蹇楁椂灏嗕細鍔犺浇瀵瑰簲鐨勬棩蹇楁枃浠躲��
+
+(鍘嗗彶鐗堟湰閫氳繃閲嶅啓LOG4J鐨凙ppender瀹炵幇锛屽瓨鍦ㄤ緷璧栭檺鍒讹紝璇ユ柟寮忓湪鏂扮増鏈凡缁忚鎶涘純)
+
+鏃ュ織鏂囦欢瀛樻斁鐨勪綅缃彲鍦ㄢ�滄墽琛屽櫒鈥濋厤缃枃浠惰繘琛岃嚜瀹氫箟锛岄粯璁ょ洰褰曟牸寮忎负锛�/data/applogs/xxl-job/jobhandler/鈥滄牸寮忓寲鏃ユ湡鈥�/鈥滄暟鎹簱璋冨害鏃ュ織璁板綍鐨勪富閿甀D.log鈥濄��
+
+鍦↗obHandler涓紑鍚瓙绾跨▼鏃讹紝瀛愮嚎绋嬪皢浼氬皢浼氭妸鏃ュ織鎵撳嵃鍦ㄧ埗绾跨▼鍗矹obHandler鐨勬墽琛屾棩蹇椾腑锛屾柟渚挎棩蹇楄拷韪��
+
+### 5.6 閫氳妯″潡鍓栨瀽
+
+#### 5.6.1 涓�娆″畬鏁寸殑浠诲姟璋冨害閫氳娴佺▼ 
+    - 1銆佲�滆皟搴︿腑蹇冣�濆悜鈥滄墽琛屽櫒鈥濆彂閫乭ttp璋冨害璇锋眰: 鈥滄墽琛屽櫒鈥濅腑鎺ユ敹璇锋眰鐨勬湇鍔★紝瀹為檯涓婃槸涓�鍙板唴宓孲erver锛岄粯璁ょ鍙�9999;
+    - 2銆佲�滄墽琛屽櫒鈥濇墽琛屼换鍔¢�昏緫锛�
+    - 3銆佲�滄墽琛屽櫒鈥漢ttp鍥炶皟鈥滆皟搴︿腑蹇冣�濊皟搴︾粨鏋�: 鈥滆皟搴︿腑蹇冣�濅腑鎺ユ敹鍥炶皟鐨勬湇鍔★紝鏄拡瀵规墽琛屽櫒寮�鏀句竴濂桝PI鏈嶅姟;
+
+#### 5.6.2 閫氳鏁版嵁鍔犲瘑
+璋冨害涓績鍚戞墽琛屽櫒鍙戦�佺殑璋冨害璇锋眰鏃朵娇鐢≧equestModel鍜孯esponseModel涓や釜瀵硅薄灏佽璋冨害璇锋眰鍙傛暟鍜屽搷搴旀暟鎹�, 鍦ㄨ繘琛岄�氳涔嬪墠搴曞眰浼氬皢涓婅堪涓や釜瀵硅薄瀵硅薄搴忓垪鍖栵紝骞惰繘琛屾暟鎹崗璁互鍙婃椂闂存埑妫�楠�,浠庤�岃揪鍒版暟鎹姞瀵嗙殑鍔熻兘;
+
+### 5.7 浠诲姟娉ㄥ唽, 浠诲姟鑷姩鍙戠幇   
+鑷獀1.5鐗堟湰涔嬪悗, 浠诲姟鍙栨秷浜�"浠诲姟鎵ц鏈哄櫒"灞炴��, 鏀逛负閫氳繃浠诲姟娉ㄥ唽鍜岃嚜鍔ㄥ彂鐜扮殑鏂瑰紡, 鍔ㄦ�佽幏鍙栬繙绋嬫墽琛屽櫒鍦板潃骞舵墽琛屻��
+
+    AppName: 姣忎釜鎵ц鍣ㄦ満鍣ㄩ泦缇ょ殑鍞竴鏍囩ず, 浠诲姟娉ㄥ唽浠� "鎵ц鍣�" 涓烘渶灏忕矑搴﹁繘琛屾敞鍐�; 姣忎釜浠诲姟閫氳繃鍏剁粦瀹氱殑鎵ц鍣ㄥ彲鎰熺煡瀵瑰簲鐨勬墽琛屽櫒鏈哄櫒鍒楄〃;
+    娉ㄥ唽琛�: 瑙�"xxl_job_registry"琛�, "鎵ц鍣�" 鍦ㄨ繘琛屼换鍔℃敞鍐屾椂灏嗕細鍛ㄦ湡鎬х淮鎶や竴鏉℃敞鍐岃褰曪紝鍗虫満鍣ㄥ湴鍧�鍜孉ppName鐨勭粦瀹氬叧绯�; "璋冨害涓績" 浠庤�屽彲浠ュ姩鎬佹劅鐭ユ瘡涓狝ppName鍦ㄧ嚎鐨勬満鍣ㄥ垪琛�;
+    鎵ц鍣ㄦ敞鍐�: 浠诲姟娉ㄥ唽Beat鍛ㄦ湡榛樿30s; 鎵ц鍣ㄤ互涓�鍊岯eat杩涜鎵ц鍣ㄦ敞鍐�, 璋冨害涓績浠ヤ竴鍊岯eat杩涜鍔ㄦ�佷换鍔″彂鐜�; 娉ㄥ唽淇℃伅鐨勫け鏁堟椂闂翠负涓夊�岯eat; 
+    鎵ц鍣ㄦ敞鍐屾憳闄わ細鎵ц鍣ㄩ攢姣佹椂锛屽皢浼氫富鍔ㄤ笂鎶ヨ皟搴︿腑蹇冨苟鎽橀櫎瀵瑰簲鐨勬墽琛屽櫒鏈哄櫒淇℃伅锛屾彁楂樺績璺虫敞鍐岀殑瀹炴椂鎬э紱
+    
+
+涓轰繚璇佺郴缁�"杞婚噺绾�"骞朵笖闄嶄綆瀛︿範閮ㄧ讲鎴愭湰锛屾病鏈夐噰鐢╖ookeeper浣滀负娉ㄥ唽涓績锛岄噰鐢―B鏂瑰紡杩涜浠诲姟娉ㄥ唽鍙戠幇锛�
+
+### 5.8 浠诲姟鎵ц缁撴灉
+鑷獀1.6.2涔嬪悗锛屼换鍔℃墽琛岀粨鏋滈�氳繃 "IJobHandler" 鐨勮繑鍥炲�� "ReturnT" 杩涜鍒ゆ柇锛�
+褰撹繑鍥炲�肩鍚� "ReturnT.code == ReturnT.SUCCESS_CODE" 鏃惰〃绀轰换鍔℃墽琛屾垚鍔燂紝鍚﹀垯琛ㄧず浠诲姟鎵ц澶辫触锛岃�屼笖鍙互閫氳繃 "ReturnT.msg" 鍥炶皟閿欒淇℃伅缁欒皟搴︿腑蹇冿紱
+浠庤�岋紝鍦ㄤ换鍔¢�昏緫涓彲浠ユ柟渚跨殑鎺у埗浠诲姟鎵ц缁撴灉锛�
+
+### 5.9 鍒嗙墖骞挎挱 & 鍔ㄦ�佸垎鐗�   
+鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屼换鍔¤矾鐢辩瓥鐣ラ�夋嫨"鍒嗙墖骞挎挱"鎯呭喌涓嬶紝涓�娆′换鍔¤皟搴﹀皢浼氬箍鎾Е鍙戝搴旈泦缇や腑鎵�鏈夋墽琛屽櫒鎵ц涓�娆′换鍔★紝鍚屾椂绯荤粺鑷姩浼犻�掑垎鐗囧弬鏁帮紱鍙牴鎹垎鐗囧弬鏁板紑鍙戝垎鐗囦换鍔★紱
+
+"鍒嗙墖骞挎挱" 浠ユ墽琛屽櫒涓虹淮搴﹁繘琛屽垎鐗囷紝鏀寔鍔ㄦ�佹墿瀹规墽琛屽櫒闆嗙兢浠庤�屽姩鎬佸鍔犲垎鐗囨暟閲忥紝鍗忓悓杩涜涓氬姟澶勭悊锛涘湪杩涜澶ф暟鎹噺涓氬姟鎿嶄綔鏃跺彲鏄捐憲鎻愬崌浠诲姟澶勭悊鑳藉姏鍜岄�熷害銆�
+
+"鍒嗙墖骞挎挱" 鍜屾櫘閫氫换鍔″紑鍙戞祦绋嬩竴鑷达紝涓嶅悓涔嬪鍦ㄤ簬鍙互鍙互鑾峰彇鍒嗙墖鍙傛暟锛岃幏鍙栧垎鐗囧弬鏁拌繘琛屽垎鐗囦笟鍔″鐞嗐��
+
+- Java璇█浠诲姟鑾峰彇鍒嗙墖鍙傛暟鏂瑰紡锛欱EAN銆丟LUE妯″紡(Java)
+```
+// 鍙弬鑰僑ample绀轰緥鎵ц鍣ㄤ腑鐨勭ず渚嬩换鍔�"ShardingJobHandler"浜嗚В璇曠敤 
+ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
+```
+- 鑴氭湰璇█浠诲姟鑾峰彇鍒嗙墖鍙傛暟鏂瑰紡锛欸LUE妯″紡(Shell)銆丟LUE妯″紡(Python)銆丟LUE妯″紡(Nodejs)
+```
+// 鑴氭湰浠诲姟鍏ュ弬鍥哄畾涓轰笁涓紝渚濇涓猴細浠诲姟浼犲弬銆佸垎鐗囧簭鍙枫�佸垎鐗囨�绘暟銆備互Shell妯″紡浠诲姟涓轰緥锛岃幏鍙栧垎鐗囧弬鏁颁唬鐮佸涓�
+echo "鍒嗙墖搴忓彿 index = $2"
+echo "鍒嗙墖鎬绘暟 total = $3"
+```  
+    
+鍒嗙墖鍙傛暟灞炴�ц鏄庯細
+
+    index锛氬綋鍓嶅垎鐗囧簭鍙�(浠�0寮�濮�)锛屾墽琛屽櫒闆嗙兢鍒楄〃涓綋鍓嶆墽琛屽櫒鐨勫簭鍙凤紱
+    total锛氭�诲垎鐗囨暟锛屾墽琛屽櫒闆嗙兢鐨勬�绘満鍣ㄦ暟閲忥紱
+
+璇ョ壒鎬ч�傜敤鍦烘櫙濡傦細
+- 1銆佸垎鐗囦换鍔″満鏅細10涓墽琛屽櫒鐨勯泦缇ゆ潵澶勭悊10w鏉℃暟鎹紝姣忓彴鏈哄櫒鍙渶瑕佸鐞�1w鏉℃暟鎹紝鑰楁椂闄嶄綆10鍊嶏紱
+- 2銆佸箍鎾换鍔″満鏅細骞挎挱鎵ц鍣ㄦ満鍣ㄨ繍琛宻hell鑴氭湰銆佸箍鎾泦缇よ妭鐐硅繘琛岀紦瀛樻洿鏂扮瓑
+
+### 5.10 璁块棶浠ょ墝锛圓ccessToken锛�
+涓烘彁鍗囩郴缁熷畨鍏ㄦ�э紝璋冨害涓績鍜屾墽琛屽櫒杩涜瀹夊叏鎬ф牎楠岋紝鍙屾柟AccessToken鍖归厤鎵嶅厑璁搁�氳锛�
+
+璋冨害涓績鍜屾墽琛屽櫒锛屽彲閫氳繃閰嶇疆椤� "xxl.job.accessToken" 杩涜AccessToken鐨勮缃��
+
+璋冨害涓績鍜屾墽琛屽櫒锛屽鏋滈渶瑕佹甯搁�氳锛屽彧鏈変袱绉嶈缃紱
+
+- 璁剧疆涓�锛氳皟搴︿腑蹇冨拰鎵ц鍣紝鍧囦笉璁剧疆AccessToken锛涘叧闂畨鍏ㄦ�ф牎楠岋紱
+- 璁剧疆浜岋細璋冨害涓績鍜屾墽琛屽櫒锛岃缃簡鐩稿悓鐨凙ccessToken锛�
+
+### 5.11 璋冨害涓績API鏈嶅姟
+
+璋冨害涓績鎻愪緵浜咥PI鏈嶅姟锛屼富瑕佸垎涓轰袱绉嶇被鍨嬶細
+#### 5.11.1 鎻愪緵缁欐墽琛屽櫒鐨凙PI鏈嶅姟锛�
+    1銆佷换鍔$粨鏋滃洖璋冩湇鍔★紱
+    2銆佹墽琛屽櫒娉ㄥ唽鏈嶅姟锛�
+    3銆佹墽琛屽櫒娉ㄥ唽鎽橀櫎鏈嶅姟锛�
+    4銆佽Е鍙戜换鍔″崟娆℃墽琛屾湇鍔★紝鏀寔浠诲姟鏍规嵁涓氬姟浜嬩欢瑙﹀彂锛�
+    
+API鏈嶅姟浣嶇疆锛歝om.xxl.job.core.biz.AdminBiz.java  
+API鏈嶅姟璇锋眰鍙傝�冧唬鐮侊細com.xxl.job.adminbiz.AdminBizTest.java
+
+#### 5.11.2 鎻愪緵缁欎笟鍔$殑API鏈嶅姟锛�
+    1銆佷换鍔″垪琛ㄦ煡璇紱
+    2銆佷换鍔℃柊澧烇紱
+    3銆佷换鍔℃洿鏂帮紱
+    4銆佷换鍔″垹闄わ紱
+    5銆佷换鍔″惎鍔紱
+    6銆佷换鍔″仠姝紱
+    7銆佷换鍔¤Е鍙戯紱
+    
+API鏈嶅姟浣嶇疆锛歝om.xxl.job.admin.controller.JobInfoController.java     
+API鏈嶅姟璇锋眰鍙傝�冧唬鐮侊細鍙弬鑰冧换鍔$晫闈㈡搷浣滅殑ajax璇锋眰銆備换浣昦jax鎺ュ彛鍧囧彲閰嶇疆鎴愪负API鏈嶅姟锛屽彧闇�鍦ㄥ緟鍚敤鐨凙PI鏈嶅姟涓婃坊鍔� 鈥淍PermissionLimit(limit = false)鈥� 娉ㄨВ鍙栨秷鐧婚檰鎬佹嫤鎴嵆鍙紱
+
+### 5.12 鎵ц鍣ˋPI鏈嶅姟
+鎵ц鍣ㄦ彁渚涗簡API鏈嶅姟锛屼緵璋冨害涓績閫夋嫨浣跨敤锛岀洰鍓嶆彁渚涚殑API鏈嶅姟鏈夛細
+
+    1銆佸績璺虫娴嬶細璋冨害涓績浣跨敤
+    2銆佸繖纰屾娴嬶細璋冨害涓績浣跨敤
+    3銆佽Е鍙戜换鍔℃墽琛岋細璋冨害涓績浣跨敤锛涙湰鍦拌繘琛屼换鍔″紑鍙戞椂锛屽彲浣跨敤璇PI鏈嶅姟妯℃嫙瑙﹀彂浠诲姟锛�
+    4銆佽幏鍙朢olling Log锛氳皟搴︿腑蹇冧娇鐢�
+    5銆佺粓姝换鍔★細璋冨害涓績浣跨敤
+    
+API鏈嶅姟浣嶇疆锛歝om.xxl.job.core.biz.ExecutorBiz     
+API鏈嶅姟璇锋眰鍙傝�冧唬鐮侊細com.xxl.job.executor.ExecutorBizTest
+
+### 5.13 鏁呴殰杞Щ & 澶辫触閲嶈瘯
+涓�娆″畬鏁翠换鍔℃祦绋嬪寘鎷�"璋冨害锛堣皟搴︿腑蹇冿級 + 鎵ц锛堟墽琛屽櫒锛�"涓や釜闃舵銆�
+    
+- "鏁呴殰杞Щ"鍙戠敓鍦ㄨ皟搴﹂樁娈碉紝鍦ㄦ墽琛屽櫒闆嗙兢閮ㄧ讲鏃讹紝濡傛灉鏌愪竴鍙版墽琛屽櫒鍙戠敓鏁呴殰锛岃绛栫暐鏀寔鑷姩杩涜Failover鍒囨崲鍒颁竴鍙版甯哥殑鎵ц鍣ㄦ満鍣ㄥ苟涓斿畬鎴愯皟搴﹁姹傛祦绋嬨��
+- "澶辫触閲嶈瘯"鍙戠敓鍦�"璋冨害 + 鎵ц"涓や釜闃舵锛屾敮鎸侀�氳繃鑷畾涔変换鍔″け璐ラ噸璇曟鏁帮紝褰撲换鍔″け璐ユ椂灏嗕細鎸夌収棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇曪紱
+
+### 5.14 鎵ц鍣ㄧ伆搴︿笂绾�
+璋冨害涓績涓庝笟鍔¤В鑰︼紝鍙渶閮ㄧ讲涓�娆″悗甯稿勾涓嶉渶瑕佺淮鎶ゃ�備絾鏄紝鎵ц鍣ㄤ腑鎵樼杩愯鐫�涓氬姟浣滀笟锛屼綔涓氫笂绾垮拰鍙樻洿闇�瑕侀噸鍚墽琛屽櫒锛屽挨鍏舵槸Bean妯″紡浠诲姟銆�
+鎵ц鍣ㄩ噸鍚彲鑳戒細涓柇杩愯涓殑浠诲姟銆備絾鏄紝XXL-JOB寰楃泭浜庤嚜寤烘墽琛屽櫒涓庤嚜寤烘敞鍐屼腑蹇冿紝鍙互閫氳繃鐏板害涓婄嚎鐨勬柟寮忥紝閬垮厤鍥犻噸鍚鑷寸殑浠诲姟涓柇鐨勯棶棰樸��
+
+姝ラ濡備笅锛�
+- 1銆佹墽琛屽櫒鏀逛负鎵嬪姩娉ㄥ唽锛屼笅绾夸竴鍗婃満鍣ㄥ垪琛紙A缁勶級锛岀嚎涓婅繍琛屽彟涓�鍗婃満鍣ㄥ垪琛紙B缁勶級锛�
+- 2銆佺瓑寰匒缁勬満鍣ㄤ换鍔¤繍琛岀粨鏉熷苟缂栬瘧涓婄嚎锛涙墽琛屽櫒娉ㄥ唽鍦板潃鏇挎崲涓篈缁勶紱
+- 3銆佺瓑寰匓缁勬満鍣ㄤ换鍔¤繍琛岀粨鏉熷苟缂栬瘧涓婄嚎锛涙墽琛屽櫒娉ㄥ唽鍦板潃鏇挎崲涓篈缁�+B缁勶紱
+鎿嶄綔缁撴潫锛�
+
+### 5.15 浠诲姟鎵ц缁撴灉璇存槑
+绯荤粺鏍规嵁浠ヤ笅鏍囧噯鍒ゆ柇浠诲姟鎵ц缁撴灉锛屽彲鍙傝�冧箣銆�
+
+-- | Bean/Glue(Java) | Glue(Shell) 绛夎剼鏈换鍔�
+--- | --- | ---
+鎴愬姛 | IJobHandler.SUCCESS | 0
+澶辫触 | IJobHandler.FAIL | -1锛堥潪0鐘舵�佺爜锛�
+
+### 5.16 浠诲姟瓒呮椂鎺у埗
+鏀寔璁剧疆浠诲姟瓒呮椂鏃堕棿锛屼换鍔¤繍琛岃秴鏃剁殑鎯呭喌涓嬶紝灏嗕細涓诲姩涓柇浠诲姟锛�
+
+闇�瑕佹敞鎰忕殑鏄紝浠诲姟瓒呮椂涓柇鏃朵笌浠诲姟缁堟鏈哄埗锛堝彲鏌ョ湅鈥�4.9 缁堟杩愯涓殑浠诲姟鈥濓級绫讳技锛屼篃鏄�氳繃 "interrupt" 涓柇浠诲姟锛屽洜姝や笟鍔′唬鐮侀渶瑕佸皢 "InterruptedException" 澶栨姏锛屽惁鍒欏姛鑳戒笉鍙敤銆�
+
+### 5.17 璺ㄥ钩鍙� & 璺ㄨ瑷�
+璺ㄥ钩鍙般�佽法璇█涓昏浣撶幇鍦ㄤ互涓嬩袱涓柟闈細
+- 1銆佹彁渚汮ava銆丳ython銆丳HP鈥︹�︾瓑鍗佹潵绉嶄换鍔℃ā寮忥紝鍙弬鑰冪珷鑺� 鈥�5.5 浠诲姟 "杩愯妯″紡" 鈥濓紱鐞嗚涓婂彲鎵╁睍浠绘剰璇█浠诲姟妯″紡锛�
+- 2銆佹彁渚涘熀浜嶩TTP鐨勪换鍔andler锛圔ean浠诲姟锛孞obHandler="HttpJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚汬TTP閾炬帴鍗冲彲锛屼笉闄愬埗璇█銆佸钩鍙帮紱
+
+### 5.18 浠诲姟澶辫触鍛婅
+榛樿鎻愪緵閭欢澶辫触鍛婅锛屽彲鎵╁睍鐭俊銆侀拤閽夌瓑鏂瑰紡锛屾墿灞曚唬鐮佷綅缃负 "JobFailMonitorHelper.failAlarm"锛�
+
+### 5.19 璋冨害涓績Docker闀滃儚鏋勫缓
+鍙互閫氳繃浠ヤ笅鍛戒护蹇�熸瀯寤鸿皟搴︿腑蹇冿紝骞跺惎鍔ㄨ繍琛岋紱
+```
+mvn clean package
+docker build -t xuxueli/xxl-job-admin ./xxl-job-admin
+docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin
+```
+
+### 5.20 閬垮厤浠诲姟閲嶅鎵ц   
+璋冨害瀵嗛泦鎴栬�呰�楁椂浠诲姟鍙兘浼氬鑷翠换鍔¢樆濉烇紝闆嗙兢鎯呭喌涓嬭皟搴︾粍浠跺皬姒傜巼鎯呭喌涓嬩細閲嶅瑙﹀彂锛�
+閽堝涓婅堪鎯呭喌锛屽彲浠ラ�氳繃缁撳悎 "鍗曟満璺敱绛栫暐锛堝锛氱涓�鍙般�佷竴鑷存�у搱甯岋級" + "闃诲绛栫暐锛堝锛氬崟鏈轰覆琛屻�佷涪寮冨悗缁皟搴︼級" 鏉ヨ閬匡紝鏈�缁堥伩鍏嶄换鍔¢噸澶嶆墽琛屻�� 
+
+### 5.21 鍛戒护琛屼换鍔�   
+鍘熺敓鎻愪緵閫氱敤鍛戒护琛屼换鍔andler锛圔ean浠诲姟锛�"CommandJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚涘懡浠よ鍗冲彲锛�
+濡備换鍔″弬鏁� "pwd" 灏嗕細鎵ц鍛戒护骞惰緭鍑烘暟鎹紱
+
+### 5.22  鏃ュ織鑷姩娓呯悊
+XXL-JOB鏃ュ織涓昏鍖呭惈濡備笅涓ら儴鍒嗭紝鍧囨敮鎸佹棩蹇楄嚜鍔ㄦ竻鐞嗭紝璇存槑濡備笅锛�
+- 璋冨害涓績鏃ュ織琛ㄦ暟鎹細鍙�熷姪閰嶇疆椤� "xxl.job.logretentiondays" 璁剧疆鏃ュ織琛ㄦ暟鎹繚瀛樺ぉ鏁帮紝杩囨湡鏃ュ織鑷姩娓呯悊锛涜鎯呭彲鏌ョ湅涓婃枃閰嶇疆璇存槑锛�
+- 鎵ц鍣ㄦ棩蹇楁枃浠舵暟鎹細鍙�熷姪閰嶇疆椤� "xxl.job.executor.logretentiondays" 璁剧疆鏃ュ織鏂囦欢鏁版嵁淇濆瓨澶╂暟锛岃繃鏈熸棩蹇楄嚜鍔ㄦ竻鐞嗭紱璇︽儏鍙煡鐪嬩笂鏂囬厤缃鏄庯紱
+
+
+## 鍏�佺増鏈洿鏂版棩蹇�
+### 6.1 鐗堟湰 V1.1.x锛屾柊鐗规�2015-12-05]
+**銆愪簬V1.1.x鐗堟湰锛孹XL-JOB姝e紡搴旂敤浜庢垜鍙革紝鍐呴儴瀹氬埗鍒悕涓� 鈥淔errari鈥濓紝鏂版帴鍏ュ簲鐢ㄦ帹鑽愪娇鐢ㄦ渶鏂扮増鏈��**
+- 1銆佺畝鍗曪細鏀寔閫氳繃Web椤甸潰瀵逛换鍔¤繘琛孋RUD鎿嶄綔锛屾搷浣滅畝鍗曪紝涓�鍒嗛挓涓婃墜锛�
+- 2銆佸姩鎬侊細鏀寔鍔ㄦ�佷慨鏀逛换鍔$姸鎬侊紝鍔ㄦ�佹殏鍋�/鎭㈠浠诲姟锛屽嵆鏃剁敓鏁堬紱
+- 3銆佹湇鍔A锛氫换鍔′俊鎭寔涔呭寲鍒癿ysql涓紝Job鏈嶅姟澶╃劧鏀寔闆嗙兢锛屼繚璇佹湇鍔A锛�
+- 4銆佷换鍔A锛氭煇鍙癑ob鏈嶅姟鎸傛帀锛屼换鍔′細骞虫粦鍒嗛厤缁欏叾浠栫殑鏌愪竴鍙板瓨娲绘湇鍔★紝鍗充娇鎵�鏈夋湇鍔℃寕鎺夛紝閲嶅惎鏃舵垨琛ュ伩鎵ц涓㈠け浠诲姟锛�
+- 5銆佷竴涓换鍔″彧浼氬湪鍏朵腑涓�鍙版湇鍔″櫒涓婃墽琛岋紱
+- 6銆佷换鍔′覆琛屾墽琛岋紱
+- 7銆佹敮鎸佽嚜瀹氫箟鍙傛暟锛�
+- 8銆佹敮鎸佽繙绋嬩换鍔℃墽琛岀粓姝紱
+
+### 6.2 鐗堟湰 V1.2.x锛屾柊鐗规�2016-01-17]
+- 1銆佹敮鎸佷换鍔″垎缁勶紱
+- 2銆佹敮鎸佲�滄湰鍦颁换鍔♀�濄�佲�滆繙绋嬩换鍔♀�濓紱
+- 3銆佸簳灞傞�氳鏀寔涓ょ鏂瑰紡锛孲ervlet鏂瑰紡 + JETTY鏂瑰紡锛�
+- 4銆佹敮鎸佲�滀换鍔℃棩蹇椻�濓紱
+- 5銆佹敮鎸佲�滀覆琛屾墽琛屸�濓紝骞惰鎵ц锛�
+	
+	璇存槑锛歏1.2鐗堟湰灏嗙郴缁熸灦鏋勬寜鍔熻兘鎷嗗垎涓猴細
+	
+		- 璋冨害妯″潡锛堣皟搴︿腑蹇冿級锛氳礋璐g鐞嗚皟搴︿俊鎭紝鎸夌収璋冨害閰嶇疆鍙戝嚭璋冨害璇锋眰锛�
+		- 鎵ц妯″潡锛堟墽琛屽櫒锛夛細璐熻矗鎺ユ敹璋冨害璇锋眰骞舵墽琛屼换鍔¢�昏緫锛�
+		- 閫氳妯″潡锛氳礋璐h皟搴︽ā鍧楀拰浠诲姟妯″潡涔嬮棿鐨勪俊鎭�氳锛�
+	浼樼偣锛�
+	
+		- 瑙h�︼細浠诲姟妯″潡鎻愪緵浠诲姟鎺ュ彛锛岃皟搴︽ā鍧楃淮鎶よ皟搴︿俊鎭紝涓氬姟鐩镐簰鐙珛锛�
+		- 楂樻墿灞曟�э紱
+		- 绋冲畾鎬э紱
+
+### 6.3 鐗堟湰 V1.3.0锛屾柊鐗规�2016-05-19]
+- 1銆侀仐寮冣�滄湰鍦颁换鍔♀�濇ā寮忥紝鎺ㄨ崘浣跨敤鈥滆繙绋嬩换鍔♀�濓紝鏄撲簬绯荤粺瑙h�︼紝浠诲姟瀵瑰簲鐨凧obHandler缁熺О涓衡�滄墽琛屽櫒鈥濓紱
+- 2銆侀仐寮冣�渟ervlet鈥濇柟寮忓簳灞傜郴缁熼�氳锛屾帹鑽愪娇鐢↗ETTY鏂瑰紡锛岃皟搴�+鍥炶皟鍙屽悜閫氳锛岄噸鏋勯�氳閫昏緫锛�
+- 3銆乁I浜や簰浼樺寲锛氬乏渚ц彍鍗曞睍寮�鐘舵�佷紭鍖栵紝鑿滃崟椤归�変腑鐘舵�佷紭鍖栵紝浠诲姟鍒楄〃鎵撳紑琛ㄦ牸鏈夊帇缂╀紭鍖栵紱
+- 4銆併�愰噸瑕併�戔�滄墽琛屽櫒鈥濈粏鍒嗕负锛欱EAN銆丟LUE涓ょ寮�鍙戞ā寮忥紝绠�浠嬭涓嬫枃锛�
+	
+	鈥滄墽琛屽櫒鈥� 妯″紡绠�浠嬶細
+		- BEAN妯″紡鎵ц鍣細姣忎釜鎵ц鍣ㄩ兘鏄疭pring鐨勪竴涓狟ean瀹炰緥锛孹XL-JOB閫氳繃娉ㄨВ@JobHandler璇嗗埆鍜岃皟搴︽墽琛屽櫒锛�
+		 -GLUE妯″紡鎵ц鍣細姣忎釜鎵ц鍣ㄥ搴斾竴娈典唬鐮侊紝鍦ㄧ嚎Web缂栬緫鍜岀淮鎶わ紝鍔ㄦ�佺紪璇戠敓鏁堬紝鎵ц鍣ㄨ礋璐e姞杞紾LUE浠g爜鍜屾墽琛岋紱
+
+### 6.4 鐗堟湰 V1.3.1锛屾柊鐗规�2016-05-23]
+- 1銆佹洿鏂伴」鐩洰褰曠粨鏋勶細
+	- /xxl-job-admin -------------------- 銆愯皟搴︿腑蹇冦�戯細璐熻矗绠$悊璋冨害淇℃伅锛屾寜鐓ц皟搴﹂厤缃彂鍑鸿皟搴﹁姹傦紱
+	- /xxl-job-core ----------------------- 鍏叡渚濊禆
+	- /xxl-job-executor-example ------ 銆愭墽琛屽櫒銆戯細璐熻矗鎺ユ敹璋冨害璇锋眰骞舵墽琛屼换鍔¢�昏緫锛�
+	- /db ---------------------------------- 寤鸿〃鑴氭湰
+	- /doc --------------------------------- 鐢ㄦ埛鎵嬪唽
+- 2銆佸湪鏂扮殑鐩綍缁撴瀯涓婏紝鍗囩骇浜嗙敤鎴锋墜鍐岋紱
+- 3銆佷紭鍖栦簡涓�浜涗氦浜掑拰UI锛�
+
+### 6.5 鐗堟湰 V1.3.2锛屾柊鐗规�2016-05-28]
+- 1銆佽皟搴﹂�昏緫杩涜浜嬪姟鍖呰9锛�
+- 2銆佹墽琛屽櫒寮傛鍥炶皟鎵ц鏃ュ織锛�
+- 3銆併�愰噸瑕併�戝湪 鈥滆皟搴︿腑蹇冣�� 鏀寔HA鐨勫熀纭�涓婏紝鎵╁睍鎵ц鍣ㄧ殑Failover鏀寔锛屾敮鎸侀厤缃鎵ц鏈熷湴鍧�锛�
+
+### 6.6 鐗堟湰 V1.4.0 鏂扮壒鎬2016-07-24]
+- 1銆佷换鍔′緷璧�: 閫氳繃浜嬩欢瑙﹀彂鏂瑰紡瀹炵幇, 浠诲姟鎵ц鎴愬姛骞跺洖璋冩椂浼氫富鍔ㄨЕ鍙戜竴娆″瓙浠诲姟鐨勮皟搴�, 澶氫釜瀛愪换鍔$敤閫楀彿鍒嗛殧;
+- 2銆佹墽琛屽櫒搴曞眰瀹炵幇浠g爜杩涜閲嶅害閲嶆瀯, 浼樺寲搴曞眰寤鸿〃鑴氭湰;
+- 3銆佹墽琛屽櫒涓换鍔$嚎绋嬪垎缁勯�昏緫浼樺寲: 涔嬪墠鏍规嵁鎵ц鍣↗obHandler杩涜绾跨▼鍒嗙粍,褰撳涓换鍔″鐢↗obhanlder浼氬鑷寸浉浜掗樆濉炪�傜幇鏀逛负鏍规嵁璋冨害涓績浠诲姟杩涜浠诲姟绾跨▼鍒嗙粍,浠诲姟涓庝换鍔℃墽琛岀浉浜掗殧绂�;
+- 4銆佹墽琛屽櫒璋冨害閫氳鏂规浼樺寲, 閫氳繃Hex + HC瀹炵幇寤鸿RPC閫氳鍗忚, 浼樺寲浜嗛�氳鍙傛暟鐨勭淮鎶ゅ拰瑙f瀽娴佺▼;
+- 5銆佽皟搴︿腑蹇�, 鏂板缓/缂栬緫浠诲姟, 鐣岄潰灞炴�ц皟鏁�: 
+    - 5.1銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "浠诲姟鍚岼obName"灞炴�� ,璇ュ睘鎬ф敼涓虹郴缁熻嚜鍔ㄧ敓鎴�: 璇ュ瓧娈典箣鍓嶄富瑕佺敤浜庡湪 "璋冨害涓績" 鍞竴鏍囩ず涓�涓换鍔�, 鐜板疄鎰忎箟涓嶅ぇ, 鍥犳璁″垝娣″寲鎺夎瀛楁,鏀逛负绯荤粺鐢熸垚UUID,浠庤�岀畝鍖栦换鍔℃柊寤虹殑鎿嶄綔;
+    - 5.2銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "GLUE妯″紡" 澶嶉�夋浣嶇疆璋冩暣, 鏀逛负璐磋繎"JobHandler"杈撳叆妗嗗彸渚�;
+    - 5.3銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "鎶ヨ闃堝��" 灞炴��;
+    - 5.4銆佷换鍔℃柊澧�/缂栬緫鐣岄潰涓幓闄� "瀛愪换鍔ey" 灞炴��, 姣忎釜浠诲姟鍏ㄥ眬浠诲姟Key鍙互浠庝换鍔″垪琛ㄨ幏鍙�, 褰撴湰浠诲姟鎵ц缁撴潫涓旀垚鍔熷悗, 灏嗕細鏍规嵁瀛愪换鍔ey鍖归厤瀛愪换鍔″苟涓诲姩瑙﹀彂涓�娆″瓙浠诲姟鎵ц;
+- 6銆侀棶棰樹慨澶�:
+    - 6.1銆佹墽琛屽櫒jetty鍏抽棴浼樺寲,瑙e喅涓�澶勫彲鑳藉鑷磈etty鏃犳硶鍏抽棴鐨勯棶棰�;
+    - 6.2銆佹墽琛屽櫒浠诲姟缁堟鏃�,鎵ц闃熷垪鍥炶皟浼樺寲,瑙e喅涓�澶勫鑷翠换鍔℃棤娉曞洖璋冪殑闂锛�
+    - 6.3銆佽皟搴︿腑蹇冧腑鍒楄〃鍒嗛〉鍙傛暟浼樺寲,瑙e喅涓�澶勫洜鏈嶅姟鍣ㄩ檺鍒秔ost闀垮害鑰屽紩璧风殑闂;
+    - 6.4銆佹墽琛屽櫒Jobhandler娉ㄨВ浼樺寲,瑙e喅涓�澶勫洜浜嬪姟浠g悊瀵艰嚧鐨勫鍣ㄦ棤娉曞姞杞絁obHandler鐨勯棶棰�;
+    - 6.5銆佽繙绋嬭皟搴︿紭鍖�,绂佺敤retry绛栫暐,瑙e喅涓�澶勫彲鑳藉鑷撮噸澶嶈皟鐢ㄧ殑闂;
+
+Tips: 鍘嗗彶鐗堟湰(V1.3.x)鐩墠宸茬粡Release鑷崇ǔ瀹氱増鏈�, 杩涘叆缁存姢闃舵, 鍦板潃瑙佸垎鏀� [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) 銆傛柊鐗规�у皢浼氬湪master鍒嗘敮鎸佺画鏇存柊銆�
+
+### 6.7 鐗堟湰 V1.4.1 鏂扮壒鎬2016-09-06]
+- 1銆侀」鐩垚鍔熸帹閫乵aven涓ぎ浠撳簱, 涓ぎ浠撳簱鍦板潃浠ュ強渚濊禆濡備笅: 
+    ```
+    <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
+    <dependency>
+        <groupId>com.xuxueli</groupId>
+        <artifactId>xxl-job-core</artifactId>
+        <version>${鏈�鏂扮ǔ瀹氱増}</version>
+    </dependency>
+    ```
+- 2銆佷负閫傞厤涓ぎ浠撳簱瑙勫垯, 椤圭洰groupId浠巆om.xxl鏀逛负com.xuxueli銆�
+- 3銆佺郴缁熺増鏈笉鍦ㄧ淮鎶ゅ湪椤圭洰璺焢om涓�,鍚勪釜瀛愭ā鍧楀崟鐙厤缃増鏈厤缃�,瑙e喅瀛愭ā鍧楁棤娉曞崟鐙紪璇戠殑闂;
+- 4銆佸簳灞俁PC閫氳,浼犺緭鏁版嵁鐨勫瓧鑺傞暱搴︾粺璁¤鍒欎紭鍖�,鍙妭鐪�50%鏁版嵁浼犺緭閲�;
+- 5銆両JobHandler鍙栨秷浠诲姟杩斿洖鍊�,鍘熼�氳繃杩斿洖鍊煎垽鏂墽琛岀姸鎬�,閫昏緫鏀逛负:榛樿浠诲姟鎵ц鎴愬姛,浠呭湪鎹曡幏寮傚父鏃惰瀹氫换鍔℃墽琛屽け璐ャ��
+- 6銆佺郴缁熷叕鍏卞脊妗嗗姛鑳�,鎻掍欢鍖�;
+- 7銆佸簳灞傝〃缁撴瀯,琛ㄦ槑缁熶竴澶у啓;
+- 8銆佽皟搴︿腑蹇�,寮傚父澶勭悊鍣↗SON鍝嶅簲鐨凜ontentType淇敼,淇娴忚鍣ㄤ笉璇嗗埆鐨勯棶棰�;
+
+### 6.8 鐗堟湰 V1.4.2 鏂扮壒鎬2016-09-29]
+- 1銆佹帹閫佹柊鐗堟湰 V1.4.2 鑷充腑澶粨搴�, 澶х増鏈� V1.4 杩涘叆缁存姢闃舵;
+- 2銆佷换鍔℃柊澧炴椂,浠诲姟鍒楄〃鍋忕Щ闂淇;
+- 3銆佷慨澶嶄竴澶勫洜bootstrap涓嶆敮鎸佹ā鎬佹閲嶅彔鑰屽鑷寸殑鏍峰紡閿欎贡鐨勯棶棰�, 鍦ㄤ换鍔$紪杈戞椂浼氬嚭鐜拌闂;
+- 4銆佽皟搴﹁秴鏃跺拰Handler鍖归厤涓嶅埌鏃�,璋冨害鐘舵�佷紭鍖�;
+- 5銆佸洜catch寮傚父,瀵艰嚧浠诲姟涓嶅彲缁堟鐨勯棶棰�,缁欏嚭瑙e喅鏂规, 瑙佹枃妗�;
+
+### 6.9 鐗堟湰 V1.5.0 鐗规�2016-11-13]
+- 1銆佷换鍔℃敞鍐�: 鎵ц鍣ㄤ細鍛ㄦ湡鎬ц嚜鍔ㄦ敞鍐屼换鍔�, 璋冨害涓績灏嗕細鑷姩鍙戠幇娉ㄥ唽鐨勪换鍔″苟瑙﹀彂鎵ц銆�
+- 2銆�"鎵ц鍣�" 鏂板鍙傛暟 "AppName" : 鏄瘡涓墽琛屽櫒闆嗙兢鐨勫敮涓�鏍囩ずAppName, 骞跺懆鏈熸�т互AppName涓哄璞¤繘琛岃嚜鍔ㄦ敞鍐屻��
+- 3銆佽皟搴︿腑蹇冩柊澧炴爮鐩� "鎵ц鍣ㄧ鐞�" : 绠$悊鍦ㄧ嚎鐨勬墽琛屽櫒, 閫氳繃灞炴�ppName鑷姩鍙戠幇娉ㄥ唽鐨勬墽琛屽櫒銆傚彧鏈夎绠$悊鐨勬墽琛屽櫒鎵嶅厑璁歌浣跨敤;
+- 4銆�"浠诲姟缁�"灞炴�ф敼涓�"鎵ц鍣�": 姣忎釜浠诲姟闇�瑕佺粦瀹氭寚瀹氱殑鎵ц鍣�, 璋冨害鍦板潃閫氳繃缁戝畾鐨勬墽琛屽櫒鑾峰彇;
+- 5銆佹姏寮�"浠诲姟鏈哄櫒"灞炴��: 閫氳繃浠诲姟缁戝畾鐨勬墽琛屽櫒, 鑷姩鍙戠幇娉ㄥ唽鐨勮繙绋嬫墽琛屽櫒鍦板潃骞惰Е鍙戣皟搴﹁姹傘��
+- 6銆�"鍏叡渚濊禆"涓柊澧濪BGlueLoader,鍩轰簬鍘熺敓jdbc瀹炵幇GLUE婧愮爜鐨勫姞杞藉櫒,鍑忓皯绗笁鏂逛緷璧�(mybatis,spring-orm绛�);绮剧畝鍜屼紭鍖栨墽琛屽櫒娴嬮厤缃�(閽堝GLUE浠诲姟),闄嶄綆涓婃墜闅惧害;
+- 7銆佽〃缁撴瀯璋冩暣,搴曞眰閲嶆瀯浼樺寲;
+- 8銆�"璋冨害涓績"鑷姩娉ㄥ唽鍜屽彂鐜�,failover: 璋冨害涓績鍛ㄦ湡鎬ц嚜鍔ㄦ敞鍐�, 浠诲姟鍥炶皟鏃跺彲浠ユ劅鐭ュ湪绾跨殑鎵�鏈夎皟搴︿腑蹇冨湴鍧�, 閫氳繃failover鐨勬柟寮忚繘琛屼换鍔″洖璋�,閬垮厤鍥炶皟鍗曠偣椋庨櫓銆�
+
+### 6.10 鐗堟湰 V1.5.1 鐗规�2016-11-13]
+- 1銆佸簳灞備唬鐮侀噸鏋勫拰閫昏緫浼樺寲锛孭OM娓呯悊浠ュ強CleanCode锛�
+- 2銆丼ervlet/JSP Spec璁惧畾涓�3.0/2.2
+- 3銆丼pring鍗囩骇鑷�3.2.17.RELEASE鐗堟湰锛�
+- 4銆丣etty鍗囩骇鐗堟湰鑷�8.2.0.v20160908锛�
+- 5銆佸凡鎺ㄩ�乂1.5.0鍜孷1.5.1鑷矼aven涓ぎ浠撳簱锛�
+
+### 6.10 鐗堟湰 V1.5.2 鐗规�2017-02-28]
+- 1銆両P宸ュ叿绫昏幏鍙朓P閫昏緫浼樺寲锛孖P闈欐�佺紦瀛橈紱
+- 2銆佹墽琛屽櫒銆佽皟搴︿腑蹇冿紝鍧囨敮鎸佽嚜瀹氫箟娉ㄥ唽IP鍦板潃锛涜В鍐虫満鍣ㄥ缃戝崱鏃堕敊璇綉鍗℃敞鍐岀殑鎯呭喌锛�
+- 3銆佷换鍔¤法澶╂墽琛屾椂鐢熸垚澶氫唤鏃ュ織鏂囦欢鐨勯棶棰樹慨澶嶏紱
+- 4銆佸簳灞傛棩蹇楀簳灞傛棩蹇楄皟鏁达紝闈炴晱鎰熸棩蹇條evel璋冩暣涓篸ebug锛�
+- 5銆佸崌绾ф暟鎹簱杩炴帴姹燾3p0鐗堟湰锛�
+- 6銆佹墽琛屽櫒log4j閰嶇疆浼樺寲锛屽幓闄ゆ棤鏁堝睘鎬э紱
+- 7銆佸簳灞備唬鐮侀噸鏋勫拰閫昏緫浼樺寲浠ュ強CleanCode锛�
+- 8銆丟LUE渚濊禆娉ㄥ叆閫昏緫浼樺寲锛屾敮鎸佸埆鍚嶆敞鍏ワ紱
+
+### 6.11 鐗堟湰 V1.6.0 鐗规�2017-03-13]
+- 1銆侀�氳鏂规鍗囩骇锛屽師鍩轰簬HEX鐨勯�氳妯″瀷璋冩暣涓哄熀浜嶩TTP鐨凚-RPC鐨勯�氳妯″瀷锛�
+- 2銆佹墽琛屽櫒鏀寔鎵嬪姩璁剧疆鎵ц鍦板潃鍒楄〃锛屾彁渚涘紑鍏冲垏鎹娇鐢ㄦ敞鍐屽湴鍧�杩樻槸鎵嬪姩璁剧疆鐨勫湴鍧�锛�
+- 3銆佹墽琛屽櫒璺敱瑙勫垯锛氱涓�涓�佹渶鍚庝竴涓�佽疆璇€�侀殢鏈恒�佷竴鑷存�ASH銆佹渶涓嶇粡甯镐娇鐢ㄣ�佹渶杩戞渶涔呮湭浣跨敤銆佹晠闅滆浆绉伙紱
+- 4銆佽鑼冪嚎绋嬫ā鍨嬬粺涓�锛岀粺涓�绾跨▼閿�姣佹柟妗�(閫氳繃listener鎴杝top鏂规硶锛屽鍣ㄩ攢姣佹椂閿�姣佺嚎绋嬶紱Daemon鏂瑰紡鏈夋椂涓嶅お鐞嗘兂)锛�
+- 5銆佽鑼冪郴缁熼厤缃暟鎹紝閫氳繃閰嶇疆鏂囦欢缁熶竴绠$悊锛�
+- 6銆丆leanCode锛屾竻鐞嗘棤鏁堢殑鍘嗗彶鍙傛暟锛�
+- 7銆佸簳灞傛墿灞曟暟鎹粨鏋勪互鍙婄浉鍏宠〃缁撴瀯璋冩暣锛�
+- 8銆佹柊寤轰换鍔¢粯璁や负闈炶繍琛岀姸鎬侊紱
+- 9銆丟LUE妯″紡浠诲姟瀹炰緥鏇存柊閫昏緫浼樺寲锛屽師鏍规嵁瓒呮椂鏃堕棿鏇存柊鏀逛负鏍规嵁鐗堟湰鍙锋洿鏂帮紝婧愮爜鍙樺姩鐗堟湰鍙峰姞涓�锛�
+
+### 6.12 鐗堟湰 V1.6.1 鐗规�2017-03-25]
+- 1銆丷olling鏃ュ織锛�
+- 2銆乄ebIDE浜や簰閲嶆瀯锛�
+- 3銆侀�氳澧炲己鏍¢獙锛屾湁鏁堣繃婊ら潪姝e父璇锋眰锛�
+- 4銆佹潈闄愬寮烘牎楠岋紝閲囩敤鍔ㄦ�佺櫥褰昑OKEN锛堟帹鑽愭帴鍏ュ唴閮⊿SO锛夛紱
+- 5銆佹暟鎹簱閰嶇疆浼樺寲锛岃В鍐充贡鐮侀棶棰橈紱
+
+### 6.13 鐗堟湰 V1.6.2 鐗规�2017-04-25]
+- 1銆佽繍琛屾姤琛細鏀寔瀹炴椂鏌ョ湅杩愯鏁版嵁锛屽浠诲姟鏁伴噺銆佽皟搴︽鏁般�佹墽琛屽櫒鏁伴噺绛夛紱浠ュ強璋冨害鎶ヨ〃锛屽璋冨害鏃ユ湡鍒嗗竷鍥撅紝璋冨害鎴愬姛鍒嗗竷鍥剧瓑锛�
+- 2銆丣obHandler鏀寔璁剧疆浠诲姟杩斿洖鍊硷紝鍦ㄤ换鍔¢�昏緫涓彲浠ユ柟渚跨殑鎺у埗浠诲姟鎵ц缁撴灉锛�
+- 3銆佽祫婧愯矾寰勫寘鍚┖鏍兼垨涓枃鏃惰祫婧愭枃浠舵棤娉曞姞杞芥椂锛屾棤娉曞噯纭煡鐪嬪紓甯镐俊鎭殑闂澶勭悊銆�
+- 4銆佽矾鐢辩瓥瓒婁紭鍖栵細寰幆鍜孡FU璺敱绛栫暐璁℃暟鍣ㄨ嚜澧炴棤涓婇檺闂鍜岄娆¤矾鐢卞帇鍔涢泦涓湪棣栧彴鏈哄櫒鐨勯棶棰樹慨澶嶏紱
+
+### 6.14 鐗堟湰 V1.7.0 鐗规�2017-05-02]
+- 1銆佽剼鏈换鍔★細鏀寔浠LUE妯″紡寮�鍙戝拰杩愯鑴氭湰浠诲姟锛屽寘鎷琒hell銆丳ython鍜孏roovy绛夌被鍨嬭剼鏈�;
+- 2銆佹柊澧瀞pring-boot绫诲瀷鎵ц鍣╡xample椤圭洰锛�
+- 3銆佸崌绾etty鐗堟湰鑷�9.2锛�
+- 4銆佷换鍔¤繍琛屾棩蹇楃Щ闄og4j缁勪欢渚濊禆锛屾敼涓哄簳灞傝嚜涓诲疄鐜帮紝浠庤�屽彇娑堜簡瀵规棩蹇楃粍浠剁殑渚濊禆闄愬埗锛�
+- 5銆佹墽琛屽櫒绉婚櫎GlueLoader渚濊禆锛屾敼涓烘帹閫佹柟寮忓疄鐜帮紝浠庤�孏LUE婧愮爜鍔犺浇涓嶅啀渚濊禆JDBC锛�
+- 6銆佺櫥褰曟嫤鎴猂edirect鏃惰幏鍙栭」鐩悕锛岃В鍐抽潪鏍规嵁鐩綍鍙戝竷鏃惰烦杞�404闂锛�
+
+### 6.15 鐗堟湰 V1.7.1 鐗规�2017-05-08]
+- 1銆佽繍琛屾棩蹇楄鍐欑紪鐮佺粺涓�涓篣TF-8锛岃В鍐硍indows鐜涓嬫棩蹇椾贡鐮侀棶棰橈紱
+- 2銆侀�氳瓒呮椂鏃堕棿闄愬畾涓�10s锛岄伩鍏嶅紓甯告儏鍐典笅璋冨害绾跨▼鍗犵敤锛�
+- 3銆佹墽琛屽櫒锛宻erver鍚姩銆侀攢姣佸拰娉ㄥ唽閫昏緫璋冩暣锛�
+- 4銆丣ettyServer鍏抽棴閫昏緫浼樺寲锛屼慨澶嶆墽琛屽櫒鏃犳硶姝e父鍏抽棴瀵艰嚧绔彛鍗犵敤鍜岄绻佹墦鍗癱3p0鏃ュ織鐨勯棶棰橈紱
+- 5銆丣obHandler涓紑鍚瓙绾跨▼鏃讹紝鏀寔瀛愮嚎绋嬭緭鍑烘墽琛屾棩蹇楀苟閫氳繃Rolling鏌ョ湅銆�
+- 6銆佷换鍔℃棩蹇楁竻鐞嗗姛鑳斤紱
+- 7銆佸脊妗嗙粍浠剁粺涓�鏇挎崲涓簂ayer锛�
+- 8銆佸崌绾uartz鐗堟湰鑷�2.3.0锛�
+
+### 6.16 鐗堟湰 V1.7.2 鐗规�2017-05-17]
+- 1銆侀樆濉炲鐞嗙瓥鐣ワ細璋冨害杩囦簬瀵嗛泦鎵ц鍣ㄦ潵涓嶅強澶勭悊鏃剁殑澶勭悊绛栫暐锛岀瓥鐣ュ寘鎷細鍗曟満涓茶锛堥粯璁わ級銆佷涪寮冨悗缁皟搴︺�佽鐩栦箣鍓嶈皟搴︼紱
+- 2銆佸け璐ュ鐞嗙瓥鐣ワ紱璋冨害澶辫触鏃剁殑澶勭悊绛栫暐锛岀瓥鐣ュ寘鎷細澶辫触鍛婅锛堥粯璁わ級銆佸け璐ラ噸璇曪紱
+- 3銆侀�氳鏃堕棿鎴宠秴鏃舵椂闂磋皟鏁翠负180s锛�
+- 4銆佹墽琛屽櫒涓庢暟鎹簱褰诲簳瑙h�︼紝浣嗘槸鎵ц鍣ㄩ渶瑕侀厤缃皟搴︿腑蹇冮泦缇ゅ湴鍧�銆傝皟搴︿腑蹇冩彁渚汚PI渚涙墽琛屽櫒鍥炶皟鍜屽績璺虫敞鍐屾湇鍔★紝鍙栨秷璋冨害涓績鍐呴儴jetty锛屽績璺冲懆鏈熻皟鏁翠负30s锛屽績璺冲け鏁堜负涓夊�嶅績璺筹紱
+- 5銆佹墽琛屽弬鏁扮紪杈戞椂涓㈠け闂淇锛�
+- 6銆佹柊澧炰换鍔℃祴璇旸emo锛屾柟渚垮湪寮�鍙戞椂杩涜浠诲姟閫昏緫娴嬭瘯锛�
+
+### 6.17 鐗堟湰 V1.8.0 鐗规�2017-07-17]
+- 1銆佷换鍔ron鏇存柊閫昏緫浼樺寲锛屾敼涓簉escheduleJob锛屽悓鏃堕槻姝ron閲嶅璁剧疆锛�
+- 2銆丄PI鍥炶皟鏈嶅姟澶辫触鐘舵�佺爜浼樺寲锛屾柟渚块棶棰樻帓鏌ワ紱
+- 3銆乆xlJobLogger鐨勬棩蹇楀鍙傛暟鏀寔锛�
+- 4銆佽矾鐢辩瓥鐣ユ柊澧� "蹇欑杞Щ" 妯″紡锛氭寜鐓ч『搴忎緷娆¤繘琛岀┖闂叉娴嬶紝绗竴涓┖闂叉娴嬫垚鍔熺殑鏈哄櫒閫夊畾涓虹洰鏍囨墽琛屽櫒骞跺彂璧疯皟搴︼紱
+- 5銆佽矾鐢辩瓥鐣ヤ唬鐮侀噸鏋勶紱
+- 6銆佹墽琛屽櫒閲嶅娉ㄥ唽闂淇锛�
+- 7銆佷换鍔$嚎绋嬭疆绌�30娆″悗鑷姩閿�姣侊紝闄嶄綆浣庨浠诲姟鐨勬棤鏁堢嚎绋嬫秷鑰椼��
+- 8銆佹墽琛屽櫒浠诲姟鎵ц缁撴灉鎵归噺鍥炶皟锛岄檷浣庡洖璋冮鐜囨彁鍗囨墽琛屽櫒鎬ц兘锛�
+- 9銆乻pringboot鐗堟湰鎵ц鍣紝鍙栨秷XML閰嶇疆锛屾敼涓虹被閰嶇疆鏂瑰紡锛�
+- 10銆佹墽琛屾棩蹇楋紝鏀寔鏍规嵁杩愯 "鐘舵��" 绛涢�夋棩蹇楋紱
+- 11銆佽皟搴︿腑蹇冧换鍔℃敞鍐屾娴嬮�昏緫浼樺寲锛�
+
+### 6.18 鐗堟湰 V1.8.1 鐗规�2017-07-30]
+- 1銆佸垎鐗囧箍鎾换鍔★細鎵ц鍣ㄩ泦缇ら儴缃叉椂锛屼换鍔¤矾鐢辩瓥鐣ラ�夋嫨"鍒嗙墖骞挎挱"鎯呭喌涓嬶紝涓�娆′换鍔¤皟搴﹀皢浼氬箍鎾Е鍙戦泦缇や腑鎵�鏈夋墽琛屽櫒鎵ц涓�娆′换鍔★紝鍙牴鎹垎鐗囧弬鏁板鐞嗗垎鐗囦换鍔★紱
+- 2銆佸姩鎬佸垎鐗囷細鍒嗙墖骞挎挱浠诲姟浠ユ墽琛屽櫒涓虹淮搴﹁繘琛屽垎鐗囷紝鏀寔鍔ㄦ�佹墿瀹规墽琛屽櫒闆嗙兢浠庤�屽姩鎬佸鍔犲垎鐗囨暟閲忥紝鍗忓悓杩涜涓氬姟澶勭悊锛涘湪杩涜澶ф暟鎹噺涓氬姟鎿嶄綔鏃跺彲鏄捐憲鎻愬崌浠诲姟澶勭悊鑳藉姏鍜岄�熷害銆�
+- 3銆佹墽琛屽櫒JobHandler绂佹鍛藉悕鍐茬獊锛�
+- 4銆佹墽琛屽櫒闆嗙兢鍦板潃鍒楄〃杩涜鑷劧鎺掑簭锛�
+- 5銆佽皟搴︿腑蹇冿紝DAO灞備唬鐮佺簿绠�浼樺寲骞朵笖鏂板娴嬭瘯鐢ㄤ緥瑕嗙洊锛�
+- 6銆佽皟搴︿腑蹇傾PI鏈嶅姟鏀逛负鑷爺RPC褰㈠紡锛岀粺涓�搴曞眰閫氳妯″瀷锛�
+- 7銆佹柊澧炶皟搴︿腑蹇傾PI鏈嶅姟娴嬭瘯Demo锛屾柟渚垮湪璋冨害涓績API鎵╁睍鍜屾祴璇曪紱
+- 8銆佷换鍔″垪琛ㄩ〉浜や簰浼樺寲锛屾洿鎹㈡墽琛屽櫒鍒嗙粍鏃惰嚜鍔ㄥ埛鏂颁换鍔″垪琛紝鏂板缓浠诲姟鏃堕粯璁ゅ畾浣嶅湪褰撳墠鎵ц鍣ㄤ綅缃紱
+- 9銆佽闂护鐗岋紙accessToken锛夛細涓烘彁鍗囩郴缁熷畨鍏ㄦ�э紝璋冨害涓績鍜屾墽琛屽櫒杩涜瀹夊叏鎬ф牎楠岋紝鍙屾柟AccessToken鍖归厤鎵嶅厑璁搁�氳锛�
+- 10銆乻pringboot鐗堟湰鎵ц鍣紝鍗囩骇鑷�1.5.6.RELEASE鐗堟湰锛�
+- 11銆佺粺涓�maven渚濊禆鐗堟湰绠$悊锛�
+
+### 6.19 鐗堟湰 V1.8.2 鐗规�2017-09-04]
+- 1銆侀」鐩富椤垫惌寤猴細鎻愪緵涓嫳鏂囨枃妗o細https://www.xuxueli.com/xxl-job 
+- 2銆丣Final鎵ц鍣⊿ample绀轰緥椤圭洰锛�
+- 3銆佷簨浠惰Е鍙戯細闄や簡"Cron鏂瑰紡"鍜�"浠诲姟渚濊禆鏂瑰紡"瑙﹀彂浠诲姟鎵ц涔嬪锛屾敮鎸佸熀浜庝簨浠剁殑瑙﹀彂浠诲姟鏂瑰紡銆傝皟搴︿腑蹇冩彁渚涜Е鍙戜换鍔″崟娆℃墽琛岀殑API鏈嶅姟锛屽彲鏍规嵁涓氬姟浜嬩欢鐏垫椿瑙﹀彂銆�
+- 4銆佹墽琛屽櫒鎽橀櫎锛氭墽琛屽櫒閿�姣佹椂锛屼富鍔ㄩ�氱煡璋冨害涓績骞舵憳闄ゅ搴旀墽琛屽櫒鑺傜偣锛屾彁楂樻墽琛屽櫒鐘舵�佹劅鐭ョ殑鏃舵晥鎬с��
+- 5銆佹墽琛屽櫒鎵嬪姩璁剧疆IP鏃跺皢浼氱粦瀹欻ost锛�
+- 6銆佽鑼冮」鐩洰褰曪紝鏂逛究鎵╁睍澶氭墽琛屽櫒锛�
+- 7銆佽В鍐虫墽琛屽櫒鍥炶皟URL涓嶆敮鎸侀厤缃瓾TTPS鏃堕棶棰橈紱
+- 8銆佹墽琛屽櫒鍥炶皟绾跨▼閿�姣佸墠, 鎵归噺鍥炶皟闃熷垪涓暟鎹紝闃叉浠诲姟缁撴灉涓㈠け锛�
+- 9銆佽皟搴︿腑蹇冧换鍔$洃鎺х嚎绋嬮攢姣佹椂锛屾壒閲忓澶辫触浠诲姟鍛婅锛岄槻姝㈠憡璀︿俊鎭涪澶憋紱
+- 10銆佷换鍔℃棩蹇楁枃浠惰矾寰勬椂闂存埑鏍煎紡鍖栨椂SimpleDateFormat骞跺彂闂瑙e喅锛�
+
+### 6.20 鐗堟湰 V1.9.0 鐗规�2017-12-29]
+- 1銆佹柊澧濶utz鎵ц鍣⊿ample绀轰緥椤圭洰锛�
+- 2銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(NodeJS) "锛屾敮鎸丯odeJS鑴氭湰浠诲姟锛�
+- 3銆佽剼鏈换鍔hell銆丳ython鍜孨odejs绛夋敮鎸佽幏鍙栧垎鐗囧弬鏁帮紱
+- 4銆佸け璐ラ噸璇曪紝瀹屾暣鏀寔锛氳皟搴︿腑蹇冭皟搴﹀け璐ヤ笖鍚敤"澶辫触閲嶈瘯"绛栫暐鏃讹紝灏嗕細鑷姩閲嶈瘯涓�娆★紱鎵ц鍣ㄦ墽琛屽け璐ヤ笖鍥炶皟澶辫触閲嶈瘯鐘舵�侊紙鏂板澶辫触閲嶈瘯鐘舵�佽繑鍥炲�硷級鏃讹紝涔熷皢浼氳嚜鍔ㄩ噸璇曚竴娆★紱
+- 5銆佸け璐ュ憡璀︾瓥鐣ユ墿灞曪細榛樿鎻愪緵閭欢澶辫触鍛婅锛屽彲鎵╁睍鐭俊绛夛紝鎵╁睍浠g爜浣嶇疆涓� "JobFailMonitorHelper.failAlarm"锛�
+- 6銆佹墽琛屽櫒绔彛鏀寔鑷姩鐢熸垚(灏忎簬绛変簬0鏃�)锛岄伩鍏嶇鍙e畾涔夊啿绐侊紱
+- 7銆佽皟搴︽姤琛ㄤ紭鍖栵紝鏀寔鏃堕棿鍖洪棿绛涢�夛紱
+- 8銆丩og缁勪欢鏀寔杈撳嚭寮傚父鏍堜俊鎭紝搴曞眰瀹炵幇浼樺寲锛�
+- 9銆佸憡璀﹂偖浠舵牱寮忎紭鍖栵紝璋冩暣涓鸿〃鏍煎舰寮忥紝閭欢缁勪欢璋冩暣涓篶ommons-email绠�鍖栭偖浠舵搷浣滐紱
+- 10銆侀」鐩緷璧栧叏閲忓崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乯ackson绛夌瓑锛�
+- 11銆佷换鍔℃棩蹇楋紝璁板綍鍙戣捣璋冨害鐨勬満鍣ㄤ俊鎭紱
+- 12銆佷氦浜掍紭鍖栵紝濡傜櫥闄嗘敞閿�锛�
+- 13銆佷换鍔ron闀垮害鎵╁睍鏀寔鑷�128浣嶏紝鏀寔璐熻矗绫诲瀷Cron璁剧疆锛�
+- 14銆佹墽琛屽櫒鍦板潃褰曞叆浜や簰浼樺寲锛屽湴鍧�闀垮害鎵╁睍鏀寔鑷�512浣嶏紝鏀寔澶ц妯℃墽琛屽櫒闆嗙兢閰嶇疆锛�
+- 15銆佷换鍔″弬鏁扳�淚JobHandler.execute鈥濆叆鍙傛敼涓衡�淪tring params鈥濓紝澧炲己鍏ュ弬閫氱敤鎬с��
+- 16銆両JobHandler鎻愪緵init/destroy鏂规硶锛屾敮鎸佸湪鐩稿簲浠诲姟绾跨▼鍒濆鍖栧拰閿�姣佹椂杩涜闄勫姞鎿嶄綔锛�
+- 17銆佷换鍔℃敞瑙h皟鏁翠负 鈥淍JobHandler鈥濓紝涓庝换鍔℃娊璞℃帴鍙g粺涓�锛�
+- 18銆佷慨澶嶄换鍔$洃鎺х嚎绋嬭鑰楁椂浠诲姟闃诲鐨勯棶棰橈紱
+- 19銆佷慨澶嶄换鍔$洃鎺х嚎绋嬫棤娉曠洃鎺т换鍔¤Е鍙戝拰鎵ц鐘舵�佸潎鏈�0鐨勯棶棰橈紱
+- 20銆佹墽琛屽櫒鍔ㄦ�佷唬鐞嗗璞★紝鎷︽埅闈炰笟鍔℃柟娉曠殑鎵ц锛�
+- 21銆佷慨澶岼obThread鎹曡幏Error閿欒涓嶆洿鏂癑obLog鐨勯棶棰橈紱
+- 22銆佷慨澶嶄换鍔″垪琛ㄧ晫闈㈠乏渚ц彍鍗曞悎骞舵椂鏍峰紡閿欎贡闂锛�
+- 23銆佽皟搴︿腑蹇冮」鐩棩蹇楅厤缃敼涓簒ml鏂囦欢鏍煎紡锛�
+- 24銆丩og鍦板潃鏍煎紡鍏煎锛屾敮鎸侀潪"/"缁撳熬璺緞閰嶇疆锛�
+- 25銆佸簳灞傜郴缁熸棩蹇楃骇鍒鑼冭皟鏁达紝娓呯悊閬楃暀浠g爜锛�
+- 26銆佸缓琛⊿QL浼樺寲锛屾敮鎸佸悓姝ュ垱寤哄埗瀹氱紪鐮佺殑搴撳拰琛紱
+- 27銆佺郴缁熷畨鍏ㄦ�т紭鍖栵紝鐧婚檰Token鍐機ookie鏃惰繘琛孧D5鍔犲瘑锛屽悓鏃禖ookie鍚敤HttpOnly锛�
+- 28銆佹柊澧�"浠诲姟ID"灞炴�э紝绉婚櫎"JobKey"灞炴�э紝鍓嶈�呮壙鎷呮墍鏈夊姛鑳斤紝鏂逛究鍚庣画澧炲己浠诲姟渚濊禆鍔熻兘銆�
+- 29銆佷换鍔″惊鐜緷璧栭棶棰樹慨澶嶏紝閬垮厤瀛愪换鍔′笌鐖朵换鍔¢噸澶嶅鑷寸殑璋冨害姝诲惊鐜紱
+- 30銆佷换鍔″垪琛ㄦ柊澧炵瓫閫夋潯浠� "浠诲姟鎻忚堪"锛屽揩閫熸绱换鍔★紱
+- 31銆佹墽琛屽櫒Log鏂囦欢瀹氭湡娓呯悊鍔熻兘锛氭墽琛屽櫒鏂板閰嶇疆椤癸紙"xxl.job.executor.logretentiondays"锛夋棩蹇椾繚瀛樺ぉ鏁帮紝鏃ュ織鏂囦欢杩囨湡鑷姩鍒犻櫎銆�
+
+### 6.21 鐗堟湰 V1.9.1 鐗规�2018-02-22]
+- 1銆佸浗闄呭寲锛氳皟搴︿腑蹇冨疄鐜板浗闄呭寲锛屾敮鎸佷腑鏂囥�佽嫳鏂囦袱绉嶈瑷�锛岄粯璁や负涓枃銆�
+- 2銆佽皟搴︽姤琛ㄦ柊澧�"杩愯涓�"涓姸鎬侀」锛�
+- 3銆佽皟搴︽姤琛ㄤ紭鍖栵紝鎶ヨ〃SQL璋冧紭骞朵笖鏂板LocalCache缂撳瓨锛堢紦瀛樻椂闂�60s锛夛紝鎻愰珮澶ф暟鎹噺涓嬫姤琛ㄥ姞杞介�熷害锛�
+- 4銆佷慨澶嶆墦鍖呴儴缃叉椂璧勬簮鏂囦欢涔辩爜闂锛�
+- 5銆佷慨澶嶆柊鐗堟湰chrome婊氬姩鍒伴《閮ㄥけ鏁堥棶棰橈紱
+- 6銆佽皟搴︿腑蹇冮厤缃姞杞戒紭鍖栵紝鍙栨秷瀵归厤缃枃浠跺悕鐨勫己渚濊禆锛屾敮鎸佸姞杞界鐩橀厤缃紱
+- 7銆佷慨澶嶈剼鏈换鍔og鏂囦欢鏈甯竎lose鐨勯棶棰橈紱
+- 8銆侀」鐩緷璧栧叏閲忓崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乯ackson绛夌瓑锛�
+
+### 6.22 鐗堟湰 V1.9.2 鐗规�2018-10-05]
+- 1銆佷换鍔¤秴鏃舵帶鍒讹細鏂板浠诲姟灞炴�� "浠诲姟瓒呮椂鏃堕棿"锛屽苟鏀寔鑷畾涔夛紝浠诲姟杩愯瓒呮椂灏嗕細涓诲姩涓柇浠诲姟锛�
+- 2銆佷换鍔″け璐ラ噸璇曟鏁帮細鏂板浠诲姟灞炴�� "澶辫触閲嶈瘯娆℃暟"锛屽苟鏀寔鑷畾涔夛紝褰撲换鍔″け璐ユ椂灏嗕細鎸夌収棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇曪紱鍚屾椂鏀舵暃搴熷純鍏朵粬澶辫触閲嶈瘯绛栫暐锛屽璋冨害澶辫触銆佹墽琛屽け璐ャ�佺姸鎬佺爜澶辫触绛夛紱
+- 3銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(PHP) "锛屾敮鎸乸hp鑴氭湰浠诲姟锛�
+- 4銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(PowerShell) "锛屾敮鎸丳owerShell鑴氭湰浠诲姟锛�
+- 5銆佽皟搴﹀叏寮傛澶勭悊锛氫换鍔¤Е鍙戜箣鍚庯紝鎺ㄩ�佸埌璋冨害闃熷垪锛屽绾跨▼骞跺彂澶勭悊璋冨害璇锋眰锛屾彁楂樹换鍔¤皟搴﹂�熺巼鐨勫悓鏃讹紝閬垮厤鍥犵綉缁滈棶棰樺鑷磓uartz璋冨害绾跨▼闃诲鐨勯棶棰橈紱
+- 6銆佹墽琛屽櫒浠诲姟缁撴灉钀界洏浼樺寲锛氭墽琛屽櫒鍥炶皟澶辫触鏃跺皢浠诲姟缁撴灉鍐欑鐩橈紝寰呴噸鍚垨缃戠粶鎭㈠鏃堕噸璇曞洖璋冧换鍔$粨鏋滐紝闃叉浠诲姟鎵ц缁撴灉涓㈠け锛�
+- 7銆佷换鍔℃棩蹇楁煡璇㈤�熷害澶у箙鎻愬崌锛氱櫨涓囩骇鍒暟鎹噺鎼滅储閫熷害鎻愬崌1000鍊嶏紱
+- 8銆佽皟搴︿腑蹇冩彁渚汚PI鏈嶅姟锛屾敮鎸侀�氳繃API鏈嶅姟瀵逛换鍔¤繘琛屾煡璇€�佹柊澧炪�佹洿鏂般�佸惎鍋滅瓑鎿嶄綔锛�
+- 9銆佸簳灞傝嚜鐮擫og缁勪欢鍙傛暟鍗犱綅绗︽敼涓�"{}"锛屽苟淇鎵撳嵃鏈夊弬鏃ュ織鏃跺弬鏁颁笉鍖归厤瀵艰嚧鎶ラ敊鐨勯棶棰橈紱
+- 10銆佷换鍔″洖璋冪粨鏋滀紭鍖栵紝鏀寔灞曠ず鍦≧olling log涓紝鏂逛究闂鎺掓煡锛�
+- 11銆佸簳灞侺ocalCache缁勪欢鍏煎鎬т紭鍖栵紝鏀寔jdk9銆乯dk10鍙婁互涓婄増鏈紪璇戦儴缃诧紱
+- 12銆佸憡璀﹂偖浠跺浐瀹氫娇鐢� UTF-8 缂栫爜鏍煎紡锛屼慨澶嶇敱鏈哄櫒缂栫爜瀵艰嚧鐨勯偖浠朵贡鐮侀棶棰橈紱
+- 13銆佸憡璀﹂偖浠朵腑灞曠ず澶辫触鍛婅淇℃伅锛�
+- 14銆佸憡璀﹂偖绠辨敮鎸丼SL閰嶇疆锛�
+- 15銆乄indow鏈哄櫒涓婩ile.separator涓嶅吋瀹归棶棰樹慨澶嶏紱
+- 16銆佽剼鏈换鍔″紓甯窵og杈撳嚭浼樺寲锛�
+- 17銆佷换鍔$嚎绋嬪仠姝㈠彉閲忎慨楗扮浼樺寲锛�
+- 18銆佽剼鏈换鍔og鏂囦欢娴佸叧闂紭鍖栵紱
+- 19銆佷换鍔℃姤琛ㄦ垚鍔熴�佸け璐ュ拰杩涜涓粺璁¢棶棰樹慨澶嶏紱
+- 20銆佹牳蹇冧緷璧朇ore鍐呴儴鍥介檯鍖栧鐞嗭紱
+- 21銆侀粯璁uartz绾跨▼鏁拌皟鏁翠负50锛�
+- 22銆佹柊澧炲乏渚ц彍鍗�"杩愯鎶ヨ〃"锛�
+- 23銆佹墽琛屽櫒鎵嬪姩璁剧疆IP鏃跺彇娑堢粦瀹欻ost鐨勬搷浣滐紝璇P浠呬緵鎵ц鍣ㄦ敞鍐屼娇鐢紱淇鎸囧畾澶栫綉IP鏃舵棤娉曠粦瀹氭墽琛屽櫒Host鐨勯棶棰橈紱
+- 24銆佸彇娑堢埗瀛愪换鍔′笉鍙噸澶嶇殑闄愬埗锛屾敮鎸佸惊鐜换鍔¤Е鍙戠瓑鐗规畩鍦烘櫙锛�
+- 25銆佷换鍔¤皟搴﹀娉ㄤ腑鏍囨敞浠诲姟瑙﹀彂绫诲瀷锛屽Cron瑙﹀彂銆佺埗浠诲姟瑙﹀彂銆丄PI瑙﹀彂绛夌瓑锛屾柟渚挎帓鏌ヨ皟搴︽棩蹇楋紱
+- 26銆佸簳灞傛棩蹇楃粍浠禨impleDateFormat绾跨▼瀹夊叏闂淇锛�
+- 27銆佹墽琛屽櫒閫氳绾跨▼浼樺寲锛宑orePoolSize浠�256闄嶄綆鑷�32锛�
+- 28銆佷换鍔℃棩蹇楄〃鐘舵�佸瓧娈电被鍨嬩紭鍖栵紱
+- 29銆丟LUE鑴氭湰鏂囦欢鑷姩娓呯悊鍔熻兘锛屽強鏃舵竻鐞嗚繃鏈熻剼鏈枃浠讹紱
+- 30銆佹墽琛屽櫒娉ㄥ唽鏂瑰紡鍒囨崲浼樺寲锛屽垏鎹㈣嚜鍔ㄦ敞鍐屾椂涓诲姩鍚屾鍦ㄧ嚎鏈哄櫒锛岄伩鍏嶆墽琛屽櫒涓虹┖鐨勯棶棰橈紱
+- 31銆佽法骞冲彴锛氶櫎浜嗘彁渚汮ava銆丳ython銆丳HP绛夊崄鏉ョ浠诲姟妯″紡涔嬪锛屾柊澧炴彁渚涘熀浜嶩TTP鐨勪换鍔℃ā寮忥紱
+- 32銆佸簳灞俁PC搴忓垪鍖栧崗璁皟鏁翠负hessian2锛�
+- 33銆佷慨澶嶈〃瀛楁 鈥渢.order鈥濅笌鏁版嵁搴撳叧閿瓧鍐茬獊鏌ヨ澶辫触鐨勯棶棰橈紝
+- 34銆佷换鍔″睘鎬ф灇涓� "浠诲姟妯″紡銆侀樆濉炵瓥鐣�" 鍥介檯鍖栦紭鍖栵紱
+- 35銆佸垎鐗囦换鍔″け璐ラ噸璇曚紭鍖栵紝浠呴噸璇曞綋鍓嶅け璐ョ殑鍒嗙墖锛�
+- 36銆佷换鍔¤Е鍙戞椂鏀寔鍔ㄦ�佷紶鍙傦紝璋冨害涓績涓嶢PI鏈嶅姟鍧囨彁渚涙彁渚涘姩鎬佸弬鏁板姛鑳斤紱
+- 37銆佷换鍔℃墽琛屾棩蹇椼�佽皟搴︽棩蹇楀瓧娈电被鍨嬭皟鏁达紝鏀逛负text绫诲瀷骞跺彇娑堝瓧鏁伴檺鍒讹紱
+- 38銆丟LUE浠诲姟鑴氭湰瀛楁绫诲瀷璋冩暣锛屾敼涓簃ediumtext绫诲瀷锛屾彁楂楪LUE闀垮害涓婇檺锛�
+- 39銆佷换鍔$洃鎺х嚎绋婰og杈撳嚭浼樺寲锛岃繍琛屼腑浠诲姟鐨勭洃鎺og鏀逛负debug绾у埆锛屽噺灏戦潪鏍稿績鏃ュ織閲忥紱
+- 40銆侀」鐩緷璧栧叏閲忓崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆丣ackson銆乬roovy绛夌瓑锛�
+- 41銆乨ocker鏀寔锛氳皟搴︿腑蹇冩彁渚� Dockerfile 鏂逛究蹇�熸瀯寤篸ocker闀滃儚锛� 
+
+### 6.23 鐗堟湰 V2.0.0 Release Notes[2018-11-04]
+- 1銆佽皟搴︿腑蹇冭縼绉诲埌 springboot锛�
+- 2銆佸簳灞傞�氳缁勪欢杩佺Щ鑷� xxl-rpc锛�
+- 3銆佸鍣ㄥ寲锛氭彁渚涘畼鏂筪ocker闀滃儚锛屽苟瀹炴椂鏇存柊鎺ㄩ�乨ockerhub锛坉ocker pull xuxueli/xxl-job-admin锛夛紝杩涗竴姝ュ疄鐜颁骇鍝佸紑绠卞嵆鐢紱
+- 4銆佹柊澧炴棤妗嗘灦鎵ц鍣⊿ample绀轰緥椤圭洰 "xxl-job-executor-sample-frameless"銆備笉渚濊禆绗笁鏂规鏋讹紝鍙渶main鏂规硶鍗冲彲鍚姩杩愯鎵ц鍣紱
+- 5銆佸懡浠よ浠诲姟锛氬師鐢熸彁渚涢�氱敤鍛戒护琛屼换鍔andler锛圔ean浠诲姟锛�"CommandJobHandler"锛夛紱涓氬姟鏂瑰彧闇�瑕佹彁渚涘懡浠よ鍗冲彲锛�
+- 6銆佷换鍔$姸鎬佷紭鍖栵紝浠呰繍琛岀姸鎬�"NORMAL"浠诲姟鍏宠仈鑷硄uartz锛岄檷浣巕uartz搴曞眰鏁版嵁瀛樺偍涓庤皟搴﹀帇鍔涳紱
+- 7銆佷换鍔$姸鎬佽鑼冿細鏂板浠诲姟榛樿鍋滄鐘舵�侊紝浠诲姟鏇存柊鏃朵繚鎸佷换鍔$姸鎬佷笉鍙橈紱
+- 8銆両P鑾峰彇閫昏緫浼樺寲锛屼紭鍏堥亶鍘嗙綉鍗℃潵鑾峰彇鍙敤IP锛�
+- 9銆佷换鍔℃柊澧炵殑API鏈嶅姟鎺ュ彛杩斿洖浠诲姟ID锛屾柟渚胯皟鐢ㄦ柟瀹炵敤锛�
+- 10銆佺粍浠跺寲浼樺寲锛岀Щ闄ゅ spring 鐨勪緷璧栵細闈瀞pring搴旂敤閫夌敤 "XxlJobExecutor" 銆乻pring搴旂敤閫夌敤 "XxlJobSpringExecutor" 浣滀负鎵ц鍣ㄧ粍浠讹紱 
+- 11銆佷换鍔ollingLog灞曠ず閫昏緫浼樺寲锛屼慨澶嶈秴鏃朵换鍔℃棤娉曟煡鐪嬬殑闂锛�
+- 12銆佸椤筓I缁勪欢鍗囩骇鍒版渶鏂扮増鏈紝濡傦細CodeMirror銆丒charts銆丣query 绛夛紱
+- 13銆侀」鐩緷璧栧崌绾� groovy 鑷宠緝鏂扮ǔ瀹氱増鏈紱pom娓呯悊锛�
+- 14銆佸瓙浠诲姟澶辫触閲嶈瘯閲嶈瘯閫昏緫浼樺寲锛屽瓙浠诲姟澶辫触鏃跺皢浼氭寜鐓у叾棰勮鐨勫け璐ラ噸璇曟鏁颁富鍔ㄨ繘琛岄噸璇�
+
+### 6.23 鐗堟湰 v2.0.1 Release Notes[2018-11-09]
+- 1銆佸乏渚ц彍鍗曟姌鍙犲姩鐢婚棶棰樹慨澶嶏紱
+- 2銆佽皟搴︽姤琛ㄦ棩鏈熷垎甯冨浘榛樿鍊肩粺涓�锛�
+- 3銆乫reemarker瀵规暟瀛楅粯璁ゅ姞鍗冨垎浣嶉棶棰樹慨澶嶏紝瑙e喅鏃ュ織ID琚垎闅斿鑷存煡鐪嬫棩蹇楀け璐ラ棶棰橈紱
+- 4銆佸簳灞傞�氳缁勪欢鍗囩骇锛屼慨澶嶉�氳寮傚父鏃舵棤鏁堢瓑寰呯殑闂锛�
+- 5銆佹墽琛屽櫒鍚姩涔嬪悗jetty鍋滄鐨勯棶棰樹慨澶嶏紱
+
+### 6.24 鐗堟湰 v2.0.2 Release Notes[2019-04-20]
+- 1銆佸簳灞傞�氳鏂规浼樺寲锛氬崌绾ц緝鏂扮増鏈瑇xl-rpc锛岀敱"JETTY"鏂规璋冩暣涓�"NETTY_HTTP"鏂规锛屾墽琛屽櫒鍐呭祵netty-http-server鎻愪緵鏈嶅姟锛岃皟搴︿腑蹇冨鐢ㄥ鍣ㄧ鍙f彁渚涙湇鍔★紱
+- 2銆佷换鍔″憡璀﹂�昏緫璋冩暣锛屾敼涓洪�氳繃鎵弿澶辫触鏃ュ織鏂瑰紡瑙﹀彂銆備竴鏂归潰绮剧‘鎵弿澶辫触浠诲姟锛岄檷浣庢壂鎻忚寖鍥达紱鍙︿竴鏂归潰鍙栨秷鍐呭瓨闃熷垪锛岄檷浣庣嚎绋嬪唴瀛樻秷鑰楋紱
+- 3銆丵uartz瑙﹀彂绾跨▼姹犲簾寮冨苟鏇挎崲涓� "XxlJobThreadPool"锛岄檷浣庣嚎绋嬪垏鎹€�佸唴瀛樺崰鐢ㄥ甫鏉ョ殑娑堣�楋紝鎻愰珮璋冨害鎬ц兘锛�
+- 4銆佽皟搴︾嚎绋嬫睜闅旂锛屾媶鍒嗕负"Fast"鍜�"Slow"涓や釜绾跨▼姹狅紝1鍒嗛挓绐楀彛鏈熷唴浠诲姟鑰楁椂杈�500ms瓒呰繃10娆★紝璇ョ獥鍙f湡鍐呭垽瀹氫负鎱换鍔★紝鎱换鍔¤嚜鍔ㄩ檷绾ц繘鍏�"Slow"绾跨▼姹狅紝閬垮厤鑰楀敖璋冨害绾跨▼锛屾彁楂樼郴缁熺ǔ瀹氭�э紱
+- 5銆佹墽琛屽櫒鐑儴缃叉椂JobHandler閲嶆柊鍒濆鍖栵紝淇鐢辨瀵艰嚧鐨� "jobhandler naming conflicts." 闂锛�
+- 6銆佹柊澧濩lass鐨勫姞杞界紦瀛橈紝瑙e喅棰戠箒鍔犺浇Class浼氫娇jvm鐨勬柟娉曞尯绌洪棿涓嶈冻瀵艰嚧OOM鐨勯棶棰橈紱
+- 7銆佷换鍔℃敮鎸佹洿鎹㈢粦瀹氭墽琛屽櫒锛屾柟渚夸换鍔″垎缁勮浆绉诲拰绠$悊锛�
+- 8銆佽皟搴︿腑蹇冨憡璀﹂偖浠跺彂閫佺粍浠舵敼涓� 鈥渟pring-boot-starter-mail鈥濓紱
+- 9銆佽浣忓瘑鐮佸姛鑳戒紭鍖栵紝閫変腑鏃舵案涔呰浣忥紱闈為�変腑鏃跺叧闂祻瑙堝櫒鍗崇櫥鍑猴紱
+- 10銆侀」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽quartz銆乻pring銆乯ackson銆乬roovy銆亁xl-rpc绛夌瓑锛�
+- 11銆佺簿绠�椤圭洰锛屽彇娑堢涓夋柟渚濊禆锛屽 commons-collections4銆乧ommons-lang3 ;
+- 12銆佹墽琛屽櫒鍥炶皟鏃ュ織钀界洏鏂规澶嶇敤RPC搴忓垪鍖栨柟妗堬紝骞剁Щ闄ackson渚濊禆锛�
+- 13銆佸簳灞侺og璋冧紭锛屽簲鐢ㄦ甯哥粓姝㈠彇娑堝紓甯告爤淇℃伅鎵撳嵃锛�
+- 14銆佷氦浜掍紭鍖栵紝灏介噺閬垮厤鏂板紑椤甸潰绐楀彛锛涗粎WebIDE鏀寔鏂板紑椤碉紝骞舵彁渚涚獥鍙e揩閫熷叧闂寜閽紱浠诲姟鍚�佸仠銆佸垹闄ゃ�佽Е鍙戠瓑杞绘搷浣滄彁绀烘敼涓簍oast鏂瑰紡锛�
+- 15銆佷换鍔℃殏鍋溿�佸垹闄や紭鍖栵紝閬垮厤quartz delete涓嶅畬鏁村鑷翠换鍔¤剰鏁版嵁锛�
+- 16銆佷换鍔″洖璋冦�佸績璺虫敞鍐屾垚鍔熸棩蹇椾紭鍖栵紝闈炴牳蹇冨父瑙勬棩蹇楄皟鏁翠负debug绾у埆锛岄檷浣庡啑浣欐棩蹇楄緭鍑猴紱
+- 17銆佽皟鏁撮椤垫姤琛ㄩ粯璁ゅ尯闂翠负鏈懆锛岄伩鍏嶆棩蹇楅噺澶ぇ鏌ヨ缂撴參锛�
+- 18銆丩RU璺敱鏇存柊涓嶅強鏃堕棶棰樹慨澶嶏紱
+- 19銆佷换鍔″け璐ュ憡璀﹂偖浠跺彂閫侀�昏緫浼樺寲锛�
+- 20銆佽皟搴︽棩蹇楁帓搴忛�昏緫璋冩暣涓烘寜鐓ц皟搴︽椂闂村�掑簭锛屽吋瀹筎IDB绛変富閿笉杩炵画鏃ュ織瀛樺偍缁勪欢锛�
+- 21銆佹墽琛屽櫒浼橀泤鍋滄満浼樺寲锛�
+- 22銆佽繛鎺ユ睜閰嶇疆浼樺寲锛屽寮鸿繛鎺ユ湁鏁堟�ч獙璇侊紱
+- 23銆丣obHandler#msg闀垮害闄愬埗锛屼慨澶嶅紓甯告儏鍐典笅鏃ュ織瓒呴暱瀵艰嚧鍐呭瓨婧㈠嚭鐨勯棶棰橈紱
+- 24銆佸崌绾xl-rpc鑷宠緝鏂扮増鏈紝淇springboot 2.x鐗堟湰鍏煎鎬ч棶棰橈紱
+
+### 6.25 鐗堟湰 v2.1.0 Release Notes[2019-07-07]
+- 1銆佽嚜鐮旇皟搴︾粍浠讹紝绉婚櫎quartz渚濊禆锛氫竴鏂归潰鏄负浜嗙簿绠�绯荤粺闄嶄綆鍐椾綑渚濊禆锛屽彟涓�鏂归潰鏄负浜嗘彁渚涚郴缁熺殑鍙帶搴︿笌绋冲畾鎬э紱
+    - 瑙﹀彂锛氬崟鑺傜偣鍛ㄦ湡鎬цЕ鍙戯紝杩愯浜嬩欢濡俤elayqueue锛�
+    - 璋冨害锛氶泦缇ょ珵浜夛紝璐熻浇鏂瑰紡鍗忓悓澶勭悊锛岄攣绔炰簤-鏇存柊瑙﹀彂淇℃伅-鎺ㄩ�佹椂闂磋疆-閿侀噴鏀�-閿佺珵浜夛紱
+- 2銆佸簳灞傝〃缁撴瀯閲嶆瀯锛氱Щ闄�11寮爍uartz鐩稿叧琛紝骞跺鐜版湁琛ㄧ粨鏋勪紭鍖栨⒊鐞嗭紱
+- 3銆佷换鍔℃棩蹇椾富閿皟鏁翠负long鏁版嵁绫诲瀷锛岄槻姝㈡捣閲忔棩蹇楁儏鍐典笅鏁版嵁婧㈠嚭锛�
+- 4銆佸簳灞傜嚎绋嬫ā鍨嬮噸鏋勶細绉婚櫎Quartz绾跨▼姹狅紝闄嶄綆绯荤粺绾跨▼涓庡唴瀛樺紑閿�锛�
+- 5銆佺敤鎴风鐞嗭細鏀寔鍦ㄧ嚎绠$悊绯荤粺鐢ㄦ埛锛屽瓨鍦ㄧ鐞嗗憳銆佹櫘閫氱敤鎴蜂袱绉嶈鑹诧紱
+- 6銆佹潈闄愮鐞嗭細鎵ц鍣ㄧ淮搴﹁繘琛屾潈闄愭帶鍒讹紝绠$悊鍛樻嫢鏈夊叏閲忔潈闄愶紝鏅�氱敤鎴烽渶瑕佸垎閰嶆墽琛屽櫒鏉冮檺鍚庢墠鍏佽鐩稿叧鎿嶄綔锛�
+- 7銆佽皟搴︾嚎绋嬫睜鍙傛暟璋冧紭锛�
+- 8銆佹敞鍐岃〃绱㈠紩浼樺寲锛岀紦瑙i攣琛ㄩ棶棰橈紱
+- 9銆佹柊澧濲boot鎵ц鍣⊿ample绀轰緥椤圭洰锛�
+- 10銆佷换鍔″垪琛ㄤ紭鍖栵紝鏀寔鏍规嵁 "浠诲姟鐘舵��"銆�"璐熻矗浜�" 灞炴�х瓫閫変换鍔★紱
+- 11銆佷换鍔℃棩蹇楀垪琛ㄤ氦浜掍紭鍖栵紝鎿嶄綔鎸夐挳鍚堝苟涓哄垎鍓叉寜閽紱
+- 12銆侀」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乻pringboot銆乬roovy銆亁xl-rpc绛夌瓑锛涘苟娓呯悊鍐椾綑POM锛�
+- 13銆佸崌绾xl-rpc鑷宠緝鏂扮増鏈紝淇浠g悊鏈嶅姟鍒濆鍖栨椂杩滅▼鏈嶅姟涓嶅彲鐢ㄥ鑷撮暱杩炲啑浣欏垱寤虹殑闂;
+- 14銆侀椤佃皟搴︽姤琛ㄧ殑鏃ユ湡鎺掑簭鍦═IDB涓嬩贡搴忛棶棰樹慨澶嶏紱
+- 15銆佽皟搴︿腑蹇冧笌鎵ц鍣ㄥ弻鍚戦�氳瓒呮椂鏃堕棿璋冩暣涓�3s锛�
+- 16銆佽皟搴︾粍浠堕攢姣佹祦绋嬩紭鍖栵紝鍏堝仠姝㈣皟搴︾嚎绋嬶紝鐒跺悗绛夊緟鏃堕棿杞唴瀛橀噺浠诲姟澶勭悊瀹屾垚锛屾渶缁堥攢姣佹椂闂磋疆绾跨▼锛�
+- 17銆佹墽琛屽櫒鍥炶皟绾跨▼浼樺寲锛屽洖璋冨湴鍧�涓虹┖鏃堕攢姣侀棶棰樹慨澶嶏紱
+- 18銆丠ttpJobHandler浼樺寲锛屽搷搴旀暟鎹寚瀹歎TF-8鏍煎紡锛岄伩鍏嶄腑鏂囦贡鐮侊紱
+- 19銆佷唬鐮佷紭鍖栵紝ConcurrentHashMap鍙橀噺绫诲瀷鏀逛负ConcurrentMap锛岄伩鍏嶅洜涓嶅悓鐗堟湰瀹炵幇涓嶅悓瀵艰嚧鐨勫吋瀹规�ч棶棰橈紱
+
+
+### 6.26 鐗堟湰 v2.1.1 Release Notes[2019-11-24]
+- 1銆� 璋冨害涓績鏃ュ織鑷姩娓呯悊鍔熻兘锛堣嚦姝わ紝璋冨害涓績/鎵ц鍣ㄥ潎鏀寔鏃ュ織鑷姩娓呯悊锛岃繃鏈熷ぉ鏁板潎榛樿璁剧疆涓�30澶╋級锛氳皟搴︿腑蹇冩柊澧為厤缃」锛�"xxl.job.logretentiondays"锛夋棩蹇椾繚瀛樺ぉ鏁帮紝杩囨湡鏃ュ織鑷姩娓呯悊锛涜В鍐虫捣閲忔棩蹇楁儏鍐典笅鏃ュ織琛ㄦ參SQL闂锛涢檺鍒跺ぇ浜庣瓑浜�7鏃剁敓鏁堬紝鍚﹀垯鍏抽棴娓呯悊鍔熻兘锛岄粯璁や负30锛�
+- 2銆� 璋冨害鎶ヨ〃浼樺寲锛氭柊澧炴棩蹇楁姤琛ㄧ殑瀛樺偍琛紝涓夊ぉ鍐呯殑浠诲姟鏃ュ織浼氫互姣忓垎閽熶竴娆$殑棰戠巼寮傛鍚屾鑷虫姤琛ㄤ腑锛涗换鍔℃姤琛ㄤ粎璇诲彇鎶ヨ〃鏁版嵁锛屾瀬澶ф彁鍗囧姞杞介�熷害锛�
+- 3銆� Cron鍦ㄧ嚎鐢熸垚宸ュ叿锛氫换鍔℃柊澧炪�佺紪杈戞閫氳繃缁勪欢鍦ㄧ嚎鐢熸垚Cron琛ㄨ揪寮忥紱
+- 4銆� Cron涓嬫鎵ц鏃堕棿鏌ヨ锛氭敮鎸侀�氳繃鐣岄潰鍦ㄧ嚎鏌ョ湅鍚庣画杩炵画5娆℃墽琛屾椂闂达紱
+- 5銆� 璋冨害涓績鏂板搴旂敤鍋ュ悍妫�鏌ュ姛鑳斤紝鍊熷姪鈥渟pring-boot-starter-actuator鈥濓紝鐩稿鍦板潃 鈥�/actuator/health鈥濓紱
+- 6銆� DB鑴氭湰榛樿缂栫爜鏀逛负utf8mb4锛屼慨澶嶅瓧绗︿贡鐮侀棶棰�(寤鸿Mysql鐗堟湰5.7+)锛�
+- 7銆� 璋冨害涓績浠诲姟骞冲潎鍒嗛厤锛岃Е鍙戠粍浠舵瘡娆¤幏鍙栦笌绾跨▼姹犳暟閲忕浉鍏虫暟閲忕殑浠诲姟锛岄伩鍏嶅ぇ閲忎换鍔¢泦涓湪鍗曚釜璋冨害涓績闆嗙兢鑺傜偣锛�
+- 8銆� 浠诲姟瑙﹀彂缁勪欢浼樺寲锛岄鍔犺浇棰戠巼姝e父1s涓�娆★紝褰撻鍔犺浇杞┖鏃朵富鍔ㄤ紤鐪犱竴涓姞杞藉懆鏈燂紝鍔ㄦ�侀檷浣庡姞杞介鐜囦粠鑰岄檷浣嶥B鍘嬪姏锛�
+- 9銆� 璋冨害缁勪欢浼樺寲锛氶拡瀵规案杩滀笉浼氳Е鍙戠殑Cron绂佹閰嶇疆鍜屽惎鍔紱浠诲姟Cron鏈�鍚庝竴娆¤Е鍙戝悗鍐嶄篃涓嶄細瑙﹀彂鏃讹紝姣斿涓�娆℃�т换鍔★紝涓诲姩鍋滄鐩稿叧浠诲姟锛�
+- 10銆丏B閲嶈繛浼樺寲锛屼慨澶岲B瀹曟満閲嶈繛鍚庝换鍔¤皟搴﹀仠姝㈢殑闂锛岄噸杩炲悗鑷姩鍔犲叆璋冨害闆嗙兢瑙﹀彂浠诲姟璋冨害锛�
+- 11銆佹敞鍐岀洃鎺х嚎绋嬩紭鍖栵紝闄嶄綆姝婚攣鍑犵巼锛�
+- 12銆佽皟搴︿腑蹇冩棩蹇楀垹闄や紭鍖栵紝鏀逛负鍒嗛〉鑾峰彇ID骞舵牴鎹甀D鍒犻櫎鐨勬柟寮忥紝閬垮厤鎵归噺鍒犻櫎娴烽噺鏃ュ織瀵艰嚧姝婚攣闂锛�
+- 13銆佷换鍔¢噸璇曟椂鍙傛暟涓㈠け鐨勯棶棰樹慨澶嶏紱
+- 14銆佽皟搴︿腑蹇冪Щ闄QL涓殑 "now()" 鍑芥暟锛涢泦缇ら儴缃叉椂涓嶅啀渚濊禆DB鏃堕挓锛屼粎闇�瑕佷繚璇佽皟搴︿腑蹇冨簲鐢ㄨ妭鐐规椂閽熶竴鑷村嵆鍙紱
+- 15銆佷换鍔¤Е鍙戠粍浠跺姞杞介『搴忚皟鏁达紝閬垮厤灏忔鐜囨儏鍐典笅缁勪欢闅忔満鍔犺浇椤哄簭瀵艰嚧鐨処18N鐨凬PE闂;
+- 16銆丣obThread鑷攢姣佷紭鍖栵紝閬垮厤骞跺彂瑙﹀彂瀵艰嚧triggerQueue涓换鍔′涪澶遍棶棰橈紱
+- 17銆佽皟搴︿腑蹇冨瘑鐮侀檺鍒�18浣嶏紝淇淇敼瀵嗙爜瓒呰繃18浣嶆棤娉曠櫥闄嗙殑闂锛�
+- 18銆佷换鍔″憡璀︾粍浠跺垎椤靛弬鏁版棤鏁堥棶棰樹慨澶嶏紱
+- 19銆佸崌绾xl-rpc鐗堟湰锛氭湇鍔$绾跨▼浼樺寲锛岄檷浣庣嚎绋嬪唴瀛樺紑閿�锛汭pUtil浼樺寲锛氬鍔犺繛閫氭�ф牎锛岃繃婊ゆ槑纭潪娉曠殑缃戝崱锛�
+- 20銆佽皟搴︿腑蹇冨洖璋傾PI鏈嶅姟鏀逛负restful鏂瑰紡锛�
+- 21銆乁I浼樺寲锛屼换鍔″垪琛ㄥ拰鏃ュ織鍒楄〃鏁版嵁琛ㄦ牸瀹藉害姣斾緥璋冩暣锛岄伩鍏嶆暟鎹崲琛屾彁鍗囦綋楠岋紱
+- 22銆佺櫥褰曠晫闈㈠彇娑堥粯璁ゅ~鍐欑殑鐧诲綍璐﹀彿瀵嗙爜锛�
+- 23銆佹墽琛屽櫒琛ㄥ睘鎬ц皟鏁达紝"椤哄簭" 灞炴�ц皟鏁翠负鏁村瀷锛岃В鍐虫墽琛屽櫒鏁版嵁杈冨鏃舵棤娉曟纭帓搴忕殑闂锛�
+- 24銆佷换鍔″垪琛ㄤ氦浜掍紭鍖栵紝鏀寔鏌ョ湅浠诲姟鎵�灞炴墽琛屽櫒鐨勬敞鍐岃妭鐐癸紱
+- 25銆侀」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛屽spring銆乻pring-boot銆乵ybatis銆乻lf4j銆乬roovy绛夌瓑锛�
+
+### 6.27 鐗堟湰 v2.1.2 Release Notes[2019-12-12]
+- 1銆佹柟娉曚换鍔℃敮鎸侊細鐢卞師鏉ュ熀浜嶫obHandler绫讳换鍔″紑鍙戞柟寮忥紝浼樺寲涓烘敮鎸佸熀浜庢柟娉曠殑浠诲姟寮�鍙戞柟寮忥紱鍥犳锛屽彲浠ユ敮鎸佸崟涓被涓紑鍙戝涓换鍔℃柟娉曪紝杩涜绫诲鐢�
+```
+@XxlJob("demoJobHandler")
+public ReturnT<String> execute(String param) {
+    XxlJobLogger.log("hello world");
+    return ReturnT.SUCCESS;
+}
+```
+- 2銆佺Щ闄ommons-exec锛岄噰鐢ㄥ師鐢熸柟寮忓疄鐜帮紝闄嶄綆绗笁鏂逛緷璧栵紱
+- 3銆佹墽琛屽櫒鍥炶皟涔辩爜闂淇锛�
+- 4銆佽皟搴︿腑蹇僤ispatcher servlet鍔犺浇椤哄簭浼樺寲锛�
+- 5銆佹墽琛屽櫒鍥炶皟鍦板潃https鍏煎鏀寔锛�
+- 6銆佸涓」鐩緷璧栧崌绾ц嚦杈冩柊绋冲畾鐗堟湰锛�
+- 娉ㄦ剰锛氭渶鏂扮増鏈� "XxlJobSpringExecutor" 閫昏緫鏈夎皟鏁达紝鍘嗗彶椤圭洰涓缁勪欢鐨勯厤缃柟寮忚鍙傝�僑ample绀轰緥椤圭洰杩涜璋冩暣锛屽挨鍏舵敞鎰忛渶瑕佺Щ闄ょ粍浠剁殑init鍜宒estroy鏂规硶锛�
+
+
+### TODO LIST
+- 1銆佷换鍔″垎鐗囪矾鐢憋細鍒嗙墖閲囩敤涓�鑷存�ash绠楁硶璁$畻鍑哄敖閲忕ǔ瀹氱殑鍒嗙墖椤哄簭锛屽嵆浣挎敞鍐屾満鍣ㄥ瓨鍦ㄦ尝鍔ㄤ篃涓嶄細寮曡捣鍒嗘壒鍒嗙墖椤哄簭澶х殑娉㈠姩锛涚洰鍓嶉噰鐢↖P鑷劧鎺掑簭锛屽彲浠ユ弧瓒抽渶姹傦紝寰呭畾锛�
+- 2銆佷换鍔″崟鏈哄绾跨▼锛氭彁鍗囦换鍔″崟鏈哄苟琛屽鐞嗚兘鍔涳紱
+- 3銆佽皟搴︿换鍔′紭鍏堢骇锛�
+- 4銆佸鏁版嵁搴撴敮鎸侊紝鍦ㄩ噸鍐欏苟绉婚櫎Quartz鐨勫熀纭�涓婏紝DAO灞傞�氳繃JPA瀹炵幇锛屼笉闄愬埗鏁版嵁搴撶被鍨嬶紱
+- 5銆佹墽琛屽櫒Log娓呯悊鍔熻兘锛氳皟搴︿腑蹇僉og鍒犻櫎鏃跺悓姝ュ垹闄ゆ墽琛屽櫒涓殑Log鏂囦欢锛�
+- 6銆佷换鍔¤嚜鍔ㄦ敞鍐岋細Bean妯″紡浠诲姟锛孞obHandler鑷姩浠庢墽琛屽櫒涓煡璇㈠睍绀轰负涓嬫媺妗嗭紝閫夋嫨鍚庤嚜鍔ㄥ~鍏呬换鍔″悕绉扮瓑灞炴�э紱寰呰�冭檻锛屽洜涓轰换鍔¤嚜鍔ㄦ敞鍐屽皢浼氬鑷翠换鍔¢毦浠ョ鐞嗘帶鍒讹紱
+- 7銆丄PI浜嬩欢瑙﹀彂绫诲瀷浠诲姟锛堟洿绫讳技MQ娑堟伅锛夋敮鎸�"鍔ㄦ�佷紶鍙傘�佸欢鏃舵秷璐�"锛涜绫诲瀷浠诲姟涓嶈蛋璋冨害缁勪欢锛屽崟鐙缓绔婱Q娑堟伅琛紝璋冨害涓績绔炰簤瑙﹀彂锛涘緟瀹氾紝璇ュ姛鑳戒笌 XXL-MQ 鍐茬獊锛岃鍦烘櫙寤鸿鐢ㄥ悗鑰咃紱
+- 8銆佽皟搴︾嚎绋嬫睜鏀逛负鍗忕▼鏂瑰紡瀹炵幇锛屽ぇ骞呴檷浣庣郴缁熷唴瀛樻秷鑰楋紱
+- 9銆佷换鍔°�佹墽琛屽櫒鏁版嵁鍏ㄩ噺鏈湴缂撳瓨锛涙柊澧炴秷鎭〃骞挎挱閫氱煡锛�
+- 10銆佸繖纰岃浆绉讳紭鍖栵紝鍏ㄩ儴鏈哄櫒蹇欑鏃朵笉鍐嶇洿鎺ュけ璐ワ紱
+- 11銆佸け璐ラ噸璇曢棿闅旓紱
+- 12銆丼impleTrigger锛氶櫎Cron澶栵紝鏀寔璁剧疆鍥哄畾鏃堕棿闂撮殧瑙﹀彂锛�
+- 13銆佽皟搴︽棩蹇楀垪琛ㄥ姞涓婃墽琛屾椂闀垮垪锛屽苟鏀寔鎺掑簭锛�
+- 14銆丏AG娴佺▼浠诲姟锛氭浛鎹㈠瓙浠诲姟锛屾敮鎸佸弬鏁颁紶閫掞細閰嶇疆骞跺垪鐨�"a-b銆乥-c"璺緞鍒楄〃锛屾瀯鎴愪覆琛屻�佸苟琛屻�乨ag浠诲姟娴佺▼锛�"dagre-d3"缁樺浘锛涗换鍔′緷璧栵紝娴佺▼鍥撅紝瀛愪换鍔�+浼氱浠诲姟锛屽悇鑺傜偣鏃ュ織锛涙敮鎸佹牴鎹垚鍔熴�佸け璐ラ�夋嫨鍒嗘敮锛�
+- 15銆佹棩鏈熻繃婊わ細鏀寔澶氫釜鏃堕棿娈垫帓闄わ紱
+- 16銆佸憡璀﹂偖浠跺唴瀹癸紝鏀寔鑷畾涔夋ā鏉块厤缃紱
+- 17銆佹殏鍋滅姸鎬侊紝鏀寔Cron 涓虹┖锛�
+- 18銆佹柊澧炰换鍔¤繍琛屾ā寮� "GLUE妯″紡(GO) "锛屾敮鎸丟O浠诲姟锛�
+- 19銆佹敞鍐屼腑蹇冧紭鍖栵紝瀹炴椂鎬ф敞鍐屽彂鐜帮細蹇冭烦娉ㄥ唽闂撮殧10s锛宺efresh澶辫触鍒欓娆℃敞鍐屽苟绔嬪嵆鏇存柊娉ㄥ唽淇℃伅锛屽績璺崇被浼硷紱30s杩囨湡閿�姣侊紱
+- 20銆佹彁渚涙墽琛屽櫒Docker闀滃儚锛�
+- 21銆佽剼鏈换鍔★紝鏀寔鏁版嵁鍙傛暟锛屾柊鐗堟湰浠呮敮鎸佸崟鍙傛暟涓嶆敮鎸侀渶瑕佸吋瀹癸紱
+- 22銆丟LUE 妯″紡 Web Ide 鐗堟湰瀵规瘮鍔熻兘锛�
+- 23銆佹壒閲忚皟搴︼細璋冨害璇锋眰鍏ueue锛岃皟搴︾嚎绋嬫壒閲忚幏鍙栬皟搴﹁姹傚苟鍙戣捣杩滅▼璋冨害锛涙彁楂樼嚎绋嬫晥鐜囷紱
+- 24銆佸璇█鎵ц鍣細绾﹀畾璺ㄨ瑷�閫氳鏂规锛屼互鍙婇�氳鎺ュ彛锛�
+- 25銆佺Щ闄ommons-exec锛岄噰鐢ㄥ師鐢熷疄鐜帮紱
+- 26銆佽皟搴︿腑蹇僇DK鐗堟湰璋冩暣涓篔DK8锛屼粠鑰屽崌绾ц嚦鏈�鏂扮増鏈琒pringBoot锛�
+- 27銆佹墽琛屽櫒鏈嶅姟绔彛涓庢敞鍐岀鍙e垎绂伙紝鏀寔docker鍔ㄦ�侀殢鏈虹鍙o紱
+- 28銆佹墽琛屽櫒绔彛澶嶇敤锛屽鐢ㄥ鍣ㄧ鍙f彁渚涢�氳鏈嶅姟锛�
+- 29銆佽嚜瀹氫箟澶辫触閲嶈瘯鏃堕棿闂撮殧锛�
+- 30銆佸垎鐗囦换鍔″叏閮ㄦ垚鍔熷悗瑙﹀彂瀛愪换鍔★紱
+- 31銆佷换鍔″鍒跺姛鑳斤紱鐐瑰嚮澶嶅埗鏄脊鍑烘柊寤轰换鍔″脊妗嗭紝骞跺垵濮嬪寲琚鍒朵换鍔′俊鎭紱
+- 32銆丄ccessToken鎸夌収鎵ц鍣ㄧ淮搴﹁缃紱鎺у埗璋冨害銆佸洖璋冿紱
+- 33銆佷换鍔℃墽琛屼竴娆$殑鏃跺�欐寚瀹欼P锛�
+- 34銆侀�氳璋冩暣锛涘弻鍚慔TTP锛屽洖璋冨拰鍏朵粬API鑷畾涔堿ccessToken锛孯estful锛屾墽琛屽櫒澶嶇敤瀹瑰櫒绔彛锛�
+- 35銆佺埗瀛愪换鍔″弬鏁颁紶閫掞紱娴佺▼浠诲姟绛夛紝閫忎紶鍔ㄦ�佸弬鏁帮紱
+- 36銆佹柊澧炴墽琛屽櫒鎻忚堪銆佷换鍔℃弿杩板睘鎬э紱
+
+
+## 涓冦�佸叾浠�
+
+### 7.1 椤圭洰璐$尞
+娆㈣繋鍙備笌椤圭洰璐$尞锛佹瘮濡傛彁浜R淇涓�涓猙ug锛屾垨鑰呮柊寤� [Issue](https://github.com/xuxueli/xxl-job/issues/) 璁ㄨ鏂扮壒鎬ф垨鑰呭彉鏇淬��
+
+### 7.2 鐢ㄦ埛鎺ュ叆鐧昏
+鏇村鎺ュ叆鐨勫叕鍙革紝娆㈣繋鍦� [鐧昏鍦板潃](https://github.com/xuxueli/xxl-job/issues/1 ) 鐧昏锛岀櫥璁颁粎浠呬负浜嗕骇鍝佹帹骞裤��
+
+### 7.3 寮�婧愬崗璁拰鐗堟潈
+浜у搧寮�婧愬厤璐癸紝骞朵笖灏嗘寔缁彁渚涘厤璐圭殑绀惧尯鎶�鏈敮鎸併�備釜浜烘垨浼佷笟鍐呴儴鍙嚜鐢辩殑鎺ュ叆鍜屼娇鐢ㄣ��
+
+- Licensed under the GNU General Public License (GPL) v3.
+- Copyright (c) 2015-present, xuxueli.
+
+---
+### 鎹愯禒
+鏃犺鎹愯禒閲戦澶氬皯閮借冻澶熻〃杈炬偍杩欎唤蹇冩剰锛岄潪甯告劅璋� 锛氾級      [鍓嶅線鎹愯禒](https://www.xuxueli.com/page/donate.html )
diff --git "a/Source/BladeX/blade-ops/blade-xxljob-admin/doc/XXL-JOB\346\236\266\346\236\204\345\233\276.pptx" "b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB\346\236\266\346\236\204\345\233\276.pptx"
similarity index 100%
rename from "Source/BladeX/blade-ops/blade-xxljob-admin/doc/XXL-JOB\346\236\266\346\236\204\345\233\276.pptx"
rename to "Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB\346\236\266\346\236\204\345\233\276.pptx"
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/doc/db/tables_xxl_job.sql b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/db/tables_xxl_job.sql
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/doc/db/tables_xxl_job.sql
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/db/tables_xxl_job.sql
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/doc/nacos/blade-xxljob-admin-dev.yaml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/nacos/blade-xxljob-admin-dev.yaml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/doc/nacos/blade-xxljob-admin-dev.yaml
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/nacos/blade-xxljob-admin-dev.yaml
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/pom.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/pom.xml
new file mode 100644
index 0000000..f3a5786
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/pom.xml
@@ -0,0 +1,125 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-xxljob-admin</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <maven.test.skip>true</maven.test.skip>
+
+        <xxl-rpc.version>1.5.0</xxl-rpc.version>
+
+        <spring.version>4.3.25.RELEASE</spring.version>
+        <spring-boot.version>1.5.22.RELEASE</spring-boot.version>
+        <mybatis-spring-boot-starter.version>1.3.5</mybatis-spring-boot-starter.version>
+        <mysql-connector-java.version>5.1.48</mysql-connector-java.version>
+
+        <slf4j-api.version>1.7.29</slf4j-api.version>
+        <junit.version>4.12</junit.version>
+
+        <groovy.version>2.5.8</groovy.version>
+
+        <maven-source-plugin.version>3.2.0</maven-source-plugin.version>
+        <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
+        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
+        <maven-war-plugin.version>3.2.3</maven-war-plugin.version>
+    </properties>
+
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-cloud</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-launch</artifactId>
+        </dependency>
+        <!-- freemarker-starter -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-freemarker</artifactId>
+        </dependency>
+
+        <!-- mail-starter -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
+        <!-- starter-actuator -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <!-- mybatis-starter锛歮ybatis + mybatis-spring + tomcat-jdbc锛坉efault锛� -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>${mybatis-spring-boot-starter.version}</version>
+        </dependency>
+        <!-- mysql -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <!-- xxl-job-core -->
+        <dependency>
+            <groupId>com.xuxueli</groupId>
+            <artifactId>xxl-job-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java
new file mode 100644
index 0000000..3ae7b79
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java
@@ -0,0 +1,17 @@
+package com.vci.ubcs.xxl.job.admin;
+
+import com.vci.ubcs.common.constant.LauncherConstant;
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+
+/**
+ * @author xuxueli 2018-10-28 00:38:13
+ */
+@UbcsCloudApplication
+public class JobAdminApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(LauncherConstant.APPLICATION_XXLJOB_ADMIN_NAME, JobAdminApplication.class, args);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/IndexController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/IndexController.java
new file mode 100644
index 0000000..ee49cf2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/IndexController.java
@@ -0,0 +1,93 @@
+package com.vci.ubcs.xxl.job.admin.controller;
+
+import com.vci.ubcs.xxl.job.admin.controller.annotation.PermissionLimit;
+import com.vci.ubcs.xxl.job.admin.service.LoginService;
+import com.vci.ubcs.xxl.job.admin.service.XxlJobService;
+import com.xxl.job.core.biz.model.ReturnT;
+import org.springframework.beans.propertyeditors.CustomDateEditor;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * index controller
+ * @author xuxueli 2015-12-19 16:13:16
+ */
+@Controller
+public class IndexController {
+
+	@Resource
+	private XxlJobService xxlJobService;
+	@Resource
+	private LoginService loginService;
+
+
+	@RequestMapping("/")
+	public String index(Model model) {
+
+		Map<String, Object> dashboardMap = xxlJobService.dashboardInfo();
+		model.addAllAttributes(dashboardMap);
+
+		return "index";
+	}
+
+    @RequestMapping("/chartInfo")
+	@ResponseBody
+	public ReturnT<Map<String, Object>> chartInfo(Date startDate, Date endDate) {
+        ReturnT<Map<String, Object>> chartInfo = xxlJobService.chartInfo(startDate, endDate);
+        return chartInfo;
+    }
+
+	@RequestMapping("/toLogin")
+	@PermissionLimit(limit=false)
+	public String toLogin(HttpServletRequest request, HttpServletResponse response) {
+		if (loginService.ifLogin(request, response) != null) {
+			return "redirect:/";
+		}
+		return "login";
+	}
+
+	@RequestMapping(value="login", method=RequestMethod.POST)
+	@ResponseBody
+	@PermissionLimit(limit=false)
+	public ReturnT<String> loginDo(HttpServletRequest request, HttpServletResponse response, String userName, String password, String ifRemember){
+		boolean ifRem = (ifRemember!=null && ifRemember.trim().length()>0 && "on".equals(ifRemember))?true:false;
+		return loginService.login(request, response, userName, password, ifRem);
+	}
+
+	@RequestMapping(value="logout", method=RequestMethod.POST)
+	@ResponseBody
+	@PermissionLimit(limit=false)
+	public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response){
+		return loginService.logout(request, response);
+	}
+
+	@RequestMapping("/help")
+	public String help() {
+
+		/*if (!PermissionInterceptor.ifLogin(request)) {
+			return "redirect:/toLogin";
+		}*/
+
+		return "help";
+	}
+
+	@InitBinder
+	public void initBinder(WebDataBinder binder) {
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		dateFormat.setLenient(false);
+		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobApiController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobApiController.java
new file mode 100644
index 0000000..c0942c4
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobApiController.java
@@ -0,0 +1,129 @@
+package com.vci.ubcs.xxl.job.admin.controller;
+
+import com.vci.ubcs.xxl.job.admin.controller.annotation.PermissionLimit;
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.exception.XxlJobException;
+import com.vci.ubcs.xxl.job.admin.core.util.JacksonUtil;
+import com.xxl.job.core.biz.AdminBiz;
+import com.xxl.job.core.biz.model.HandleCallbackParam;
+import com.xxl.job.core.biz.model.RegistryParam;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.util.XxlJobRemotingUtil;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * Created by xuxueli on 17/5/10.
+ */
+@Controller
+@RequestMapping("/api")
+public class JobApiController {
+
+    @Resource
+    private AdminBiz adminBiz;
+
+
+    // ---------------------- base ----------------------
+
+    /**
+     * valid access token
+     */
+    private void validAccessToken(HttpServletRequest request){
+        if (XxlJobAdminConfig.getAdminConfig().getAccessToken()!=null
+                && XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length()>0
+                && !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_RPC_ACCESS_TOKEN))) {
+            throw new XxlJobException("The access token is wrong.");
+        }
+    }
+
+    /**
+     * parse Param
+     */
+    private Object parseParam(String data, Class<?> parametrized, Class<?>... parameterClasses){
+        Object param = null;
+        try {
+            if (parameterClasses != null) {
+                param = JacksonUtil.readValue(data, parametrized, parameterClasses);
+            } else {
+                param = JacksonUtil.readValue(data, parametrized);
+            }
+        } catch (Exception e) { }
+        if (param==null) {
+            throw new XxlJobException("The request data invalid.");
+        }
+        return param;
+    }
+
+    // ---------------------- admin biz ----------------------
+
+    /**
+     * callback
+     *
+     * @param data
+     * @return
+     */
+    @RequestMapping("/callback")
+    @ResponseBody
+    @PermissionLimit(limit=false)
+    public ReturnT<String> callback(HttpServletRequest request, @RequestBody(required = false) String data) {
+        // valid
+        validAccessToken(request);
+
+        // param
+        List<HandleCallbackParam> callbackParamList = (List<HandleCallbackParam>) parseParam(data, List.class, HandleCallbackParam.class);
+
+        // invoke
+        return adminBiz.callback(callbackParamList);
+    }
+
+
+
+    /**
+     * registry
+     *
+     * @param data
+     * @return
+     */
+    @RequestMapping("/registry")
+    @ResponseBody
+    @PermissionLimit(limit=false)
+    public ReturnT<String> registry(HttpServletRequest request, @RequestBody(required = false) String data) {
+        // valid
+        validAccessToken(request);
+
+        // param
+        RegistryParam registryParam = (RegistryParam) parseParam(data, RegistryParam.class);
+
+        // invoke
+        return adminBiz.registry(registryParam);
+    }
+
+    /**
+     * registry remove
+     *
+     * @param data
+     * @return
+     */
+    @RequestMapping("/registryRemove")
+    @ResponseBody
+    @PermissionLimit(limit=false)
+    public ReturnT<String> registryRemove(HttpServletRequest request, @RequestBody(required = false) String data) {
+        // valid
+        validAccessToken(request);
+
+        // param
+        RegistryParam registryParam = (RegistryParam) parseParam(data, RegistryParam.class);
+
+        // invoke
+        return adminBiz.registryRemove(registryParam);
+    }
+
+    // ---------------------- job biz ----------------------
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobCodeController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobCodeController.java
new file mode 100644
index 0000000..9eb9963
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobCodeController.java
@@ -0,0 +1,96 @@
+package com.vci.ubcs.xxl.job.admin.controller;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogGlue;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobInfoDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobLogGlueDao;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.glue.GlueTypeEnum;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * job code controller
+ * @author xuxueli 2015-12-19 16:13:16
+ */
+@Controller
+@RequestMapping("/jobcode")
+public class JobCodeController {
+
+	@Resource
+	private XxlJobInfoDao xxlJobInfoDao;
+	@Resource
+	private XxlJobLogGlueDao xxlJobLogGlueDao;
+
+	@RequestMapping
+	public String index(HttpServletRequest request, Model model, int jobId) {
+		XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
+		List<XxlJobLogGlue> jobLogGlues = xxlJobLogGlueDao.findByJobId(jobId);
+
+		if (jobInfo == null) {
+			throw new RuntimeException(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
+		}
+		if (GlueTypeEnum.BEAN == GlueTypeEnum.match(jobInfo.getGlueType())) {
+			throw new RuntimeException(I18nUtil.getString("jobinfo_glue_gluetype_unvalid"));
+		}
+
+		// valid permission
+		JobInfoController.validPermission(request, jobInfo.getJobGroup());
+
+		// Glue绫诲瀷-瀛楀吀
+		model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());
+
+		model.addAttribute("jobInfo", jobInfo);
+		model.addAttribute("jobLogGlues", jobLogGlues);
+		return "jobcode/jobcode.index";
+	}
+
+	@RequestMapping("/save")
+	@ResponseBody
+	public ReturnT<String> save(Model model, int id, String glueSource, String glueRemark) {
+		// valid
+		if (glueRemark==null) {
+			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) );
+		}
+		if (glueRemark.length()<4 || glueRemark.length()>100) {
+			return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_remark_limit"));
+		}
+		XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(id);
+		if (exists_jobInfo == null) {
+			return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
+		}
+
+		// update new code
+		exists_jobInfo.setGlueSource(glueSource);
+		exists_jobInfo.setGlueRemark(glueRemark);
+		exists_jobInfo.setGlueUpdatetime(new Date());
+
+		exists_jobInfo.setUpdateTime(new Date());
+		xxlJobInfoDao.update(exists_jobInfo);
+
+		// log old code
+		XxlJobLogGlue xxlJobLogGlue = new XxlJobLogGlue();
+		xxlJobLogGlue.setJobId(exists_jobInfo.getId());
+		xxlJobLogGlue.setGlueType(exists_jobInfo.getGlueType());
+		xxlJobLogGlue.setGlueSource(glueSource);
+		xxlJobLogGlue.setGlueRemark(glueRemark);
+
+		xxlJobLogGlue.setAddTime(new Date());
+		xxlJobLogGlue.setUpdateTime(new Date());
+		xxlJobLogGlueDao.save(xxlJobLogGlue);
+
+		// remove code backup more than 30
+		xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 30);
+
+		return ReturnT.SUCCESS;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobGroupController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobGroupController.java
new file mode 100644
index 0000000..49eb991
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobGroupController.java
@@ -0,0 +1,165 @@
+package com.vci.ubcs.xxl.job.admin.controller;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobRegistry;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobGroupDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobInfoDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobRegistryDao;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.enums.RegistryConfig;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * job group controller
+ * @author xuxueli 2016-10-02 20:52:56
+ */
+@Controller
+@RequestMapping("/jobgroup")
+public class JobGroupController {
+
+	@Resource
+	public XxlJobInfoDao xxlJobInfoDao;
+	@Resource
+	public XxlJobGroupDao xxlJobGroupDao;
+	@Resource
+	private XxlJobRegistryDao xxlJobRegistryDao;
+
+	@RequestMapping
+	public String index(Model model) {
+
+		// job group (executor)
+		List<XxlJobGroup> list = xxlJobGroupDao.findAll();
+
+		model.addAttribute("list", list);
+		return "jobgroup/jobgroup.index";
+	}
+
+	@RequestMapping("/save")
+	@ResponseBody
+	public ReturnT<String> save(XxlJobGroup xxlJobGroup){
+
+		// valid
+		if (xxlJobGroup.getAppName()==null || xxlJobGroup.getAppName().trim().length()==0) {
+			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input")+"AppName") );
+		}
+		if (xxlJobGroup.getAppName().length()<4 || xxlJobGroup.getAppName().length()>64) {
+			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_appName_length") );
+		}
+		if (xxlJobGroup.getTitle()==null || xxlJobGroup.getTitle().trim().length()==0) {
+			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) );
+		}
+		if (xxlJobGroup.getAddressType()!=0) {
+			if (xxlJobGroup.getAddressList()==null || xxlJobGroup.getAddressList().trim().length()==0) {
+				return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_addressType_limit") );
+			}
+			String[] addresss = xxlJobGroup.getAddressList().split(",");
+			for (String item: addresss) {
+				if (item==null || item.trim().length()==0) {
+					return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_registryList_unvalid") );
+				}
+			}
+		}
+
+		int ret = xxlJobGroupDao.save(xxlJobGroup);
+		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
+	}
+
+	@RequestMapping("/update")
+	@ResponseBody
+	public ReturnT<String> update(XxlJobGroup xxlJobGroup){
+		// valid
+		if (xxlJobGroup.getAppName()==null || xxlJobGroup.getAppName().trim().length()==0) {
+			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input")+"AppName") );
+		}
+		if (xxlJobGroup.getAppName().length()<4 || xxlJobGroup.getAppName().length()>64) {
+			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_appName_length") );
+		}
+		if (xxlJobGroup.getTitle()==null || xxlJobGroup.getTitle().trim().length()==0) {
+			return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) );
+		}
+		if (xxlJobGroup.getAddressType() == 0) {
+			// 0=鑷姩娉ㄥ唽
+			List<String> registryList = findRegistryByAppName(xxlJobGroup.getAppName());
+			String addressListStr = null;
+			if (registryList!=null && !registryList.isEmpty()) {
+				Collections.sort(registryList);
+				addressListStr = "";
+				for (String item:registryList) {
+					addressListStr += item + ",";
+				}
+				addressListStr = addressListStr.substring(0, addressListStr.length()-1);
+			}
+			xxlJobGroup.setAddressList(addressListStr);
+		} else {
+			// 1=鎵嬪姩褰曞叆
+			if (xxlJobGroup.getAddressList()==null || xxlJobGroup.getAddressList().trim().length()==0) {
+				return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_addressType_limit") );
+			}
+			String[] addresss = xxlJobGroup.getAddressList().split(",");
+			for (String item: addresss) {
+				if (item==null || item.trim().length()==0) {
+					return new ReturnT<String>(500, I18nUtil.getString("jobgroup_field_registryList_unvalid") );
+				}
+			}
+		}
+
+		int ret = xxlJobGroupDao.update(xxlJobGroup);
+		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
+	}
+
+	private List<String> findRegistryByAppName(String appNameParam){
+		HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
+		List<XxlJobRegistry> list = xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
+		if (list != null) {
+			for (XxlJobRegistry item: list) {
+				if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
+					String appName = item.getRegistryKey();
+					List<String> registryList = appAddressMap.get(appName);
+					if (registryList == null) {
+						registryList = new ArrayList<String>();
+					}
+
+					if (!registryList.contains(item.getRegistryValue())) {
+						registryList.add(item.getRegistryValue());
+					}
+					appAddressMap.put(appName, registryList);
+				}
+			}
+		}
+		return appAddressMap.get(appNameParam);
+	}
+
+	@RequestMapping("/remove")
+	@ResponseBody
+	public ReturnT<String> remove(int id){
+
+		// valid
+		int count = xxlJobInfoDao.pageListCount(0, 10, id, -1,  null, null, null);
+		if (count > 0) {
+			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_del_limit_0") );
+		}
+
+		List<XxlJobGroup> allList = xxlJobGroupDao.findAll();
+		if (allList.size() == 1) {
+			return new ReturnT<String>(500, I18nUtil.getString("jobgroup_del_limit_1") );
+		}
+
+		int ret = xxlJobGroupDao.remove(id);
+		return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
+	}
+
+	@RequestMapping("/loadById")
+	@ResponseBody
+	public ReturnT<XxlJobGroup> loadById(int id){
+		XxlJobGroup jobGroup = xxlJobGroupDao.load(id);
+		return jobGroup!=null?new ReturnT<XxlJobGroup>(jobGroup):new ReturnT<XxlJobGroup>(ReturnT.FAIL_CODE, null);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobInfoController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobInfoController.java
new file mode 100644
index 0000000..e14c8ad
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobInfoController.java
@@ -0,0 +1,166 @@
+package com.vci.ubcs.xxl.job.admin.controller;
+
+import com.vci.ubcs.xxl.job.admin.core.cron.CronExpression;
+import com.vci.ubcs.xxl.job.admin.core.exception.XxlJobException;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser;
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
+import com.vci.ubcs.xxl.job.admin.core.thread.JobTriggerPoolHelper;
+import com.vci.ubcs.xxl.job.admin.core.trigger.TriggerTypeEnum;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobGroupDao;
+import com.vci.ubcs.xxl.job.admin.service.LoginService;
+import com.vci.ubcs.xxl.job.admin.service.XxlJobService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
+import com.xxl.job.core.glue.GlueTypeEnum;
+import com.xxl.job.core.util.DateUtil;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.*;
+
+/**
+ * index controller
+ * @author xuxueli 2015-12-19 16:13:16
+ */
+@Controller
+@RequestMapping("/jobinfo")
+public class JobInfoController {
+
+	@Resource
+	private XxlJobGroupDao xxlJobGroupDao;
+	@Resource
+	private XxlJobService xxlJobService;
+
+	@RequestMapping
+	public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) {
+
+		// 鏋氫妇-瀛楀吀
+		model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values());	    // 璺敱绛栫暐-鍒楄〃
+		model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());								// Glue绫诲瀷-瀛楀吀
+		model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values());	    // 闃诲澶勭悊绛栫暐-瀛楀吀
+
+		// 鎵ц鍣ㄥ垪琛�
+		List<XxlJobGroup> jobGroupList_all =  xxlJobGroupDao.findAll();
+
+		// filter group
+		List<XxlJobGroup> jobGroupList = filterJobGroupByRole(request, jobGroupList_all);
+		if (jobGroupList==null || jobGroupList.size()==0) {
+			throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
+		}
+
+		model.addAttribute("JobGroupList", jobGroupList);
+		model.addAttribute("jobGroup", jobGroup);
+
+		return "jobinfo/jobinfo.index";
+	}
+
+	public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all){
+		List<XxlJobGroup> jobGroupList = new ArrayList<>();
+		if (jobGroupList_all!=null && jobGroupList_all.size()>0) {
+			XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
+			if (loginUser.getRole() == 1) {
+				jobGroupList = jobGroupList_all;
+			} else {
+				List<String> groupIdStrs = new ArrayList<>();
+				if (loginUser.getPermission()!=null && loginUser.getPermission().trim().length()>0) {
+					groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(","));
+				}
+				for (XxlJobGroup groupItem:jobGroupList_all) {
+					if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) {
+						jobGroupList.add(groupItem);
+					}
+				}
+			}
+		}
+		return jobGroupList;
+	}
+	public static void validPermission(HttpServletRequest request, int jobGroup) {
+		XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
+		if (!loginUser.validPermission(jobGroup)) {
+			throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginUser.getUsername() +"]");
+		}
+	}
+
+	@RequestMapping("/pageList")
+	@ResponseBody
+	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
+			@RequestParam(required = false, defaultValue = "10") int length,
+			int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
+
+		return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
+	}
+
+	@RequestMapping("/add")
+	@ResponseBody
+	public ReturnT<String> add(XxlJobInfo jobInfo) {
+		return xxlJobService.add(jobInfo);
+	}
+
+	@RequestMapping("/update")
+	@ResponseBody
+	public ReturnT<String> update(XxlJobInfo jobInfo) {
+		return xxlJobService.update(jobInfo);
+	}
+
+	@RequestMapping("/remove")
+	@ResponseBody
+	public ReturnT<String> remove(int id) {
+		return xxlJobService.remove(id);
+	}
+
+	@RequestMapping("/stop")
+	@ResponseBody
+	public ReturnT<String> pause(int id) {
+		return xxlJobService.stop(id);
+	}
+
+	@RequestMapping("/start")
+	@ResponseBody
+	public ReturnT<String> start(int id) {
+		return xxlJobService.start(id);
+	}
+
+	@RequestMapping("/trigger")
+	@ResponseBody
+	//@PermissionLimit(limit = false)
+	public ReturnT<String> triggerJob(int id, String executorParam) {
+		// force cover job param
+		if (executorParam == null) {
+			executorParam = "";
+		}
+
+		JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam);
+		return ReturnT.SUCCESS;
+	}
+
+	@RequestMapping("/nextTriggerTime")
+	@ResponseBody
+	public ReturnT<List<String>> nextTriggerTime(String cron) {
+		List<String> result = new ArrayList<>();
+		try {
+			CronExpression cronExpression = new CronExpression(cron);
+			Date lastTime = new Date();
+			for (int i = 0; i < 5; i++) {
+				lastTime = cronExpression.getNextValidTimeAfter(lastTime);
+				if (lastTime != null) {
+					result.add(DateUtil.formatDateTime(lastTime));
+				} else {
+					break;
+				}
+			}
+		} catch (ParseException e) {
+			return new ReturnT<List<String>>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid"));
+		}
+		return new ReturnT<List<String>>(result);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobLogController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobLogController.java
new file mode 100644
index 0000000..e6d956e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobLogController.java
@@ -0,0 +1,230 @@
+package com.vci.ubcs.xxl.job.admin.controller;
+
+import com.vci.ubcs.xxl.job.admin.core.exception.XxlJobException;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLog;
+import com.vci.ubcs.xxl.job.admin.core.scheduler.XxlJobScheduler;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobGroupDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobInfoDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobLogDao;
+import com.xxl.job.core.biz.ExecutorBiz;
+import com.xxl.job.core.biz.model.LogResult;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.util.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * index controller
+ * @author xuxueli 2015-12-19 16:13:16
+ */
+@Controller
+@RequestMapping("/joblog")
+public class JobLogController {
+	private static Logger logger = LoggerFactory.getLogger(JobLogController.class);
+
+	@Resource
+	private XxlJobGroupDao xxlJobGroupDao;
+	@Resource
+	public XxlJobInfoDao xxlJobInfoDao;
+	@Resource
+	public XxlJobLogDao xxlJobLogDao;
+
+	@RequestMapping
+	public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) {
+
+		// 鎵ц鍣ㄥ垪琛�
+		List<XxlJobGroup> jobGroupList_all =  xxlJobGroupDao.findAll();
+
+		// filter group
+		List<XxlJobGroup> jobGroupList = JobInfoController.filterJobGroupByRole(request, jobGroupList_all);
+		if (jobGroupList==null || jobGroupList.size()==0) {
+			throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
+		}
+
+		model.addAttribute("JobGroupList", jobGroupList);
+
+		// 浠诲姟
+		if (jobId > 0) {
+			XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
+			if (jobInfo == null) {
+				throw new RuntimeException(I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_unvalid"));
+			}
+
+			model.addAttribute("jobInfo", jobInfo);
+
+			// valid permission
+			JobInfoController.validPermission(request, jobInfo.getJobGroup());
+		}
+
+		return "joblog/joblog.index";
+	}
+
+	@RequestMapping("/getJobsByGroup")
+	@ResponseBody
+	public ReturnT<List<XxlJobInfo>> getJobsByGroup(int jobGroup){
+		List<XxlJobInfo> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
+		return new ReturnT<List<XxlJobInfo>>(list);
+	}
+
+	@RequestMapping("/pageList")
+	@ResponseBody
+	public Map<String, Object> pageList(HttpServletRequest request,
+										@RequestParam(required = false, defaultValue = "0") int start,
+										@RequestParam(required = false, defaultValue = "10") int length,
+										int jobGroup, int jobId, int logStatus, String filterTime) {
+
+		// valid permission
+		JobInfoController.validPermission(request, jobGroup);	// 浠呯鐞嗗憳鏀寔鏌ヨ鍏ㄩ儴锛涙櫘閫氱敤鎴蜂粎鏀寔鏌ヨ鏈夋潈闄愮殑 jobGroup
+
+		// parse param
+		Date triggerTimeStart = null;
+		Date triggerTimeEnd = null;
+		if (filterTime!=null && filterTime.trim().length()>0) {
+			String[] temp = filterTime.split(" - ");
+			if (temp.length == 2) {
+				triggerTimeStart = DateUtil.parseDateTime(temp[0]);
+				triggerTimeEnd = DateUtil.parseDateTime(temp[1]);
+			}
+		}
+
+		// page query
+		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
+		int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
+
+		// package result
+		Map<String, Object> maps = new HashMap<String, Object>();
+	    maps.put("recordsTotal", list_count);		// 鎬昏褰曟暟
+	    maps.put("recordsFiltered", list_count);	// 杩囨护鍚庣殑鎬昏褰曟暟
+	    maps.put("data", list);  					// 鍒嗛〉鍒楄〃
+		return maps;
+	}
+
+	@RequestMapping("/logDetailPage")
+	public String logDetailPage(int id, Model model){
+
+		// base check
+		ReturnT<String> logStatue = ReturnT.SUCCESS;
+		XxlJobLog jobLog = xxlJobLogDao.load(id);
+		if (jobLog == null) {
+            throw new RuntimeException(I18nUtil.getString("joblog_logid_unvalid"));
+		}
+
+        model.addAttribute("triggerCode", jobLog.getTriggerCode());
+        model.addAttribute("handleCode", jobLog.getHandleCode());
+        model.addAttribute("executorAddress", jobLog.getExecutorAddress());
+        model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
+        model.addAttribute("logId", jobLog.getId());
+		return "joblog/joblog.detail";
+	}
+
+	@RequestMapping("/logDetailCat")
+	@ResponseBody
+	public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum){
+		try {
+			ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(executorAddress);
+			ReturnT<LogResult> logResult = executorBiz.log(triggerTime, logId, fromLineNum);
+
+			// is end
+            if (logResult.getContent()!=null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
+                XxlJobLog jobLog = xxlJobLogDao.load(logId);
+                if (jobLog.getHandleCode() > 0) {
+                    logResult.getContent().setEnd(true);
+                }
+            }
+
+			return logResult;
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			return new ReturnT<LogResult>(ReturnT.FAIL_CODE, e.getMessage());
+		}
+	}
+
+	@RequestMapping("/logKill")
+	@ResponseBody
+	public ReturnT<String> logKill(int id){
+		// base check
+		XxlJobLog log = xxlJobLogDao.load(id);
+		XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId());
+		if (jobInfo==null) {
+			return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
+		}
+		if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
+			return new ReturnT<String>(500, I18nUtil.getString("joblog_kill_log_limit"));
+		}
+
+		// request of kill
+		ReturnT<String> runResult = null;
+		try {
+			ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(log.getExecutorAddress());
+			runResult = executorBiz.kill(jobInfo.getId());
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			runResult = new ReturnT<String>(500, e.getMessage());
+		}
+
+		if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
+			log.setHandleCode(ReturnT.FAIL_CODE);
+			log.setHandleMsg( I18nUtil.getString("joblog_kill_log_byman")+":" + (runResult.getMsg()!=null?runResult.getMsg():""));
+			log.setHandleTime(new Date());
+			xxlJobLogDao.updateHandleInfo(log);
+			return new ReturnT<String>(runResult.getMsg());
+		} else {
+			return new ReturnT<String>(500, runResult.getMsg());
+		}
+	}
+
+	@RequestMapping("/clearLog")
+	@ResponseBody
+	public ReturnT<String> clearLog(int jobGroup, int jobId, int type){
+
+		Date clearBeforeTime = null;
+		int clearBeforeNum = 0;
+		if (type == 1) {
+			clearBeforeTime = DateUtil.addMonths(new Date(), -1);	// 娓呯悊涓�涓湀涔嬪墠鏃ュ織鏁版嵁
+		} else if (type == 2) {
+			clearBeforeTime = DateUtil.addMonths(new Date(), -3);	// 娓呯悊涓変釜鏈堜箣鍓嶆棩蹇楁暟鎹�
+		} else if (type == 3) {
+			clearBeforeTime = DateUtil.addMonths(new Date(), -6);	// 娓呯悊鍏釜鏈堜箣鍓嶆棩蹇楁暟鎹�
+		} else if (type == 4) {
+			clearBeforeTime = DateUtil.addYears(new Date(), -1);	// 娓呯悊涓�骞翠箣鍓嶆棩蹇楁暟鎹�
+		} else if (type == 5) {
+			clearBeforeNum = 1000;		// 娓呯悊涓�鍗冩潯浠ュ墠鏃ュ織鏁版嵁
+		} else if (type == 6) {
+			clearBeforeNum = 10000;		// 娓呯悊涓�涓囨潯浠ュ墠鏃ュ織鏁版嵁
+		} else if (type == 7) {
+			clearBeforeNum = 30000;		// 娓呯悊涓変竾鏉′互鍓嶆棩蹇楁暟鎹�
+		} else if (type == 8) {
+			clearBeforeNum = 100000;	// 娓呯悊鍗佷竾鏉′互鍓嶆棩蹇楁暟鎹�
+		} else if (type == 9) {
+			clearBeforeNum = 0;			// 娓呯悊鎵�鏈夋棩蹇楁暟鎹�
+		} else {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_clean_type_unvalid"));
+		}
+
+		List<Long> logIds = null;
+		do {
+			logIds = xxlJobLogDao.findClearLogIds(jobGroup, jobId, clearBeforeTime, clearBeforeNum, 1000);
+			if (logIds!=null && logIds.size()>0) {
+				xxlJobLogDao.clearLog(logIds);
+			}
+		} while (logIds!=null && logIds.size()>0);
+
+		return ReturnT.SUCCESS;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/UserController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/UserController.java
new file mode 100644
index 0000000..801b23b
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/UserController.java
@@ -0,0 +1,172 @@
+package com.vci.ubcs.xxl.job.admin.controller;
+
+import com.vci.ubcs.xxl.job.admin.controller.annotation.PermissionLimit;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobGroupDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobUserDao;
+import com.vci.ubcs.xxl.job.admin.service.LoginService;
+import com.xxl.job.core.biz.model.ReturnT;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.util.DigestUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author xuxueli 2019-05-04 16:39:50
+ */
+@Controller
+@RequestMapping("/user")
+public class UserController {
+
+    @Resource
+    private XxlJobUserDao xxlJobUserDao;
+    @Resource
+    private XxlJobGroupDao xxlJobGroupDao;
+
+    @RequestMapping
+    @PermissionLimit(adminuser = true)
+    public String index(Model model) {
+
+        // 鎵ц鍣ㄥ垪琛�
+        List<XxlJobGroup> groupList = xxlJobGroupDao.findAll();
+        model.addAttribute("groupList", groupList);
+
+        return "user/user.index";
+    }
+
+    @RequestMapping("/pageList")
+    @ResponseBody
+    @PermissionLimit(adminuser = true)
+    public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
+                                        @RequestParam(required = false, defaultValue = "10") int length,
+                                        String username, int role) {
+
+        // page list
+        List<XxlJobUser> list = xxlJobUserDao.pageList(start, length, username, role);
+        int list_count = xxlJobUserDao.pageListCount(start, length, username, role);
+
+        // package result
+        Map<String, Object> maps = new HashMap<String, Object>();
+        maps.put("recordsTotal", list_count);		// 鎬昏褰曟暟
+        maps.put("recordsFiltered", list_count);	// 杩囨护鍚庣殑鎬昏褰曟暟
+        maps.put("data", list);  					// 鍒嗛〉鍒楄〃
+        return maps;
+    }
+
+    @RequestMapping("/add")
+    @ResponseBody
+    @PermissionLimit(adminuser = true)
+    public ReturnT<String> add(XxlJobUser xxlJobUser) {
+
+        // valid username
+        if (!StringUtils.hasText(xxlJobUser.getUsername())) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input")+I18nUtil.getString("user_username") );
+        }
+        xxlJobUser.setUsername(xxlJobUser.getUsername().trim());
+        if (!(xxlJobUser.getUsername().length()>=4 && xxlJobUser.getUsername().length()<=20)) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
+        }
+        // valid password
+        if (!StringUtils.hasText(xxlJobUser.getPassword())) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input")+I18nUtil.getString("user_password") );
+        }
+        xxlJobUser.setPassword(xxlJobUser.getPassword().trim());
+        if (!(xxlJobUser.getPassword().length()>=4 && xxlJobUser.getPassword().length()<=20)) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
+        }
+        // md5 password
+        xxlJobUser.setPassword(DigestUtils.md5DigestAsHex(xxlJobUser.getPassword().getBytes()));
+
+        // check repeat
+        XxlJobUser existUser = xxlJobUserDao.loadByUserName(xxlJobUser.getUsername());
+        if (existUser != null) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("user_username_repeat") );
+        }
+
+        // write
+        xxlJobUserDao.save(xxlJobUser);
+        return ReturnT.SUCCESS;
+    }
+
+    @RequestMapping("/update")
+    @ResponseBody
+    @PermissionLimit(adminuser = true)
+    public ReturnT<String> update(HttpServletRequest request, XxlJobUser xxlJobUser) {
+
+        // avoid opt login seft
+        XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
+        if (loginUser.getUsername().equals(xxlJobUser.getUsername())) {
+            return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("user_update_loginuser_limit"));
+        }
+
+        // valid password
+        if (StringUtils.hasText(xxlJobUser.getPassword())) {
+            xxlJobUser.setPassword(xxlJobUser.getPassword().trim());
+            if (!(xxlJobUser.getPassword().length()>=4 && xxlJobUser.getPassword().length()<=20)) {
+                return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
+            }
+            // md5 password
+            xxlJobUser.setPassword(DigestUtils.md5DigestAsHex(xxlJobUser.getPassword().getBytes()));
+        } else {
+            xxlJobUser.setPassword(null);
+        }
+
+        // write
+        xxlJobUserDao.update(xxlJobUser);
+        return ReturnT.SUCCESS;
+    }
+
+    @RequestMapping("/remove")
+    @ResponseBody
+    @PermissionLimit(adminuser = true)
+    public ReturnT<String> remove(HttpServletRequest request, int id) {
+
+        // avoid opt login seft
+        XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
+        if (loginUser.getId() == id) {
+            return new ReturnT<String>(ReturnT.FAIL.getCode(), I18nUtil.getString("user_update_loginuser_limit"));
+        }
+
+        xxlJobUserDao.delete(id);
+        return ReturnT.SUCCESS;
+    }
+
+    @RequestMapping("/updatePwd")
+    @ResponseBody
+    public ReturnT<String> updatePwd(HttpServletRequest request, String password){
+
+        // valid password
+        if (password==null || password.trim().length()==0){
+            return new ReturnT<String>(ReturnT.FAIL.getCode(), "瀵嗙爜涓嶅彲涓虹┖");
+        }
+        password = password.trim();
+        if (!(password.length()>=4 && password.length()<=20)) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" );
+        }
+
+        // md5 password
+        String md5Password = DigestUtils.md5DigestAsHex(password.getBytes());
+
+        // update pwd
+        XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
+
+        // do write
+        XxlJobUser existUser = xxlJobUserDao.loadByUserName(loginUser.getUsername());
+        existUser.setPassword(md5Password);
+        xxlJobUserDao.update(existUser);
+
+        return ReturnT.SUCCESS;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/annotation/PermissionLimit.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/annotation/PermissionLimit.java
new file mode 100644
index 0000000..b6f3d33
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/annotation/PermissionLimit.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.xxl.job.admin.controller.annotation;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鏉冮檺闄愬埗
+ * @author xuxueli 2015-12-12 18:29:02
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PermissionLimit {
+
+	/**
+	 * 鐧诲綍鎷︽埅 (榛樿鎷︽埅)
+	 */
+	boolean limit() default true;
+
+	/**
+	 * 瑕佹眰绠$悊鍛樻潈闄�
+	 *
+	 * @return
+	 */
+	boolean adminuser() default false;
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/CookieInterceptor.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/CookieInterceptor.java
new file mode 100644
index 0000000..084702c
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/CookieInterceptor.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.xxl.job.admin.controller.interceptor;
+
+import com.vci.ubcs.xxl.job.admin.core.util.FtlUtil;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+
+/**
+ * push cookies to model as cookieMap
+ *
+ * @author xuxueli 2015-12-12 18:09:04
+ */
+@Component
+public class CookieInterceptor extends HandlerInterceptorAdapter {
+
+	@Override
+	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
+			ModelAndView modelAndView) throws Exception {
+
+		// cookie
+		if (modelAndView!=null && request.getCookies()!=null && request.getCookies().length>0) {
+			HashMap<String, Cookie> cookieMap = new HashMap<String, Cookie>();
+			for (Cookie ck : request.getCookies()) {
+				cookieMap.put(ck.getName(), ck);
+			}
+			modelAndView.addObject("cookieMap", cookieMap);
+		}
+
+		// static method
+		if (modelAndView != null) {
+			modelAndView.addObject("I18nUtil", FtlUtil.generateStaticModel(I18nUtil.class.getName()));
+		}
+
+		super.postHandle(request, response, handler, modelAndView);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/PermissionInterceptor.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
new file mode 100644
index 0000000..95ea42e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
@@ -0,0 +1,59 @@
+package com.vci.ubcs.xxl.job.admin.controller.interceptor;
+
+import com.vci.ubcs.xxl.job.admin.controller.annotation.PermissionLimit;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.service.LoginService;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 鏉冮檺鎷︽埅
+ *
+ * @author xuxueli 2015-12-12 18:09:04
+ */
+@Component
+public class PermissionInterceptor extends HandlerInterceptorAdapter {
+
+	@Resource
+	private LoginService loginService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+		if (!(handler instanceof HandlerMethod)) {
+			return super.preHandle(request, response, handler);
+		}
+
+		// if need login
+		boolean needLogin = true;
+		boolean needAdminuser = false;
+		HandlerMethod method = (HandlerMethod)handler;
+		PermissionLimit permission = method.getMethodAnnotation(PermissionLimit.class);
+		if (permission!=null) {
+			needLogin = permission.limit();
+			needAdminuser = permission.adminuser();
+		}
+
+		if (needLogin) {
+			XxlJobUser loginUser = loginService.ifLogin(request, response);
+			if (loginUser == null) {
+				response.sendRedirect(request.getContextPath() + "/toLogin");
+				//request.getRequestDispatcher("/toLogin").forward(request, response);
+				return false;
+			}
+			if (needAdminuser && loginUser.getRole()!=1) {
+				throw new RuntimeException(I18nUtil.getString("system_permission_limit"));
+			}
+			request.setAttribute(LoginService.LOGIN_IDENTITY_KEY, loginUser);
+		}
+
+		return super.preHandle(request, response, handler);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/WebMvcConfig.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/WebMvcConfig.java
new file mode 100644
index 0000000..11bdf0a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/WebMvcConfig.java
@@ -0,0 +1,28 @@
+package com.vci.ubcs.xxl.job.admin.controller.interceptor;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+/**
+ * web mvc config
+ *
+ * @author xuxueli 2018-04-02 20:48:20
+ */
+@Configuration(proxyBeanMethods = false)
+public class WebMvcConfig extends WebMvcConfigurerAdapter {
+
+    @Autowired
+    private PermissionInterceptor permissionInterceptor;
+    @Autowired
+    private CookieInterceptor cookieInterceptor;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(permissionInterceptor).addPathPatterns("/**");
+        registry.addInterceptor(cookieInterceptor).addPathPatterns("/**");
+        super.addInterceptors(registry);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/resolver/WebExceptionResolver.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/resolver/WebExceptionResolver.java
new file mode 100644
index 0000000..ff5e667
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/resolver/WebExceptionResolver.java
@@ -0,0 +1,64 @@
+package com.vci.ubcs.xxl.job.admin.controller.resolver;
+
+import com.vci.ubcs.xxl.job.admin.core.exception.XxlJobException;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.vci.ubcs.xxl.job.admin.core.util.JacksonUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * common exception resolver
+ *
+ * @author xuxueli 2016-1-6 19:22:18
+ */
+@Component
+public class WebExceptionResolver implements HandlerExceptionResolver {
+	private static transient Logger logger = LoggerFactory.getLogger(WebExceptionResolver.class);
+
+	@Override
+	public ModelAndView resolveException(HttpServletRequest request,
+			HttpServletResponse response, Object handler, Exception ex) {
+
+		if (!(ex instanceof XxlJobException)) {
+			logger.error("WebExceptionResolver:{}", ex);
+		}
+
+		// if json
+		boolean isJson = false;
+		HandlerMethod method = (HandlerMethod)handler;
+		ResponseBody responseBody = method.getMethodAnnotation(ResponseBody.class);
+		if (responseBody != null) {
+			isJson = true;
+		}
+
+		// error result
+		ReturnT<String> errorResult = new ReturnT<String>(ReturnT.FAIL_CODE, ex.toString().replaceAll("\n", "<br/>"));
+
+		// response
+		ModelAndView mv = new ModelAndView();
+		if (isJson) {
+			try {
+				response.setContentType("application/json;charset=utf-8");
+				response.getWriter().print(JacksonUtil.writeValueAsString(errorResult));
+			} catch (IOException e) {
+				logger.error(e.getMessage(), e);
+			}
+			return mv;
+		} else {
+
+			mv.addObject("exceptionMsg", errorResult.getMsg());
+			mv.setViewName("/common/common.exception");
+			return mv;
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/conf/XxlJobAdminConfig.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/conf/XxlJobAdminConfig.java
new file mode 100644
index 0000000..1d1d489
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/conf/XxlJobAdminConfig.java
@@ -0,0 +1,147 @@
+package com.vci.ubcs.xxl.job.admin.core.conf;
+
+import com.vci.ubcs.xxl.job.admin.core.scheduler.XxlJobScheduler;
+import com.vci.ubcs.xxl.job.admin.dao.*;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+
+/**
+ * xxl-job config
+ *
+ * @author xuxueli 2017-04-28
+ */
+
+@Component
+public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
+
+    private static XxlJobAdminConfig adminConfig = null;
+    public static XxlJobAdminConfig getAdminConfig() {
+        return adminConfig;
+    }
+
+
+    // ---------------------- XxlJobScheduler ----------------------
+
+    private XxlJobScheduler xxlJobScheduler;
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        adminConfig = this;
+
+        xxlJobScheduler = new XxlJobScheduler();
+        xxlJobScheduler.init();
+    }
+
+    @Override
+    public void destroy() throws Exception {
+        xxlJobScheduler.destroy();
+    }
+
+
+    // ---------------------- XxlJobScheduler ----------------------
+
+    // conf
+    @Value("${xxl.job.i18n}")
+    private String i18n;
+
+    @Value("${xxl.job.accessToken}")
+    private String accessToken;
+
+    @Value("${spring.mail.username}")
+    private String emailUserName;
+
+    @Value("${xxl.job.triggerpool.fast.max}")
+    private int triggerPoolFastMax;
+
+    @Value("${xxl.job.triggerpool.slow.max}")
+    private int triggerPoolSlowMax;
+
+    @Value("${xxl.job.logretentiondays}")
+    private int logretentiondays;
+
+    // dao, service
+
+    @Resource
+    private XxlJobLogDao xxlJobLogDao;
+    @Resource
+    private XxlJobInfoDao xxlJobInfoDao;
+    @Resource
+    private XxlJobRegistryDao xxlJobRegistryDao;
+    @Resource
+    private XxlJobGroupDao xxlJobGroupDao;
+    @Resource
+    private XxlJobLogReportDao xxlJobLogReportDao;
+    @Resource
+    private JavaMailSender mailSender;
+    @Resource
+    private DataSource dataSource;
+
+
+    public String getI18n() {
+        return i18n;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public String getEmailUserName() {
+        return emailUserName;
+    }
+
+    public int getTriggerPoolFastMax() {
+        if (triggerPoolFastMax < 200) {
+            return 200;
+        }
+        return triggerPoolFastMax;
+    }
+
+    public int getTriggerPoolSlowMax() {
+        if (triggerPoolSlowMax < 100) {
+            return 100;
+        }
+        return triggerPoolSlowMax;
+    }
+
+    public int getLogretentiondays() {
+        if (logretentiondays < 7) {
+            return -1;  // Limit greater than or equal to 7, otherwise close
+        }
+        return logretentiondays;
+    }
+
+    public XxlJobLogDao getXxlJobLogDao() {
+        return xxlJobLogDao;
+    }
+
+    public XxlJobInfoDao getXxlJobInfoDao() {
+        return xxlJobInfoDao;
+    }
+
+    public XxlJobRegistryDao getXxlJobRegistryDao() {
+        return xxlJobRegistryDao;
+    }
+
+    public XxlJobGroupDao getXxlJobGroupDao() {
+        return xxlJobGroupDao;
+    }
+
+    public XxlJobLogReportDao getXxlJobLogReportDao() {
+        return xxlJobLogReportDao;
+    }
+
+    public JavaMailSender getMailSender() {
+        return mailSender;
+    }
+
+    public DataSource getDataSource() {
+        return dataSource;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/cron/CronExpression.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/cron/CronExpression.java
new file mode 100644
index 0000000..4d0827a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/cron/CronExpression.java
@@ -0,0 +1,1666 @@
+/*
+ * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
+ * of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package com.vci.ubcs.xxl.job.admin.core.cron;
+
+import java.io.Serializable;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.StringTokenizer;
+import java.util.TimeZone;
+import java.util.TreeSet;
+
+/**
+ * Provides a parser and evaluator for unix-like cron expressions. Cron
+ * expressions provide the ability to specify complex time combinations such as
+ * &quot;At 8:00am every Monday through Friday&quot; or &quot;At 1:30am every
+ * last Friday of the month&quot;.
+ * <P>
+ * Cron expressions are comprised of 6 required fields and one optional field
+ * separated by white space. The fields respectively are described as follows:
+ *
+ * <table cellspacing="8">
+ * <tr>
+ * <th align="left">Field Name</th>
+ * <th align="left">&nbsp;</th>
+ * <th align="left">Allowed Values</th>
+ * <th align="left">&nbsp;</th>
+ * <th align="left">Allowed Special Characters</th>
+ * </tr>
+ * <tr>
+ * <td align="left"><code>Seconds</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>0-59</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>, - * /</code></td>
+ * </tr>
+ * <tr>
+ * <td align="left"><code>Minutes</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>0-59</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>, - * /</code></td>
+ * </tr>
+ * <tr>
+ * <td align="left"><code>Hours</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>0-23</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>, - * /</code></td>
+ * </tr>
+ * <tr>
+ * <td align="left"><code>Day-of-month</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>1-31</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>, - * ? / L W</code></td>
+ * </tr>
+ * <tr>
+ * <td align="left"><code>Month</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>0-11 or JAN-DEC</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>, - * /</code></td>
+ * </tr>
+ * <tr>
+ * <td align="left"><code>Day-of-Week</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>1-7 or SUN-SAT</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>, - * ? / L #</code></td>
+ * </tr>
+ * <tr>
+ * <td align="left"><code>Year (Optional)</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>empty, 1970-2199</code></td>
+ * <td align="left">&nbsp;</th>
+ * <td align="left"><code>, - * /</code></td>
+ * </tr>
+ * </table>
+ * <P>
+ * The '*' character is used to specify all values. For example, &quot;*&quot;
+ * in the minute field means &quot;every minute&quot;.
+ * <P>
+ * The '?' character is allowed for the day-of-month and day-of-week fields. It
+ * is used to specify 'no specific value'. This is useful when you need to
+ * specify something in one of the two fields, but not the other.
+ * <P>
+ * The '-' character is used to specify ranges For example &quot;10-12&quot; in
+ * the hour field means &quot;the hours 10, 11 and 12&quot;.
+ * <P>
+ * The ',' character is used to specify additional values. For example
+ * &quot;MON,WED,FRI&quot; in the day-of-week field means &quot;the days Monday,
+ * Wednesday, and Friday&quot;.
+ * <P>
+ * The '/' character is used to specify increments. For example &quot;0/15&quot;
+ * in the seconds field means &quot;the seconds 0, 15, 30, and 45&quot;. And
+ * &quot;5/15&quot; in the seconds field means &quot;the seconds 5, 20, 35, and
+ * 50&quot;.  Specifying '*' before the  '/' is equivalent to specifying 0 is
+ * the value to start with. Essentially, for each field in the expression, there
+ * is a set of numbers that can be turned on or off. For seconds and minutes,
+ * the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to
+ * 31, and for months 0 to 11 (JAN to DEC). The &quot;/&quot; character simply helps you turn
+ * on every &quot;nth&quot; value in the given set. Thus &quot;7/6&quot; in the
+ * month field only turns on month &quot;7&quot;, it does NOT mean every 6th
+ * month, please note that subtlety.
+ * <P>
+ * The 'L' character is allowed for the day-of-month and day-of-week fields.
+ * This character is short-hand for &quot;last&quot;, but it has different
+ * meaning in each of the two fields. For example, the value &quot;L&quot; in
+ * the day-of-month field means &quot;the last day of the month&quot; - day 31
+ * for January, day 28 for February on non-leap years. If used in the
+ * day-of-week field by itself, it simply means &quot;7&quot; or
+ * &quot;SAT&quot;. But if used in the day-of-week field after another value, it
+ * means &quot;the last xxx day of the month&quot; - for example &quot;6L&quot;
+ * means &quot;the last friday of the month&quot;. You can also specify an offset
+ * from the last day of the month, such as "L-3" which would mean the third-to-last
+ * day of the calendar month. <i>When using the 'L' option, it is important not to
+ * specify lists, or ranges of values, as you'll get confusing/unexpected results.</i>
+ * <P>
+ * The 'W' character is allowed for the day-of-month field.  This character
+ * is used to specify the weekday (Monday-Friday) nearest the given day.  As an
+ * example, if you were to specify &quot;15W&quot; as the value for the
+ * day-of-month field, the meaning is: &quot;the nearest weekday to the 15th of
+ * the month&quot;. So if the 15th is a Saturday, the trigger will fire on
+ * Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the
+ * 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th.
+ * However if you specify &quot;1W&quot; as the value for day-of-month, and the
+ * 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not
+ * 'jump' over the boundary of a month's days.  The 'W' character can only be
+ * specified when the day-of-month is a single day, not a range or list of days.
+ * <P>
+ * The 'L' and 'W' characters can also be combined for the day-of-month
+ * expression to yield 'LW', which translates to &quot;last weekday of the
+ * month&quot;.
+ * <P>
+ * The '#' character is allowed for the day-of-week field. This character is
+ * used to specify &quot;the nth&quot; XXX day of the month. For example, the
+ * value of &quot;6#3&quot; in the day-of-week field means the third Friday of
+ * the month (day 6 = Friday and &quot;#3&quot; = the 3rd one in the month).
+ * Other examples: &quot;2#1&quot; = the first Monday of the month and
+ * &quot;4#5&quot; = the fifth Wednesday of the month. Note that if you specify
+ * &quot;#5&quot; and there is not 5 of the given day-of-week in the month, then
+ * no firing will occur that month.  If the '#' character is used, there can
+ * only be one expression in the day-of-week field (&quot;3#1,6#3&quot; is
+ * not valid, since there are two expressions).
+ * <P>
+ * <!--The 'C' character is allowed for the day-of-month and day-of-week fields.
+ * This character is short-hand for "calendar". This means values are
+ * calculated against the associated calendar, if any. If no calendar is
+ * associated, then it is equivalent to having an all-inclusive calendar. A
+ * value of "5C" in the day-of-month field means "the first day included by the
+ * calendar on or after the 5th". A value of "1C" in the day-of-week field
+ * means "the first day included by the calendar on or after Sunday".-->
+ * <P>
+ * The legal characters and the names of months and days of the week are not
+ * case sensitive.
+ *
+ * <p>
+ * <b>NOTES:</b>
+ * <ul>
+ * <li>Support for specifying both a day-of-week and a day-of-month value is
+ * not complete (you'll need to use the '?' character in one of these fields).
+ * </li>
+ * <li>Overflowing ranges is supported - that is, having a larger number on
+ * the left hand side than the right. You might do 22-2 to catch 10 o'clock
+ * at night until 2 o'clock in the morning, or you might have NOV-FEB. It is
+ * very important to note that overuse of overflowing ranges creates ranges
+ * that don't make sense and no effort has been made to determine which
+ * interpretation CronExpression chooses. An example would be
+ * "0 0 14-6 ? * FRI-MON". </li>
+ * </ul>
+ * </p>
+ *
+ *
+ * @author Sharada Jambula, James House
+ * @author Contributions from Mads Henderson
+ * @author Refactoring from CronTrigger to CronExpression by Aaron Craven
+ *
+ * Borrowed from quartz v2.3.1
+ *
+ */
+public final class CronExpression implements Serializable, Cloneable {
+
+    private static final long serialVersionUID = 12423409423L;
+
+    protected static final int SECOND = 0;
+    protected static final int MINUTE = 1;
+    protected static final int HOUR = 2;
+    protected static final int DAY_OF_MONTH = 3;
+    protected static final int MONTH = 4;
+    protected static final int DAY_OF_WEEK = 5;
+    protected static final int YEAR = 6;
+    protected static final int ALL_SPEC_INT = 99; // '*'
+    protected static final int NO_SPEC_INT = 98; // '?'
+    protected static final Integer ALL_SPEC = ALL_SPEC_INT;
+    protected static final Integer NO_SPEC = NO_SPEC_INT;
+
+    protected static final Map<String, Integer> monthMap = new HashMap<String, Integer>(20);
+    protected static final Map<String, Integer> dayMap = new HashMap<String, Integer>(60);
+    static {
+        monthMap.put("JAN", 0);
+        monthMap.put("FEB", 1);
+        monthMap.put("MAR", 2);
+        monthMap.put("APR", 3);
+        monthMap.put("MAY", 4);
+        monthMap.put("JUN", 5);
+        monthMap.put("JUL", 6);
+        monthMap.put("AUG", 7);
+        monthMap.put("SEP", 8);
+        monthMap.put("OCT", 9);
+        monthMap.put("NOV", 10);
+        monthMap.put("DEC", 11);
+
+        dayMap.put("SUN", 1);
+        dayMap.put("MON", 2);
+        dayMap.put("TUE", 3);
+        dayMap.put("WED", 4);
+        dayMap.put("THU", 5);
+        dayMap.put("FRI", 6);
+        dayMap.put("SAT", 7);
+    }
+
+    private final String cronExpression;
+    private TimeZone timeZone = null;
+    protected transient TreeSet<Integer> seconds;
+    protected transient TreeSet<Integer> minutes;
+    protected transient TreeSet<Integer> hours;
+    protected transient TreeSet<Integer> daysOfMonth;
+    protected transient TreeSet<Integer> months;
+    protected transient TreeSet<Integer> daysOfWeek;
+    protected transient TreeSet<Integer> years;
+
+    protected transient boolean lastdayOfWeek = false;
+    protected transient int nthdayOfWeek = 0;
+    protected transient boolean lastdayOfMonth = false;
+    protected transient boolean nearestWeekday = false;
+    protected transient int lastdayOffset = 0;
+    protected transient boolean expressionParsed = false;
+
+    public static final int MAX_YEAR = Calendar.getInstance().get(Calendar.YEAR) + 100;
+
+    /**
+     * Constructs a new <CODE>CronExpression</CODE> based on the specified
+     * parameter.
+     *
+     * @param cronExpression String representation of the cron expression the
+     *                       new object should represent
+     * @throws java.text.ParseException
+     *         if the string expression cannot be parsed into a valid
+     *         <CODE>CronExpression</CODE>
+     */
+    public CronExpression(String cronExpression) throws ParseException {
+        if (cronExpression == null) {
+            throw new IllegalArgumentException("cronExpression cannot be null");
+        }
+
+        this.cronExpression = cronExpression.toUpperCase(Locale.US);
+
+        buildExpression(this.cronExpression);
+    }
+
+    /**
+     * Constructs a new {@code CronExpression} as a copy of an existing
+     * instance.
+     *
+     * @param expression
+     *            The existing cron expression to be copied
+     */
+    public CronExpression(CronExpression expression) {
+        /*
+         * We don't call the other constructor here since we need to swallow the
+         * ParseException. We also elide some of the sanity checking as it is
+         * not logically trippable.
+         */
+        this.cronExpression = expression.getCronExpression();
+        try {
+            buildExpression(cronExpression);
+        } catch (ParseException ex) {
+            throw new AssertionError();
+        }
+        if (expression.getTimeZone() != null) {
+            setTimeZone((TimeZone) expression.getTimeZone().clone());
+        }
+    }
+
+    /**
+     * Indicates whether the given date satisfies the cron expression. Note that
+     * milliseconds are ignored, so two Dates falling on different milliseconds
+     * of the same second will always have the same result here.
+     *
+     * @param date the date to evaluate
+     * @return a boolean indicating whether the given date satisfies the cron
+     *         expression
+     */
+    public boolean isSatisfiedBy(Date date) {
+        Calendar testDateCal = Calendar.getInstance(getTimeZone());
+        testDateCal.setTime(date);
+        testDateCal.set(Calendar.MILLISECOND, 0);
+        Date originalDate = testDateCal.getTime();
+
+        testDateCal.add(Calendar.SECOND, -1);
+
+        Date timeAfter = getTimeAfter(testDateCal.getTime());
+
+        return ((timeAfter != null) && (timeAfter.equals(originalDate)));
+    }
+
+    /**
+     * Returns the next date/time <I>after</I> the given date/time which
+     * satisfies the cron expression.
+     *
+     * @param date the date/time at which to begin the search for the next valid
+     *             date/time
+     * @return the next valid date/time
+     */
+    public Date getNextValidTimeAfter(Date date) {
+        return getTimeAfter(date);
+    }
+
+    /**
+     * Returns the next date/time <I>after</I> the given date/time which does
+     * <I>not</I> satisfy the expression
+     *
+     * @param date the date/time at which to begin the search for the next
+     *             invalid date/time
+     * @return the next valid date/time
+     */
+    public Date getNextInvalidTimeAfter(Date date) {
+        long difference = 1000;
+
+        //move back to the nearest second so differences will be accurate
+        Calendar adjustCal = Calendar.getInstance(getTimeZone());
+        adjustCal.setTime(date);
+        adjustCal.set(Calendar.MILLISECOND, 0);
+        Date lastDate = adjustCal.getTime();
+
+        Date newDate;
+
+        //FUTURE_TODO: (QUARTZ-481) IMPROVE THIS! The following is a BAD solution to this problem. Performance will be very bad here, depending on the cron expression. It is, however A solution.
+
+        //keep getting the next included time until it's farther than one second
+        // apart. At that point, lastDate is the last valid fire time. We return
+        // the second immediately following it.
+        while (difference == 1000) {
+            newDate = getTimeAfter(lastDate);
+            if(newDate == null)
+                break;
+
+            difference = newDate.getTime() - lastDate.getTime();
+
+            if (difference == 1000) {
+                lastDate = newDate;
+            }
+        }
+
+        return new Date(lastDate.getTime() + 1000);
+    }
+
+    /**
+     * Returns the time zone for which this <code>CronExpression</code>
+     * will be resolved.
+     */
+    public TimeZone getTimeZone() {
+        if (timeZone == null) {
+            timeZone = TimeZone.getDefault();
+        }
+
+        return timeZone;
+    }
+
+    /**
+     * Sets the time zone for which  this <code>CronExpression</code>
+     * will be resolved.
+     */
+    public void setTimeZone(TimeZone timeZone) {
+        this.timeZone = timeZone;
+    }
+
+    /**
+     * Returns the string representation of the <CODE>CronExpression</CODE>
+     *
+     * @return a string representation of the <CODE>CronExpression</CODE>
+     */
+    @Override
+    public String toString() {
+        return cronExpression;
+    }
+
+    /**
+     * Indicates whether the specified cron expression can be parsed into a
+     * valid cron expression
+     *
+     * @param cronExpression the expression to evaluate
+     * @return a boolean indicating whether the given expression is a valid cron
+     *         expression
+     */
+    public static boolean isValidExpression(String cronExpression) {
+
+        try {
+            new CronExpression(cronExpression);
+        } catch (ParseException pe) {
+            return false;
+        }
+
+        return true;
+    }
+
+    public static void validateExpression(String cronExpression) throws ParseException {
+
+        new CronExpression(cronExpression);
+    }
+
+
+    ////////////////////////////////////////////////////////////////////////////
+    //
+    // Expression Parsing Functions
+    //
+    ////////////////////////////////////////////////////////////////////////////
+
+    protected void buildExpression(String expression) throws ParseException {
+        expressionParsed = true;
+
+        try {
+
+            if (seconds == null) {
+                seconds = new TreeSet<Integer>();
+            }
+            if (minutes == null) {
+                minutes = new TreeSet<Integer>();
+            }
+            if (hours == null) {
+                hours = new TreeSet<Integer>();
+            }
+            if (daysOfMonth == null) {
+                daysOfMonth = new TreeSet<Integer>();
+            }
+            if (months == null) {
+                months = new TreeSet<Integer>();
+            }
+            if (daysOfWeek == null) {
+                daysOfWeek = new TreeSet<Integer>();
+            }
+            if (years == null) {
+                years = new TreeSet<Integer>();
+            }
+
+            int exprOn = SECOND;
+
+            StringTokenizer exprsTok = new StringTokenizer(expression, " \t",
+                    false);
+
+            while (exprsTok.hasMoreTokens() && exprOn <= YEAR) {
+                String expr = exprsTok.nextToken().trim();
+
+                // throw an exception if L is used with other days of the month
+                if(exprOn == DAY_OF_MONTH && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
+                    throw new ParseException("Support for specifying 'L' and 'LW' with other days of the month is not implemented", -1);
+                }
+                // throw an exception if L is used with other days of the week
+                if(exprOn == DAY_OF_WEEK && expr.indexOf('L') != -1 && expr.length() > 1  && expr.contains(",")) {
+                    throw new ParseException("Support for specifying 'L' with other days of the week is not implemented", -1);
+                }
+                if(exprOn == DAY_OF_WEEK && expr.indexOf('#') != -1 && expr.indexOf('#', expr.indexOf('#') +1) != -1) {
+                    throw new ParseException("Support for specifying multiple \"nth\" days is not implemented.", -1);
+                }
+
+                StringTokenizer vTok = new StringTokenizer(expr, ",");
+                while (vTok.hasMoreTokens()) {
+                    String v = vTok.nextToken();
+                    storeExpressionVals(0, v, exprOn);
+                }
+
+                exprOn++;
+            }
+
+            if (exprOn <= DAY_OF_WEEK) {
+                throw new ParseException("Unexpected end of expression.",
+                            expression.length());
+            }
+
+            if (exprOn <= YEAR) {
+                storeExpressionVals(0, "*", YEAR);
+            }
+
+            TreeSet<Integer> dow = getSet(DAY_OF_WEEK);
+            TreeSet<Integer> dom = getSet(DAY_OF_MONTH);
+
+            // Copying the logic from the UnsupportedOperationException below
+            boolean dayOfMSpec = !dom.contains(NO_SPEC);
+            boolean dayOfWSpec = !dow.contains(NO_SPEC);
+
+            if (!dayOfMSpec || dayOfWSpec) {
+                if (!dayOfWSpec || dayOfMSpec) {
+                    throw new ParseException(
+                            "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.", 0);
+                }
+            }
+        } catch (ParseException pe) {
+            throw pe;
+        } catch (Exception e) {
+            throw new ParseException("Illegal cron expression format ("
+                    + e.toString() + ")", 0);
+        }
+    }
+
+    protected int storeExpressionVals(int pos, String s, int type)
+        throws ParseException {
+
+        int incr = 0;
+        int i = skipWhiteSpace(pos, s);
+        if (i >= s.length()) {
+            return i;
+        }
+        char c = s.charAt(i);
+        if ((c >= 'A') && (c <= 'Z') && (!s.equals("L")) && (!s.equals("LW")) && (!s.matches("^L-[0-9]*[W]?"))) {
+            String sub = s.substring(i, i + 3);
+            int sval = -1;
+            int eval = -1;
+            if (type == MONTH) {
+                sval = getMonthNumber(sub) + 1;
+                if (sval <= 0) {
+                    throw new ParseException("Invalid Month value: '" + sub + "'", i);
+                }
+                if (s.length() > i + 3) {
+                    c = s.charAt(i + 3);
+                    if (c == '-') {
+                        i += 4;
+                        sub = s.substring(i, i + 3);
+                        eval = getMonthNumber(sub) + 1;
+                        if (eval <= 0) {
+                            throw new ParseException("Invalid Month value: '" + sub + "'", i);
+                        }
+                    }
+                }
+            } else if (type == DAY_OF_WEEK) {
+                sval = getDayOfWeekNumber(sub);
+                if (sval < 0) {
+                    throw new ParseException("Invalid Day-of-Week value: '"
+                                + sub + "'", i);
+                }
+                if (s.length() > i + 3) {
+                    c = s.charAt(i + 3);
+                    if (c == '-') {
+                        i += 4;
+                        sub = s.substring(i, i + 3);
+                        eval = getDayOfWeekNumber(sub);
+                        if (eval < 0) {
+                            throw new ParseException(
+                                    "Invalid Day-of-Week value: '" + sub
+                                        + "'", i);
+                        }
+                    } else if (c == '#') {
+                        try {
+                            i += 4;
+                            nthdayOfWeek = Integer.parseInt(s.substring(i));
+                            if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
+                                throw new Exception();
+                            }
+                        } catch (Exception e) {
+                            throw new ParseException(
+                                    "A numeric value between 1 and 5 must follow the '#' option",
+                                    i);
+                        }
+                    } else if (c == 'L') {
+                        lastdayOfWeek = true;
+                        i++;
+                    }
+                }
+
+            } else {
+                throw new ParseException(
+                        "Illegal characters for this position: '" + sub + "'",
+                        i);
+            }
+            if (eval != -1) {
+                incr = 1;
+            }
+            addToSet(sval, eval, incr, type);
+            return (i + 3);
+        }
+
+        if (c == '?') {
+            i++;
+            if ((i + 1) < s.length()
+                    && (s.charAt(i) != ' ' && s.charAt(i + 1) != '\t')) {
+                throw new ParseException("Illegal character after '?': "
+                            + s.charAt(i), i);
+            }
+            if (type != DAY_OF_WEEK && type != DAY_OF_MONTH) {
+                throw new ParseException(
+                            "'?' can only be specified for Day-of-Month or Day-of-Week.",
+                            i);
+            }
+            if (type == DAY_OF_WEEK && !lastdayOfMonth) {
+                int val = daysOfMonth.last();
+                if (val == NO_SPEC_INT) {
+                    throw new ParseException(
+                                "'?' can only be specified for Day-of-Month -OR- Day-of-Week.",
+                                i);
+                }
+            }
+
+            addToSet(NO_SPEC_INT, -1, 0, type);
+            return i;
+        }
+
+        if (c == '*' || c == '/') {
+            if (c == '*' && (i + 1) >= s.length()) {
+                addToSet(ALL_SPEC_INT, -1, incr, type);
+                return i + 1;
+            } else if (c == '/'
+                    && ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s
+                            .charAt(i + 1) == '\t')) {
+                throw new ParseException("'/' must be followed by an integer.", i);
+            } else if (c == '*') {
+                i++;
+            }
+            c = s.charAt(i);
+            if (c == '/') { // is an increment specified?
+                i++;
+                if (i >= s.length()) {
+                    throw new ParseException("Unexpected end of string.", i);
+                }
+
+                incr = getNumericValue(s, i);
+
+                i++;
+                if (incr > 10) {
+                    i++;
+                }
+                checkIncrementRange(incr, type, i);
+            } else {
+                incr = 1;
+            }
+
+            addToSet(ALL_SPEC_INT, -1, incr, type);
+            return i;
+        } else if (c == 'L') {
+            i++;
+            if (type == DAY_OF_MONTH) {
+                lastdayOfMonth = true;
+            }
+            if (type == DAY_OF_WEEK) {
+                addToSet(7, 7, 0, type);
+            }
+            if(type == DAY_OF_MONTH && s.length() > i) {
+                c = s.charAt(i);
+                if(c == '-') {
+                    ValueSet vs = getValue(0, s, i+1);
+                    lastdayOffset = vs.value;
+                    if(lastdayOffset > 30)
+                        throw new ParseException("Offset from last day must be <= 30", i+1);
+                    i = vs.pos;
+                }
+                if(s.length() > i) {
+                    c = s.charAt(i);
+                    if(c == 'W') {
+                        nearestWeekday = true;
+                        i++;
+                    }
+                }
+            }
+            return i;
+        } else if (c >= '0' && c <= '9') {
+            int val = Integer.parseInt(String.valueOf(c));
+            i++;
+            if (i >= s.length()) {
+                addToSet(val, -1, -1, type);
+            } else {
+                c = s.charAt(i);
+                if (c >= '0' && c <= '9') {
+                    ValueSet vs = getValue(val, s, i);
+                    val = vs.value;
+                    i = vs.pos;
+                }
+                i = checkNext(i, s, val, type);
+                return i;
+            }
+        } else {
+            throw new ParseException("Unexpected character: " + c, i);
+        }
+
+        return i;
+    }
+
+    private void checkIncrementRange(int incr, int type, int idxPos) throws ParseException {
+        if (incr > 59 && (type == SECOND || type == MINUTE)) {
+            throw new ParseException("Increment > 60 : " + incr, idxPos);
+        } else if (incr > 23 && (type == HOUR)) {
+            throw new ParseException("Increment > 24 : " + incr, idxPos);
+        } else if (incr > 31 && (type == DAY_OF_MONTH)) {
+            throw new ParseException("Increment > 31 : " + incr, idxPos);
+        } else if (incr > 7 && (type == DAY_OF_WEEK)) {
+            throw new ParseException("Increment > 7 : " + incr, idxPos);
+        } else if (incr > 12 && (type == MONTH)) {
+            throw new ParseException("Increment > 12 : " + incr, idxPos);
+        }
+    }
+
+    protected int checkNext(int pos, String s, int val, int type)
+        throws ParseException {
+
+        int end = -1;
+        int i = pos;
+
+        if (i >= s.length()) {
+            addToSet(val, end, -1, type);
+            return i;
+        }
+
+        char c = s.charAt(pos);
+
+        if (c == 'L') {
+            if (type == DAY_OF_WEEK) {
+                if(val < 1 || val > 7)
+                    throw new ParseException("Day-of-Week values must be between 1 and 7", -1);
+                lastdayOfWeek = true;
+            } else {
+                throw new ParseException("'L' option is not valid here. (pos=" + i + ")", i);
+            }
+            TreeSet<Integer> set = getSet(type);
+            set.add(val);
+            i++;
+            return i;
+        }
+
+        if (c == 'W') {
+            if (type == DAY_OF_MONTH) {
+                nearestWeekday = true;
+            } else {
+                throw new ParseException("'W' option is not valid here. (pos=" + i + ")", i);
+            }
+            if(val > 31)
+                throw new ParseException("The 'W' option does not make sense with values larger than 31 (max number of days in a month)", i);
+            TreeSet<Integer> set = getSet(type);
+            set.add(val);
+            i++;
+            return i;
+        }
+
+        if (c == '#') {
+            if (type != DAY_OF_WEEK) {
+                throw new ParseException("'#' option is not valid here. (pos=" + i + ")", i);
+            }
+            i++;
+            try {
+                nthdayOfWeek = Integer.parseInt(s.substring(i));
+                if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
+                    throw new Exception();
+                }
+            } catch (Exception e) {
+                throw new ParseException(
+                        "A numeric value between 1 and 5 must follow the '#' option",
+                        i);
+            }
+
+            TreeSet<Integer> set = getSet(type);
+            set.add(val);
+            i++;
+            return i;
+        }
+
+        if (c == '-') {
+            i++;
+            c = s.charAt(i);
+            int v = Integer.parseInt(String.valueOf(c));
+            end = v;
+            i++;
+            if (i >= s.length()) {
+                addToSet(val, end, 1, type);
+                return i;
+            }
+            c = s.charAt(i);
+            if (c >= '0' && c <= '9') {
+                ValueSet vs = getValue(v, s, i);
+                end = vs.value;
+                i = vs.pos;
+            }
+            if (i < s.length() && ((c = s.charAt(i)) == '/')) {
+                i++;
+                c = s.charAt(i);
+                int v2 = Integer.parseInt(String.valueOf(c));
+                i++;
+                if (i >= s.length()) {
+                    addToSet(val, end, v2, type);
+                    return i;
+                }
+                c = s.charAt(i);
+                if (c >= '0' && c <= '9') {
+                    ValueSet vs = getValue(v2, s, i);
+                    int v3 = vs.value;
+                    addToSet(val, end, v3, type);
+                    i = vs.pos;
+                    return i;
+                } else {
+                    addToSet(val, end, v2, type);
+                    return i;
+                }
+            } else {
+                addToSet(val, end, 1, type);
+                return i;
+            }
+        }
+
+        if (c == '/') {
+            if ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s.charAt(i + 1) == '\t') {
+                throw new ParseException("'/' must be followed by an integer.", i);
+            }
+
+            i++;
+            c = s.charAt(i);
+            int v2 = Integer.parseInt(String.valueOf(c));
+            i++;
+            if (i >= s.length()) {
+                checkIncrementRange(v2, type, i);
+                addToSet(val, end, v2, type);
+                return i;
+            }
+            c = s.charAt(i);
+            if (c >= '0' && c <= '9') {
+                ValueSet vs = getValue(v2, s, i);
+                int v3 = vs.value;
+                checkIncrementRange(v3, type, i);
+                addToSet(val, end, v3, type);
+                i = vs.pos;
+                return i;
+            } else {
+                throw new ParseException("Unexpected character '" + c + "' after '/'", i);
+            }
+        }
+
+        addToSet(val, end, 0, type);
+        i++;
+        return i;
+    }
+
+    public String getCronExpression() {
+        return cronExpression;
+    }
+
+    public String getExpressionSummary() {
+        StringBuilder buf = new StringBuilder();
+
+        buf.append("seconds: ");
+        buf.append(getExpressionSetSummary(seconds));
+        buf.append("\n");
+        buf.append("minutes: ");
+        buf.append(getExpressionSetSummary(minutes));
+        buf.append("\n");
+        buf.append("hours: ");
+        buf.append(getExpressionSetSummary(hours));
+        buf.append("\n");
+        buf.append("daysOfMonth: ");
+        buf.append(getExpressionSetSummary(daysOfMonth));
+        buf.append("\n");
+        buf.append("months: ");
+        buf.append(getExpressionSetSummary(months));
+        buf.append("\n");
+        buf.append("daysOfWeek: ");
+        buf.append(getExpressionSetSummary(daysOfWeek));
+        buf.append("\n");
+        buf.append("lastdayOfWeek: ");
+        buf.append(lastdayOfWeek);
+        buf.append("\n");
+        buf.append("nearestWeekday: ");
+        buf.append(nearestWeekday);
+        buf.append("\n");
+        buf.append("NthDayOfWeek: ");
+        buf.append(nthdayOfWeek);
+        buf.append("\n");
+        buf.append("lastdayOfMonth: ");
+        buf.append(lastdayOfMonth);
+        buf.append("\n");
+        buf.append("years: ");
+        buf.append(getExpressionSetSummary(years));
+        buf.append("\n");
+
+        return buf.toString();
+    }
+
+    protected String getExpressionSetSummary(java.util.Set<Integer> set) {
+
+        if (set.contains(NO_SPEC)) {
+            return "?";
+        }
+        if (set.contains(ALL_SPEC)) {
+            return "*";
+        }
+
+        StringBuilder buf = new StringBuilder();
+
+        Iterator<Integer> itr = set.iterator();
+        boolean first = true;
+        while (itr.hasNext()) {
+            Integer iVal = itr.next();
+            String val = iVal.toString();
+            if (!first) {
+                buf.append(",");
+            }
+            buf.append(val);
+            first = false;
+        }
+
+        return buf.toString();
+    }
+
+    protected String getExpressionSetSummary(java.util.ArrayList<Integer> list) {
+
+        if (list.contains(NO_SPEC)) {
+            return "?";
+        }
+        if (list.contains(ALL_SPEC)) {
+            return "*";
+        }
+
+        StringBuilder buf = new StringBuilder();
+
+        Iterator<Integer> itr = list.iterator();
+        boolean first = true;
+        while (itr.hasNext()) {
+            Integer iVal = itr.next();
+            String val = iVal.toString();
+            if (!first) {
+                buf.append(",");
+            }
+            buf.append(val);
+            first = false;
+        }
+
+        return buf.toString();
+    }
+
+    protected int skipWhiteSpace(int i, String s) {
+        for (; i < s.length() && (s.charAt(i) == ' ' || s.charAt(i) == '\t'); i++) {
+        }
+
+        return i;
+    }
+
+    protected int findNextWhiteSpace(int i, String s) {
+        for (; i < s.length() && (s.charAt(i) != ' ' || s.charAt(i) != '\t'); i++) {
+        }
+
+        return i;
+    }
+
+    protected void addToSet(int val, int end, int incr, int type)
+        throws ParseException {
+
+        TreeSet<Integer> set = getSet(type);
+
+        if (type == SECOND || type == MINUTE) {
+            if ((val < 0 || val > 59 || end > 59) && (val != ALL_SPEC_INT)) {
+                throw new ParseException(
+                        "Minute and Second values must be between 0 and 59",
+                        -1);
+            }
+        } else if (type == HOUR) {
+            if ((val < 0 || val > 23 || end > 23) && (val != ALL_SPEC_INT)) {
+                throw new ParseException(
+                        "Hour values must be between 0 and 23", -1);
+            }
+        } else if (type == DAY_OF_MONTH) {
+            if ((val < 1 || val > 31 || end > 31) && (val != ALL_SPEC_INT)
+                    && (val != NO_SPEC_INT)) {
+                throw new ParseException(
+                        "Day of month values must be between 1 and 31", -1);
+            }
+        } else if (type == MONTH) {
+            if ((val < 1 || val > 12 || end > 12) && (val != ALL_SPEC_INT)) {
+                throw new ParseException(
+                        "Month values must be between 1 and 12", -1);
+            }
+        } else if (type == DAY_OF_WEEK) {
+            if ((val == 0 || val > 7 || end > 7) && (val != ALL_SPEC_INT)
+                    && (val != NO_SPEC_INT)) {
+                throw new ParseException(
+                        "Day-of-Week values must be between 1 and 7", -1);
+            }
+        }
+
+        if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) {
+            if (val != -1) {
+                set.add(val);
+            } else {
+                set.add(NO_SPEC);
+            }
+
+            return;
+        }
+
+        int startAt = val;
+        int stopAt = end;
+
+        if (val == ALL_SPEC_INT && incr <= 0) {
+            incr = 1;
+            set.add(ALL_SPEC); // put in a marker, but also fill values
+        }
+
+        if (type == SECOND || type == MINUTE) {
+            if (stopAt == -1) {
+                stopAt = 59;
+            }
+            if (startAt == -1 || startAt == ALL_SPEC_INT) {
+                startAt = 0;
+            }
+        } else if (type == HOUR) {
+            if (stopAt == -1) {
+                stopAt = 23;
+            }
+            if (startAt == -1 || startAt == ALL_SPEC_INT) {
+                startAt = 0;
+            }
+        } else if (type == DAY_OF_MONTH) {
+            if (stopAt == -1) {
+                stopAt = 31;
+            }
+            if (startAt == -1 || startAt == ALL_SPEC_INT) {
+                startAt = 1;
+            }
+        } else if (type == MONTH) {
+            if (stopAt == -1) {
+                stopAt = 12;
+            }
+            if (startAt == -1 || startAt == ALL_SPEC_INT) {
+                startAt = 1;
+            }
+        } else if (type == DAY_OF_WEEK) {
+            if (stopAt == -1) {
+                stopAt = 7;
+            }
+            if (startAt == -1 || startAt == ALL_SPEC_INT) {
+                startAt = 1;
+            }
+        } else if (type == YEAR) {
+            if (stopAt == -1) {
+                stopAt = MAX_YEAR;
+            }
+            if (startAt == -1 || startAt == ALL_SPEC_INT) {
+                startAt = 1970;
+            }
+        }
+
+        // if the end of the range is before the start, then we need to overflow into
+        // the next day, month etc. This is done by adding the maximum amount for that
+        // type, and using modulus max to determine the value being added.
+        int max = -1;
+        if (stopAt < startAt) {
+            switch (type) {
+              case       SECOND : max = 60; break;
+              case       MINUTE : max = 60; break;
+              case         HOUR : max = 24; break;
+              case        MONTH : max = 12; break;
+              case  DAY_OF_WEEK : max = 7;  break;
+              case DAY_OF_MONTH : max = 31; break;
+              case         YEAR : throw new IllegalArgumentException("Start year must be less than stop year");
+              default           : throw new IllegalArgumentException("Unexpected type encountered");
+            }
+            stopAt += max;
+        }
+
+        for (int i = startAt; i <= stopAt; i += incr) {
+            if (max == -1) {
+                // ie: there's no max to overflow over
+                set.add(i);
+            } else {
+                // take the modulus to get the real value
+                int i2 = i % max;
+
+                // 1-indexed ranges should not include 0, and should include their max
+                if (i2 == 0 && (type == MONTH || type == DAY_OF_WEEK || type == DAY_OF_MONTH) ) {
+                    i2 = max;
+                }
+
+                set.add(i2);
+            }
+        }
+    }
+
+    TreeSet<Integer> getSet(int type) {
+        switch (type) {
+            case SECOND:
+                return seconds;
+            case MINUTE:
+                return minutes;
+            case HOUR:
+                return hours;
+            case DAY_OF_MONTH:
+                return daysOfMonth;
+            case MONTH:
+                return months;
+            case DAY_OF_WEEK:
+                return daysOfWeek;
+            case YEAR:
+                return years;
+            default:
+                return null;
+        }
+    }
+
+    protected ValueSet getValue(int v, String s, int i) {
+        char c = s.charAt(i);
+        StringBuilder s1 = new StringBuilder(String.valueOf(v));
+        while (c >= '0' && c <= '9') {
+            s1.append(c);
+            i++;
+            if (i >= s.length()) {
+                break;
+            }
+            c = s.charAt(i);
+        }
+        ValueSet val = new ValueSet();
+
+        val.pos = (i < s.length()) ? i : i + 1;
+        val.value = Integer.parseInt(s1.toString());
+        return val;
+    }
+
+    protected int getNumericValue(String s, int i) {
+        int endOfVal = findNextWhiteSpace(i, s);
+        String val = s.substring(i, endOfVal);
+        return Integer.parseInt(val);
+    }
+
+    protected int getMonthNumber(String s) {
+        Integer integer = monthMap.get(s);
+
+        if (integer == null) {
+            return -1;
+        }
+
+        return integer;
+    }
+
+    protected int getDayOfWeekNumber(String s) {
+        Integer integer = dayMap.get(s);
+
+        if (integer == null) {
+            return -1;
+        }
+
+        return integer;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    //
+    // Computation Functions
+    //
+    ////////////////////////////////////////////////////////////////////////////
+
+    public Date getTimeAfter(Date afterTime) {
+
+        // Computation is based on Gregorian year only.
+        Calendar cl = new java.util.GregorianCalendar(getTimeZone());
+
+        // move ahead one second, since we're computing the time *after* the
+        // given time
+        afterTime = new Date(afterTime.getTime() + 1000);
+        // CronTrigger does not deal with milliseconds
+        cl.setTime(afterTime);
+        cl.set(Calendar.MILLISECOND, 0);
+
+        boolean gotOne = false;
+        // loop until we've computed the next time, or we've past the endTime
+        while (!gotOne) {
+
+            //if (endTime != null && cl.getTime().after(endTime)) return null;
+            if(cl.get(Calendar.YEAR) > 2999) { // prevent endless loop...
+                return null;
+            }
+
+            SortedSet<Integer> st = null;
+            int t = 0;
+
+            int sec = cl.get(Calendar.SECOND);
+            int min = cl.get(Calendar.MINUTE);
+
+            // get second.................................................
+            st = seconds.tailSet(sec);
+            if (st != null && st.size() != 0) {
+                sec = st.first();
+            } else {
+                sec = seconds.first();
+                min++;
+                cl.set(Calendar.MINUTE, min);
+            }
+            cl.set(Calendar.SECOND, sec);
+
+            min = cl.get(Calendar.MINUTE);
+            int hr = cl.get(Calendar.HOUR_OF_DAY);
+            t = -1;
+
+            // get minute.................................................
+            st = minutes.tailSet(min);
+            if (st != null && st.size() != 0) {
+                t = min;
+                min = st.first();
+            } else {
+                min = minutes.first();
+                hr++;
+            }
+            if (min != t) {
+                cl.set(Calendar.SECOND, 0);
+                cl.set(Calendar.MINUTE, min);
+                setCalendarHour(cl, hr);
+                continue;
+            }
+            cl.set(Calendar.MINUTE, min);
+
+            hr = cl.get(Calendar.HOUR_OF_DAY);
+            int day = cl.get(Calendar.DAY_OF_MONTH);
+            t = -1;
+
+            // get hour...................................................
+            st = hours.tailSet(hr);
+            if (st != null && st.size() != 0) {
+                t = hr;
+                hr = st.first();
+            } else {
+                hr = hours.first();
+                day++;
+            }
+            if (hr != t) {
+                cl.set(Calendar.SECOND, 0);
+                cl.set(Calendar.MINUTE, 0);
+                cl.set(Calendar.DAY_OF_MONTH, day);
+                setCalendarHour(cl, hr);
+                continue;
+            }
+            cl.set(Calendar.HOUR_OF_DAY, hr);
+
+            day = cl.get(Calendar.DAY_OF_MONTH);
+            int mon = cl.get(Calendar.MONTH) + 1;
+            // '+ 1' because calendar is 0-based for this field, and we are
+            // 1-based
+            t = -1;
+            int tmon = mon;
+
+            // get day...................................................
+            boolean dayOfMSpec = !daysOfMonth.contains(NO_SPEC);
+            boolean dayOfWSpec = !daysOfWeek.contains(NO_SPEC);
+            if (dayOfMSpec && !dayOfWSpec) { // get day by day of month rule
+                st = daysOfMonth.tailSet(day);
+                if (lastdayOfMonth) {
+                    if(!nearestWeekday) {
+                        t = day;
+                        day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
+                        day -= lastdayOffset;
+                        if(t > day) {
+                            mon++;
+                            if(mon > 12) {
+                                mon = 1;
+                                tmon = 3333; // ensure test of mon != tmon further below fails
+                                cl.add(Calendar.YEAR, 1);
+                            }
+                            day = 1;
+                        }
+                    } else {
+                        t = day;
+                        day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
+                        day -= lastdayOffset;
+
+                        java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
+                        tcal.set(Calendar.SECOND, 0);
+                        tcal.set(Calendar.MINUTE, 0);
+                        tcal.set(Calendar.HOUR_OF_DAY, 0);
+                        tcal.set(Calendar.DAY_OF_MONTH, day);
+                        tcal.set(Calendar.MONTH, mon - 1);
+                        tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
+
+                        int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
+                        int dow = tcal.get(Calendar.DAY_OF_WEEK);
+
+                        if(dow == Calendar.SATURDAY && day == 1) {
+                            day += 2;
+                        } else if(dow == Calendar.SATURDAY) {
+                            day -= 1;
+                        } else if(dow == Calendar.SUNDAY && day == ldom) {
+                            day -= 2;
+                        } else if(dow == Calendar.SUNDAY) {
+                            day += 1;
+                        }
+
+                        tcal.set(Calendar.SECOND, sec);
+                        tcal.set(Calendar.MINUTE, min);
+                        tcal.set(Calendar.HOUR_OF_DAY, hr);
+                        tcal.set(Calendar.DAY_OF_MONTH, day);
+                        tcal.set(Calendar.MONTH, mon - 1);
+                        Date nTime = tcal.getTime();
+                        if(nTime.before(afterTime)) {
+                            day = 1;
+                            mon++;
+                        }
+                    }
+                } else if(nearestWeekday) {
+                    t = day;
+                    day = daysOfMonth.first();
+
+                    java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
+                    tcal.set(Calendar.SECOND, 0);
+                    tcal.set(Calendar.MINUTE, 0);
+                    tcal.set(Calendar.HOUR_OF_DAY, 0);
+                    tcal.set(Calendar.DAY_OF_MONTH, day);
+                    tcal.set(Calendar.MONTH, mon - 1);
+                    tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
+
+                    int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
+                    int dow = tcal.get(Calendar.DAY_OF_WEEK);
+
+                    if(dow == Calendar.SATURDAY && day == 1) {
+                        day += 2;
+                    } else if(dow == Calendar.SATURDAY) {
+                        day -= 1;
+                    } else if(dow == Calendar.SUNDAY && day == ldom) {
+                        day -= 2;
+                    } else if(dow == Calendar.SUNDAY) {
+                        day += 1;
+                    }
+
+
+                    tcal.set(Calendar.SECOND, sec);
+                    tcal.set(Calendar.MINUTE, min);
+                    tcal.set(Calendar.HOUR_OF_DAY, hr);
+                    tcal.set(Calendar.DAY_OF_MONTH, day);
+                    tcal.set(Calendar.MONTH, mon - 1);
+                    Date nTime = tcal.getTime();
+                    if(nTime.before(afterTime)) {
+                        day = daysOfMonth.first();
+                        mon++;
+                    }
+                } else if (st != null && st.size() != 0) {
+                    t = day;
+                    day = st.first();
+                    // make sure we don't over-run a short month, such as february
+                    int lastDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
+                    if (day > lastDay) {
+                        day = daysOfMonth.first();
+                        mon++;
+                    }
+                } else {
+                    day = daysOfMonth.first();
+                    mon++;
+                }
+
+                if (day != t || mon != tmon) {
+                    cl.set(Calendar.SECOND, 0);
+                    cl.set(Calendar.MINUTE, 0);
+                    cl.set(Calendar.HOUR_OF_DAY, 0);
+                    cl.set(Calendar.DAY_OF_MONTH, day);
+                    cl.set(Calendar.MONTH, mon - 1);
+                    // '- 1' because calendar is 0-based for this field, and we
+                    // are 1-based
+                    continue;
+                }
+            } else if (dayOfWSpec && !dayOfMSpec) { // get day by day of week rule
+                if (lastdayOfWeek) { // are we looking for the last XXX day of
+                    // the month?
+                    int dow = daysOfWeek.first(); // desired
+                    // d-o-w
+                    int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
+                    int daysToAdd = 0;
+                    if (cDow < dow) {
+                        daysToAdd = dow - cDow;
+                    }
+                    if (cDow > dow) {
+                        daysToAdd = dow + (7 - cDow);
+                    }
+
+                    int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
+
+                    if (day + daysToAdd > lDay) { // did we already miss the
+                        // last one?
+                        cl.set(Calendar.SECOND, 0);
+                        cl.set(Calendar.MINUTE, 0);
+                        cl.set(Calendar.HOUR_OF_DAY, 0);
+                        cl.set(Calendar.DAY_OF_MONTH, 1);
+                        cl.set(Calendar.MONTH, mon);
+                        // no '- 1' here because we are promoting the month
+                        continue;
+                    }
+
+                    // find date of last occurrence of this day in this month...
+                    while ((day + daysToAdd + 7) <= lDay) {
+                        daysToAdd += 7;
+                    }
+
+                    day += daysToAdd;
+
+                    if (daysToAdd > 0) {
+                        cl.set(Calendar.SECOND, 0);
+                        cl.set(Calendar.MINUTE, 0);
+                        cl.set(Calendar.HOUR_OF_DAY, 0);
+                        cl.set(Calendar.DAY_OF_MONTH, day);
+                        cl.set(Calendar.MONTH, mon - 1);
+                        // '- 1' here because we are not promoting the month
+                        continue;
+                    }
+
+                } else if (nthdayOfWeek != 0) {
+                    // are we looking for the Nth XXX day in the month?
+                    int dow = daysOfWeek.first(); // desired
+                    // d-o-w
+                    int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
+                    int daysToAdd = 0;
+                    if (cDow < dow) {
+                        daysToAdd = dow - cDow;
+                    } else if (cDow > dow) {
+                        daysToAdd = dow + (7 - cDow);
+                    }
+
+                    boolean dayShifted = false;
+                    if (daysToAdd > 0) {
+                        dayShifted = true;
+                    }
+
+                    day += daysToAdd;
+                    int weekOfMonth = day / 7;
+                    if (day % 7 > 0) {
+                        weekOfMonth++;
+                    }
+
+                    daysToAdd = (nthdayOfWeek - weekOfMonth) * 7;
+                    day += daysToAdd;
+                    if (daysToAdd < 0
+                            || day > getLastDayOfMonth(mon, cl
+                                    .get(Calendar.YEAR))) {
+                        cl.set(Calendar.SECOND, 0);
+                        cl.set(Calendar.MINUTE, 0);
+                        cl.set(Calendar.HOUR_OF_DAY, 0);
+                        cl.set(Calendar.DAY_OF_MONTH, 1);
+                        cl.set(Calendar.MONTH, mon);
+                        // no '- 1' here because we are promoting the month
+                        continue;
+                    } else if (daysToAdd > 0 || dayShifted) {
+                        cl.set(Calendar.SECOND, 0);
+                        cl.set(Calendar.MINUTE, 0);
+                        cl.set(Calendar.HOUR_OF_DAY, 0);
+                        cl.set(Calendar.DAY_OF_MONTH, day);
+                        cl.set(Calendar.MONTH, mon - 1);
+                        // '- 1' here because we are NOT promoting the month
+                        continue;
+                    }
+                } else {
+                    int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
+                    int dow = daysOfWeek.first(); // desired
+                    // d-o-w
+                    st = daysOfWeek.tailSet(cDow);
+                    if (st != null && st.size() > 0) {
+                        dow = st.first();
+                    }
+
+                    int daysToAdd = 0;
+                    if (cDow < dow) {
+                        daysToAdd = dow - cDow;
+                    }
+                    if (cDow > dow) {
+                        daysToAdd = dow + (7 - cDow);
+                    }
+
+                    int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
+
+                    if (day + daysToAdd > lDay) { // will we pass the end of
+                        // the month?
+                        cl.set(Calendar.SECOND, 0);
+                        cl.set(Calendar.MINUTE, 0);
+                        cl.set(Calendar.HOUR_OF_DAY, 0);
+                        cl.set(Calendar.DAY_OF_MONTH, 1);
+                        cl.set(Calendar.MONTH, mon);
+                        // no '- 1' here because we are promoting the month
+                        continue;
+                    } else if (daysToAdd > 0) { // are we swithing days?
+                        cl.set(Calendar.SECOND, 0);
+                        cl.set(Calendar.MINUTE, 0);
+                        cl.set(Calendar.HOUR_OF_DAY, 0);
+                        cl.set(Calendar.DAY_OF_MONTH, day + daysToAdd);
+                        cl.set(Calendar.MONTH, mon - 1);
+                        // '- 1' because calendar is 0-based for this field,
+                        // and we are 1-based
+                        continue;
+                    }
+                }
+            } else { // dayOfWSpec && !dayOfMSpec
+                throw new UnsupportedOperationException(
+                        "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.");
+            }
+            cl.set(Calendar.DAY_OF_MONTH, day);
+
+            mon = cl.get(Calendar.MONTH) + 1;
+            // '+ 1' because calendar is 0-based for this field, and we are
+            // 1-based
+            int year = cl.get(Calendar.YEAR);
+            t = -1;
+
+            // test for expressions that never generate a valid fire date,
+            // but keep looping...
+            if (year > MAX_YEAR) {
+                return null;
+            }
+
+            // get month...................................................
+            st = months.tailSet(mon);
+            if (st != null && st.size() != 0) {
+                t = mon;
+                mon = st.first();
+            } else {
+                mon = months.first();
+                year++;
+            }
+            if (mon != t) {
+                cl.set(Calendar.SECOND, 0);
+                cl.set(Calendar.MINUTE, 0);
+                cl.set(Calendar.HOUR_OF_DAY, 0);
+                cl.set(Calendar.DAY_OF_MONTH, 1);
+                cl.set(Calendar.MONTH, mon - 1);
+                // '- 1' because calendar is 0-based for this field, and we are
+                // 1-based
+                cl.set(Calendar.YEAR, year);
+                continue;
+            }
+            cl.set(Calendar.MONTH, mon - 1);
+            // '- 1' because calendar is 0-based for this field, and we are
+            // 1-based
+
+            year = cl.get(Calendar.YEAR);
+            t = -1;
+
+            // get year...................................................
+            st = years.tailSet(year);
+            if (st != null && st.size() != 0) {
+                t = year;
+                year = st.first();
+            } else {
+                return null; // ran out of years...
+            }
+
+            if (year != t) {
+                cl.set(Calendar.SECOND, 0);
+                cl.set(Calendar.MINUTE, 0);
+                cl.set(Calendar.HOUR_OF_DAY, 0);
+                cl.set(Calendar.DAY_OF_MONTH, 1);
+                cl.set(Calendar.MONTH, 0);
+                // '- 1' because calendar is 0-based for this field, and we are
+                // 1-based
+                cl.set(Calendar.YEAR, year);
+                continue;
+            }
+            cl.set(Calendar.YEAR, year);
+
+            gotOne = true;
+        } // while( !done )
+
+        return cl.getTime();
+    }
+
+    /**
+     * Advance the calendar to the particular hour paying particular attention
+     * to daylight saving problems.
+     *
+     * @param cal the calendar to operate on
+     * @param hour the hour to set
+     */
+    protected void setCalendarHour(Calendar cal, int hour) {
+        cal.set(java.util.Calendar.HOUR_OF_DAY, hour);
+        if (cal.get(java.util.Calendar.HOUR_OF_DAY) != hour && hour != 24) {
+            cal.set(java.util.Calendar.HOUR_OF_DAY, hour + 1);
+        }
+    }
+
+    /**
+     * NOT YET IMPLEMENTED: Returns the time before the given time
+     * that the <code>CronExpression</code> matches.
+     */
+    public Date getTimeBefore(Date endTime) {
+        // FUTURE_TODO: implement QUARTZ-423
+        return null;
+    }
+
+    /**
+     * NOT YET IMPLEMENTED: Returns the final time that the
+     * <code>CronExpression</code> will match.
+     */
+    public Date getFinalFireTime() {
+        // FUTURE_TODO: implement QUARTZ-423
+        return null;
+    }
+
+    protected boolean isLeapYear(int year) {
+        return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
+    }
+
+    protected int getLastDayOfMonth(int monthNum, int year) {
+
+        switch (monthNum) {
+            case 1:
+                return 31;
+            case 2:
+                return (isLeapYear(year)) ? 29 : 28;
+            case 3:
+                return 31;
+            case 4:
+                return 30;
+            case 5:
+                return 31;
+            case 6:
+                return 30;
+            case 7:
+                return 31;
+            case 8:
+                return 31;
+            case 9:
+                return 30;
+            case 10:
+                return 31;
+            case 11:
+                return 30;
+            case 12:
+                return 31;
+            default:
+                throw new IllegalArgumentException("Illegal month number: "
+                        + monthNum);
+        }
+    }
+
+
+    private void readObject(java.io.ObjectInputStream stream)
+        throws java.io.IOException, ClassNotFoundException {
+
+        stream.defaultReadObject();
+        try {
+            buildExpression(cronExpression);
+        } catch (Exception ignore) {
+        } // never happens
+    }
+
+    @Override
+    @Deprecated
+    public Object clone() {
+        return new CronExpression(this);
+    }
+}
+
+class ValueSet {
+    public int value;
+
+    public int pos;
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/exception/XxlJobException.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/exception/XxlJobException.java
new file mode 100644
index 0000000..5199bb3
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/exception/XxlJobException.java
@@ -0,0 +1,14 @@
+package com.vci.ubcs.xxl.job.admin.core.exception;
+
+/**
+ * @author xuxueli 2019-05-04 23:19:29
+ */
+public class XxlJobException extends RuntimeException {
+
+    public XxlJobException() {
+    }
+    public XxlJobException(String message) {
+        super(message);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobGroup.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobGroup.java
new file mode 100644
index 0000000..181a408
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobGroup.java
@@ -0,0 +1,76 @@
+package com.vci.ubcs.xxl.job.admin.core.model;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by xuxueli on 16/9/30.
+ */
+public class XxlJobGroup {
+
+    private int id;
+    private String appName;
+    private String title;
+    private int order;
+    private int addressType;        // 鎵ц鍣ㄥ湴鍧�绫诲瀷锛�0=鑷姩娉ㄥ唽銆�1=鎵嬪姩褰曞叆
+    private String addressList;     // 鎵ц鍣ㄥ湴鍧�鍒楄〃锛屽鍦板潃閫楀彿鍒嗛殧(鎵嬪姩褰曞叆)
+
+    // registry list
+    private List<String> registryList;  // 鎵ц鍣ㄥ湴鍧�鍒楄〃(绯荤粺娉ㄥ唽)
+    public List<String> getRegistryList() {
+        if (addressList!=null && addressList.trim().length()>0) {
+            registryList = new ArrayList<String>(Arrays.asList(addressList.split(",")));
+        }
+        return registryList;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getAppName() {
+        return appName;
+    }
+
+    public void setAppName(String appName) {
+        this.appName = appName;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public int getOrder() {
+        return order;
+    }
+
+    public void setOrder(int order) {
+        this.order = order;
+    }
+
+    public int getAddressType() {
+        return addressType;
+    }
+
+    public void setAddressType(int addressType) {
+        this.addressType = addressType;
+    }
+
+    public String getAddressList() {
+        return addressList;
+    }
+
+    public void setAddressList(String addressList) {
+        this.addressList = addressList;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobInfo.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobInfo.java
new file mode 100644
index 0000000..7355fe5
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobInfo.java
@@ -0,0 +1,218 @@
+package com.vci.ubcs.xxl.job.admin.core.model;
+
+import java.util.Date;
+
+/**
+ * xxl-job info
+ *
+ * @author xuxueli  2016-1-12 18:25:49
+ */
+public class XxlJobInfo {
+
+	private int id;				// 涓婚敭ID
+
+	private int jobGroup;		// 鎵ц鍣ㄤ富閿甀D
+	private String jobCron;		// 浠诲姟鎵цCRON琛ㄨ揪寮�
+	private String jobDesc;
+
+	private Date addTime;
+	private Date updateTime;
+
+	private String author;		// 璐熻矗浜�
+	private String alarmEmail;	// 鎶ヨ閭欢
+
+	private String executorRouteStrategy;	// 鎵ц鍣ㄨ矾鐢辩瓥鐣�
+	private String executorHandler;		    // 鎵ц鍣紝浠诲姟Handler鍚嶇О
+	private String executorParam;		    // 鎵ц鍣紝浠诲姟鍙傛暟
+	private String executorBlockStrategy;	// 闃诲澶勭悊绛栫暐
+	private int executorTimeout;     		// 浠诲姟鎵ц瓒呮椂鏃堕棿锛屽崟浣嶇
+	private int executorFailRetryCount;		// 澶辫触閲嶈瘯娆℃暟
+
+	private String glueType;		// GLUE绫诲瀷	#com.xxl.job.core.glue.GlueTypeEnum
+	private String glueSource;		// GLUE婧愪唬鐮�
+	private String glueRemark;		// GLUE澶囨敞
+	private Date glueUpdatetime;	// GLUE鏇存柊鏃堕棿
+
+	private String childJobId;		// 瀛愪换鍔D锛屽涓�楀彿鍒嗛殧
+
+	private int triggerStatus;		// 璋冨害鐘舵�侊細0-鍋滄锛�1-杩愯
+	private long triggerLastTime;	// 涓婃璋冨害鏃堕棿
+	private long triggerNextTime;	// 涓嬫璋冨害鏃堕棿
+
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public int getJobGroup() {
+		return jobGroup;
+	}
+
+	public void setJobGroup(int jobGroup) {
+		this.jobGroup = jobGroup;
+	}
+
+	public String getJobCron() {
+		return jobCron;
+	}
+
+	public void setJobCron(String jobCron) {
+		this.jobCron = jobCron;
+	}
+
+	public String getJobDesc() {
+		return jobDesc;
+	}
+
+	public void setJobDesc(String jobDesc) {
+		this.jobDesc = jobDesc;
+	}
+
+	public Date getAddTime() {
+		return addTime;
+	}
+
+	public void setAddTime(Date addTime) {
+		this.addTime = addTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getAuthor() {
+		return author;
+	}
+
+	public void setAuthor(String author) {
+		this.author = author;
+	}
+
+	public String getAlarmEmail() {
+		return alarmEmail;
+	}
+
+	public void setAlarmEmail(String alarmEmail) {
+		this.alarmEmail = alarmEmail;
+	}
+
+	public String getExecutorRouteStrategy() {
+		return executorRouteStrategy;
+	}
+
+	public void setExecutorRouteStrategy(String executorRouteStrategy) {
+		this.executorRouteStrategy = executorRouteStrategy;
+	}
+
+	public String getExecutorHandler() {
+		return executorHandler;
+	}
+
+	public void setExecutorHandler(String executorHandler) {
+		this.executorHandler = executorHandler;
+	}
+
+	public String getExecutorParam() {
+		return executorParam;
+	}
+
+	public void setExecutorParam(String executorParam) {
+		this.executorParam = executorParam;
+	}
+
+	public String getExecutorBlockStrategy() {
+		return executorBlockStrategy;
+	}
+
+	public void setExecutorBlockStrategy(String executorBlockStrategy) {
+		this.executorBlockStrategy = executorBlockStrategy;
+	}
+
+	public int getExecutorTimeout() {
+		return executorTimeout;
+	}
+
+	public void setExecutorTimeout(int executorTimeout) {
+		this.executorTimeout = executorTimeout;
+	}
+
+	public int getExecutorFailRetryCount() {
+		return executorFailRetryCount;
+	}
+
+	public void setExecutorFailRetryCount(int executorFailRetryCount) {
+		this.executorFailRetryCount = executorFailRetryCount;
+	}
+
+	public String getGlueType() {
+		return glueType;
+	}
+
+	public void setGlueType(String glueType) {
+		this.glueType = glueType;
+	}
+
+	public String getGlueSource() {
+		return glueSource;
+	}
+
+	public void setGlueSource(String glueSource) {
+		this.glueSource = glueSource;
+	}
+
+	public String getGlueRemark() {
+		return glueRemark;
+	}
+
+	public void setGlueRemark(String glueRemark) {
+		this.glueRemark = glueRemark;
+	}
+
+	public Date getGlueUpdatetime() {
+		return glueUpdatetime;
+	}
+
+	public void setGlueUpdatetime(Date glueUpdatetime) {
+		this.glueUpdatetime = glueUpdatetime;
+	}
+
+	public String getChildJobId() {
+		return childJobId;
+	}
+
+	public void setChildJobId(String childJobId) {
+		this.childJobId = childJobId;
+	}
+
+	public int getTriggerStatus() {
+		return triggerStatus;
+	}
+
+	public void setTriggerStatus(int triggerStatus) {
+		this.triggerStatus = triggerStatus;
+	}
+
+	public long getTriggerLastTime() {
+		return triggerLastTime;
+	}
+
+	public void setTriggerLastTime(long triggerLastTime) {
+		this.triggerLastTime = triggerLastTime;
+	}
+
+	public long getTriggerNextTime() {
+		return triggerNextTime;
+	}
+
+	public void setTriggerNextTime(long triggerNextTime) {
+		this.triggerNextTime = triggerNextTime;
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLog.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLog.java
new file mode 100644
index 0000000..6deb994
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLog.java
@@ -0,0 +1,157 @@
+package com.vci.ubcs.xxl.job.admin.core.model;
+
+import java.util.Date;
+
+/**
+ * xxl-job log, used to track trigger process
+ * @author xuxueli  2015-12-19 23:19:09
+ */
+public class XxlJobLog {
+
+	private long id;
+
+	// job info
+	private int jobGroup;
+	private int jobId;
+
+	// execute info
+	private String executorAddress;
+	private String executorHandler;
+	private String executorParam;
+	private String executorShardingParam;
+	private int executorFailRetryCount;
+
+	// trigger info
+	private Date triggerTime;
+	private int triggerCode;
+	private String triggerMsg;
+
+	// handle info
+	private Date handleTime;
+	private int handleCode;
+	private String handleMsg;
+
+	// alarm info
+	private int alarmStatus;
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public int getJobGroup() {
+		return jobGroup;
+	}
+
+	public void setJobGroup(int jobGroup) {
+		this.jobGroup = jobGroup;
+	}
+
+	public int getJobId() {
+		return jobId;
+	}
+
+	public void setJobId(int jobId) {
+		this.jobId = jobId;
+	}
+
+	public String getExecutorAddress() {
+		return executorAddress;
+	}
+
+	public void setExecutorAddress(String executorAddress) {
+		this.executorAddress = executorAddress;
+	}
+
+	public String getExecutorHandler() {
+		return executorHandler;
+	}
+
+	public void setExecutorHandler(String executorHandler) {
+		this.executorHandler = executorHandler;
+	}
+
+	public String getExecutorParam() {
+		return executorParam;
+	}
+
+	public void setExecutorParam(String executorParam) {
+		this.executorParam = executorParam;
+	}
+
+	public String getExecutorShardingParam() {
+		return executorShardingParam;
+	}
+
+	public void setExecutorShardingParam(String executorShardingParam) {
+		this.executorShardingParam = executorShardingParam;
+	}
+
+	public int getExecutorFailRetryCount() {
+		return executorFailRetryCount;
+	}
+
+	public void setExecutorFailRetryCount(int executorFailRetryCount) {
+		this.executorFailRetryCount = executorFailRetryCount;
+	}
+
+	public Date getTriggerTime() {
+		return triggerTime;
+	}
+
+	public void setTriggerTime(Date triggerTime) {
+		this.triggerTime = triggerTime;
+	}
+
+	public int getTriggerCode() {
+		return triggerCode;
+	}
+
+	public void setTriggerCode(int triggerCode) {
+		this.triggerCode = triggerCode;
+	}
+
+	public String getTriggerMsg() {
+		return triggerMsg;
+	}
+
+	public void setTriggerMsg(String triggerMsg) {
+		this.triggerMsg = triggerMsg;
+	}
+
+	public Date getHandleTime() {
+		return handleTime;
+	}
+
+	public void setHandleTime(Date handleTime) {
+		this.handleTime = handleTime;
+	}
+
+	public int getHandleCode() {
+		return handleCode;
+	}
+
+	public void setHandleCode(int handleCode) {
+		this.handleCode = handleCode;
+	}
+
+	public String getHandleMsg() {
+		return handleMsg;
+	}
+
+	public void setHandleMsg(String handleMsg) {
+		this.handleMsg = handleMsg;
+	}
+
+	public int getAlarmStatus() {
+		return alarmStatus;
+	}
+
+	public void setAlarmStatus(int alarmStatus) {
+		this.alarmStatus = alarmStatus;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogGlue.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogGlue.java
new file mode 100644
index 0000000..716d37c
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogGlue.java
@@ -0,0 +1,75 @@
+package com.vci.ubcs.xxl.job.admin.core.model;
+
+import java.util.Date;
+
+/**
+ * xxl-job log for glue, used to track job code process
+ * @author xuxueli 2016-5-19 17:57:46
+ */
+public class XxlJobLogGlue {
+
+	private int id;
+	private int jobId;				// 浠诲姟涓婚敭ID
+	private String glueType;		// GLUE绫诲瀷	#com.xxl.job.core.glue.GlueTypeEnum
+	private String glueSource;
+	private String glueRemark;
+	private Date addTime;
+	private Date updateTime;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public int getJobId() {
+		return jobId;
+	}
+
+	public void setJobId(int jobId) {
+		this.jobId = jobId;
+	}
+
+	public String getGlueType() {
+		return glueType;
+	}
+
+	public void setGlueType(String glueType) {
+		this.glueType = glueType;
+	}
+
+	public String getGlueSource() {
+		return glueSource;
+	}
+
+	public void setGlueSource(String glueSource) {
+		this.glueSource = glueSource;
+	}
+
+	public String getGlueRemark() {
+		return glueRemark;
+	}
+
+	public void setGlueRemark(String glueRemark) {
+		this.glueRemark = glueRemark;
+	}
+
+	public Date getAddTime() {
+		return addTime;
+	}
+
+	public void setAddTime(Date addTime) {
+		this.addTime = addTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogReport.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogReport.java
new file mode 100644
index 0000000..f7d58d0
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogReport.java
@@ -0,0 +1,54 @@
+package com.vci.ubcs.xxl.job.admin.core.model;
+
+import java.util.Date;
+
+public class XxlJobLogReport {
+
+    private int id;
+
+    private Date triggerDay;
+
+    private int runningCount;
+    private int sucCount;
+    private int failCount;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public Date getTriggerDay() {
+        return triggerDay;
+    }
+
+    public void setTriggerDay(Date triggerDay) {
+        this.triggerDay = triggerDay;
+    }
+
+    public int getRunningCount() {
+        return runningCount;
+    }
+
+    public void setRunningCount(int runningCount) {
+        this.runningCount = runningCount;
+    }
+
+    public int getSucCount() {
+        return sucCount;
+    }
+
+    public void setSucCount(int sucCount) {
+        this.sucCount = sucCount;
+    }
+
+    public int getFailCount() {
+        return failCount;
+    }
+
+    public void setFailCount(int failCount) {
+        this.failCount = failCount;
+    }
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobRegistry.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobRegistry.java
new file mode 100644
index 0000000..ab41d5b
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobRegistry.java
@@ -0,0 +1,55 @@
+package com.vci.ubcs.xxl.job.admin.core.model;
+
+import java.util.Date;
+
+/**
+ * Created by xuxueli on 16/9/30.
+ */
+public class XxlJobRegistry {
+
+    private int id;
+    private String registryGroup;
+    private String registryKey;
+    private String registryValue;
+    private Date updateTime;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getRegistryGroup() {
+        return registryGroup;
+    }
+
+    public void setRegistryGroup(String registryGroup) {
+        this.registryGroup = registryGroup;
+    }
+
+    public String getRegistryKey() {
+        return registryKey;
+    }
+
+    public void setRegistryKey(String registryKey) {
+        this.registryKey = registryKey;
+    }
+
+    public String getRegistryValue() {
+        return registryValue;
+    }
+
+    public void setRegistryValue(String registryValue) {
+        this.registryValue = registryValue;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobUser.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobUser.java
new file mode 100644
index 0000000..85c9951
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobUser.java
@@ -0,0 +1,73 @@
+package com.vci.ubcs.xxl.job.admin.core.model;
+
+import org.springframework.util.StringUtils;
+
+/**
+ * @author xuxueli 2019-05-04 16:43:12
+ */
+public class XxlJobUser {
+
+	private int id;
+	private String username;		// 璐﹀彿
+	private String password;		// 瀵嗙爜
+	private int role;				// 瑙掕壊锛�0-鏅�氱敤鎴枫��1-绠$悊鍛�
+	private String permission;	// 鏉冮檺锛氭墽琛屽櫒ID鍒楄〃锛屽涓�楀彿鍒嗗壊
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public int getRole() {
+		return role;
+	}
+
+	public void setRole(int role) {
+		this.role = role;
+	}
+
+	public String getPermission() {
+		return permission;
+	}
+
+	public void setPermission(String permission) {
+		this.permission = permission;
+	}
+
+	// plugin
+	public boolean validPermission(int jobGroup){
+		if (this.role == 1) {
+			return true;
+		} else {
+			if (StringUtils.hasText(this.permission)) {
+				for (String permissionItem : this.permission.split(",")) {
+					if (String.valueOf(jobGroup).equals(permissionItem)) {
+						return true;
+					}
+				}
+			}
+			return false;
+		}
+
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/RemoteHttpJobBean.java
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/RemoteHttpJobBean.java
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobThreadPool.java
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobThreadPool.java
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
new file mode 100644
index 0000000..c555c3a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
@@ -0,0 +1,48 @@
+package com.vci.ubcs.xxl.job.admin.core.route;
+
+import com.vci.ubcs.xxl.job.admin.core.route.strategy.*;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public enum ExecutorRouteStrategyEnum {
+
+    FIRST(I18nUtil.getString("jobconf_route_first"), new ExecutorRouteFirst()),
+    LAST(I18nUtil.getString("jobconf_route_last"), new ExecutorRouteLast()),
+    ROUND(I18nUtil.getString("jobconf_route_round"), new ExecutorRouteRound()),
+    RANDOM(I18nUtil.getString("jobconf_route_random"), new ExecutorRouteRandom()),
+    CONSISTENT_HASH(I18nUtil.getString("jobconf_route_consistenthash"), new ExecutorRouteConsistentHash()),
+    LEAST_FREQUENTLY_USED(I18nUtil.getString("jobconf_route_lfu"), new ExecutorRouteLFU()),
+    LEAST_RECENTLY_USED(I18nUtil.getString("jobconf_route_lru"), new ExecutorRouteLRU()),
+    FAILOVER(I18nUtil.getString("jobconf_route_failover"), new ExecutorRouteFailover()),
+    BUSYOVER(I18nUtil.getString("jobconf_route_busyover"), new ExecutorRouteBusyover()),
+    SHARDING_BROADCAST(I18nUtil.getString("jobconf_route_shard"), null);
+
+    ExecutorRouteStrategyEnum(String title, ExecutorRouter router) {
+        this.title = title;
+        this.router = router;
+    }
+
+    private String title;
+    private ExecutorRouter router;
+
+    public String getTitle() {
+        return title;
+    }
+    public ExecutorRouter getRouter() {
+        return router;
+    }
+
+    public static ExecutorRouteStrategyEnum match(String name, ExecutorRouteStrategyEnum defaultItem){
+        if (name != null) {
+            for (ExecutorRouteStrategyEnum item: ExecutorRouteStrategyEnum.values()) {
+                if (item.name().equals(name)) {
+                    return item;
+                }
+            }
+        }
+        return defaultItem;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouter.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouter.java
new file mode 100644
index 0000000..4b6e135
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouter.java
@@ -0,0 +1,24 @@
+package com.vci.ubcs.xxl.job.admin.core.route;
+
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public abstract class ExecutorRouter {
+    protected static Logger logger = LoggerFactory.getLogger(ExecutorRouter.class);
+
+    /**
+     * route address
+     *
+     * @param addressList
+     * @return  ReturnT.content=address
+     */
+    public abstract ReturnT<String> route(TriggerParam triggerParam, List<String> addressList);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
new file mode 100644
index 0000000..80e2876
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
@@ -0,0 +1,47 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.scheduler.XxlJobScheduler;
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.xxl.job.core.biz.ExecutorBiz;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.List;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteBusyover extends ExecutorRouter {
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+        StringBuffer idleBeatResultSB = new StringBuffer();
+        for (String address : addressList) {
+            // beat
+            ReturnT<String> idleBeatResult = null;
+            try {
+                ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
+                idleBeatResult = executorBiz.idleBeat(triggerParam.getJobId());
+            } catch (Exception e) {
+                logger.error(e.getMessage(), e);
+                idleBeatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
+            }
+            idleBeatResultSB.append( (idleBeatResultSB.length()>0)?"<br><br>":"")
+                    .append(I18nUtil.getString("jobconf_idleBeat") + "锛�")
+                    .append("<br>address锛�").append(address)
+                    .append("<br>code锛�").append(idleBeatResult.getCode())
+                    .append("<br>msg锛�").append(idleBeatResult.getMsg());
+
+            // beat success
+            if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
+                idleBeatResult.setMsg(idleBeatResultSB.toString());
+                idleBeatResult.setContent(address);
+                return idleBeatResult;
+            }
+        }
+
+        return new ReturnT<String>(ReturnT.FAIL_CODE, idleBeatResultSB.toString());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
new file mode 100644
index 0000000..3aad110
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
@@ -0,0 +1,85 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * 鍒嗙粍涓嬫満鍣ㄥ湴鍧�鐩稿悓锛屼笉鍚孞OB鍧囧寑鏁e垪鍦ㄤ笉鍚屾満鍣ㄤ笂锛屼繚璇佸垎缁勪笅鏈哄櫒鍒嗛厤JOB骞冲潎锛涗笖姣忎釜JOB鍥哄畾璋冨害鍏朵腑涓�鍙版満鍣紱
+ *      a銆乿irtual node锛氳В鍐充笉鍧囪 闂
+ *      b銆乭ash method replace hashCode锛歋tring鐨刪ashCode鍙兘閲嶅锛岄渶瑕佽繘涓�姝ユ墿澶ashCode鐨勫彇鍊艰寖鍥�
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteConsistentHash extends ExecutorRouter {
+
+    private static int VIRTUAL_NODE_NUM = 5;
+
+    /**
+     * get hash code on 2^32 ring (md5鏁e垪鐨勬柟寮忚绠梙ash鍊�)
+     * @param key
+     * @return
+     */
+    private static long hash(String key) {
+
+        // md5 byte
+        MessageDigest md5;
+        try {
+            md5 = MessageDigest.getInstance("MD5");
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("MD5 not supported", e);
+        }
+        md5.reset();
+        byte[] keyBytes = null;
+        try {
+            keyBytes = key.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException("Unknown string :" + key, e);
+        }
+
+        md5.update(keyBytes);
+        byte[] digest = md5.digest();
+
+        // hash code, Truncate to 32-bits
+        long hashCode = ((long) (digest[3] & 0xFF) << 24)
+                | ((long) (digest[2] & 0xFF) << 16)
+                | ((long) (digest[1] & 0xFF) << 8)
+                | (digest[0] & 0xFF);
+
+        long truncateHashCode = hashCode & 0xffffffffL;
+        return truncateHashCode;
+    }
+
+    public String hashJob(int jobId, List<String> addressList) {
+
+        // ------A1------A2-------A3------
+        // -----------J1------------------
+        TreeMap<Long, String> addressRing = new TreeMap<Long, String>();
+        for (String address: addressList) {
+            for (int i = 0; i < VIRTUAL_NODE_NUM; i++) {
+                long addressHash = hash("SHARD-" + address + "-NODE-" + i);
+                addressRing.put(addressHash, address);
+            }
+        }
+
+        long jobHash = hash(String.valueOf(jobId));
+        SortedMap<Long, String> lastRing = addressRing.tailMap(jobHash);
+        if (!lastRing.isEmpty()) {
+            return lastRing.get(lastRing.firstKey());
+        }
+        return addressRing.firstEntry().getValue();
+    }
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+        String address = hashJob(triggerParam.getJobId(), addressList);
+        return new ReturnT<String>(address);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
new file mode 100644
index 0000000..478d0d1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
@@ -0,0 +1,48 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.scheduler.XxlJobScheduler;
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.xxl.job.core.biz.ExecutorBiz;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.List;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteFailover extends ExecutorRouter {
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+
+        StringBuffer beatResultSB = new StringBuffer();
+        for (String address : addressList) {
+            // beat
+            ReturnT<String> beatResult = null;
+            try {
+                ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
+                beatResult = executorBiz.beat();
+            } catch (Exception e) {
+                logger.error(e.getMessage(), e);
+                beatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
+            }
+            beatResultSB.append( (beatResultSB.length()>0)?"<br><br>":"")
+                    .append(I18nUtil.getString("jobconf_beat") + "锛�")
+                    .append("<br>address锛�").append(address)
+                    .append("<br>code锛�").append(beatResult.getCode())
+                    .append("<br>msg锛�").append(beatResult.getMsg());
+
+            // beat success
+            if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
+
+                beatResult.setMsg(beatResultSB.toString());
+                beatResult.setContent(address);
+                return beatResult;
+            }
+        }
+        return new ReturnT<String>(ReturnT.FAIL_CODE, beatResultSB.toString());
+
+    }
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
new file mode 100644
index 0000000..97379f2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
@@ -0,0 +1,19 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.List;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteFirst extends ExecutorRouter {
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList){
+        return new ReturnT<String>(addressList.get(0));
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
new file mode 100644
index 0000000..f8752e1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
@@ -0,0 +1,79 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * 鍗曚釜JOB瀵瑰簲鐨勬瘡涓墽琛屽櫒锛屼娇鐢ㄩ鐜囨渶浣庣殑浼樺厛琚�変妇
+ *      a(*)銆丩FU(Least Frequently Used)锛氭渶涓嶇粡甯镐娇鐢紝棰戠巼/娆℃暟
+ *      b銆丩RU(Least Recently Used)锛氭渶杩戞渶涔呮湭浣跨敤锛屾椂闂�
+ *
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteLFU extends ExecutorRouter {
+
+    private static ConcurrentMap<Integer, HashMap<String, Integer>> jobLfuMap = new ConcurrentHashMap<Integer, HashMap<String, Integer>>();
+    private static long CACHE_VALID_TIME = 0;
+
+    public String route(int jobId, List<String> addressList) {
+
+        // cache clear
+        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
+            jobLfuMap.clear();
+            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
+        }
+
+        // lfu item init
+        HashMap<String, Integer> lfuItemMap = jobLfuMap.get(jobId);     // Key鎺掑簭鍙互鐢═reeMap+鏋勯�犲叆鍙侰ompare锛沄alue鎺掑簭鏆傛椂鍙兘閫氳繃ArrayList锛�
+        if (lfuItemMap == null) {
+            lfuItemMap = new HashMap<String, Integer>();
+            jobLfuMap.putIfAbsent(jobId, lfuItemMap);   // 閬垮厤閲嶅瑕嗙洊
+        }
+
+        // put new
+        for (String address: addressList) {
+            if (!lfuItemMap.containsKey(address) || lfuItemMap.get(address) >1000000 ) {
+                lfuItemMap.put(address, new Random().nextInt(addressList.size()));  // 鍒濆鍖栨椂涓诲姩Random涓�娆★紝缂撹В棣栨鍘嬪姏
+            }
+        }
+        // remove old
+        List<String> delKeys = new ArrayList<>();
+        for (String existKey: lfuItemMap.keySet()) {
+            if (!addressList.contains(existKey)) {
+                delKeys.add(existKey);
+            }
+        }
+        if (delKeys.size() > 0) {
+            for (String delKey: delKeys) {
+                lfuItemMap.remove(delKey);
+            }
+        }
+
+        // load least userd count address
+        List<Map.Entry<String, Integer>> lfuItemList = new ArrayList<Map.Entry<String, Integer>>(lfuItemMap.entrySet());
+        Collections.sort(lfuItemList, new Comparator<Map.Entry<String, Integer>>() {
+            @Override
+            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
+                return o1.getValue().compareTo(o2.getValue());
+            }
+        });
+
+        Map.Entry<String, Integer> addressItem = lfuItemList.get(0);
+        String minAddress = addressItem.getKey();
+        addressItem.setValue(addressItem.getValue() + 1);
+
+        return addressItem.getKey();
+    }
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+        String address = route(triggerParam.getJobId(), addressList);
+        return new ReturnT<String>(address);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
new file mode 100644
index 0000000..5637860
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
@@ -0,0 +1,76 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * 鍗曚釜JOB瀵瑰簲鐨勬瘡涓墽琛屽櫒锛屾渶涔呬负浣跨敤鐨勪紭鍏堣閫変妇
+ *      a銆丩FU(Least Frequently Used)锛氭渶涓嶇粡甯镐娇鐢紝棰戠巼/娆℃暟
+ *      b(*)銆丩RU(Least Recently Used)锛氭渶杩戞渶涔呮湭浣跨敤锛屾椂闂�
+ *
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteLRU extends ExecutorRouter {
+
+    private static ConcurrentMap<Integer, LinkedHashMap<String, String>> jobLRUMap = new ConcurrentHashMap<Integer, LinkedHashMap<String, String>>();
+    private static long CACHE_VALID_TIME = 0;
+
+    public String route(int jobId, List<String> addressList) {
+
+        // cache clear
+        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
+            jobLRUMap.clear();
+            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
+        }
+
+        // init lru
+        LinkedHashMap<String, String> lruItem = jobLRUMap.get(jobId);
+        if (lruItem == null) {
+            /**
+             * LinkedHashMap
+             *      a銆乤ccessOrder锛歵rue=璁块棶椤哄簭鎺掑簭锛坓et/put鏃舵帓搴忥級锛沠alse=鎻掑叆椤哄簭鎺掓湡锛�
+             *      b銆乺emoveEldestEntry锛氭柊澧炲厓绱犳椂灏嗕細璋冪敤锛岃繑鍥瀟rue鏃朵細鍒犻櫎鏈�鑰佸厓绱狅紱鍙皝瑁匧inkedHashMap骞堕噸鍐欒鏂规硶锛屾瘮濡傚畾涔夋渶澶у閲忥紝瓒呭嚭鏄繑鍥瀟rue鍗冲彲瀹炵幇鍥哄畾闀垮害鐨凩RU绠楁硶锛�
+             */
+            lruItem = new LinkedHashMap<String, String>(16, 0.75f, true);
+            jobLRUMap.putIfAbsent(jobId, lruItem);
+        }
+
+        // put new
+        for (String address: addressList) {
+            if (!lruItem.containsKey(address)) {
+                lruItem.put(address, address);
+            }
+        }
+        // remove old
+        List<String> delKeys = new ArrayList<>();
+        for (String existKey: lruItem.keySet()) {
+            if (!addressList.contains(existKey)) {
+                delKeys.add(existKey);
+            }
+        }
+        if (delKeys.size() > 0) {
+            for (String delKey: delKeys) {
+                lruItem.remove(delKey);
+            }
+        }
+
+        // load
+        String eldestKey = lruItem.entrySet().iterator().next().getKey();
+        String eldestValue = lruItem.get(eldestKey);
+        return eldestValue;
+    }
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+        String address = route(triggerParam.getJobId(), addressList);
+        return new ReturnT<String>(address);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
new file mode 100644
index 0000000..0b5eb47
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
@@ -0,0 +1,19 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.List;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteLast extends ExecutorRouter {
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+        return new ReturnT<String>(addressList.get(addressList.size()-1));
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
new file mode 100644
index 0000000..668d069
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteRandom extends ExecutorRouter {
+
+    private static Random localRandom = new Random();
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+        String address = addressList.get(localRandom.nextInt(addressList.size()));
+        return new ReturnT<String>(address);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
new file mode 100644
index 0000000..1ce3f60
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
@@ -0,0 +1,39 @@
+package com.vci.ubcs.xxl.job.admin.core.route.strategy;
+
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Created by xuxueli on 17/3/10.
+ */
+public class ExecutorRouteRound extends ExecutorRouter {
+
+    private static ConcurrentMap<Integer, Integer> routeCountEachJob = new ConcurrentHashMap<Integer, Integer>();
+    private static long CACHE_VALID_TIME = 0;
+    private static int count(int jobId) {
+        // cache clear
+        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
+            routeCountEachJob.clear();
+            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
+        }
+
+        // count++
+        Integer count = routeCountEachJob.get(jobId);
+        count = (count==null || count>1000000)?(new Random().nextInt(100)):++count;  // 鍒濆鍖栨椂涓诲姩Random涓�娆★紝缂撹В棣栨鍘嬪姏
+        routeCountEachJob.put(jobId, count);
+        return count;
+    }
+
+    @Override
+    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
+        String address = addressList.get(count(triggerParam.getJobId())%addressList.size());
+        return new ReturnT<String>(address);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/scheduler/XxlJobScheduler.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/scheduler/XxlJobScheduler.java
new file mode 100644
index 0000000..0c55d6e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/scheduler/XxlJobScheduler.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.xxl.job.admin.core.scheduler;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.thread.*;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.xxl.job.core.biz.ExecutorBiz;
+import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
+import com.xxl.rpc.remoting.invoker.call.CallType;
+import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;
+import com.xxl.rpc.remoting.invoker.route.LoadBalance;
+import com.xxl.rpc.remoting.net.impl.netty_http.client.NettyHttpClient;
+import com.xxl.rpc.serialize.impl.HessianSerializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author xuxueli 2018-10-28 00:18:17
+ */
+
+public class XxlJobScheduler  {
+    private static final Logger logger = LoggerFactory.getLogger(XxlJobScheduler.class);
+
+
+    public void init() throws Exception {
+        // init i18n
+        initI18n();
+
+        // admin registry monitor run
+        JobRegistryMonitorHelper.getInstance().start();
+
+        // admin monitor run
+        JobFailMonitorHelper.getInstance().start();
+
+        // admin trigger pool start
+        JobTriggerPoolHelper.toStart();
+
+        // admin log report start
+        JobLogReportHelper.getInstance().start();
+
+        // start-schedule
+        JobScheduleHelper.getInstance().start();
+
+        logger.info(">>>>>>>>> init xxl-job admin success.");
+    }
+
+
+    public void destroy() throws Exception {
+
+        // stop-schedule
+        JobScheduleHelper.getInstance().toStop();
+
+        // admin log report stop
+        JobLogReportHelper.getInstance().toStop();
+
+        // admin trigger pool stop
+        JobTriggerPoolHelper.toStop();
+
+        // admin monitor stop
+        JobFailMonitorHelper.getInstance().toStop();
+
+        // admin registry stop
+        JobRegistryMonitorHelper.getInstance().toStop();
+
+    }
+
+    // ---------------------- I18n ----------------------
+
+    private void initI18n(){
+        for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) {
+            item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));
+        }
+    }
+
+    // ---------------------- executor-client ----------------------
+    private static ConcurrentMap<String, ExecutorBiz> executorBizRepository = new ConcurrentHashMap<String, ExecutorBiz>();
+    public static ExecutorBiz getExecutorBiz(String address) throws Exception {
+        // valid
+        if (address==null || address.trim().length()==0) {
+            return null;
+        }
+
+        // load-cache
+        address = address.trim();
+        ExecutorBiz executorBiz = executorBizRepository.get(address);
+        if (executorBiz != null) {
+            return executorBiz;
+        }
+
+        // set-cache
+        XxlRpcReferenceBean referenceBean = new XxlRpcReferenceBean();
+        referenceBean.setClient(NettyHttpClient.class);
+        referenceBean.setSerializer(HessianSerializer.class);
+        referenceBean.setCallType(CallType.SYNC);
+        referenceBean.setLoadBalance(LoadBalance.ROUND);
+        referenceBean.setIface(ExecutorBiz.class);
+        referenceBean.setVersion(null);
+        referenceBean.setTimeout(3000);
+        referenceBean.setAddress(address);
+        referenceBean.setAccessToken(XxlJobAdminConfig.getAdminConfig().getAccessToken());
+        referenceBean.setInvokeCallback(null);
+        referenceBean.setInvokerFactory(null);
+
+        executorBiz = (ExecutorBiz) referenceBean.getObject();
+
+        executorBizRepository.put(address, executorBiz);
+        return executorBiz;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobFailMonitorHelper.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobFailMonitorHelper.java
new file mode 100644
index 0000000..648bccf
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobFailMonitorHelper.java
@@ -0,0 +1,209 @@
+package com.vci.ubcs.xxl.job.admin.core.thread;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLog;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.core.trigger.TriggerTypeEnum;
+import com.xxl.job.core.biz.model.ReturnT;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.mail.javamail.MimeMessageHelper;
+
+import javax.mail.internet.MimeMessage;
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * job monitor instance
+ *
+ * @author xuxueli 2015-9-1 18:05:56
+ */
+public class JobFailMonitorHelper {
+	private static Logger logger = LoggerFactory.getLogger(JobFailMonitorHelper.class);
+
+	private static JobFailMonitorHelper instance = new JobFailMonitorHelper();
+	public static JobFailMonitorHelper getInstance(){
+		return instance;
+	}
+
+	// ---------------------- monitor ----------------------
+
+	private Thread monitorThread;
+	private volatile boolean toStop = false;
+	public void start(){
+		monitorThread = new Thread(new Runnable() {
+
+			@Override
+			public void run() {
+
+				// monitor
+				while (!toStop) {
+					try {
+
+						List<Long> failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findFailJobLogIds(1000);
+						if (failLogIds!=null && !failLogIds.isEmpty()) {
+							for (long failLogId: failLogIds) {
+
+								// lock log
+								int lockRet = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, 0, -1);
+								if (lockRet < 1) {
+									continue;
+								}
+								XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(failLogId);
+								XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(log.getJobId());
+
+								// 1銆乫ail retry monitor
+								if (log.getExecutorFailRetryCount() > 0) {
+									JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam(), log.getExecutorParam());
+									String retryMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_type_retry") +"<<<<<<<<<<< </span><br>";
+									log.setTriggerMsg(log.getTriggerMsg() + retryMsg);
+									XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(log);
+								}
+
+								// 2銆乫ail alarm monitor
+								int newAlarmStatus = 0;		// 鍛婅鐘舵�侊細0-榛樿銆�-1=閿佸畾鐘舵�併��1-鏃犻渶鍛婅銆�2-鍛婅鎴愬姛銆�3-鍛婅澶辫触
+								if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
+									boolean alarmResult = true;
+									try {
+										alarmResult = failAlarm(info, log);
+									} catch (Exception e) {
+										alarmResult = false;
+										logger.error(e.getMessage(), e);
+									}
+									newAlarmStatus = alarmResult?2:3;
+								} else {
+									newAlarmStatus = 1;
+								}
+
+								XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, -1, newAlarmStatus);
+							}
+						}
+
+					} catch (Exception e) {
+						if (!toStop) {
+							logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
+						}
+					}
+
+                    try {
+                        TimeUnit.SECONDS.sleep(10);
+                    } catch (Exception e) {
+                        if (!toStop) {
+                            logger.error(e.getMessage(), e);
+                        }
+                    }
+
+                }
+
+				logger.info(">>>>>>>>>>> xxl-job, job fail monitor thread stop");
+
+			}
+		});
+		monitorThread.setDaemon(true);
+		monitorThread.setName("xxl-job, admin JobFailMonitorHelper");
+		monitorThread.start();
+	}
+
+	public void toStop(){
+		toStop = true;
+		// interrupt and wait
+		monitorThread.interrupt();
+		try {
+			monitorThread.join();
+		} catch (InterruptedException e) {
+			logger.error(e.getMessage(), e);
+		}
+	}
+
+
+	// ---------------------- alarm ----------------------
+
+	// email alarm template
+	private static final String mailBodyTemplate = "<h5>" + I18nUtil.getString("jobconf_monitor_detail") + "锛�</span>" +
+			"<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
+			"   <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
+			"      <tr>\n" +
+			"         <td width=\"20%\" >"+ I18nUtil.getString("jobinfo_field_jobgroup") +"</td>\n" +
+			"         <td width=\"10%\" >"+ I18nUtil.getString("jobinfo_field_id") +"</td>\n" +
+			"         <td width=\"20%\" >"+ I18nUtil.getString("jobinfo_field_jobdesc") +"</td>\n" +
+			"         <td width=\"10%\" >"+ I18nUtil.getString("jobconf_monitor_alarm_title") +"</td>\n" +
+			"         <td width=\"40%\" >"+ I18nUtil.getString("jobconf_monitor_alarm_content") +"</td>\n" +
+			"      </tr>\n" +
+			"   </thead>\n" +
+			"   <tbody>\n" +
+			"      <tr>\n" +
+			"         <td>{0}</td>\n" +
+			"         <td>{1}</td>\n" +
+			"         <td>{2}</td>\n" +
+			"         <td>"+ I18nUtil.getString("jobconf_monitor_alarm_type") +"</td>\n" +
+			"         <td>{3}</td>\n" +
+			"      </tr>\n" +
+			"   </tbody>\n" +
+			"</table>";
+
+	/**
+	 * fail alarm
+	 *
+	 * @param jobLog
+	 */
+	private boolean failAlarm(XxlJobInfo info, XxlJobLog jobLog){
+		boolean alarmResult = true;
+
+		// send monitor email
+		if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
+
+			// alarmContent
+			String alarmContent = "Alarm Job LogId=" + jobLog.getId();
+			if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
+				alarmContent += "<br>TriggerMsg=<br>" + jobLog.getTriggerMsg();
+			}
+			if (jobLog.getHandleCode()>0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
+				alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
+			}
+
+			// email info
+			XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup()));
+			String personal = I18nUtil.getString("admin_name_full");
+			String title = I18nUtil.getString("jobconf_monitor");
+			String content = MessageFormat.format(mailBodyTemplate,
+					group!=null?group.getTitle():"null",
+					info.getId(),
+					info.getJobDesc(),
+					alarmContent);
+
+			Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
+			for (String email: emailSet) {
+
+				// make mail
+				try {
+					MimeMessage mimeMessage = XxlJobAdminConfig.getAdminConfig().getMailSender().createMimeMessage();
+
+					MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
+					helper.setFrom(XxlJobAdminConfig.getAdminConfig().getEmailUserName(), personal);
+					helper.setTo(email);
+					helper.setSubject(title);
+					helper.setText(content, true);
+
+					XxlJobAdminConfig.getAdminConfig().getMailSender().send(mimeMessage);
+				} catch (Exception e) {
+					logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(), e);
+
+					alarmResult = false;
+				}
+
+			}
+		}
+
+		// do something, custom alarm strategy, such as sms
+
+
+		return alarmResult;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobLogReportHelper.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobLogReportHelper.java
new file mode 100644
index 0000000..24593f1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobLogReportHelper.java
@@ -0,0 +1,152 @@
+package com.vci.ubcs.xxl.job.admin.core.thread;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogReport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * job log report helper
+ *
+ * @author xuxueli 2019-11-22
+ */
+public class JobLogReportHelper {
+    private static Logger logger = LoggerFactory.getLogger(JobLogReportHelper.class);
+
+    private static JobLogReportHelper instance = new JobLogReportHelper();
+    public static JobLogReportHelper getInstance(){
+        return instance;
+    }
+
+
+    private Thread logrThread;
+    private volatile boolean toStop = false;
+    public void start(){
+        logrThread = new Thread(new Runnable() {
+
+            @Override
+            public void run() {
+
+                // last clean log time
+                long lastCleanLogTime = 0;
+
+
+                while (!toStop) {
+
+                    // 1銆乴og-report refresh: refresh log report in 3 days
+                    try {
+
+                        for (int i = 0; i < 3; i++) {
+
+                            // today
+                            Calendar itemDay = Calendar.getInstance();
+                            itemDay.add(Calendar.DAY_OF_MONTH, -i);
+                            itemDay.set(Calendar.HOUR_OF_DAY, 0);
+                            itemDay.set(Calendar.MINUTE, 0);
+                            itemDay.set(Calendar.SECOND, 0);
+                            itemDay.set(Calendar.MILLISECOND, 0);
+
+                            Date todayFrom = itemDay.getTime();
+
+                            itemDay.set(Calendar.HOUR_OF_DAY, 23);
+                            itemDay.set(Calendar.MINUTE, 59);
+                            itemDay.set(Calendar.SECOND, 59);
+                            itemDay.set(Calendar.MILLISECOND, 999);
+
+                            Date todayTo = itemDay.getTime();
+
+                            // refresh log-report every minute
+                            XxlJobLogReport xxlJobLogReport = new XxlJobLogReport();
+                            xxlJobLogReport.setTriggerDay(todayFrom);
+                            xxlJobLogReport.setRunningCount(0);
+                            xxlJobLogReport.setSucCount(0);
+                            xxlJobLogReport.setFailCount(0);
+
+                            Map<String, Object> triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLogReport(todayFrom, todayTo);
+                            if (triggerCountMap!=null && triggerCountMap.size()>0) {
+                                int triggerDayCount = triggerCountMap.containsKey("triggerDayCount")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))):0;
+                                int triggerDayCountRunning = triggerCountMap.containsKey("triggerDayCountRunning")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountRunning"))):0;
+                                int triggerDayCountSuc = triggerCountMap.containsKey("triggerDayCountSuc")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountSuc"))):0;
+                                int triggerDayCountFail = triggerDayCount - triggerDayCountRunning - triggerDayCountSuc;
+
+                                xxlJobLogReport.setRunningCount(triggerDayCountRunning);
+                                xxlJobLogReport.setSucCount(triggerDayCountSuc);
+                                xxlJobLogReport.setFailCount(triggerDayCountFail);
+                            }
+
+                            // do refresh
+                            int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().update(xxlJobLogReport);
+                            if (ret < 1) {
+                                XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport);
+                            }
+                        }
+
+                    } catch (Exception e) {
+                        if (!toStop) {
+                            logger.error(">>>>>>>>>>> xxl-job, job log report thread error:{}", e);
+                        }
+                    }
+
+                    // 2銆乴og-clean: switch open & once each day
+                    if (XxlJobAdminConfig.getAdminConfig().getLogretentiondays()>0
+                            && System.currentTimeMillis() - lastCleanLogTime > 24*60*60*1000) {
+
+                        // expire-time
+                        Calendar expiredDay = Calendar.getInstance();
+                        expiredDay.add(Calendar.DAY_OF_MONTH, -1 * XxlJobAdminConfig.getAdminConfig().getLogretentiondays());
+                        expiredDay.set(Calendar.HOUR_OF_DAY, 0);
+                        expiredDay.set(Calendar.MINUTE, 0);
+                        expiredDay.set(Calendar.SECOND, 0);
+                        expiredDay.set(Calendar.MILLISECOND, 0);
+                        Date clearBeforeTime = expiredDay.getTime();
+
+                        // clean expired log
+                        List<Long> logIds = null;
+                        do {
+                            logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, clearBeforeTime, 0, 1000);
+                            if (logIds!=null && logIds.size()>0) {
+                                XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds);
+                            }
+                        } while (logIds!=null && logIds.size()>0);
+
+                        // update clean time
+                        lastCleanLogTime = System.currentTimeMillis();
+                    }
+
+                    try {
+                        TimeUnit.MINUTES.sleep(1);
+                    } catch (Exception e) {
+                        if (!toStop) {
+                            logger.error(e.getMessage(), e);
+                        }
+                    }
+
+                }
+
+                logger.info(">>>>>>>>>>> xxl-job, job log report thread stop");
+
+            }
+        });
+        logrThread.setDaemon(true);
+        logrThread.setName("xxl-job, admin JobLogReportHelper");
+        logrThread.start();
+    }
+
+    public void toStop(){
+        toStop = true;
+        // interrupt and wait
+        logrThread.interrupt();
+        try {
+            logrThread.join();
+        } catch (InterruptedException e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
new file mode 100644
index 0000000..b7d4219
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
@@ -0,0 +1,111 @@
+package com.vci.ubcs.xxl.job.admin.core.thread;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobRegistry;
+import com.xxl.job.core.enums.RegistryConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * job registry instance
+ * @author xuxueli 2016-10-02 19:10:24
+ */
+public class JobRegistryMonitorHelper {
+	private static Logger logger = LoggerFactory.getLogger(JobRegistryMonitorHelper.class);
+
+	private static JobRegistryMonitorHelper instance = new JobRegistryMonitorHelper();
+	public static JobRegistryMonitorHelper getInstance(){
+		return instance;
+	}
+
+	private Thread registryThread;
+	private volatile boolean toStop = false;
+	public void start(){
+		registryThread = new Thread(new Runnable() {
+			@Override
+			public void run() {
+				while (!toStop) {
+					try {
+						// auto registry group
+						List<XxlJobGroup> groupList = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().findByAddressType(0);
+						if (groupList!=null && !groupList.isEmpty()) {
+
+							// remove dead address (admin/executor)
+							List<Integer> ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
+							if (ids!=null && ids.size()>0) {
+								XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids);
+							}
+
+							// fresh online address (admin/executor)
+							HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
+							List<XxlJobRegistry> list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
+							if (list != null) {
+								for (XxlJobRegistry item: list) {
+									if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
+										String appName = item.getRegistryKey();
+										List<String> registryList = appAddressMap.get(appName);
+										if (registryList == null) {
+											registryList = new ArrayList<String>();
+										}
+
+										if (!registryList.contains(item.getRegistryValue())) {
+											registryList.add(item.getRegistryValue());
+										}
+										appAddressMap.put(appName, registryList);
+									}
+								}
+							}
+
+							// fresh group address
+							for (XxlJobGroup group: groupList) {
+								List<String> registryList = appAddressMap.get(group.getAppName());
+								String addressListStr = null;
+								if (registryList!=null && !registryList.isEmpty()) {
+									Collections.sort(registryList);
+									addressListStr = "";
+									for (String item:registryList) {
+										addressListStr += item + ",";
+									}
+									addressListStr = addressListStr.substring(0, addressListStr.length()-1);
+								}
+								group.setAddressList(addressListStr);
+								XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().update(group);
+							}
+						}
+					} catch (Exception e) {
+						if (!toStop) {
+							logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
+						}
+					}
+					try {
+						TimeUnit.SECONDS.sleep(RegistryConfig.BEAT_TIMEOUT);
+					} catch (InterruptedException e) {
+						if (!toStop) {
+							logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
+						}
+					}
+				}
+				logger.info(">>>>>>>>>>> xxl-job, job registry monitor thread stop");
+			}
+		});
+		registryThread.setDaemon(true);
+		registryThread.setName("xxl-job, admin JobRegistryMonitorHelper");
+		registryThread.start();
+	}
+
+	public void toStop(){
+		toStop = true;
+		// interrupt and wait
+		registryThread.interrupt();
+		try {
+			registryThread.join();
+		} catch (InterruptedException e) {
+			logger.error(e.getMessage(), e);
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobScheduleHelper.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobScheduleHelper.java
new file mode 100644
index 0000000..7a9e390
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobScheduleHelper.java
@@ -0,0 +1,354 @@
+package com.vci.ubcs.xxl.job.admin.core.thread;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.cron.CronExpression;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.trigger.TriggerTypeEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.text.ParseException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author xuxueli 2019-05-21
+ */
+public class JobScheduleHelper {
+    private static Logger logger = LoggerFactory.getLogger(JobScheduleHelper.class);
+
+    private static JobScheduleHelper instance = new JobScheduleHelper();
+    public static JobScheduleHelper getInstance(){
+        return instance;
+    }
+
+    public static final long PRE_READ_MS = 5000;    // pre read
+
+    private Thread scheduleThread;
+    private Thread ringThread;
+    private volatile boolean scheduleThreadToStop = false;
+    private volatile boolean ringThreadToStop = false;
+    private volatile static Map<Integer, List<Integer>> ringData = new ConcurrentHashMap<>();
+
+    public void start(){
+
+        // schedule thread
+        scheduleThread = new Thread(new Runnable() {
+            @Override
+            public void run() {
+
+                try {
+                    TimeUnit.MILLISECONDS.sleep(5000 - System.currentTimeMillis()%1000 );
+                } catch (InterruptedException e) {
+                    if (!scheduleThreadToStop) {
+                        logger.error(e.getMessage(), e);
+                    }
+                }
+                logger.info(">>>>>>>>> init xxl-job admin scheduler success.");
+
+                // pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20)
+                int preReadCount = (XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax() + XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax()) * 20;
+
+                while (!scheduleThreadToStop) {
+
+                    // Scan Job
+                    long start = System.currentTimeMillis();
+
+                    Connection conn = null;
+                    Boolean connAutoCommit = null;
+                    PreparedStatement preparedStatement = null;
+
+                    boolean preReadSuc = true;
+                    try {
+
+                        conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
+                        connAutoCommit = conn.getAutoCommit();
+                        conn.setAutoCommit(false);
+
+                        preparedStatement = conn.prepareStatement(  "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
+                        preparedStatement.execute();
+
+                        // tx start
+
+                        // 1銆乸re read
+                        long nowTime = System.currentTimeMillis();
+                        List<XxlJobInfo> scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
+                        if (scheduleList!=null && scheduleList.size()>0) {
+                            // 2銆乸ush time-ring
+                            for (XxlJobInfo jobInfo: scheduleList) {
+
+                                // time-ring jump
+                                if (nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS) {
+                                    // 2.1銆乼rigger-expire > 5s锛歱ass && make next-trigger-time
+                                    logger.warn(">>>>>>>>>>> xxl-job, schedule misfire, jobId = " + jobInfo.getId());
+
+                                    // fresh next
+                                    refreshNextValidTime(jobInfo, new Date());
+
+                                } else if (nowTime > jobInfo.getTriggerNextTime()) {
+                                    // 2.2銆乼rigger-expire < 5s锛歞irect-trigger && make next-trigger-time
+
+                                    // 1銆乼rigger
+                                    JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null);
+                                    logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );
+
+                                    // 2銆乫resh next
+                                    refreshNextValidTime(jobInfo, new Date());
+
+                                    // next-trigger-time in 5s, pre-read again
+                                    if (jobInfo.getTriggerStatus()==1 && nowTime + PRE_READ_MS > jobInfo.getTriggerNextTime()) {
+
+                                        // 1銆乵ake ring second
+                                        int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);
+
+                                        // 2銆乸ush time ring
+                                        pushTimeRing(ringSecond, jobInfo.getId());
+
+                                        // 3銆乫resh next
+                                        refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
+
+                                    }
+
+                                } else {
+                                    // 2.3銆乼rigger-pre-read锛歵ime-ring trigger && make next-trigger-time
+
+                                    // 1銆乵ake ring second
+                                    int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);
+
+                                    // 2銆乸ush time ring
+                                    pushTimeRing(ringSecond, jobInfo.getId());
+
+                                    // 3銆乫resh next
+                                    refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
+
+                                }
+
+                            }
+
+                            // 3銆乽pdate trigger info
+                            for (XxlJobInfo jobInfo: scheduleList) {
+                                XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo);
+                            }
+
+                        } else {
+                            preReadSuc = false;
+                        }
+
+                        // tx stop
+
+
+                    } catch (Exception e) {
+                        if (!scheduleThreadToStop) {
+                            logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread error:{}", e);
+                        }
+                    } finally {
+
+                        // commit
+                        if (conn != null) {
+                            try {
+                                conn.commit();
+                            } catch (SQLException e) {
+                                if (!scheduleThreadToStop) {
+                                    logger.error(e.getMessage(), e);
+                                }
+                            }
+                            try {
+                                conn.setAutoCommit(connAutoCommit);
+                            } catch (SQLException e) {
+                                if (!scheduleThreadToStop) {
+                                    logger.error(e.getMessage(), e);
+                                }
+                            }
+                            try {
+                                conn.close();
+                            } catch (SQLException e) {
+                                if (!scheduleThreadToStop) {
+                                    logger.error(e.getMessage(), e);
+                                }
+                            }
+                        }
+
+                        // close PreparedStatement
+                        if (null != preparedStatement) {
+                            try {
+                                preparedStatement.close();
+                            } catch (SQLException e) {
+                                if (!scheduleThreadToStop) {
+                                    logger.error(e.getMessage(), e);
+                                }
+                            }
+                        }
+                    }
+                    long cost = System.currentTimeMillis()-start;
+
+
+                    // Wait seconds, align second
+                    if (cost < 1000) {  // scan-overtime, not wait
+                        try {
+                            // pre-read period: success > scan each second; fail > skip this period;
+                            TimeUnit.MILLISECONDS.sleep((preReadSuc?1000:PRE_READ_MS) - System.currentTimeMillis()%1000);
+                        } catch (InterruptedException e) {
+                            if (!scheduleThreadToStop) {
+                                logger.error(e.getMessage(), e);
+                            }
+                        }
+                    }
+
+                }
+
+                logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread stop");
+            }
+        });
+        scheduleThread.setDaemon(true);
+        scheduleThread.setName("xxl-job, admin JobScheduleHelper#scheduleThread");
+        scheduleThread.start();
+
+
+        // ring thread
+        ringThread = new Thread(new Runnable() {
+            @Override
+            public void run() {
+
+                // align second
+                try {
+                    TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis()%1000 );
+                } catch (InterruptedException e) {
+                    if (!ringThreadToStop) {
+                        logger.error(e.getMessage(), e);
+                    }
+                }
+
+                while (!ringThreadToStop) {
+
+                    try {
+                        // second data
+                        List<Integer> ringItemData = new ArrayList<>();
+                        int nowSecond = Calendar.getInstance().get(Calendar.SECOND);   // 閬垮厤澶勭悊鑰楁椂澶暱锛岃法杩囧埢搴︼紝鍚戝墠鏍¢獙涓�涓埢搴︼紱
+                        for (int i = 0; i < 2; i++) {
+                            List<Integer> tmpData = ringData.remove( (nowSecond+60-i)%60 );
+                            if (tmpData != null) {
+                                ringItemData.addAll(tmpData);
+                            }
+                        }
+
+                        // ring trigger
+                        logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData) );
+                        if (ringItemData.size() > 0) {
+                            // do trigger
+                            for (int jobId: ringItemData) {
+                                // do trigger
+                                JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null);
+                            }
+                            // clear
+                            ringItemData.clear();
+                        }
+                    } catch (Exception e) {
+                        if (!ringThreadToStop) {
+                            logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread error:{}", e);
+                        }
+                    }
+
+                    // next second, align second
+                    try {
+                        TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis()%1000);
+                    } catch (InterruptedException e) {
+                        if (!ringThreadToStop) {
+                            logger.error(e.getMessage(), e);
+                        }
+                    }
+                }
+                logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread stop");
+            }
+        });
+        ringThread.setDaemon(true);
+        ringThread.setName("xxl-job, admin JobScheduleHelper#ringThread");
+        ringThread.start();
+    }
+
+    private void refreshNextValidTime(XxlJobInfo jobInfo, Date fromTime) throws ParseException {
+        Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(fromTime);
+        if (nextValidTime != null) {
+            jobInfo.setTriggerLastTime(jobInfo.getTriggerNextTime());
+            jobInfo.setTriggerNextTime(nextValidTime.getTime());
+        } else {
+            jobInfo.setTriggerStatus(0);
+            jobInfo.setTriggerLastTime(0);
+            jobInfo.setTriggerNextTime(0);
+        }
+    }
+
+    private void pushTimeRing(int ringSecond, int jobId){
+        // push async ring
+        List<Integer> ringItemData = ringData.get(ringSecond);
+        if (ringItemData == null) {
+            ringItemData = new ArrayList<Integer>();
+            ringData.put(ringSecond, ringItemData);
+        }
+        ringItemData.add(jobId);
+
+        logger.debug(">>>>>>>>>>> xxl-job, schedule push time-ring : " + ringSecond + " = " + Arrays.asList(ringItemData) );
+    }
+
+    public void toStop(){
+
+        // 1銆乻top schedule
+        scheduleThreadToStop = true;
+        try {
+            TimeUnit.SECONDS.sleep(1);  // wait
+        } catch (InterruptedException e) {
+            logger.error(e.getMessage(), e);
+        }
+        if (scheduleThread.getState() != Thread.State.TERMINATED){
+            // interrupt and wait
+            scheduleThread.interrupt();
+            try {
+                scheduleThread.join();
+            } catch (InterruptedException e) {
+                logger.error(e.getMessage(), e);
+            }
+        }
+
+        // if has ring data
+        boolean hasRingData = false;
+        if (!ringData.isEmpty()) {
+            for (int second : ringData.keySet()) {
+                List<Integer> tmpData = ringData.get(second);
+                if (tmpData!=null && tmpData.size()>0) {
+                    hasRingData = true;
+                    break;
+                }
+            }
+        }
+        if (hasRingData) {
+            try {
+                TimeUnit.SECONDS.sleep(8);
+            } catch (InterruptedException e) {
+                logger.error(e.getMessage(), e);
+            }
+        }
+
+        // stop ring (wait job-in-memory stop)
+        ringThreadToStop = true;
+        try {
+            TimeUnit.SECONDS.sleep(1);
+        } catch (InterruptedException e) {
+            logger.error(e.getMessage(), e);
+        }
+        if (ringThread.getState() != Thread.State.TERMINATED){
+            // interrupt and wait
+            ringThread.interrupt();
+            try {
+                ringThread.join();
+            } catch (InterruptedException e) {
+                logger.error(e.getMessage(), e);
+            }
+        }
+
+        logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper stop");
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobTriggerPoolHelper.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
new file mode 100644
index 0000000..9afb09f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
@@ -0,0 +1,145 @@
+package com.vci.ubcs.xxl.job.admin.core.thread;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.trigger.TriggerTypeEnum;
+import com.vci.ubcs.xxl.job.admin.core.trigger.XxlJobTrigger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * job trigger thread pool helper
+ *
+ * @author xuxueli 2018-07-03 21:08:07
+ */
+public class JobTriggerPoolHelper {
+    private static Logger logger = LoggerFactory.getLogger(JobTriggerPoolHelper.class);
+
+
+    // ---------------------- trigger pool ----------------------
+
+    // fast/slow thread pool
+    private ThreadPoolExecutor fastTriggerPool = null;
+    private ThreadPoolExecutor slowTriggerPool = null;
+
+    public void start(){
+        fastTriggerPool = new ThreadPoolExecutor(
+                10,
+                XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax(),
+                60L,
+                TimeUnit.SECONDS,
+                new LinkedBlockingQueue<Runnable>(1000),
+                new ThreadFactory() {
+                    @Override
+                    public Thread newThread(Runnable r) {
+                        return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-" + r.hashCode());
+                    }
+                });
+
+        slowTriggerPool = new ThreadPoolExecutor(
+                10,
+                XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax(),
+                60L,
+                TimeUnit.SECONDS,
+                new LinkedBlockingQueue<Runnable>(2000),
+                new ThreadFactory() {
+                    @Override
+                    public Thread newThread(Runnable r) {
+                        return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-slowTriggerPool-" + r.hashCode());
+                    }
+                });
+    }
+
+
+    public void stop() {
+        //triggerPool.shutdown();
+        fastTriggerPool.shutdownNow();
+        slowTriggerPool.shutdownNow();
+        logger.info(">>>>>>>>> xxl-job trigger thread pool shutdown success.");
+    }
+
+
+    // job timeout count
+    private volatile long minTim = System.currentTimeMillis()/60000;     // ms > min
+    private volatile ConcurrentMap<Integer, AtomicInteger> jobTimeoutCountMap = new ConcurrentHashMap<>();
+
+
+    /**
+     * add trigger
+     */
+    public void addTrigger(final int jobId, final TriggerTypeEnum triggerType, final int failRetryCount, final String executorShardingParam, final String executorParam) {
+
+        // choose thread pool
+        ThreadPoolExecutor triggerPool_ = fastTriggerPool;
+        AtomicInteger jobTimeoutCount = jobTimeoutCountMap.get(jobId);
+        if (jobTimeoutCount!=null && jobTimeoutCount.get() > 10) {      // job-timeout 10 times in 1 min
+            triggerPool_ = slowTriggerPool;
+        }
+
+        // trigger
+        triggerPool_.execute(new Runnable() {
+            @Override
+            public void run() {
+
+                long start = System.currentTimeMillis();
+
+                try {
+                    // do trigger
+                    XxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
+                } catch (Exception e) {
+                    logger.error(e.getMessage(), e);
+                } finally {
+
+                    // check timeout-count-map
+                    long minTim_now = System.currentTimeMillis()/60000;
+                    if (minTim != minTim_now) {
+                        minTim = minTim_now;
+                        jobTimeoutCountMap.clear();
+                    }
+
+                    // incr timeout-count-map
+                    long cost = System.currentTimeMillis()-start;
+                    if (cost > 500) {       // ob-timeout threshold 500ms
+                        AtomicInteger timeoutCount = jobTimeoutCountMap.putIfAbsent(jobId, new AtomicInteger(1));
+                        if (timeoutCount != null) {
+                            timeoutCount.incrementAndGet();
+                        }
+                    }
+
+                }
+
+            }
+        });
+    }
+
+
+
+    // ---------------------- helper ----------------------
+
+    private static JobTriggerPoolHelper helper = new JobTriggerPoolHelper();
+
+    public static void toStart() {
+        helper.start();
+    }
+    public static void toStop() {
+        helper.stop();
+    }
+
+    /**
+     * @param jobId
+     * @param triggerType
+     * @param failRetryCount
+     * 			>=0: use this param
+     * 			<0: use param from job info config
+     * @param executorShardingParam
+     * @param executorParam
+     *          null: use job param
+     *          not null: cover job param
+     */
+    public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
+        helper.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/TriggerTypeEnum.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/TriggerTypeEnum.java
new file mode 100644
index 0000000..7e60757
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/TriggerTypeEnum.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.xxl.job.admin.core.trigger;
+
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+
+/**
+ * trigger type enum
+ *
+ * @author xuxueli 2018-09-16 04:56:41
+ */
+public enum TriggerTypeEnum {
+
+    MANUAL(I18nUtil.getString("jobconf_trigger_type_manual")),
+    CRON(I18nUtil.getString("jobconf_trigger_type_cron")),
+    RETRY(I18nUtil.getString("jobconf_trigger_type_retry")),
+    PARENT(I18nUtil.getString("jobconf_trigger_type_parent")),
+    API(I18nUtil.getString("jobconf_trigger_type_api"));
+
+    private TriggerTypeEnum(String title){
+        this.title = title;
+    }
+    private String title;
+    public String getTitle() {
+        return title;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/XxlJobTrigger.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/XxlJobTrigger.java
new file mode 100644
index 0000000..a833d79
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/XxlJobTrigger.java
@@ -0,0 +1,211 @@
+package com.vci.ubcs.xxl.job.admin.core.trigger;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLog;
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
+import com.vci.ubcs.xxl.job.admin.core.scheduler.XxlJobScheduler;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.xxl.job.core.biz.ExecutorBiz;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.biz.model.TriggerParam;
+import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
+import com.xxl.rpc.util.IpUtil;
+import com.xxl.rpc.util.ThrowableUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Date;
+
+/**
+ * xxl-job trigger
+ * Created by xuxueli on 17/7/13.
+ */
+public class XxlJobTrigger {
+    private static Logger logger = LoggerFactory.getLogger(XxlJobTrigger.class);
+
+    /**
+     * trigger job
+     *
+     * @param jobId
+     * @param triggerType
+     * @param failRetryCount
+     * 			>=0: use this param
+     * 			<0: use param from job info config
+     * @param executorShardingParam
+     * @param executorParam
+     *          null: use job param
+     *          not null: cover job param
+     */
+    public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
+        // load data
+        XxlJobInfo jobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(jobId);
+        if (jobInfo == null) {
+            logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid锛宩obId={}", jobId);
+            return;
+        }
+        if (executorParam != null) {
+            jobInfo.setExecutorParam(executorParam);
+        }
+        int finalFailRetryCount = failRetryCount>=0?failRetryCount:jobInfo.getExecutorFailRetryCount();
+        XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(jobInfo.getJobGroup());
+
+        // sharding param
+        int[] shardingParam = null;
+        if (executorShardingParam!=null){
+            String[] shardingArr = executorShardingParam.split("/");
+            if (shardingArr.length==2 && isNumeric(shardingArr[0]) && isNumeric(shardingArr[1])) {
+                shardingParam = new int[2];
+                shardingParam[0] = Integer.valueOf(shardingArr[0]);
+                shardingParam[1] = Integer.valueOf(shardingArr[1]);
+            }
+        }
+        if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null)
+                && group.getRegistryList()!=null && !group.getRegistryList().isEmpty()
+                && shardingParam==null) {
+            for (int i = 0; i < group.getRegistryList().size(); i++) {
+                processTrigger(group, jobInfo, finalFailRetryCount, triggerType, i, group.getRegistryList().size());
+            }
+        } else {
+            if (shardingParam == null) {
+                shardingParam = new int[]{0, 1};
+            }
+            processTrigger(group, jobInfo, finalFailRetryCount, triggerType, shardingParam[0], shardingParam[1]);
+        }
+
+    }
+
+    private static boolean isNumeric(String str){
+        try {
+            int result = Integer.valueOf(str);
+            return true;
+        } catch (NumberFormatException e) {
+            return false;
+        }
+    }
+
+    /**
+     * @param group                     job group, registry list may be empty
+     * @param jobInfo
+     * @param finalFailRetryCount
+     * @param triggerType
+     * @param index                     sharding index
+     * @param total                     sharding index
+     */
+    private static void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount, TriggerTypeEnum triggerType, int index, int total){
+
+        // param
+        ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION);  // block strategy
+        ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null);    // route strategy
+        String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==executorRouteStrategyEnum)?String.valueOf(index).concat("/").concat(String.valueOf(total)):null;
+
+        // 1銆乻ave log-id
+        XxlJobLog jobLog = new XxlJobLog();
+        jobLog.setJobGroup(jobInfo.getJobGroup());
+        jobLog.setJobId(jobInfo.getId());
+        jobLog.setTriggerTime(new Date());
+        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().save(jobLog);
+        logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
+
+        // 2銆乮nit trigger-param
+        TriggerParam triggerParam = new TriggerParam();
+        triggerParam.setJobId(jobInfo.getId());
+        triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
+        triggerParam.setExecutorParams(jobInfo.getExecutorParam());
+        triggerParam.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
+        triggerParam.setExecutorTimeout(jobInfo.getExecutorTimeout());
+        triggerParam.setLogId(jobLog.getId());
+        triggerParam.setLogDateTime(jobLog.getTriggerTime().getTime());
+        triggerParam.setGlueType(jobInfo.getGlueType());
+        triggerParam.setGlueSource(jobInfo.getGlueSource());
+        triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime());
+        triggerParam.setBroadcastIndex(index);
+        triggerParam.setBroadcastTotal(total);
+
+        // 3銆乮nit address
+        String address = null;
+        ReturnT<String> routeAddressResult = null;
+        if (group.getRegistryList()!=null && !group.getRegistryList().isEmpty()) {
+            if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum) {
+                if (index < group.getRegistryList().size()) {
+                    address = group.getRegistryList().get(index);
+                } else {
+                    address = group.getRegistryList().get(0);
+                }
+            } else {
+                routeAddressResult = executorRouteStrategyEnum.getRouter().route(triggerParam, group.getRegistryList());
+                if (routeAddressResult.getCode() == ReturnT.SUCCESS_CODE) {
+                    address = routeAddressResult.getContent();
+                }
+            }
+        } else {
+            routeAddressResult = new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobconf_trigger_address_empty"));
+        }
+
+        // 4銆乼rigger remote executor
+        ReturnT<String> triggerResult = null;
+        if (address != null) {
+            triggerResult = runExecutor(triggerParam, address);
+        } else {
+            triggerResult = new ReturnT<String>(ReturnT.FAIL_CODE, null);
+        }
+
+        // 5銆乧ollection trigger info
+        StringBuffer triggerMsgSb = new StringBuffer();
+        triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_type")).append("锛�").append(triggerType.getTitle());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_admin_adress")).append("锛�").append(IpUtil.getIp());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regtype")).append("锛�")
+                .append( (group.getAddressType() == 0)?I18nUtil.getString("jobgroup_field_addressType_0"):I18nUtil.getString("jobgroup_field_addressType_1") );
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append("锛�").append(group.getRegistryList());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append("锛�").append(executorRouteStrategyEnum.getTitle());
+        if (shardingParam != null) {
+            triggerMsgSb.append("("+shardingParam+")");
+        }
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append("锛�").append(blockStrategy.getTitle());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append("锛�").append(jobInfo.getExecutorTimeout());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append("锛�").append(finalFailRetryCount);
+
+        triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_run") +"<<<<<<<<<<< </span><br>")
+                .append((routeAddressResult!=null&&routeAddressResult.getMsg()!=null)?routeAddressResult.getMsg()+"<br><br>":"").append(triggerResult.getMsg()!=null?triggerResult.getMsg():"");
+
+        // 6銆乻ave log trigger-info
+        jobLog.setExecutorAddress(address);
+        jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
+        jobLog.setExecutorParam(jobInfo.getExecutorParam());
+        jobLog.setExecutorShardingParam(shardingParam);
+        jobLog.setExecutorFailRetryCount(finalFailRetryCount);
+        //jobLog.setTriggerTime();
+        jobLog.setTriggerCode(triggerResult.getCode());
+        jobLog.setTriggerMsg(triggerMsgSb.toString());
+        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(jobLog);
+
+        logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
+    }
+
+    /**
+     * run executor
+     * @param triggerParam
+     * @param address
+     * @return
+     */
+    public static ReturnT<String> runExecutor(TriggerParam triggerParam, String address){
+        ReturnT<String> runResult = null;
+        try {
+            ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
+            runResult = executorBiz.run(triggerParam);
+        } catch (Exception e) {
+            logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e);
+            runResult = new ReturnT<String>(ReturnT.FAIL_CODE, ThrowableUtil.toString(e));
+        }
+
+        StringBuffer runResultSB = new StringBuffer(I18nUtil.getString("jobconf_trigger_run") + "锛�");
+        runResultSB.append("<br>address锛�").append(address);
+        runResultSB.append("<br>code锛�").append(runResult.getCode());
+        runResultSB.append("<br>msg锛�").append(runResult.getMsg());
+
+        runResult.setMsg(runResultSB.toString());
+        return runResult;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/CookieUtil.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/CookieUtil.java
new file mode 100644
index 0000000..44313ca
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/CookieUtil.java
@@ -0,0 +1,98 @@
+package com.vci.ubcs.xxl.job.admin.core.util;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Cookie.Util
+ *
+ * @author xuxueli 2015-12-12 18:01:06
+ */
+public class CookieUtil {
+
+	// 榛樿缂撳瓨鏃堕棿,鍗曚綅/绉�, 2H
+	private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE;
+	// 淇濆瓨璺緞,鏍硅矾寰�
+	private static final String COOKIE_PATH = "/";
+
+	/**
+	 * 淇濆瓨
+	 *
+	 * @param response
+	 * @param key
+	 * @param value
+	 * @param ifRemember
+	 */
+	public static void set(HttpServletResponse response, String key, String value, boolean ifRemember) {
+		int age = ifRemember?COOKIE_MAX_AGE:-1;
+		set(response, key, value, null, COOKIE_PATH, age, true);
+	}
+
+	/**
+	 * 淇濆瓨
+	 *
+	 * @param response
+	 * @param key
+	 * @param value
+	 * @param maxAge
+	 */
+	private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) {
+		Cookie cookie = new Cookie(key, value);
+		if (domain != null) {
+			cookie.setDomain(domain);
+		}
+		cookie.setPath(path);
+		cookie.setMaxAge(maxAge);
+		cookie.setHttpOnly(isHttpOnly);
+		response.addCookie(cookie);
+	}
+
+	/**
+	 * 鏌ヨvalue
+	 *
+	 * @param request
+	 * @param key
+	 * @return
+	 */
+	public static String getValue(HttpServletRequest request, String key) {
+		Cookie cookie = get(request, key);
+		if (cookie != null) {
+			return cookie.getValue();
+		}
+		return null;
+	}
+
+	/**
+	 * 鏌ヨCookie
+	 *
+	 * @param request
+	 * @param key
+	 */
+	private static Cookie get(HttpServletRequest request, String key) {
+		Cookie[] arr_cookie = request.getCookies();
+		if (arr_cookie != null && arr_cookie.length > 0) {
+			for (Cookie cookie : arr_cookie) {
+				if (cookie.getName().equals(key)) {
+					return cookie;
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鍒犻櫎Cookie
+	 *
+	 * @param request
+	 * @param response
+	 * @param key
+	 */
+	public static void remove(HttpServletRequest request, HttpServletResponse response, String key) {
+		Cookie cookie = get(request, key);
+		if (cookie != null) {
+			set(response, key, "", null, COOKIE_PATH, 0, true);
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/FtlUtil.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/FtlUtil.java
new file mode 100644
index 0000000..274249e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/FtlUtil.java
@@ -0,0 +1,31 @@
+package com.vci.ubcs.xxl.job.admin.core.util;
+
+import freemarker.ext.beans.BeansWrapper;
+import freemarker.ext.beans.BeansWrapperBuilder;
+import freemarker.template.Configuration;
+import freemarker.template.TemplateHashModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ftl util
+ *
+ * @author xuxueli 2018-01-17 20:37:48
+ */
+public class FtlUtil {
+    private static Logger logger = LoggerFactory.getLogger(FtlUtil.class);
+
+    private static BeansWrapper wrapper = new BeansWrapperBuilder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS).build();     //BeansWrapper.getDefaultInstance();
+
+    public static TemplateHashModel generateStaticModel(String packageName) {
+        try {
+            TemplateHashModel staticModels = wrapper.getStaticModels();
+            TemplateHashModel fileStatics = (TemplateHashModel) staticModels.get(packageName);
+            return fileStatics;
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/I18nUtil.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/I18nUtil.java
new file mode 100644
index 0000000..d378957
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/I18nUtil.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.xxl.job.admin.core.util;
+
+import com.vci.ubcs.xxl.job.admin.core.conf.XxlJobAdminConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.EncodedResource;
+import org.springframework.core.io.support.PropertiesLoaderUtils;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * i18n util
+ *
+ * @author xuxueli 2018-01-17 20:39:06
+ */
+public class I18nUtil {
+    private static Logger logger = LoggerFactory.getLogger(I18nUtil.class);
+
+    private static Properties prop = null;
+    public static Properties loadI18nProp(){
+        if (prop != null) {
+            return prop;
+        }
+        try {
+            // build i18n prop
+            String i18n = XxlJobAdminConfig.getAdminConfig().getI18n();
+            i18n = (i18n!=null && i18n.trim().length()>0)?("_"+i18n):i18n;
+            String i18nFile = MessageFormat.format("i18n/message{0}.properties", i18n);
+
+            // load prop
+            Resource Resource = new ClassPathResource(i18nFile);
+            EncodedResource encodedResource = new EncodedResource(Resource,"UTF-8");
+            prop = PropertiesLoaderUtils.loadProperties(encodedResource);
+        } catch (IOException e) {
+            logger.error(e.getMessage(), e);
+        }
+        return prop;
+    }
+
+    /**
+     * get val of i18n key
+     *
+     * @param key
+     * @return
+     */
+    public static String getString(String key) {
+        return loadI18nProp().getProperty(key);
+    }
+
+    /**
+     * get mult val of i18n mult key, as json
+     *
+     * @param keys
+     * @return
+     */
+    public static String getMultString(String... keys) {
+        Map<String, String> map = new HashMap<String, String>();
+
+        Properties prop = loadI18nProp();
+        if (keys!=null && keys.length>0) {
+            for (String key: keys) {
+                map.put(key, prop.getProperty(key));
+            }
+        } else {
+            for (String key: prop.stringPropertyNames()) {
+                map.put(key, prop.getProperty(key));
+            }
+        }
+
+        String json = JacksonUtil.writeValueAsString(map);
+        return json;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/JacksonUtil.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/JacksonUtil.java
new file mode 100644
index 0000000..1157ceb
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/JacksonUtil.java
@@ -0,0 +1,92 @@
+package com.vci.ubcs.xxl.job.admin.core.util;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+/**
+ * Jackson util
+ *
+ * 1銆乷bj need private and set/get锛�
+ * 2銆乨o not support inner class锛�
+ *
+ * @author xuxueli 2015-9-25 18:02:56
+ */
+public class JacksonUtil {
+	private static Logger logger = LoggerFactory.getLogger(JacksonUtil.class);
+
+    private final static ObjectMapper objectMapper = new ObjectMapper();
+    public static ObjectMapper getInstance() {
+        return objectMapper;
+    }
+
+    /**
+     * bean銆乤rray銆丩ist銆丮ap --> json
+     *
+     * @param obj
+     * @return json string
+     * @throws Exception
+     */
+    public static String writeValueAsString(Object obj) {
+    	try {
+			return getInstance().writeValueAsString(obj);
+		} catch (JsonGenerationException e) {
+			logger.error(e.getMessage(), e);
+		} catch (JsonMappingException e) {
+			logger.error(e.getMessage(), e);
+		} catch (IOException e) {
+			logger.error(e.getMessage(), e);
+		}
+        return null;
+    }
+
+    /**
+     * string --> bean銆丮ap銆丩ist(array)
+     *
+     * @param jsonStr
+     * @param clazz
+     * @return obj
+     * @throws Exception
+     */
+    public static <T> T readValue(String jsonStr, Class<T> clazz) {
+    	try {
+			return getInstance().readValue(jsonStr, clazz);
+		} catch (JsonParseException e) {
+			logger.error(e.getMessage(), e);
+		} catch (JsonMappingException e) {
+			logger.error(e.getMessage(), e);
+		} catch (IOException e) {
+			logger.error(e.getMessage(), e);
+		}
+    	return null;
+    }
+
+	/**
+	 * string --> List<Bean>...
+	 *
+	 * @param jsonStr
+	 * @param parametrized
+	 * @param parameterClasses
+	 * @param <T>
+	 * @return
+	 */
+	public static <T> T readValue(String jsonStr, Class<?> parametrized, Class<?>... parameterClasses) {
+		try {
+			JavaType javaType = getInstance().getTypeFactory().constructParametricType(parametrized, parameterClasses);
+			return getInstance().readValue(jsonStr, javaType);
+		} catch (JsonParseException e) {
+			logger.error(e.getMessage(), e);
+		} catch (JsonMappingException e) {
+			logger.error(e.getMessage(), e);
+		} catch (IOException e) {
+			logger.error(e.getMessage(), e);
+		}
+		return null;
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/LocalCacheUtil.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/LocalCacheUtil.java
new file mode 100644
index 0000000..3bd4d1f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/LocalCacheUtil.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.xxl.job.admin.core.util;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * local cache tool
+ *
+ * @author xuxueli 2018-01-22 21:37:34
+ */
+public class LocalCacheUtil {
+
+    private static ConcurrentMap<String, LocalCacheData> cacheRepository = new ConcurrentHashMap<String, LocalCacheData>();   // 绫诲瀷寤鸿鐢ㄦ娊璞$埗绫伙紝鍏煎鎬ф洿濂斤紱
+    private static class LocalCacheData{
+        private String key;
+        private Object val;
+        private long timeoutTime;
+
+        public LocalCacheData() {
+        }
+
+        public LocalCacheData(String key, Object val, long timeoutTime) {
+            this.key = key;
+            this.val = val;
+            this.timeoutTime = timeoutTime;
+        }
+
+        public String getKey() {
+            return key;
+        }
+
+        public void setKey(String key) {
+            this.key = key;
+        }
+
+        public Object getVal() {
+            return val;
+        }
+
+        public void setVal(Object val) {
+            this.val = val;
+        }
+
+        public long getTimeoutTime() {
+            return timeoutTime;
+        }
+
+        public void setTimeoutTime(long timeoutTime) {
+            this.timeoutTime = timeoutTime;
+        }
+    }
+
+
+    /**
+     * set cache
+     *
+     * @param key
+     * @param val
+     * @param cacheTime
+     * @return
+     */
+    public static boolean set(String key, Object val, long cacheTime){
+
+        // clean timeout cache, before set new cache (avoid cache too much)
+        cleanTimeoutCache();
+
+        // set new cache
+        if (key==null || key.trim().length()==0) {
+            return false;
+        }
+        if (val == null) {
+            remove(key);
+        }
+        if (cacheTime <= 0) {
+            remove(key);
+        }
+        long timeoutTime = System.currentTimeMillis() + cacheTime;
+        LocalCacheData localCacheData = new LocalCacheData(key, val, timeoutTime);
+        cacheRepository.put(localCacheData.getKey(), localCacheData);
+        return true;
+    }
+
+    /**
+     * remove cache
+     *
+     * @param key
+     * @return
+     */
+    public static boolean remove(String key){
+        if (key==null || key.trim().length()==0) {
+            return false;
+        }
+        cacheRepository.remove(key);
+        return true;
+    }
+
+    /**
+     * get cache
+     *
+     * @param key
+     * @return
+     */
+    public static Object get(String key){
+        if (key==null || key.trim().length()==0) {
+            return null;
+        }
+        LocalCacheData localCacheData = cacheRepository.get(key);
+        if (localCacheData!=null && System.currentTimeMillis()<localCacheData.getTimeoutTime()) {
+            return localCacheData.getVal();
+        } else {
+            remove(key);
+            return null;
+        }
+    }
+
+    /**
+     * clean timeout cache
+     *
+     * @return
+     */
+    public static boolean cleanTimeoutCache(){
+        if (!cacheRepository.keySet().isEmpty()) {
+            for (String key: cacheRepository.keySet()) {
+                LocalCacheData localCacheData = cacheRepository.get(key);
+                if (localCacheData!=null && System.currentTimeMillis()>=localCacheData.getTimeoutTime()) {
+                    cacheRepository.remove(key);
+                }
+            }
+        }
+        return true;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobGroupDao.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobGroupDao.java
new file mode 100644
index 0000000..32f94c7
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobGroupDao.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.xxl.job.admin.dao;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Created by xuxueli on 16/9/30.
+ */
+@Mapper
+public interface XxlJobGroupDao {
+
+    public List<XxlJobGroup> findAll();
+
+    public List<XxlJobGroup> findByAddressType(@Param("addressType") int addressType);
+
+    public int save(XxlJobGroup xxlJobGroup);
+
+    public int update(XxlJobGroup xxlJobGroup);
+
+    public int remove(@Param("id") int id);
+
+    public XxlJobGroup load(@Param("id") int id);
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobInfoDao.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobInfoDao.java
new file mode 100644
index 0000000..338799d
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobInfoDao.java
@@ -0,0 +1,49 @@
+package com.vci.ubcs.xxl.job.admin.dao;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * job info
+ * @author xuxueli 2016-1-12 18:03:45
+ */
+@Mapper
+public interface XxlJobInfoDao {
+
+	public List<XxlJobInfo> pageList(@Param("offset") int offset,
+                                     @Param("pagesize") int pagesize,
+                                     @Param("jobGroup") int jobGroup,
+                                     @Param("triggerStatus") int triggerStatus,
+                                     @Param("jobDesc") String jobDesc,
+                                     @Param("executorHandler") String executorHandler,
+                                     @Param("author") String author);
+	public int pageListCount(@Param("offset") int offset,
+							 @Param("pagesize") int pagesize,
+							 @Param("jobGroup") int jobGroup,
+							 @Param("triggerStatus") int triggerStatus,
+							 @Param("jobDesc") String jobDesc,
+							 @Param("executorHandler") String executorHandler,
+							 @Param("author") String author);
+
+	public int save(XxlJobInfo info);
+
+	public XxlJobInfo loadById(@Param("id") int id);
+
+	public int update(XxlJobInfo xxlJobInfo);
+
+	public int delete(@Param("id") long id);
+
+	public List<XxlJobInfo> getJobsByGroup(@Param("jobGroup") int jobGroup);
+
+	public int findAllCount();
+
+	public List<XxlJobInfo> scheduleJobQuery(@Param("maxNextTime") long maxNextTime, @Param("pagesize") int pagesize );
+
+	public int scheduleUpdate(XxlJobInfo xxlJobInfo);
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogDao.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogDao.java
new file mode 100644
index 0000000..9ebfdd8
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogDao.java
@@ -0,0 +1,60 @@
+package com.vci.ubcs.xxl.job.admin.dao;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLog;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * job log
+ * @author xuxueli 2016-1-12 18:03:06
+ */
+@Mapper
+public interface XxlJobLogDao {
+
+	// exist jobId not use jobGroup, not exist use jobGroup
+	public List<XxlJobLog> pageList(@Param("offset") int offset,
+                                    @Param("pagesize") int pagesize,
+                                    @Param("jobGroup") int jobGroup,
+                                    @Param("jobId") int jobId,
+                                    @Param("triggerTimeStart") Date triggerTimeStart,
+                                    @Param("triggerTimeEnd") Date triggerTimeEnd,
+                                    @Param("logStatus") int logStatus);
+	public int pageListCount(@Param("offset") int offset,
+							 @Param("pagesize") int pagesize,
+							 @Param("jobGroup") int jobGroup,
+							 @Param("jobId") int jobId,
+							 @Param("triggerTimeStart") Date triggerTimeStart,
+							 @Param("triggerTimeEnd") Date triggerTimeEnd,
+							 @Param("logStatus") int logStatus);
+
+	public XxlJobLog load(@Param("id") long id);
+
+	public long save(XxlJobLog xxlJobLog);
+
+	public int updateTriggerInfo(XxlJobLog xxlJobLog);
+
+	public int updateHandleInfo(XxlJobLog xxlJobLog);
+
+	public int delete(@Param("jobId") int jobId);
+
+	public Map<String, Object> findLogReport(@Param("from") Date from,
+											 @Param("to") Date to);
+
+	public List<Long> findClearLogIds(@Param("jobGroup") int jobGroup,
+									  @Param("jobId") int jobId,
+									  @Param("clearBeforeTime") Date clearBeforeTime,
+									  @Param("clearBeforeNum") int clearBeforeNum,
+									  @Param("pagesize") int pagesize);
+	public int clearLog(@Param("logIds") List<Long> logIds);
+
+	public List<Long> findFailJobLogIds(@Param("pagesize") int pagesize);
+
+	public int updateAlarmStatus(@Param("logId") long logId,
+								 @Param("oldAlarmStatus") int oldAlarmStatus,
+								 @Param("newAlarmStatus") int newAlarmStatus);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogGlueDao.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogGlueDao.java
new file mode 100644
index 0000000..e6d0733
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogGlueDao.java
@@ -0,0 +1,24 @@
+package com.vci.ubcs.xxl.job.admin.dao;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogGlue;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * job log for glue
+ * @author xuxueli 2016-5-19 18:04:56
+ */
+@Mapper
+public interface XxlJobLogGlueDao {
+
+	public int save(XxlJobLogGlue xxlJobLogGlue);
+
+	public List<XxlJobLogGlue> findByJobId(@Param("jobId") int jobId);
+
+	public int removeOld(@Param("jobId") int jobId, @Param("limit") int limit);
+
+	public int deleteByJobId(@Param("jobId") int jobId);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogReportDao.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogReportDao.java
new file mode 100644
index 0000000..7ce15ff
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogReportDao.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.xxl.job.admin.dao;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogReport;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * job log
+ * @author xuxueli 2019-11-22
+ */
+@Mapper
+public interface XxlJobLogReportDao {
+
+	public int save(XxlJobLogReport xxlJobLogReport);
+
+	public int update(XxlJobLogReport xxlJobLogReport);
+
+	public List<XxlJobLogReport> queryLogReport(@Param("triggerDayFrom") Date triggerDayFrom,
+												@Param("triggerDayTo") Date triggerDayTo);
+
+	public XxlJobLogReport queryLogReportTotal();
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobRegistryDao.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobRegistryDao.java
new file mode 100644
index 0000000..d11b9a2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobRegistryDao.java
@@ -0,0 +1,38 @@
+package com.vci.ubcs.xxl.job.admin.dao;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobRegistry;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by xuxueli on 16/9/30.
+ */
+@Mapper
+public interface XxlJobRegistryDao {
+
+    public List<Integer> findDead(@Param("timeout") int timeout,
+                                  @Param("nowTime") Date nowTime);
+
+    public int removeDead(@Param("ids") List<Integer> ids);
+
+    public List<XxlJobRegistry> findAll(@Param("timeout") int timeout,
+                                        @Param("nowTime") Date nowTime);
+
+    public int registryUpdate(@Param("registryGroup") String registryGroup,
+                              @Param("registryKey") String registryKey,
+                              @Param("registryValue") String registryValue,
+                              @Param("updateTime") Date updateTime);
+
+    public int registrySave(@Param("registryGroup") String registryGroup,
+                            @Param("registryKey") String registryKey,
+                            @Param("registryValue") String registryValue,
+                            @Param("updateTime") Date updateTime);
+
+    public int registryDelete(@Param("registryGroup") String registryGroup,
+                          @Param("registryKey") String registryKey,
+                          @Param("registryValue") String registryValue);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobUserDao.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobUserDao.java
new file mode 100644
index 0000000..2c5c313
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobUserDao.java
@@ -0,0 +1,31 @@
+package com.vci.ubcs.xxl.job.admin.dao;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
+/**
+ * @author xuxueli 2019-05-04 16:44:59
+ */
+@Mapper
+public interface XxlJobUserDao {
+
+	public List<XxlJobUser> pageList(@Param("offset") int offset,
+                                     @Param("pagesize") int pagesize,
+                                     @Param("username") String username,
+									 @Param("role") int role);
+	public int pageListCount(@Param("offset") int offset,
+							 @Param("pagesize") int pagesize,
+							 @Param("username") String username,
+							 @Param("role") int role);
+
+	public XxlJobUser loadByUserName(@Param("username") String username);
+
+	public int save(XxlJobUser xxlJobUser);
+
+	public int update(XxlJobUser xxlJobUser);
+
+	public int delete(@Param("id") int id);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/LoginService.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/LoginService.java
new file mode 100644
index 0000000..9fb3a7a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/LoginService.java
@@ -0,0 +1,106 @@
+package com.vci.ubcs.xxl.job.admin.service;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser;
+import com.vci.ubcs.xxl.job.admin.core.util.CookieUtil;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.core.util.JacksonUtil;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobUserDao;
+import com.xxl.job.core.biz.model.ReturnT;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.DigestUtils;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigInteger;
+
+/**
+ * @author xuxueli 2019-05-04 22:13:264
+ */
+@Configuration(proxyBeanMethods = false)
+public class LoginService {
+
+    public static final String LOGIN_IDENTITY_KEY = "XXL_JOB_LOGIN_IDENTITY";
+
+    @Resource
+    private XxlJobUserDao xxlJobUserDao;
+
+
+    private String makeToken(XxlJobUser xxlJobUser){
+        String tokenJson = JacksonUtil.writeValueAsString(xxlJobUser);
+        String tokenHex = new BigInteger(tokenJson.getBytes()).toString(16);
+        return tokenHex;
+    }
+    private XxlJobUser parseToken(String tokenHex){
+        XxlJobUser xxlJobUser = null;
+        if (tokenHex != null) {
+            String tokenJson = new String(new BigInteger(tokenHex, 16).toByteArray());      // username_password(md5)
+            xxlJobUser = JacksonUtil.readValue(tokenJson, XxlJobUser.class);
+        }
+        return xxlJobUser;
+    }
+
+
+    public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember){
+
+        // param
+        if (username==null || username.trim().length()==0 || password==null || password.trim().length()==0){
+            return new ReturnT<String>(500, I18nUtil.getString("login_param_empty"));
+        }
+
+        // valid passowrd
+        XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
+        if (xxlJobUser == null) {
+            return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
+        }
+        String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
+        if (!passwordMd5.equals(xxlJobUser.getPassword())) {
+            return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
+        }
+
+        String loginToken = makeToken(xxlJobUser);
+
+        // do login
+        CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember);
+        return ReturnT.SUCCESS;
+    }
+
+    /**
+     * logout
+     *
+     * @param request
+     * @param response
+     */
+    public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response){
+        CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY);
+        return ReturnT.SUCCESS;
+    }
+
+    /**
+     * logout
+     *
+     * @param request
+     * @return
+     */
+    public XxlJobUser ifLogin(HttpServletRequest request, HttpServletResponse response){
+        String cookieToken = CookieUtil.getValue(request, LOGIN_IDENTITY_KEY);
+        if (cookieToken != null) {
+            XxlJobUser cookieUser = null;
+            try {
+                cookieUser = parseToken(cookieToken);
+            } catch (Exception e) {
+                logout(request, response);
+            }
+            if (cookieUser != null) {
+                XxlJobUser dbUser = xxlJobUserDao.loadByUserName(cookieUser.getUsername());
+                if (dbUser != null) {
+                    if (cookieUser.getPassword().equals(dbUser.getPassword())) {
+                        return dbUser;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/XxlJobService.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/XxlJobService.java
new file mode 100644
index 0000000..4f769e5
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/XxlJobService.java
@@ -0,0 +1,86 @@
+package com.vci.ubcs.xxl.job.admin.service;
+
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.xxl.job.core.biz.model.ReturnT;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * core job action for xxl-job
+ *
+ * @author xuxueli 2016-5-28 15:30:33
+ */
+public interface XxlJobService {
+
+	/**
+	 * page list
+	 *
+	 * @param start
+	 * @param length
+	 * @param jobGroup
+	 * @param jobDesc
+	 * @param executorHandler
+	 * @param author
+	 * @return
+	 */
+	public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author);
+
+	/**
+	 * add job
+	 *
+	 * @param jobInfo
+	 * @return
+	 */
+	public ReturnT<String> add(XxlJobInfo jobInfo);
+
+	/**
+	 * update job
+	 *
+	 * @param jobInfo
+	 * @return
+	 */
+	public ReturnT<String> update(XxlJobInfo jobInfo);
+
+	/**
+	 * remove job
+	 * 	 *
+	 * @param id
+	 * @return
+	 */
+	public ReturnT<String> remove(int id);
+
+	/**
+	 * start job
+	 *
+	 * @param id
+	 * @return
+	 */
+	public ReturnT<String> start(int id);
+
+	/**
+	 * stop job
+	 *
+	 * @param id
+	 * @return
+	 */
+	public ReturnT<String> stop(int id);
+
+	/**
+	 * dashboard info
+	 *
+	 * @return
+	 */
+	public Map<String,Object> dashboardInfo();
+
+	/**
+	 * chart info
+	 *
+	 * @param startDate
+	 * @param endDate
+	 * @return
+	 */
+	public ReturnT<Map<String,Object>> chartInfo(Date startDate, Date endDate);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/AdminBizImpl.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/AdminBizImpl.java
new file mode 100644
index 0000000..261c762
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/AdminBizImpl.java
@@ -0,0 +1,171 @@
+package com.vci.ubcs.xxl.job.admin.service.impl;
+
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLog;
+import com.vci.ubcs.xxl.job.admin.core.thread.JobTriggerPoolHelper;
+import com.vci.ubcs.xxl.job.admin.core.trigger.TriggerTypeEnum;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobGroupDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobInfoDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobLogDao;
+import com.vci.ubcs.xxl.job.admin.dao.XxlJobRegistryDao;
+import com.xxl.job.core.biz.AdminBiz;
+import com.xxl.job.core.biz.model.HandleCallbackParam;
+import com.xxl.job.core.biz.model.RegistryParam;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.IJobHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author xuxueli 2017-07-27 21:54:20
+ */
+@Service
+public class AdminBizImpl implements AdminBiz {
+    private static Logger logger = LoggerFactory.getLogger(AdminBizImpl.class);
+
+    @Resource
+    public XxlJobLogDao xxlJobLogDao;
+    @Resource
+    private XxlJobInfoDao xxlJobInfoDao;
+    @Resource
+    private XxlJobRegistryDao xxlJobRegistryDao;
+    @Resource
+    private XxlJobGroupDao xxlJobGroupDao;
+
+
+    @Override
+    public ReturnT<String> callback(List<HandleCallbackParam> callbackParamList) {
+        for (HandleCallbackParam handleCallbackParam: callbackParamList) {
+            ReturnT<String> callbackResult = callback(handleCallbackParam);
+            logger.debug(">>>>>>>>> JobApiController.callback {}, handleCallbackParam={}, callbackResult={}",
+                    (callbackResult.getCode()==IJobHandler.SUCCESS.getCode()?"success":"fail"), handleCallbackParam, callbackResult);
+        }
+
+        return ReturnT.SUCCESS;
+    }
+
+    private ReturnT<String> callback(HandleCallbackParam handleCallbackParam) {
+        // valid log item
+        XxlJobLog log = xxlJobLogDao.load(handleCallbackParam.getLogId());
+        if (log == null) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, "log item not found.");
+        }
+        if (log.getHandleCode() > 0) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, "log repeate callback.");     // avoid repeat callback, trigger child job etc
+        }
+
+        // trigger success, to trigger child job
+        String callbackMsg = null;
+        if (IJobHandler.SUCCESS.getCode() == handleCallbackParam.getExecuteResult().getCode()) {
+            XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(log.getJobId());
+            if (xxlJobInfo!=null && xxlJobInfo.getChildJobId()!=null && xxlJobInfo.getChildJobId().trim().length()>0) {
+                callbackMsg = "<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_child_run") +"<<<<<<<<<<< </span><br>";
+
+                String[] childJobIds = xxlJobInfo.getChildJobId().split(",");
+                for (int i = 0; i < childJobIds.length; i++) {
+                    int childJobId = (childJobIds[i]!=null && childJobIds[i].trim().length()>0 && isNumeric(childJobIds[i]))?Integer.valueOf(childJobIds[i]):-1;
+                    if (childJobId > 0) {
+
+                        JobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, -1, null, null);
+                        ReturnT<String> triggerChildResult = ReturnT.SUCCESS;
+
+                        // add msg
+                        callbackMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg1"),
+                                (i+1),
+                                childJobIds.length,
+                                childJobIds[i],
+                                (triggerChildResult.getCode()==ReturnT.SUCCESS_CODE?I18nUtil.getString("system_success"):I18nUtil.getString("system_fail")),
+                                triggerChildResult.getMsg());
+                    } else {
+                        callbackMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg2"),
+                                (i+1),
+                                childJobIds.length,
+                                childJobIds[i]);
+                    }
+                }
+
+            }
+        }
+
+        // handle msg
+        StringBuffer handleMsg = new StringBuffer();
+        if (log.getHandleMsg()!=null) {
+            handleMsg.append(log.getHandleMsg()).append("<br>");
+        }
+        if (handleCallbackParam.getExecuteResult().getMsg() != null) {
+            handleMsg.append(handleCallbackParam.getExecuteResult().getMsg());
+        }
+        if (callbackMsg != null) {
+            handleMsg.append(callbackMsg);
+        }
+
+        // success, save log
+        log.setHandleTime(new Date());
+        log.setHandleCode(handleCallbackParam.getExecuteResult().getCode());
+        log.setHandleMsg(handleMsg.toString());
+        xxlJobLogDao.updateHandleInfo(log);
+
+        return ReturnT.SUCCESS;
+    }
+
+    private boolean isNumeric(String str){
+        try {
+            int result = Integer.valueOf(str);
+            return true;
+        } catch (NumberFormatException e) {
+            return false;
+        }
+    }
+
+    @Override
+    public ReturnT<String> registry(RegistryParam registryParam) {
+
+        // valid
+        if (!StringUtils.hasText(registryParam.getRegistryGroup())
+                || !StringUtils.hasText(registryParam.getRegistryKey())
+                || !StringUtils.hasText(registryParam.getRegistryValue())) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, "Illegal Argument.");
+        }
+
+        int ret = xxlJobRegistryDao.registryUpdate(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date());
+        if (ret < 1) {
+            xxlJobRegistryDao.registrySave(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date());
+
+            // fresh
+            freshGroupRegistryInfo(registryParam);
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    @Override
+    public ReturnT<String> registryRemove(RegistryParam registryParam) {
+
+        // valid
+        if (!StringUtils.hasText(registryParam.getRegistryGroup())
+                || !StringUtils.hasText(registryParam.getRegistryKey())
+                || !StringUtils.hasText(registryParam.getRegistryValue())) {
+            return new ReturnT<String>(ReturnT.FAIL_CODE, "Illegal Argument.");
+        }
+
+        int ret = xxlJobRegistryDao.registryDelete(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue());
+        if (ret > 0) {
+
+            // fresh
+            freshGroupRegistryInfo(registryParam);
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private void freshGroupRegistryInfo(RegistryParam registryParam){
+        // Under consideration, prevent affecting core tables
+    }
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/XxlJobServiceImpl.java
new file mode 100644
index 0000000..31c4818
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/XxlJobServiceImpl.java
@@ -0,0 +1,372 @@
+package com.vci.ubcs.xxl.job.admin.service.impl;
+
+import com.vci.ubcs.xxl.job.admin.core.cron.CronExpression;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo;
+import com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogReport;
+import com.vci.ubcs.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
+import com.vci.ubcs.xxl.job.admin.core.thread.JobScheduleHelper;
+import com.vci.ubcs.xxl.job.admin.core.util.I18nUtil;
+import com.vci.ubcs.xxl.job.admin.dao.*;
+import com.vci.ubcs.xxl.job.admin.service.XxlJobService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
+import com.xxl.job.core.glue.GlueTypeEnum;
+import com.xxl.job.core.util.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.MessageFormat;
+import java.text.ParseException;
+import java.util.*;
+
+/**
+ * core job action for xxl-job
+ * @author xuxueli 2016-5-28 15:30:33
+ */
+@Service
+public class XxlJobServiceImpl implements XxlJobService {
+	private static Logger logger = LoggerFactory.getLogger(XxlJobServiceImpl.class);
+
+	@Resource
+	private XxlJobGroupDao xxlJobGroupDao;
+	@Resource
+	private XxlJobInfoDao xxlJobInfoDao;
+	@Resource
+	public XxlJobLogDao xxlJobLogDao;
+	@Resource
+	private XxlJobLogGlueDao xxlJobLogGlueDao;
+	@Resource
+	private XxlJobLogReportDao xxlJobLogReportDao;
+
+	@Override
+	public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
+
+		// page list
+		List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
+		int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
+
+		// package result
+		Map<String, Object> maps = new HashMap<String, Object>();
+	    maps.put("recordsTotal", list_count);		// 鎬昏褰曟暟
+	    maps.put("recordsFiltered", list_count);	// 杩囨护鍚庣殑鎬昏褰曟暟
+	    maps.put("data", list);  					// 鍒嗛〉鍒楄〃
+		return maps;
+	}
+
+	@Override
+	public ReturnT<String> add(XxlJobInfo jobInfo) {
+		// valid
+		XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup());
+		if (group == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")) );
+		}
+		if (!CronExpression.isValidExpression(jobInfo.getJobCron())) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid") );
+		}
+		if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );
+		}
+		if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );
+		}
+		if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );
+		}
+		if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
+		}
+		if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) );
+		}
+		if (GlueTypeEnum.BEAN==GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler()==null || jobInfo.getExecutorHandler().trim().length()==0) ) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+"JobHandler") );
+		}
+
+		// fix "\r" in shell
+		if (GlueTypeEnum.GLUE_SHELL==GlueTypeEnum.match(jobInfo.getGlueType()) && jobInfo.getGlueSource()!=null) {
+			jobInfo.setGlueSource(jobInfo.getGlueSource().replaceAll("\r", ""));
+		}
+
+		// ChildJobId valid
+        if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {
+			String[] childJobIds = jobInfo.getChildJobId().split(",");
+			for (String childJobIdItem: childJobIds) {
+				if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {
+					XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
+					if (childJobInfo==null) {
+						return new ReturnT<String>(ReturnT.FAIL_CODE,
+								MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));
+					}
+				} else {
+					return new ReturnT<String>(ReturnT.FAIL_CODE,
+							MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));
+				}
+			}
+
+			// join , avoid "xxx,,"
+			String temp = "";
+			for (String item:childJobIds) {
+				temp += item + ",";
+			}
+			temp = temp.substring(0, temp.length()-1);
+
+			jobInfo.setChildJobId(temp);
+		}
+
+		// add in db
+		jobInfo.setAddTime(new Date());
+		jobInfo.setUpdateTime(new Date());
+		jobInfo.setGlueUpdatetime(new Date());
+		xxlJobInfoDao.save(jobInfo);
+		if (jobInfo.getId() < 1) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) );
+		}
+
+		return new ReturnT<String>(String.valueOf(jobInfo.getId()));
+	}
+
+	private boolean isNumeric(String str){
+		try {
+			int result = Integer.valueOf(str);
+			return true;
+		} catch (NumberFormatException e) {
+			return false;
+		}
+	}
+
+	@Override
+	public ReturnT<String> update(XxlJobInfo jobInfo) {
+
+		// valid
+		if (!CronExpression.isValidExpression(jobInfo.getJobCron())) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid") );
+		}
+		if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );
+		}
+		if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );
+		}
+		if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );
+		}
+		if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
+		}
+
+		// ChildJobId valid
+        if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {
+			String[] childJobIds = jobInfo.getChildJobId().split(",");
+			for (String childJobIdItem: childJobIds) {
+				if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {
+					XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
+					if (childJobInfo==null) {
+						return new ReturnT<String>(ReturnT.FAIL_CODE,
+								MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));
+					}
+				} else {
+					return new ReturnT<String>(ReturnT.FAIL_CODE,
+							MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));
+				}
+			}
+
+			// join , avoid "xxx,,"
+			String temp = "";
+			for (String item:childJobIds) {
+				temp += item + ",";
+			}
+			temp = temp.substring(0, temp.length()-1);
+
+			jobInfo.setChildJobId(temp);
+		}
+
+		// group valid
+		XxlJobGroup jobGroup = xxlJobGroupDao.load(jobInfo.getJobGroup());
+		if (jobGroup == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_jobgroup")+I18nUtil.getString("system_unvalid")) );
+		}
+
+		// stage job info
+		XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(jobInfo.getId());
+		if (exists_jobInfo == null) {
+			return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_id")+I18nUtil.getString("system_not_found")) );
+		}
+
+		// next trigger time (5s鍚庣敓鏁堬紝閬垮紑棰勮鍛ㄦ湡)
+		long nextTriggerTime = exists_jobInfo.getTriggerNextTime();
+		if (exists_jobInfo.getTriggerStatus() == 1 && !jobInfo.getJobCron().equals(exists_jobInfo.getJobCron()) ) {
+			try {
+				Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
+				if (nextValidTime == null) {
+					return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_never_fire"));
+				}
+				nextTriggerTime = nextValidTime.getTime();
+			} catch (ParseException e) {
+				logger.error(e.getMessage(), e);
+				return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")+" | "+ e.getMessage());
+			}
+		}
+
+		exists_jobInfo.setJobGroup(jobInfo.getJobGroup());
+		exists_jobInfo.setJobCron(jobInfo.getJobCron());
+		exists_jobInfo.setJobDesc(jobInfo.getJobDesc());
+		exists_jobInfo.setAuthor(jobInfo.getAuthor());
+		exists_jobInfo.setAlarmEmail(jobInfo.getAlarmEmail());
+		exists_jobInfo.setExecutorRouteStrategy(jobInfo.getExecutorRouteStrategy());
+		exists_jobInfo.setExecutorHandler(jobInfo.getExecutorHandler());
+		exists_jobInfo.setExecutorParam(jobInfo.getExecutorParam());
+		exists_jobInfo.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
+		exists_jobInfo.setExecutorTimeout(jobInfo.getExecutorTimeout());
+		exists_jobInfo.setExecutorFailRetryCount(jobInfo.getExecutorFailRetryCount());
+		exists_jobInfo.setChildJobId(jobInfo.getChildJobId());
+		exists_jobInfo.setTriggerNextTime(nextTriggerTime);
+
+		exists_jobInfo.setUpdateTime(new Date());
+        xxlJobInfoDao.update(exists_jobInfo);
+
+
+		return ReturnT.SUCCESS;
+	}
+
+	@Override
+	public ReturnT<String> remove(int id) {
+		XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
+		if (xxlJobInfo == null) {
+			return ReturnT.SUCCESS;
+		}
+
+		xxlJobInfoDao.delete(id);
+		xxlJobLogDao.delete(id);
+		xxlJobLogGlueDao.deleteByJobId(id);
+		return ReturnT.SUCCESS;
+	}
+
+	@Override
+	public ReturnT<String> start(int id) {
+		XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
+
+		// next trigger time (5s鍚庣敓鏁堬紝閬垮紑棰勮鍛ㄦ湡)
+		long nextTriggerTime = 0;
+		try {
+			Date nextValidTime = new CronExpression(xxlJobInfo.getJobCron()).getNextValidTimeAfter(new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
+			if (nextValidTime == null) {
+				return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_never_fire"));
+			}
+			nextTriggerTime = nextValidTime.getTime();
+		} catch (ParseException e) {
+			logger.error(e.getMessage(), e);
+			return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")+" | "+ e.getMessage());
+		}
+
+		xxlJobInfo.setTriggerStatus(1);
+		xxlJobInfo.setTriggerLastTime(0);
+		xxlJobInfo.setTriggerNextTime(nextTriggerTime);
+
+		xxlJobInfo.setUpdateTime(new Date());
+		xxlJobInfoDao.update(xxlJobInfo);
+		return ReturnT.SUCCESS;
+	}
+
+	@Override
+	public ReturnT<String> stop(int id) {
+        XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
+
+		xxlJobInfo.setTriggerStatus(0);
+		xxlJobInfo.setTriggerLastTime(0);
+		xxlJobInfo.setTriggerNextTime(0);
+
+		xxlJobInfo.setUpdateTime(new Date());
+		xxlJobInfoDao.update(xxlJobInfo);
+		return ReturnT.SUCCESS;
+	}
+
+	@Override
+	public Map<String, Object> dashboardInfo() {
+
+		int jobInfoCount = xxlJobInfoDao.findAllCount();
+		int jobLogCount = 0;
+		int jobLogSuccessCount = 0;
+		XxlJobLogReport xxlJobLogReport = xxlJobLogReportDao.queryLogReportTotal();
+		if (xxlJobLogReport != null) {
+			jobLogCount = xxlJobLogReport.getRunningCount() + xxlJobLogReport.getSucCount() + xxlJobLogReport.getFailCount();
+			jobLogSuccessCount = xxlJobLogReport.getSucCount();
+		}
+
+		// executor count
+		Set<String> executorAddressSet = new HashSet<String>();
+		List<XxlJobGroup> groupList = xxlJobGroupDao.findAll();
+
+		if (groupList!=null && !groupList.isEmpty()) {
+			for (XxlJobGroup group: groupList) {
+				if (group.getRegistryList()!=null && !group.getRegistryList().isEmpty()) {
+					executorAddressSet.addAll(group.getRegistryList());
+				}
+			}
+		}
+
+		int executorCount = executorAddressSet.size();
+
+		Map<String, Object> dashboardMap = new HashMap<String, Object>();
+		dashboardMap.put("jobInfoCount", jobInfoCount);
+		dashboardMap.put("jobLogCount", jobLogCount);
+		dashboardMap.put("jobLogSuccessCount", jobLogSuccessCount);
+		dashboardMap.put("executorCount", executorCount);
+		return dashboardMap;
+	}
+
+	@Override
+	public ReturnT<Map<String, Object>> chartInfo(Date startDate, Date endDate) {
+
+		// process
+		List<String> triggerDayList = new ArrayList<String>();
+		List<Integer> triggerDayCountRunningList = new ArrayList<Integer>();
+		List<Integer> triggerDayCountSucList = new ArrayList<Integer>();
+		List<Integer> triggerDayCountFailList = new ArrayList<Integer>();
+		int triggerCountRunningTotal = 0;
+		int triggerCountSucTotal = 0;
+		int triggerCountFailTotal = 0;
+
+		List<XxlJobLogReport> logReportList = xxlJobLogReportDao.queryLogReport(startDate, endDate);
+
+		if (logReportList!=null && logReportList.size()>0) {
+			for (XxlJobLogReport item: logReportList) {
+				String day = DateUtil.formatDate(item.getTriggerDay());
+				int triggerDayCountRunning = item.getRunningCount();
+				int triggerDayCountSuc = item.getSucCount();
+				int triggerDayCountFail = item.getFailCount();
+
+				triggerDayList.add(day);
+				triggerDayCountRunningList.add(triggerDayCountRunning);
+				triggerDayCountSucList.add(triggerDayCountSuc);
+				triggerDayCountFailList.add(triggerDayCountFail);
+
+				triggerCountRunningTotal += triggerDayCountRunning;
+				triggerCountSucTotal += triggerDayCountSuc;
+				triggerCountFailTotal += triggerDayCountFail;
+			}
+		} else {
+			for (int i = -6; i <= 0; i++) {
+				triggerDayList.add(DateUtil.formatDate(DateUtil.addDays(new Date(), i)));
+				triggerDayCountRunningList.add(0);
+				triggerDayCountSucList.add(0);
+				triggerDayCountFailList.add(0);
+			}
+		}
+
+		Map<String, Object> result = new HashMap<String, Object>();
+		result.put("triggerDayList", triggerDayList);
+		result.put("triggerDayCountRunningList", triggerDayCountRunningList);
+		result.put("triggerDayCountSucList", triggerDayCountSucList);
+		result.put("triggerDayCountFailList", triggerDayCountFailList);
+
+		result.put("triggerCountRunningTotal", triggerCountRunningTotal);
+		result.put("triggerCountSucTotal", triggerCountSucTotal);
+		result.put("triggerCountFailTotal", triggerCountFailTotal);
+
+		return new ReturnT<Map<String, Object>>(result);
+	}
+
+}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application-test.yml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application.yml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application.yml
new file mode 100644
index 0000000..fd9a6b1
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application.yml
@@ -0,0 +1,61 @@
+server:
+  port: 36013
+  servlet:
+    context-path: /xxl-job-admin
+
+spring:
+  cloud:
+    nacos:
+      discovery:
+        metadata:
+          management:
+            context-path: ${server.servlet.context-path}/actuator
+  freemarker:
+    charset: UTF-8
+    request-context-attribute: request
+    settings:
+      number_format: 0.##########
+    suffix: .ftl
+    templateLoaderPath: classpath:/templates/
+  mail:
+    host: smtp.qq.com
+    password: xxx
+    port: 25
+    properties:
+      mail:
+        smtp:
+          auth: true
+          socketFactory:
+            class: javax.net.ssl.SSLSocketFactory
+          starttls:
+            enable: true
+            required: true
+    username: xxx@qq.com
+  mvc:
+    servlet:
+      load-on-startup: 0
+    static-path-pattern: /static/**
+  resources:
+    static-locations: classpath:/static/
+
+management:
+  health:
+    mail:
+      enabled: false
+  server:
+    servlet:
+      context-path: /actuator
+mybatis:
+  mapper-locations: classpath:/mybatis-mapper/*Mapper.xml
+
+xxl:
+  job:
+    accessToken: ''
+    i18n: ''
+    logretentiondays: 30
+    triggerpool:
+      fast:
+        max: 200
+      slow:
+        max: 100
+
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/i18n/message.properties b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message.properties
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/i18n/message.properties
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message.properties
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message_en.properties b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message_en.properties
new file mode 100644
index 0000000..813761b
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message_en.properties
@@ -0,0 +1,262 @@
+admin_name=Scheduling Center
+admin_name_full=Distributed Task Scheduling Platform XXL-JOB
+admin_version=2.1.2
+admin_i18n=en
+
+## system
+system_tips=System message
+system_ok=Confirm
+system_close=Close
+system_save=Save
+system_cancel=Cancel
+system_search=Search
+system_status=Status
+system_opt=Operate
+system_please_input=please input
+system_please_choose=please choose
+system_success=success
+system_fail=fail
+system_add_suc=add success
+system_add_fail=add fail
+system_update_suc=update success
+system_update_fail=update fail
+system_all=All
+system_api_error=net error
+system_show=Show
+system_empty=Empty
+system_opt_suc=operate success
+system_opt_fail=operate fail
+system_opt_edit=Edit
+system_opt_del=Delete
+system_unvalid=illegal
+system_not_found=not exist
+system_nav=Navigation
+system_digits=digits
+system_lengh_limit=Length limit
+system_permission_limit=Permission limit
+system_welcome=Welcome
+
+## daterangepicker
+daterangepicker_ranges_recent_hour=recent one hour
+daterangepicker_ranges_today=today
+daterangepicker_ranges_yesterday=yesterday
+daterangepicker_ranges_this_month=this month
+daterangepicker_ranges_last_month=last month
+daterangepicker_ranges_recent_week=recent one week
+daterangepicker_ranges_recent_month=recent one month
+daterangepicker_custom_name=custom
+daterangepicker_custom_starttime=start time
+daterangepicker_custom_endtime=end time
+daterangepicker_custom_daysofweek=Sun,Mon,Tue,Wed,Thu,Fri,Sat
+daterangepicker_custom_monthnames=Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
+
+## dataTable
+dataTable_sProcessing=processing...
+dataTable_sLengthMenu= _MENU_ records per page
+dataTable_sZeroRecords=No matching results
+dataTable_sInfo=page _PAGE_  ( Total _PAGES_ pages锛宊TOTAL_ records )
+dataTable_sInfoEmpty=No Record
+dataTable_sInfoFiltered=(Filtered by _MAX_ results)
+dataTable_sSearch=Search
+dataTable_sEmptyTable=Table data is empty
+dataTable_sLoadingRecords=Loading...
+dataTable_sFirst=FIRST PAGE
+dataTable_sPrevious=Previous Page
+dataTable_sNext=Next Page
+dataTable_sLast=LAST PAGE
+dataTable_sSortAscending=: Rank this column in ascending order
+dataTable_sSortDescending=: Rank this column in descending order
+
+## login
+login_btn=Login
+login_remember_me=Remember Me
+login_username_placeholder=Please enter username
+login_password_placeholder=Please enter password
+login_username_empty=Please enter username
+login_username_lt_4=Username length should not be less than 4
+login_password_empty=Please enter password
+login_password_lt_4=Password length should not be less than 4
+login_success=Login success
+login_fail=Login fail
+login_param_empty=Username or password is empty
+login_param_unvalid=Username or password error
+
+## logout
+logout_btn=Logout
+logout_confirm=Confirm logout?
+logout_success=Logout success
+logout_fail=Logout fail
+
+## change pwd
+change_pwd=Change password
+change_pwd_suc_to_logout=Change password successful, about to log out login
+change_pwd_field_newpwd=new password
+
+## dashboard
+job_dashboard_name=Run report
+job_dashboard_job_num=Job number
+job_dashboard_job_num_tip=The number of tasks running in the scheduling center
+job_dashboard_trigger_num=trigger number
+job_dashboard_trigger_num_tip=The number of trigger record scheduled by the scheduling center
+job_dashboard_jobgroup_num=Executor number
+job_dashboard_jobgroup_num_tip=The number of online executor machines perceived by the scheduling center
+job_dashboard_report=Scheduling report
+job_dashboard_report_loaddata_fail=Scheduling report load data error
+job_dashboard_date_report=Date distribution
+job_dashboard_rate_report=Percentage distribution
+
+## job info
+jobinfo_name=Job Manage
+jobinfo_job=Job
+jobinfo_field_add=Add Job
+jobinfo_field_update=Edit Job
+jobinfo_field_id=Job ID
+jobinfo_field_jobgroup=Executor
+jobinfo_field_jobdesc=Job description
+jobinfo_field_timeout=Job timeout period
+jobinfo_field_gluetype=GLUE Type
+jobinfo_field_executorparam=Param
+jobinfo_field_cron_unvalid=The Cron is illegal
+jobinfo_field_cron_never_fire=The Cron will never fire
+jobinfo_field_author=Author
+jobinfo_field_alarmemail=Alarm email
+jobinfo_field_alarmemail_placeholder=Please enter alarm mail, if there are more than one comma separated
+jobinfo_field_executorRouteStrategy=Route Strategy
+jobinfo_field_childJobId=Child Job ID
+jobinfo_field_childJobId_placeholder=Please enter the Child job ID, if there are more than one comma separated
+jobinfo_field_executorBlockStrategy=Block Strategy
+jobinfo_field_executorFailRetryCount=Fail Retry Count
+jobinfo_field_executorFailRetryCount_placeholder=Fail Retry Count. effect if greater than zero
+jobinfo_script_location=Script location
+jobinfo_shard_index=Shard index
+jobinfo_shard_total=Shard total
+jobinfo_opt_stop=Stop
+jobinfo_opt_start=Start
+jobinfo_opt_log=Query Log
+jobinfo_opt_run=Run Once
+jobinfo_opt_registryinfo=Registry Info
+jobinfo_opt_next_time=Next trigger time
+jobinfo_glue_remark=Resource Remark
+jobinfo_glue_remark_limit=Resource Remark length is limited to 4~100
+jobinfo_glue_rollback=Version Backtrack
+jobinfo_glue_jobid_unvalid=Job ID is illegal
+jobinfo_glue_gluetype_unvalid=The job is not GLUE Type
+jobinfo_field_executorTimeout_placeholder=Job Timeout period锛宨n seconds. effect if greater than zero
+
+## job log
+joblog_name=Trigger Log
+joblog_status=Status
+joblog_status_all=All
+joblog_status_suc=Success
+joblog_status_fail=Fail
+joblog_status_running=Running
+joblog_field_triggerTime=Trigger Time
+joblog_field_triggerCode=Trigger Result
+joblog_field_triggerMsg=Trigger Msg
+joblog_field_handleTime=Handle Time
+joblog_field_handleCode=Handle Result
+joblog_field_handleMsg=Trigger Msg
+joblog_field_executorAddress=Executor Address
+joblog_clean=Clean
+joblog_clean_log=Clean Log
+joblog_clean_type=Clean Type
+joblog_clean_type_1=Clean up log data a month ago
+joblog_clean_type_2=Clean up log data three month ago
+joblog_clean_type_3=Clean up log data six month ago
+joblog_clean_type_4=Clean up log data a year ago
+joblog_clean_type_5=Clean up log data a thousand record ago
+joblog_clean_type_6=Clean up log data ten thousand record ago
+joblog_clean_type_7=Clean up log data thirty thousand record ago
+joblog_clean_type_8=Clean up log data hundred thousand record ago
+joblog_clean_type_9=Clean up all log data
+joblog_clean_type_unvalid=Clean type is illegal
+joblog_handleCode_200=Success
+joblog_handleCode_500=Fail
+joblog_handleCode_502=Timeout
+joblog_kill_log=Kill Job
+joblog_kill_log_limit=Trigger Fail, can not kill job
+joblog_kill_log_byman=Manual operation to active kill job
+joblog_rolling_log=Rolling log
+joblog_rolling_log_refresh=Refresh
+joblog_rolling_log_triggerfail=The job trigger fail, can not view the rolling log
+joblog_rolling_log_failoften=The request for the Rolling log is terminated, the number of failed requests exceeds the limit, Reload the log on the refresh page
+joblog_logid_unvalid=Log ID is illegal
+
+## job group
+jobgroup_name=Executor Manage
+jobgroup_list=Executor List
+jobgroup_add=Add Executor
+jobgroup_edit=Edit Executor
+jobgroup_del=Delete Executor
+jobgroup_field_order=Order
+jobgroup_field_title=Title
+jobgroup_field_addressType=Registry Type
+jobgroup_field_addressType_0=Automatic registration
+jobgroup_field_addressType_1=Manual registration
+jobgroup_field_addressType_limit=Manually registration type, the machine address must not be empty
+jobgroup_field_registryList=machine address
+jobgroup_field_registryList_unvalid=registry machine address is illegal
+jobgroup_field_registryList_placeholder=Please enter the machine address, if there are more than one comma separated
+jobgroup_field_appName_limit=Limit the beginning of a lowercase letter, consists of lowercase letters銆乶umber and hyphen.
+jobgroup_field_appName_length=AppName length is limited to 4~64
+jobgroup_field_title_length=Title length is limited to 4~12
+jobgroup_field_order_digits=Please enter a positive integer
+jobgroup_field_orderrange=Order is limited to 1~1000
+jobgroup_del_limit_0=Refuse to delete, the executor is being used
+jobgroup_del_limit_1=Refuses to delete, the system retains at least one executor
+jobgroup_empty=There is no valid executor. Please contact the administrator
+
+## job conf
+jobconf_block_SERIAL_EXECUTION=Serial execution
+jobconf_block_DISCARD_LATER=Discard Later
+jobconf_block_COVER_EARLY=Cover Early
+jobconf_route_first=First
+jobconf_route_last=Last
+jobconf_route_round=Round
+jobconf_route_random=Random
+jobconf_route_consistenthash=Consistent Hash
+jobconf_route_lfu=Least Frequently Used
+jobconf_route_lru=Least Recently Used
+jobconf_route_failover=Failover
+jobconf_route_busyover=Busyover
+jobconf_route_shard=Sharding Broadcast
+jobconf_idleBeat=Idle check
+jobconf_beat=Heartbeats
+jobconf_monitor=Task Scheduling Center monitor alarm
+jobconf_monitor_detail=monitor alarm details
+jobconf_monitor_alarm_title=Alarm Type
+jobconf_monitor_alarm_type=Trigger Fail
+jobconf_monitor_alarm_content=Alarm Content
+jobconf_trigger_admin_adress=Trigger machine address
+jobconf_trigger_exe_regtype=Execotor-Registry Type
+jobconf_trigger_exe_regaddress=Execotor-Registry Address
+jobconf_trigger_address_empty=Trigger Fail锛歳egistry address is empty
+jobconf_trigger_run=Trigger Job
+jobconf_trigger_child_run=Trigger child job
+jobconf_callback_child_msg1={0}/{1} [Job ID={2}], Trigger {3}, Trigger msg: {4} <br>
+jobconf_callback_child_msg2={0}/{1} [Job ID={2}], Trigger Fail, Trigger msg: Job ID is illegal <br>
+jobconf_trigger_type=Job trigger type
+jobconf_trigger_type_cron=Cron trigger
+jobconf_trigger_type_manual=Manual trigger
+jobconf_trigger_type_parent=Parent job trigger
+jobconf_trigger_type_api=Api trigger
+jobconf_trigger_type_retry=Fail retry trigger
+
+## user
+user_manage=User Manage
+user_username=Username
+user_password=Password
+user_role=Role
+user_role_admin=Admin User
+user_role_normal=Normal User
+user_permission=Permission
+user_add=Add User
+user_update=Edit User
+user_username_repeat=Username Repeat
+user_username_valid=Restrictions start with a lowercase letter and consist of lowercase letters and Numbers
+user_password_update_placeholder=Please input password, empty means not update
+user_update_loginuser_limit=Operation of current login account is not allowed
+
+## help
+job_help=Tutorial
+job_help_document=Official Document
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/logback.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/logback.xml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/logback.xml
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/logback.xml
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
new file mode 100644
index 0000000..3164216
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.xxl.job.admin.dao.XxlJobGroupDao">
+
+	<resultMap id="XxlJobGroup" type="com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup" >
+		<result column="id" property="id" />
+	    <result column="app_name" property="appName" />
+	    <result column="title" property="title" />
+	    <result column="order" property="order" />
+		<result column="address_type" property="addressType" />
+		<result column="address_list" property="addressList" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		t.id,
+		t.app_name,
+		t.title,
+		t.`order`,
+		t.address_type,
+		t.address_list
+	</sql>
+
+	<select id="findAll" resultMap="XxlJobGroup">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_group AS t
+		ORDER BY t.order ASC
+	</select>
+
+	<select id="findByAddressType" parameterType="java.lang.Integer" resultMap="XxlJobGroup">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_group AS t
+		WHERE t.address_type = #{addressType}
+		ORDER BY t.order ASC
+	</select>
+
+	<insert id="save" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup" useGeneratedKeys="true" keyProperty="id" >
+		INSERT INTO xxl_job_group ( `app_name`, `title`, `order`, `address_type`, `address_list`)
+		values ( #{appName}, #{title}, #{order}, #{addressType}, #{addressList});
+	</insert>
+
+	<update id="update" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobGroup" >
+		UPDATE xxl_job_group
+		SET `app_name` = #{appName},
+			`title` = #{title},
+			`order` = #{order},
+			`address_type` = #{addressType},
+			`address_list` = #{addressList}
+		WHERE id = #{id}
+	</update>
+
+	<delete id="remove" parameterType="java.lang.Integer" >
+		DELETE FROM xxl_job_group
+		WHERE id = #{id}
+	</delete>
+
+	<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobGroup">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_group AS t
+		WHERE t.id = #{id}
+	</select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
new file mode 100644
index 0000000..d2f5675
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.xxl.job.admin.dao.XxlJobInfoDao">
+
+	<resultMap id="XxlJobInfo" type="com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo" >
+		<result column="id" property="id" />
+
+		<result column="job_group" property="jobGroup" />
+	    <result column="job_cron" property="jobCron" />
+	    <result column="job_desc" property="jobDesc" />
+
+	    <result column="add_time" property="addTime" />
+	    <result column="update_time" property="updateTime" />
+
+	    <result column="author" property="author" />
+	    <result column="alarm_email" property="alarmEmail" />
+
+		<result column="executor_route_strategy" property="executorRouteStrategy" />
+		<result column="executor_handler" property="executorHandler" />
+	    <result column="executor_param" property="executorParam" />
+		<result column="executor_block_strategy" property="executorBlockStrategy" />
+		<result column="executor_timeout" property="executorTimeout" />
+		<result column="executor_fail_retry_count" property="executorFailRetryCount" />
+
+	    <result column="glue_type" property="glueType" />
+	    <result column="glue_source" property="glueSource" />
+	    <result column="glue_remark" property="glueRemark" />
+		<result column="glue_updatetime" property="glueUpdatetime" />
+
+		<result column="child_jobid" property="childJobId" />
+
+		<result column="trigger_status" property="triggerStatus" />
+		<result column="trigger_last_time" property="triggerLastTime" />
+		<result column="trigger_next_time" property="triggerNextTime" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		t.id,
+		t.job_group,
+		t.job_cron,
+		t.job_desc,
+		t.add_time,
+		t.update_time,
+		t.author,
+		t.alarm_email,
+		t.executor_route_strategy,
+		t.executor_handler,
+		t.executor_param,
+		t.executor_block_strategy,
+		t.executor_timeout,
+		t.executor_fail_retry_count,
+		t.glue_type,
+		t.glue_source,
+		t.glue_remark,
+		t.glue_updatetime,
+		t.child_jobid,
+		t.trigger_status,
+		t.trigger_last_time,
+		t.trigger_next_time
+	</sql>
+
+	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_info AS t
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
+			<if test="jobGroup gt 0">
+				AND t.job_group = #{jobGroup}
+			</if>
+            <if test="triggerStatus gte 0">
+                AND t.trigger_status = #{triggerStatus}
+            </if>
+			<if test="jobDesc != null and jobDesc != ''">
+				AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
+			</if>
+			<if test="executorHandler != null and executorHandler != ''">
+				AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%')
+			</if>
+			<if test="author != null and author != ''">
+				AND t.author like CONCAT(CONCAT('%', #{author}), '%')
+			</if>
+		</trim>
+		ORDER BY id DESC
+		LIMIT #{offset}, #{pagesize}
+	</select>
+
+	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
+		SELECT count(1)
+		FROM xxl_job_info AS t
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
+			<if test="jobGroup gt 0">
+				AND t.job_group = #{jobGroup}
+			</if>
+            <if test="triggerStatus gte 0">
+                AND t.trigger_status = #{triggerStatus}
+            </if>
+			<if test="jobDesc != null and jobDesc != ''">
+				AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
+			</if>
+			<if test="executorHandler != null and executorHandler != ''">
+				AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%')
+			</if>
+			<if test="author != null and author != ''">
+				AND t.author like CONCAT(CONCAT('%', #{author}), '%')
+			</if>
+		</trim>
+	</select>
+
+	<insert id="save" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
+		INSERT INTO xxl_job_info (
+			job_group,
+			job_cron,
+			job_desc,
+			add_time,
+			update_time,
+			author,
+			alarm_email,
+            executor_route_strategy,
+			executor_handler,
+			executor_param,
+			executor_block_strategy,
+			executor_timeout,
+			executor_fail_retry_count,
+			glue_type,
+			glue_source,
+			glue_remark,
+			glue_updatetime,
+			child_jobid,
+			trigger_status,
+			trigger_last_time,
+			trigger_next_time
+		) VALUES (
+			#{jobGroup},
+			#{jobCron},
+			#{jobDesc},
+			#{addTime},
+			#{updateTime},
+			#{author},
+			#{alarmEmail},
+			#{executorRouteStrategy},
+			#{executorHandler},
+			#{executorParam},
+			#{executorBlockStrategy},
+			#{executorTimeout},
+			#{executorFailRetryCount},
+			#{glueType},
+			#{glueSource},
+			#{glueRemark},
+			#{glueUpdatetime},
+			#{childJobId},
+			#{triggerStatus},
+			#{triggerLastTime},
+			#{triggerNextTime}
+		);
+		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
+			SELECT LAST_INSERT_ID()
+			/*SELECT @@IDENTITY AS id*/
+		</selectKey>-->
+	</insert>
+
+	<select id="loadById" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_info AS t
+		WHERE t.id = #{id}
+	</select>
+
+	<update id="update" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo" >
+		UPDATE xxl_job_info
+		SET
+			job_group = #{jobGroup},
+			job_cron = #{jobCron},
+			job_desc = #{jobDesc},
+			update_time = #{updateTime},
+			author = #{author},
+			alarm_email = #{alarmEmail},
+			executor_route_strategy = #{executorRouteStrategy},
+			executor_handler = #{executorHandler},
+			executor_param = #{executorParam},
+			executor_block_strategy = #{executorBlockStrategy},
+			executor_timeout = ${executorTimeout},
+			executor_fail_retry_count = ${executorFailRetryCount},
+			glue_type = #{glueType},
+			glue_source = #{glueSource},
+			glue_remark = #{glueRemark},
+			glue_updatetime = #{glueUpdatetime},
+			child_jobid = #{childJobId},
+			trigger_status = #{triggerStatus},
+			trigger_last_time = #{triggerLastTime},
+			trigger_next_time = #{triggerNextTime}
+		WHERE id = #{id}
+	</update>
+
+	<delete id="delete" parameterType="java.util.HashMap">
+		DELETE
+		FROM xxl_job_info
+		WHERE id = #{id}
+	</delete>
+
+	<select id="getJobsByGroup" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_info AS t
+		WHERE t.job_group = #{jobGroup}
+	</select>
+
+	<select id="findAllCount" resultType="int">
+		SELECT count(1)
+		FROM xxl_job_info
+	</select>
+
+
+	<select id="scheduleJobQuery" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_info AS t
+		WHERE t.trigger_status = 1
+			and t.trigger_next_time <![CDATA[ <= ]]> #{maxNextTime}
+		ORDER BY id ASC
+		LIMIT #{pagesize}
+	</select>
+
+	<update id="scheduleUpdate" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobInfo"  >
+		UPDATE xxl_job_info
+		SET
+			trigger_last_time = #{triggerLastTime},
+			trigger_next_time = #{triggerNextTime},
+			trigger_status = #{triggerStatus}
+		WHERE id = #{id}
+	</update>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
new file mode 100644
index 0000000..303c67e
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.xxl.job.admin.dao.XxlJobLogGlueDao">
+
+	<resultMap id="XxlJobLogGlue" type="com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogGlue" >
+		<result column="id" property="id" />
+	    <result column="job_id" property="jobId" />
+		<result column="glue_type" property="glueType" />
+	    <result column="glue_source" property="glueSource" />
+	    <result column="glue_remark" property="glueRemark" />
+	    <result column="add_time" property="addTime" />
+	    <result column="update_time" property="updateTime" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		t.id,
+		t.job_id,
+		t.glue_type,
+		t.glue_source,
+		t.glue_remark,
+		t.add_time,
+		t.update_time
+	</sql>
+
+	<insert id="save" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogGlue" useGeneratedKeys="true" keyProperty="id" >
+		INSERT INTO xxl_job_logglue (
+			`job_id`,
+			`glue_type`,
+			`glue_source`,
+			`glue_remark`,
+			`add_time`,
+			`update_time`
+		) VALUES (
+			#{jobId},
+			#{glueType},
+			#{glueSource},
+			#{glueRemark},
+			#{addTime},
+			#{updateTime}
+		);
+		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
+			SELECT LAST_INSERT_ID()
+		</selectKey>-->
+	</insert>
+
+	<select id="findByJobId" parameterType="java.lang.Integer" resultMap="XxlJobLogGlue">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_logglue AS t
+		WHERE t.job_id = #{jobId}
+		ORDER BY id DESC
+	</select>
+
+	<delete id="removeOld" >
+		DELETE FROM xxl_job_logglue
+		WHERE id NOT in(
+			SELECT id FROM(
+				SELECT id FROM xxl_job_logglue
+				WHERE `job_id` = #{jobId}
+				ORDER BY update_time desc
+				LIMIT 0, #{limit}
+			) t1
+		) AND `job_id` = #{jobId}
+	</delete>
+
+	<delete id="deleteByJobId" parameterType="java.lang.Integer" >
+		DELETE FROM xxl_job_logglue
+		WHERE `job_id` = #{jobId}
+	</delete>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
new file mode 100644
index 0000000..b7d7aa2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.xxl.job.admin.dao.XxlJobLogDao">
+
+	<resultMap id="XxlJobLog" type="com.vci.ubcs.xxl.job.admin.core.model.XxlJobLog" >
+		<result column="id" property="id" />
+
+		<result column="job_group" property="jobGroup" />
+		<result column="job_id" property="jobId" />
+
+		<result column="executor_address" property="executorAddress" />
+		<result column="executor_handler" property="executorHandler" />
+	    <result column="executor_param" property="executorParam" />
+		<result column="executor_sharding_param" property="executorShardingParam" />
+		<result column="executor_fail_retry_count" property="executorFailRetryCount" />
+
+	    <result column="trigger_time" property="triggerTime" />
+	    <result column="trigger_code" property="triggerCode" />
+	    <result column="trigger_msg" property="triggerMsg" />
+
+	    <result column="handle_time" property="handleTime" />
+	    <result column="handle_code" property="handleCode" />
+	    <result column="handle_msg" property="handleMsg" />
+
+		<result column="alarm_status" property="alarmStatus" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		t.id,
+		t.job_group,
+		t.job_id,
+		t.executor_address,
+		t.executor_handler,
+		t.executor_param,
+		t.executor_sharding_param,
+		t.executor_fail_retry_count,
+		t.trigger_time,
+		t.trigger_code,
+		t.trigger_msg,
+		t.handle_time,
+		t.handle_code,
+		t.handle_msg,
+		t.alarm_status
+	</sql>
+
+	<select id="pageList" resultMap="XxlJobLog">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_log AS t
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
+			<if test="jobId==0 and jobGroup gt 0">
+				AND t.job_group = #{jobGroup}
+			</if>
+			<if test="jobId gt 0">
+				AND t.job_id = #{jobId}
+			</if>
+			<if test="triggerTimeStart != null">
+				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
+			</if>
+			<if test="triggerTimeEnd != null">
+				AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
+			</if>
+			<if test="logStatus == 1" >
+				AND t.handle_code = 200
+			</if>
+			<if test="logStatus == 2" >
+				AND (
+					t.trigger_code NOT IN (0, 200) OR
+					t.handle_code NOT IN (0, 200)
+				)
+			</if>
+			<if test="logStatus == 3" >
+				AND t.trigger_code = 200
+				AND t.handle_code = 0
+			</if>
+		</trim>
+		ORDER BY t.trigger_time DESC
+		LIMIT #{offset}, #{pagesize}
+	</select>
+
+	<select id="pageListCount" resultType="int">
+		SELECT count(1)
+		FROM xxl_job_log AS t
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
+			<if test="jobId==0 and jobGroup gt 0">
+				AND t.job_group = #{jobGroup}
+			</if>
+			<if test="jobId gt 0">
+				AND t.job_id = #{jobId}
+			</if>
+			<if test="triggerTimeStart != null">
+				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
+			</if>
+			<if test="triggerTimeEnd != null">
+				AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
+			</if>
+			<if test="logStatus == 1" >
+				AND t.handle_code = 200
+			</if>
+			<if test="logStatus == 2" >
+				AND (
+					t.trigger_code NOT IN (0, 200) OR
+					t.handle_code NOT IN (0, 200)
+				)
+			</if>
+			<if test="logStatus == 3" >
+				AND t.trigger_code = 200
+				AND t.handle_code = 0
+			</if>
+		</trim>
+	</select>
+
+	<select id="load" parameterType="java.lang.Long" resultMap="XxlJobLog">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_log AS t
+		WHERE t.id = #{id}
+	</select>
+
+
+	<insert id="save" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
+		INSERT INTO xxl_job_log (
+			`job_group`,
+			`job_id`,
+			`trigger_time`,
+			`trigger_code`,
+			`handle_code`
+		) VALUES (
+			#{jobGroup},
+			#{jobId},
+			#{triggerTime},
+			#{triggerCode},
+			#{handleCode}
+		);
+		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
+			SELECT LAST_INSERT_ID()
+		</selectKey>-->
+	</insert>
+
+	<update id="updateTriggerInfo" >
+		UPDATE xxl_job_log
+		SET
+			`trigger_time`= #{triggerTime},
+			`trigger_code`= #{triggerCode},
+			`trigger_msg`= #{triggerMsg},
+			`executor_address`= #{executorAddress},
+			`executor_handler`=#{executorHandler},
+			`executor_param`= #{executorParam},
+			`executor_sharding_param`= #{executorShardingParam},
+			`executor_fail_retry_count`= #{executorFailRetryCount}
+		WHERE `id`= #{id}
+	</update>
+
+	<update id="updateHandleInfo">
+		UPDATE xxl_job_log
+		SET
+			`handle_time`= #{handleTime},
+			`handle_code`= #{handleCode},
+			`handle_msg`= #{handleMsg}
+		WHERE `id`= #{id}
+	</update>
+
+	<delete id="delete" >
+		delete from xxl_job_log
+		WHERE job_id = #{jobId}
+	</delete>
+
+    <!--<select id="triggerCountByDay" resultType="java.util.Map" >
+		SELECT
+			DATE_FORMAT(trigger_time,'%Y-%m-%d') triggerDay,
+			COUNT(handle_code) triggerDayCount,
+			SUM(CASE WHEN (trigger_code in (0, 200) and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning,
+			SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
+		FROM xxl_job_log
+		WHERE trigger_time BETWEEN #{from} and #{to}
+		GROUP BY triggerDay
+		ORDER BY triggerDay
+    </select>-->
+
+    <select id="findLogReport" resultType="java.util.Map" >
+		SELECT
+			COUNT(handle_code) triggerDayCount,
+			SUM(CASE WHEN (trigger_code in (0, 200) and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning,
+			SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
+		FROM xxl_job_log
+		WHERE trigger_time BETWEEN #{from} and #{to}
+    </select>
+
+	<select id="findClearLogIds" resultType="long" >
+		SELECT id FROM xxl_job_log
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
+			<if test="jobGroup gt 0">
+				AND job_group = #{jobGroup}
+			</if>
+			<if test="jobId gt 0">
+				AND job_id = #{jobId}
+			</if>
+			<if test="clearBeforeTime != null">
+				AND trigger_time <![CDATA[ <= ]]> #{clearBeforeTime}
+			</if>
+			<if test="clearBeforeNum gt 0">
+				AND id NOT in(
+				SELECT id FROM(
+				SELECT id FROM xxl_job_log AS t
+				<trim prefix="WHERE" prefixOverrides="AND | OR" >
+					<if test="jobGroup gt 0">
+						AND t.job_group = #{jobGroup}
+					</if>
+					<if test="jobId gt 0">
+						AND t.job_id = #{jobId}
+					</if>
+				</trim>
+				ORDER BY t.trigger_time desc
+				LIMIT 0, #{clearBeforeNum}
+				) t1
+				)
+			</if>
+		</trim>
+		order by id asc
+		LIMIT #{pagesize}
+	</select>
+
+	<delete id="clearLog" >
+		delete from xxl_job_log
+		WHERE id in
+		<foreach collection="logIds" item="item" open="(" close=")" separator="," >
+			#{item}
+		</foreach>
+	</delete>
+
+	<select id="findFailJobLogIds" resultType="long" >
+		SELECT id FROM `xxl_job_log`
+		WHERE !(
+			(trigger_code in (0, 200) and handle_code = 0)
+			OR
+			(handle_code = 200)
+		)
+		AND `alarm_status` = 0
+		ORDER BY id ASC
+		LIMIT #{pagesize}
+	</select>
+
+	<update id="updateAlarmStatus" >
+		UPDATE xxl_job_log
+		SET
+			`alarm_status` = #{newAlarmStatus}
+		WHERE `id`= #{logId} AND `alarm_status` = #{oldAlarmStatus}
+	</update>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
new file mode 100644
index 0000000..4594ae7
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.xxl.job.admin.dao.XxlJobLogReportDao">
+
+	<resultMap id="XxlJobLogReport" type="com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogReport" >
+		<result column="id" property="id" />
+	    <result column="trigger_day" property="triggerDay" />
+		<result column="running_count" property="runningCount" />
+	    <result column="suc_count" property="sucCount" />
+	    <result column="fail_count" property="failCount" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		t.id,
+		t.trigger_day,
+		t.running_count,
+		t.suc_count,
+		t.fail_count
+	</sql>
+
+	<insert id="save" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
+		INSERT INTO xxl_job_log_report (
+			`trigger_day`,
+			`running_count`,
+			`suc_count`,
+			`fail_count`
+		) VALUES (
+			#{triggerDay},
+			#{runningCount},
+			#{sucCount},
+			#{failCount}
+		);
+		<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
+			SELECT LAST_INSERT_ID()
+		</selectKey>-->
+	</insert>
+
+	<update id="update" >
+        UPDATE xxl_job_log_report
+        SET `running_count` = #{runningCount},
+        	`suc_count` = #{sucCount},
+        	`fail_count` = #{failCount}
+        WHERE `trigger_day` = #{triggerDay}
+    </update>
+
+	<select id="queryLogReport" resultMap="XxlJobLogReport">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_log_report AS t
+		WHERE t.trigger_day between #{triggerDayFrom} and #{triggerDayTo}
+		ORDER BY t.trigger_day ASC
+	</select>
+
+	<select id="queryLogReportTotal" resultMap="XxlJobLogReport">
+		SELECT
+			SUM(running_count) running_count,
+			SUM(suc_count) suc_count,
+			SUM(fail_count) fail_count
+		FROM xxl_job_log_report AS t
+	</select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
new file mode 100644
index 0000000..446b208
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.xxl.job.admin.dao.XxlJobRegistryDao">
+
+	<resultMap id="XxlJobRegistry" type="com.vci.ubcs.xxl.job.admin.core.model.XxlJobRegistry" >
+		<result column="id" property="id" />
+	    <result column="registry_group" property="registryGroup" />
+	    <result column="registry_key" property="registryKey" />
+	    <result column="registry_value" property="registryValue" />
+		<result column="update_time" property="updateTime" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		t.id,
+		t.registry_group,
+		t.registry_key,
+		t.registry_value,
+		t.update_time
+	</sql>
+
+	<select id="findDead" parameterType="java.util.HashMap" resultType="java.lang.Integer" >
+		SELECT t.id
+		FROM xxl_job_registry AS t
+		WHERE t.update_time <![CDATA[ < ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)
+	</select>
+
+	<delete id="removeDead" parameterType="java.lang.Integer" >
+		DELETE FROM xxl_job_registry
+		WHERE id in
+		<foreach collection="ids" item="item" open="(" close=")" separator="," >
+			#{item}
+		</foreach>
+	</delete>
+
+	<select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_registry AS t
+		WHERE t.update_time <![CDATA[ > ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)
+	</select>
+
+    <update id="registryUpdate" >
+        UPDATE xxl_job_registry
+        SET `update_time` = #{updateTime}
+        WHERE `registry_group` = #{registryGroup}
+          AND `registry_key` = #{registryKey}
+          AND `registry_value` = #{registryValue}
+    </update>
+
+    <insert id="registrySave" >
+        INSERT INTO xxl_job_registry( `registry_group` , `registry_key` , `registry_value`, `update_time`)
+        VALUES( #{registryGroup}  , #{registryKey} , #{registryValue}, #{updateTime})
+    </insert>
+
+	<delete id="registryDelete" >
+		DELETE FROM xxl_job_registry
+		WHERE registry_group = #{registryGroup}
+			AND registry_key = #{registryKey}
+			AND registry_value = #{registryValue}
+	</delete>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
new file mode 100644
index 0000000..89e247a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.xxl.job.admin.dao.XxlJobUserDao">
+
+	<resultMap id="XxlJobUser" type="com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser" >
+		<result column="id" property="id" />
+		<result column="username" property="username" />
+	    <result column="password" property="password" />
+	    <result column="role" property="role" />
+	    <result column="permission" property="permission" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		t.id,
+		t.username,
+		t.password,
+		t.role,
+		t.permission
+	</sql>
+
+	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobUser">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_user AS t
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
+			<if test="username != null and username != ''">
+				AND t.username like CONCAT(CONCAT('%', #{username}), '%')
+			</if>
+			<if test="role gt -1">
+				AND t.role = #{role}
+			</if>
+		</trim>
+		ORDER BY username ASC
+		LIMIT #{offset}, #{pagesize}
+	</select>
+
+	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
+		SELECT count(1)
+		FROM xxl_job_user AS t
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
+			<if test="username != null and username != ''">
+				AND t.username like CONCAT(CONCAT('%', #{username}), '%')
+			</if>
+			<if test="role gt -1">
+				AND t.role = #{role}
+			</if>
+		</trim>
+	</select>
+
+	<select id="loadByUserName" parameterType="java.util.HashMap" resultMap="XxlJobUser">
+		SELECT <include refid="Base_Column_List" />
+		FROM xxl_job_user AS t
+		WHERE t.username = #{username}
+	</select>
+
+	<insert id="save" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser" useGeneratedKeys="true" keyProperty="id" >
+		INSERT INTO xxl_job_user (
+			username,
+			password,
+			role,
+			permission
+		) VALUES (
+			#{username},
+			#{password},
+			#{role},
+			#{permission}
+		);
+	</insert>
+
+	<update id="update" parameterType="com.vci.ubcs.xxl.job.admin.core.model.XxlJobUser" >
+		UPDATE xxl_job_user
+		SET
+			<if test="password != null and password != ''">
+				password = #{password},
+			</if>
+			role = #{role},
+			permission = #{permission}
+		WHERE id = #{id}
+	</update>
+
+	<delete id="delete" parameterType="java.util.HashMap">
+		DELETE
+		FROM xxl_job_user
+		WHERE id = #{id}
+	</delete>
+
+</mapper>
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.css.map b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.css.map
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.css.map
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.css.map
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/favicon.ico b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/favicon.ico
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/favicon.ico
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/favicon.ico
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/common.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/common.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/common.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/common.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/index.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/index.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/index.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/index.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/jobcode.index.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobcode.index.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/jobcode.index.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobcode.index.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/jobgroup.index.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobgroup.index.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/jobgroup.index.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobgroup.index.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/jobinfo.index.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobinfo.index.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/jobinfo.index.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobinfo.index.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/joblog.detail.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.detail.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/joblog.detail.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.detail.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/joblog.index.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.index.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/joblog.index.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.index.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/login.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/login.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/login.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/login.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/user.index.1.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/user.index.1.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/js/user.index.1.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/user.index.1.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js
new file mode 100644
index 0000000..80e2f20
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js
@@ -0,0 +1,234 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
+  function keywords(str) {
+    var obj = {}, words = str.split(" ");
+    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
+    return obj;
+  }
+
+  // Helper for phpString
+  function matchSequence(list, end, escapes) {
+    if (list.length == 0) return phpString(end);
+    return function (stream, state) {
+      var patterns = list[0];
+      for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) {
+        state.tokenize = matchSequence(list.slice(1), end);
+        return patterns[i][1];
+      }
+      state.tokenize = phpString(end, escapes);
+      return "string";
+    };
+  }
+  function phpString(closing, escapes) {
+    return function(stream, state) { return phpString_(stream, state, closing, escapes); };
+  }
+  function phpString_(stream, state, closing, escapes) {
+    // "Complex" syntax
+    if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) {
+      state.tokenize = null;
+      return "string";
+    }
+
+    // Simple syntax
+    if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) {
+      // After the variable name there may appear array or object operator.
+      if (stream.match("[", false)) {
+        // Match array operator
+        state.tokenize = matchSequence([
+          [["[", null]],
+          [[/\d[\w\.]*/, "number"],
+           [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"],
+           [/[\w\$]+/, "variable"]],
+          [["]", null]]
+        ], closing, escapes);
+      }
+      if (stream.match(/\-\>\w/, false)) {
+        // Match object operator
+        state.tokenize = matchSequence([
+          [["->", null]],
+          [[/[\w]+/, "variable"]]
+        ], closing, escapes);
+      }
+      return "variable-2";
+    }
+
+    var escaped = false;
+    // Normal string
+    while (!stream.eol() &&
+           (escaped || escapes === false ||
+            (!stream.match("{$", false) &&
+             !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) {
+      if (!escaped && stream.match(closing)) {
+        state.tokenize = null;
+        state.tokStack.pop(); state.tokStack.pop();
+        break;
+      }
+      escaped = stream.next() == "\\" && !escaped;
+    }
+    return "string";
+  }
+
+  var phpKeywords = "abstract and array as break case catch class clone const continue declare default " +
+    "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " +
+    "for foreach function global goto if implements interface instanceof namespace " +
+    "new or private protected public static switch throw trait try use var while xor " +
+    "die echo empty exit eval include include_once isset list require require_once return " +
+    "print unset __halt_compiler self static parent yield insteadof finally";
+  var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__";
+  var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count";
+  CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" "));
+  CodeMirror.registerHelper("wordChars", "php", /[\w$]/);
+
+  var phpConfig = {
+    name: "clike",
+    helperType: "php",
+    keywords: keywords(phpKeywords),
+    blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"),
+    defKeywords: keywords("class function interface namespace trait"),
+    atoms: keywords(phpAtoms),
+    builtin: keywords(phpBuiltin),
+    multiLineStrings: true,
+    hooks: {
+      "$": function(stream) {
+        stream.eatWhile(/[\w\$_]/);
+        return "variable-2";
+      },
+      "<": function(stream, state) {
+        var before;
+        if (before = stream.match(/<<\s*/)) {
+          var quoted = stream.eat(/['"]/);
+          stream.eatWhile(/[\w\.]/);
+          var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1));
+          if (quoted) stream.eat(quoted);
+          if (delim) {
+            (state.tokStack || (state.tokStack = [])).push(delim, 0);
+            state.tokenize = phpString(delim, quoted != "'");
+            return "string";
+          }
+        }
+        return false;
+      },
+      "#": function(stream) {
+        while (!stream.eol() && !stream.match("?>", false)) stream.next();
+        return "comment";
+      },
+      "/": function(stream) {
+        if (stream.eat("/")) {
+          while (!stream.eol() && !stream.match("?>", false)) stream.next();
+          return "comment";
+        }
+        return false;
+      },
+      '"': function(_stream, state) {
+        (state.tokStack || (state.tokStack = [])).push('"', 0);
+        state.tokenize = phpString('"');
+        return "string";
+      },
+      "{": function(_stream, state) {
+        if (state.tokStack && state.tokStack.length)
+          state.tokStack[state.tokStack.length - 1]++;
+        return false;
+      },
+      "}": function(_stream, state) {
+        if (state.tokStack && state.tokStack.length > 0 &&
+            !--state.tokStack[state.tokStack.length - 1]) {
+          state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]);
+        }
+        return false;
+      }
+    }
+  };
+
+  CodeMirror.defineMode("php", function(config, parserConfig) {
+    var htmlMode = CodeMirror.getMode(config, (parserConfig && parserConfig.htmlMode) || "text/html");
+    var phpMode = CodeMirror.getMode(config, phpConfig);
+
+    function dispatch(stream, state) {
+      var isPHP = state.curMode == phpMode;
+      if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null;
+      if (!isPHP) {
+        if (stream.match(/^<\?\w*/)) {
+          state.curMode = phpMode;
+          if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, ""))
+          state.curState = state.php;
+          return "meta";
+        }
+        if (state.pending == '"' || state.pending == "'") {
+          while (!stream.eol() && stream.next() != state.pending) {}
+          var style = "string";
+        } else if (state.pending && stream.pos < state.pending.end) {
+          stream.pos = state.pending.end;
+          var style = state.pending.style;
+        } else {
+          var style = htmlMode.token(stream, state.curState);
+        }
+        if (state.pending) state.pending = null;
+        var cur = stream.current(), openPHP = cur.search(/<\?/), m;
+        if (openPHP != -1) {
+          if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0];
+          else state.pending = {end: stream.pos, style: style};
+          stream.backUp(cur.length - openPHP);
+        }
+        return style;
+      } else if (isPHP && state.php.tokenize == null && stream.match("?>")) {
+        state.curMode = htmlMode;
+        state.curState = state.html;
+        if (!state.php.context.prev) state.php = null;
+        return "meta";
+      } else {
+        return phpMode.token(stream, state.curState);
+      }
+    }
+
+    return {
+      startState: function() {
+        var html = CodeMirror.startState(htmlMode)
+        var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null
+        return {html: html,
+                php: php,
+                curMode: parserConfig.startOpen ? phpMode : htmlMode,
+                curState: parserConfig.startOpen ? php : html,
+                pending: null};
+      },
+
+      copyState: function(state) {
+        var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html),
+            php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur;
+        if (state.curMode == htmlMode) cur = htmlNew;
+        else cur = phpNew;
+        return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur,
+                pending: state.pending};
+      },
+
+      token: dispatch,
+
+      indent: function(state, textAfter) {
+        if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) ||
+            (state.curMode == phpMode && /^\?>/.test(textAfter)))
+          return htmlMode.indent(state.html, textAfter);
+        return state.curMode.indent(state.curState, textAfter);
+      },
+
+      blockCommentStart: "/*",
+      blockCommentEnd: "*/",
+      lineComment: "//",
+
+      innerMode: function(state) { return {state: state.curState, mode: state.curMode}; }
+    };
+  }, "htmlmixed", "clike");
+
+  CodeMirror.defineMIME("application/x-httpd-php", "php");
+  CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true});
+  CodeMirror.defineMIME("text/x-php", phpConfig);
+});
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/layer.js b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/layer.js
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/layer.js
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/layer.js
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon.png b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon.png
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon.png
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon.png
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/layer.css b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/layer.css
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/layer.css
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/layer.css
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif
Binary files differ
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/common/common.exception.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.exception.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/common/common.exception.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.exception.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/common/common.macro.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.macro.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/common/common.macro.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.macro.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/help.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/help.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/help.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/help.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/index.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/index.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/index.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/index.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/jobcode/jobcode.index.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobcode/jobcode.index.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/jobcode/jobcode.index.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobcode/jobcode.index.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/joblog/joblog.detail.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.detail.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/joblog/joblog.detail.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.detail.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/joblog/joblog.index.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.index.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/joblog/joblog.index.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.index.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/login.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/login.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/login.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/login.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/user/user.index.ftl b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/user/user.index.ftl
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/templates/user/user.index.ftl
rename to Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/user/user.index.ftl
diff --git a/Source/BladeX/blade-ops/blade-xxljob/Dockerfile b/Source/UBCS/ubcs-ops/ubcs-xxljob/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob/Dockerfile
rename to Source/UBCS/ubcs-ops/ubcs-xxljob/Dockerfile
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob/pom.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob/pom.xml
new file mode 100644
index 0000000..0b220a9
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-ops</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>blade-xxljob</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-cloud</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-launch</artifactId>
+        </dependency>
+        <!--Job-->
+        <dependency>
+            <groupId>com.xuxueli</groupId>
+            <artifactId>xxl-job-core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+
+</project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java
new file mode 100644
index 0000000..b793a5a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java
@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.job.executor;
+
+import com.vci.ubcs.common.constant.LauncherConstant;
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+
+/**
+ * Job鍚姩鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class JobApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(LauncherConstant.APPLICATION_XXLJOB_NAME, JobApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/config/XxlJobConfig.java b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/config/XxlJobConfig.java
new file mode 100644
index 0000000..1230f2f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/config/XxlJobConfig.java
@@ -0,0 +1,74 @@
+package com.vci.ubcs.job.executor.config;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * xxl-job config
+ *
+ * @author xuxueli 2017-04-28
+ */
+@Configuration(proxyBeanMethods = false)
+public class XxlJobConfig {
+	private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
+
+	@Value("${xxl.job.admin.addresses}")
+	private String adminAddresses;
+
+	@Value("${xxl.job.executor.appname}")
+	private String appName;
+
+	@Value("${xxl.job.executor.ip}")
+	private String ip;
+
+	@Value("${xxl.job.executor.port}")
+	private int port;
+
+	@Value("${xxl.job.accessToken}")
+	private String accessToken;
+
+	@Value("${xxl.job.executor.logpath}")
+	private String logPath;
+
+	@Value("${xxl.job.executor.logretentiondays}")
+	private int logRetentionDays;
+
+
+	@Bean
+	public XxlJobSpringExecutor xxlJobExecutor() {
+		logger.info(">>>>>>>>>>> xxl-job config init.");
+		XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+		xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
+		xxlJobSpringExecutor.setAppName(appName);
+		xxlJobSpringExecutor.setIp(ip);
+		xxlJobSpringExecutor.setPort(port);
+		xxlJobSpringExecutor.setAccessToken(accessToken);
+		xxlJobSpringExecutor.setLogPath(logPath);
+		xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
+
+		return xxlJobSpringExecutor;
+	}
+
+	/**
+	 * 閽堝澶氱綉鍗°�佸鍣ㄥ唴閮ㄧ讲绛夋儏鍐碉紝鍙�熷姪 "spring-cloud-commons" 鎻愪緵鐨� "InetUtils" 缁勪欢鐏垫椿瀹氬埗娉ㄥ唽IP锛�
+	 *
+	 *      1銆佸紩鍏ヤ緷璧栵細
+	 *          <dependency>
+	 *             <groupId>org.springframework.cloud</groupId>
+	 *             <artifactId>spring-cloud-commons</artifactId>
+	 *             <version>${version}</version>
+	 *         </dependency>
+	 *
+	 *      2銆侀厤缃枃浠讹紝鎴栬�呭鍣ㄥ惎鍔ㄥ彉閲�
+	 *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
+	 *
+	 *      3銆佽幏鍙朓P
+	 *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
+	 */
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/controller/TestController.java b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/controller/TestController.java
new file mode 100644
index 0000000..52362fb
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/controller/TestController.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.job.executor.controller;
+
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 娴嬭瘯瀹氭椂璇锋眰
+ *
+ * @author job
+ */
+@RestController
+@RequestMapping("/test")
+public class TestController {
+
+	@GetMapping("testRequest")
+	public R testRequest(String name) {
+		return R.data("鎴戞槸娴嬭瘯璇锋眰" + name);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/jobhandler/SampleXxlJob.java b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/jobhandler/SampleXxlJob.java
new file mode 100644
index 0000000..ac95ad2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/jobhandler/SampleXxlJob.java
@@ -0,0 +1,195 @@
+package com.vci.ubcs.job.executor.jobhandler;
+
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.IJobHandler;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import com.xxl.job.core.util.ShardingUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * XxlJob寮�鍙戠ず渚嬶紙Bean妯″紡锛�
+ * <p>
+ * 寮�鍙戞楠わ細
+ * 1銆佸湪Spring Bean瀹炰緥涓紝寮�鍙慗ob鏂规硶锛屾柟寮忔牸寮忚姹備负 "public ReturnT<String> execute(String param)"
+ * 2銆佷负Job鏂规硶娣诲姞娉ㄨВ "@XxlJob(value="鑷畾涔塲obhandler鍚嶇О", init = "JobHandler鍒濆鍖栨柟娉�", destroy = "JobHandler閿�姣佹柟娉�")"锛屾敞瑙alue鍊煎搴旂殑鏄皟搴︿腑蹇冩柊寤轰换鍔$殑JobHandler灞炴�х殑鍊笺��
+ * 3銆佹墽琛屾棩蹇楋細闇�瑕侀�氳繃 "XxlJobLogger.log" 鎵撳嵃鎵ц鏃ュ織锛�
+ *
+ * @author xuxueli
+ */
+@Component
+public class SampleXxlJob {
+	private static final Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
+
+
+	/**
+	 * 1銆佺畝鍗曚换鍔$ず渚嬶紙Bean妯″紡锛�
+	 */
+	@XxlJob("demoJobHandler")
+	public ReturnT<String> demoJobHandler(String param) throws Exception {
+		XxlJobLogger.log("XXL-JOB, Hello World.");
+
+		for (int i = 0; i < 5; i++) {
+			XxlJobLogger.log("beat at:" + i);
+			TimeUnit.SECONDS.sleep(2);
+		}
+		return ReturnT.SUCCESS;
+	}
+
+
+	/**
+	 * 2銆佸垎鐗囧箍鎾换鍔�
+	 */
+	@XxlJob("shardingJobHandler")
+	public ReturnT<String> shardingJobHandler(String param) throws Exception {
+
+		// 鍒嗙墖鍙傛暟
+		ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
+		XxlJobLogger.log("鍒嗙墖鍙傛暟锛氬綋鍓嶅垎鐗囧簭鍙� = {}, 鎬诲垎鐗囨暟 = {}", shardingVO.getIndex(), shardingVO.getTotal());
+
+		// 涓氬姟閫昏緫
+		for (int i = 0; i < shardingVO.getTotal(); i++) {
+			if (i == shardingVO.getIndex()) {
+				XxlJobLogger.log("绗� {} 鐗�, 鍛戒腑鍒嗙墖寮�濮嬪鐞�", i);
+			} else {
+				XxlJobLogger.log("绗� {} 鐗�, 蹇界暐", i);
+			}
+		}
+
+		return ReturnT.SUCCESS;
+	}
+
+
+	/**
+	 * 3銆佸懡浠よ浠诲姟
+	 */
+	@XxlJob("commandJobHandler")
+	public ReturnT<String> commandJobHandler(String param) throws Exception {
+		String command = param;
+		int exitValue = -1;
+
+		BufferedReader bufferedReader = null;
+		try {
+			// command process
+			Process process = Runtime.getRuntime().exec(command);
+			BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream());
+			bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));
+
+			// command log
+			String line;
+			while ((line = bufferedReader.readLine()) != null) {
+				XxlJobLogger.log(line);
+			}
+
+			// command exit
+			process.waitFor();
+			exitValue = process.exitValue();
+		} catch (Exception e) {
+			XxlJobLogger.log(e);
+		} finally {
+			if (bufferedReader != null) {
+				bufferedReader.close();
+			}
+		}
+
+		if (exitValue == 0) {
+			return IJobHandler.SUCCESS;
+		} else {
+			return new ReturnT<String>(IJobHandler.FAIL.getCode(), "command exit value(" + exitValue + ") is failed");
+		}
+	}
+
+
+	/**
+	 * 4銆佽法骞冲彴Http浠诲姟
+	 */
+	@XxlJob("httpJobHandler")
+	public ReturnT<String> httpJobHandler(String param) throws Exception {
+
+		// request
+		HttpURLConnection connection = null;
+		BufferedReader bufferedReader = null;
+		try {
+			// connection
+			URL realUrl = new URL(param);
+			connection = (HttpURLConnection) realUrl.openConnection();
+
+			// connection setting
+			connection.setRequestMethod("GET");
+			connection.setDoOutput(true);
+			connection.setDoInput(true);
+			connection.setUseCaches(false);
+			connection.setReadTimeout(5 * 1000);
+			connection.setConnectTimeout(3 * 1000);
+			connection.setRequestProperty("connection", "Keep-Alive");
+			connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+			connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8");
+
+			// do connection
+			connection.connect();
+
+			//Map<String, List<String>> map = connection.getHeaderFields();
+
+			// valid StatusCode
+			int statusCode = connection.getResponseCode();
+			if (statusCode != 200) {
+				throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid.");
+			}
+
+			// result
+			bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
+			StringBuilder result = new StringBuilder();
+			String line;
+			while ((line = bufferedReader.readLine()) != null) {
+				result.append(line);
+			}
+			String responseMsg = result.toString();
+
+			XxlJobLogger.log(responseMsg);
+			return ReturnT.SUCCESS;
+		} catch (Exception e) {
+			XxlJobLogger.log(e);
+			return ReturnT.FAIL;
+		} finally {
+			try {
+				if (bufferedReader != null) {
+					bufferedReader.close();
+				}
+				if (connection != null) {
+					connection.disconnect();
+				}
+			} catch (Exception e2) {
+				XxlJobLogger.log(e2);
+			}
+		}
+
+	}
+
+	/**
+	 * 5銆佺敓鍛藉懆鏈熶换鍔$ず渚嬶細浠诲姟鍒濆鍖栦笌閿�姣佹椂锛屾敮鎸佽嚜瀹氫箟鐩稿叧閫昏緫锛�
+	 */
+	@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")
+	public ReturnT<String> demoJobHandler2(String param) throws Exception {
+		XxlJobLogger.log("XXL-JOB, Hello World.");
+		return ReturnT.SUCCESS;
+	}
+
+	public void init() {
+		logger.info("init");
+	}
+
+	public void destroy() {
+		logger.info("destory");
+	}
+
+
+}
diff --git a/Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/application.yml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml
rename to Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/application.yml
diff --git a/Source/BladeX/blade-ops/blade-xxljob/src/main/resources/logback.xml b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/logback.xml
similarity index 100%
rename from Source/BladeX/blade-ops/blade-xxljob/src/main/resources/logback.xml
rename to Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/logback.xml
diff --git a/Source/BladeX/blade-plugin-api/README.md b/Source/UBCS/ubcs-plugin-api/README.md
similarity index 100%
rename from Source/BladeX/blade-plugin-api/README.md
rename to Source/UBCS/ubcs-plugin-api/README.md
diff --git a/Source/BladeX/blade-plugin-api/pom.xml b/Source/UBCS/ubcs-plugin-api/pom.xml
similarity index 100%
rename from Source/BladeX/blade-plugin-api/pom.xml
rename to Source/UBCS/ubcs-plugin-api/pom.xml
diff --git a/Source/BladeX/blade-plugin/README.md b/Source/UBCS/ubcs-plugin/README.md
similarity index 100%
rename from Source/BladeX/blade-plugin/README.md
rename to Source/UBCS/ubcs-plugin/README.md
diff --git a/Source/BladeX/blade-plugin/pom.xml b/Source/UBCS/ubcs-plugin/pom.xml
similarity index 100%
rename from Source/BladeX/blade-plugin/pom.xml
rename to Source/UBCS/ubcs-plugin/pom.xml
diff --git a/Source/UBCS/ubcs-service-api/pom.xml b/Source/UBCS/ubcs-service-api/pom.xml
new file mode 100644
index 0000000..19b39a1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>UBCS</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-service-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>3.0.1.RELEASE</version>
+    <packaging>pom</packaging>
+    <description>BladeX 寰湇鍔PI闆嗗悎</description>
+
+    <modules>
+        <module>ubcs-desk-api</module>
+        <module>ubcs-dict-api</module>
+        <module>ubcs-scope-api</module>
+        <module>ubcs-system-api</module>
+        <module>ubcs-user-api</module>
+        <module>ubcs-code-api</module>
+        <module>ubcs-omd-api</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-mybatis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-tenant</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>io.swagger</groupId>
+                    <artifactId>swagger-models</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-models</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                    <finalName>${project.name}</finalName>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
new file mode 100644
index 0000000..e141179
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>ubcs-service-api</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <artifactId>ubcs-code-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <dependencies>
+
+        <dependency>
+            <groupId>com.thoughtworks.xstream</groupId>
+            <artifactId>xstream</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-starter-poi</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-web</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-webservice</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vci.mdm</groupId>
+            <artifactId>vci-mdm-wrj-webducking</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>de.odysseus.staxon</groupId>
+            <artifactId>staxon</artifactId>
+            <version>1.3</version>
+        </dependency>
+    </dependencies>
+    <packaging>jar</packaging>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeClassifyFullInfoBO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeClassifyFullInfoBO.java
new file mode 100644
index 0000000..f23c8e6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeClassifyFullInfoBO.java
@@ -0,0 +1,66 @@
+package com.vci.ubcs.code.bo;
+
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+
+import java.util.List;
+
+/**
+ * 涓婚搴撳垎绫荤浉鍏崇殑鍏ㄩ儴淇℃伅
+ * @author weidy
+ * @date 2022-2-25
+ */
+public class CodeClassifyFullInfoBO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 7416865011120729907L;
+    /**
+     * 涓婄骇鐨勫垎绫�
+     */
+    private List<CodeClassifyVO> parentClassifyVOs;
+
+    /**
+     * 椤跺眰鍒嗙被
+     */
+    private CodeClassifyVO topClassifyVO;
+
+    /**
+     * 褰撳墠鍒嗙被鐨勪俊鎭�
+     */
+    private CodeClassifyVO currentClassifyVO;
+
+
+    public List<CodeClassifyVO> getParentClassifyVOs() {
+        return parentClassifyVOs;
+    }
+
+    public void setParentClassifyVOs(List<CodeClassifyVO> parentClassifyVOs) {
+        this.parentClassifyVOs = parentClassifyVOs;
+    }
+
+    public CodeClassifyVO getTopClassifyVO() {
+        return topClassifyVO;
+    }
+
+    public void setTopClassifyVO(CodeClassifyVO topClassifyVO) {
+        this.topClassifyVO = topClassifyVO;
+    }
+
+    public CodeClassifyVO getCurrentClassifyVO() {
+        return currentClassifyVO;
+    }
+
+    public void setCurrentClassifyVO(CodeClassifyVO currentClassifyVO) {
+        this.currentClassifyVO = currentClassifyVO;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyFullInfo{" +
+                "parentClassifyVOs=" + parentClassifyVOs +
+                ", topClassifyVO=" + topClassifyVO +
+                ", currentClassifyVO=" + currentClassifyVO +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java
new file mode 100644
index 0000000..188bd00
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java
@@ -0,0 +1,132 @@
+package com.vci.ubcs.code.bo;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妯℃澘灞炴�х殑Sql
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class CodeTemplateAttrSqlBO implements java.io.Serializable{
+
+    /**
+     * 琛ㄥ悕
+     */
+    private String tableName;
+
+    /**
+     * 鏄电О
+     */
+    private String nickName;
+
+    /**
+     * 鍏宠仈鐨勮〃
+     */
+    private Map<String/**灞炴�у瓧娈�**/,String> joinTable;
+
+    /**
+     * 鍒嗛〉瀵硅薄
+     */
+    private PageHelper pageHelper;
+
+    /**
+     * 鍖呭惈鍒嗛〉鐨剆ql璇彞
+     */
+    private String sqlHasPage;
+
+    /**
+     * 涓嶅寘鍚垎椤电殑sql璇彞
+     */
+    private String sqlUnPage;
+
+    /**
+     * 鏌ヨ鎬绘暟鐨凷ql璇彞
+     */
+    private String sqlCount;
+
+    /**
+     * 鏈鏌ヨ鐨勫瓧娈�
+     */
+    private  List<String> selectFieldList;
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public Map<String, String> getJoinTable() {
+        return joinTable;
+    }
+
+    public void setJoinTable(Map<String, String> joinTable) {
+        this.joinTable = joinTable;
+    }
+
+    public PageHelper getPageHelper() {
+        return pageHelper;
+    }
+
+    public void setPageHelper(PageHelper pageHelper) {
+        this.pageHelper = pageHelper;
+    }
+
+    public String getSqlHasPage() {
+        return sqlHasPage;
+    }
+
+    public void setSqlHasPage(String sqlHasPage) {
+        this.sqlHasPage = sqlHasPage;
+    }
+
+    public String getSqlUnPage() {
+        return sqlUnPage;
+    }
+
+    public void setSqlUnPage(String sqlUnPage) {
+        this.sqlUnPage = sqlUnPage;
+    }
+
+    public String getSqlCount() {
+        return sqlCount;
+    }
+
+    public void setSqlCount(String sqlCount) {
+        this.sqlCount = sqlCount;
+    }
+
+    public List<String> getSelectFieldList() {
+        return selectFieldList;
+    }
+
+    public void setSelectFieldList(List<String> selectFieldList) {
+        this.selectFieldList = selectFieldList;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeTemplateAttrSqlBO{" +
+                "tableName='" + tableName + '\'' +
+                ", nickName='" + nickName + '\'' +
+                ", joinTable=" + joinTable +
+                ", pageHelper=" + pageHelper +
+                ", sqlHasPage='" + sqlHasPage + '\'' +
+                ", sqlUnPage='" + sqlUnPage + '\'' +
+                ", sqlCount='" + sqlCount + '\'' +
+                ", selectFieldList=" + selectFieldList +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
new file mode 100644
index 0000000..26a0a2c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
@@ -0,0 +1,669 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeBasicSecDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117949969514L;
+
+	/**
+	 * 鐮佹绫诲瀷
+	 */
+	private String sectype;
+
+	/**
+	 * 鐮佹绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String sectypeText;
+
+	/**
+	 * 缂栫爜瑙勫垯涓婚敭
+	 */
+	private String pkCodeRule;
+
+	/**
+	 * 鐮佹鎺掑簭鍙�
+	 */
+	private Integer orderNum;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨�
+	 */
+	private String referBtmId;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	private String referBtmName;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬х殑鏂囨湰
+	 */
+	private String referAttributeName;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	private String referAttributeId;
+
+	/**
+	 * 鍙栧�艰鍒�
+	 */
+	private String getValueClass ;
+
+	//鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
+	/**
+	 * 鏃ユ湡鏍煎紡
+	 */
+	private String codeDateFormatStr;
+
+	/**
+	 * 鐮佹闀垮害绫诲瀷
+	 */
+	private String codeSecLengthType;
+
+	/**
+	 * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeSecLengthTypeText;
+
+	/**
+	 * 鐮佹闀垮害
+	 */
+	private String codeSecLength;
+
+
+	/**
+	 * 灞傜骇绫诲瀷
+	 */
+	private String codeLevelType;
+
+	/**
+	 * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeLevelTypeText;
+
+	/**
+	 * 灞傜骇鐨勫��
+	 */
+	private Integer codeLevelValue;
+
+	/**
+	 * 鍊兼埅鍙栭暱搴�
+	 */
+	private Integer valueCutLength;
+
+	/**
+	 * 瀛楃鎴彇绫诲瀷
+	 */
+	private String valueCutType;
+
+	/**
+	 * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
+	 */
+	private String valueCutTypeText;
+
+	/**
+	 * 鍙栧�肩被鍨�
+	 */
+	private String codeGetValueType;
+
+	/**
+	 * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
+	 */
+	private String codeGetValueTypeText;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
+	 */
+	private String referCodeClassifyOid;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鍚嶇О
+	 */
+	private String referCodeClassifyOidName;
+
+	/**
+	 * 鍙傜収鐨勭獥鍙i厤缃�
+	 */
+	private String referConfig;
+
+	/**
+	 * 鏄剧ず淇℃伅
+	 */
+	private String referValueInfo;
+
+	/**
+	 * 杩囨护鐨剆ql鍐呭
+	 */
+	private String filterSql ;
+
+
+	/**
+	 * 娴佹按鍙疯捣濮嬪��
+	 */
+	private String serialStart;
+
+	/**
+	 * 娴佹按鐨勬闀�
+	 */
+	private Integer serialStep;
+
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡
+	 */
+	private String codeFillType;
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String codeFillTypeText;
+
+	/**
+	 * 琛ヤ綅鏃剁殑瀛楃
+	 */
+	private String codeFillSeparator;
+
+	/**
+	 * 濉厖闀垮害
+	 */
+	private String codeFillLength;
+
+	/**
+	 * 涓婇檺
+	 */
+	private Integer codeFillLimit;
+
+	/**
+	 * 娴佹按鏄惁琛ョ爜
+	 */
+	private String codeFillFlag;
+
+	/**
+	 * 鑷畾涔夌殑娴佹按绠楁硶绫�
+	 */
+	private String customCodeSerialClass;
+
+	/**
+	 * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
+	 */
+	private String matchClassifyValueFlag;
+
+	/**
+	 * 鐖跺垎绫荤爜娈典富閿�
+	 */
+	private String parentClassifySecOid;
+
+	/**
+	 * 鐖跺垎绫荤爜娈靛悕绉�
+	 */
+	private String parentClassifySecText;
+
+
+	/**
+	 * 鏄惁鍙互涓虹┖
+	 */
+	private String nullableFlag;
+
+	/**
+	 * 鏄惁鍙備笌缂栫爜
+	 */
+	private String componentCodeFlag;
+
+	/**
+	 * 鏄惁娴佹按渚濊禆
+	 */
+	private String serialDependFlag;
+
+	/**
+	 * 鏄惁鏄剧ず
+	 */
+	private String displayFlag;
+
+	/**
+	 * 娴佹按渚濊禆椤哄簭
+	 */
+	private Integer serialDependOrder;
+
+	/**
+	 * 閫夋嫨鐮佹淇℃伅鐨勪富閿泦鍚�
+	 */
+	private String oidArr;
+	/**
+	 * 鑾峰彇 鐮佹绫诲瀷
+	 */
+	public String getSectype (){
+		return sectype;
+	}
+
+	/**
+	 * 璁剧疆 鐮佹绫诲瀷
+	 */
+	public void setSectype (String sectype){
+		this.sectype = sectype;
+	}
+
+	public String getSectypeText() {
+		return sectypeText;
+	}
+
+	public void setSectypeText(String sectypeText) {
+		this.sectypeText = sectypeText;
+	}
+
+	/**
+	 * 鑾峰彇缂栫爜瑙勫垯涓婚敭
+	 */
+	public String getPkCodeRule() {
+		return pkCodeRule;
+	}
+
+	/**
+	 * 璁剧疆缂栫爜瑙勫垯涓婚敭
+	 */
+	public void setPkCodeRule(String pkCodeRule) {
+		this.pkCodeRule = pkCodeRule;
+	}
+
+	/**
+	 * 鑾峰彇鐮佹闀垮害绫诲瀷
+	 */
+	public String getCodeSecLengthType() {
+		return codeSecLengthType;
+	}
+
+	/**
+	 * 璁剧疆鐮佹闀垮害绫诲瀷
+	 */
+	public void setCodeSecLengthType(String codeSecLengthType) {
+		this.codeSecLengthType = codeSecLengthType;
+	}
+
+	/**
+	 * 鑾峰彇鐮佹闀垮害
+	 */
+	public String getCodeSecLength() {
+		return codeSecLength;
+	}
+
+	/**
+	 * 璁剧疆鐮佹闀垮害
+	 */
+	public void setCodeSecLength(String codeSecLength) {
+		this.codeSecLength = codeSecLength;
+	}
+
+	public String getReferAttributeName() {
+		return referAttributeName;
+	}
+
+	public void setReferAttributeName(String referAttributeName) {
+		this.referAttributeName = referAttributeName;
+	}
+
+	public String getReferAttributeId() {
+		return referAttributeId;
+	}
+
+	public void setReferAttributeId(String referAttributeId) {
+		this.referAttributeId = referAttributeId;
+	}
+
+	public String getGetValueClass() {
+		return getValueClass;
+	}
+
+	public void setGetValueClass(String getValueClass) {
+		this.getValueClass = getValueClass;
+	}
+
+	public String getCodeDateFormatStr() {
+		return codeDateFormatStr;
+	}
+
+	public void setCodeDateFormatStr(String codeDateFormatStr) {
+		this.codeDateFormatStr = codeDateFormatStr;
+	}
+
+
+	public String getCodeLevelType() {
+		return codeLevelType;
+	}
+
+	public void setCodeLevelType(String codeLevelType) {
+		this.codeLevelType = codeLevelType;
+	}
+
+	public String getCodeLevelTypeText() {
+		return codeLevelTypeText;
+	}
+
+	public void setCodeLevelTypeText(String codeLevelTypeText) {
+		this.codeLevelTypeText = codeLevelTypeText;
+	}
+
+	public Integer getCodeLevelValue() {
+		return codeLevelValue;
+	}
+
+	public void setCodeLevelValue(Integer codeLevelValue) {
+		this.codeLevelValue = codeLevelValue;
+	}
+
+	public Integer getValueCutLength() {
+		return valueCutLength;
+	}
+
+	public void setValueCutLength(Integer valueCutLength) {
+		this.valueCutLength = valueCutLength;
+	}
+
+	public String getValueCutType() {
+		return valueCutType;
+	}
+
+	public void setValueCutType(String valueCutType) {
+		this.valueCutType = valueCutType;
+	}
+
+	public String getValueCutTypeText() {
+		return valueCutTypeText;
+	}
+
+	public void setValueCutTypeText(String valueCutTypeText) {
+		this.valueCutTypeText = valueCutTypeText;
+	}
+
+	public String getCodeGetValueType() {
+		return codeGetValueType;
+	}
+
+	public void setCodeGetValueType(String codeGetValueType) {
+		this.codeGetValueType = codeGetValueType;
+	}
+
+	public String getCodeGetValueTypeText() {
+		return codeGetValueTypeText;
+	}
+
+	public void setCodeGetValueTypeText(String codeGetValueTypeText) {
+		this.codeGetValueTypeText = codeGetValueTypeText;
+	}
+
+	public String getReferCodeClassifyOid() {
+		return referCodeClassifyOid;
+	}
+
+	public void setReferCodeClassifyOid(String referCodeClassifyOid) {
+		this.referCodeClassifyOid = referCodeClassifyOid;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	public String getReferValueInfo() {
+		return referValueInfo;
+	}
+
+	public void setReferValueInfo(String referValueInfo) {
+		this.referValueInfo = referValueInfo;
+	}
+
+	public String getFilterSql() {
+		return filterSql;
+	}
+
+	public void setFilterSql(String filterSql) {
+		this.filterSql = filterSql;
+	}
+
+	public String getSerialStart() {
+		return serialStart;
+	}
+
+	public void setSerialStart(String serialStart) {
+		this.serialStart = serialStart;
+	}
+
+	public Integer getSerialStep() {
+		return serialStep;
+	}
+
+	public void setSerialStep(Integer serialStep) {
+		this.serialStep = serialStep;
+	}
+
+	public String getCodeFillType() {
+		return codeFillType;
+	}
+
+	public void setCodeFillType(String codeFillType) {
+		this.codeFillType = codeFillType;
+	}
+
+	public String getCodeFillTypeText() {
+		return codeFillTypeText;
+	}
+
+	public void setCodeFillTypeText(String codeFillTypeText) {
+		this.codeFillTypeText = codeFillTypeText;
+	}
+
+	public String getCodeFillSeparator() {
+		return codeFillSeparator;
+	}
+
+	public void setCodeFillSeparator(String codeFillSeparator) {
+		this.codeFillSeparator = codeFillSeparator;
+	}
+
+	public String getCodeFillLength() {
+		return codeFillLength;
+	}
+
+	public void setCodeFillLength(String codeFillLength) {
+		this.codeFillLength = codeFillLength;
+	}
+
+	public Integer getCodeFillLimit() {
+		return codeFillLimit;
+	}
+
+	public void setCodeFillLimit(Integer codeFillLimit) {
+		this.codeFillLimit = codeFillLimit;
+	}
+
+	public String getCodeFillFlag() {
+		return codeFillFlag;
+	}
+
+	public void setCodeFillFlag(String codeFillFlag) {
+		this.codeFillFlag = codeFillFlag;
+	}
+
+	public String getCustomCodeSerialClass() {
+		return customCodeSerialClass;
+	}
+
+	public void setCustomCodeSerialClass(String customCodeSerialClass) {
+		this.customCodeSerialClass = customCodeSerialClass;
+	}
+
+	public String getOidArr() {
+		return oidArr;
+	}
+
+	public void setOidArr(String oidArr) {
+		this.oidArr = oidArr;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getCodeSecLengthTypeText() {
+		return codeSecLengthTypeText;
+	}
+
+	public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
+		this.codeSecLengthTypeText = codeSecLengthTypeText;
+	}
+
+	public String getMatchClassifyValueFlag() {
+		return matchClassifyValueFlag;
+	}
+
+	public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
+		this.matchClassifyValueFlag = matchClassifyValueFlag;
+	}
+
+	public String getParentClassifySecOid() {
+		return parentClassifySecOid;
+	}
+
+	public void setParentClassifySecOid(String parentClassifySecOid) {
+		this.parentClassifySecOid = parentClassifySecOid;
+	}
+
+	public String getParentClassifySecText() {
+		return parentClassifySecText;
+	}
+
+	public void setParentClassifySecText(String parentClassifySecText) {
+		this.parentClassifySecText = parentClassifySecText;
+	}
+
+	public String getNullableFlag() {
+		return nullableFlag;
+	}
+
+	public void setNullableFlag(String nullableFlag) {
+		this.nullableFlag = nullableFlag;
+	}
+
+	public String getComponentCodeFlag() {
+		return componentCodeFlag;
+	}
+
+	public void setComponentCodeFlag(String componentCodeFlag) {
+		this.componentCodeFlag = componentCodeFlag;
+	}
+
+	public String getSerialDependFlag() {
+		return serialDependFlag;
+	}
+
+	public void setSerialDependFlag(String serialDependFlag) {
+		this.serialDependFlag = serialDependFlag;
+	}
+
+	public String getDisplayFlag() {
+		return displayFlag;
+	}
+
+	public void setDisplayFlag(String displayFlag) {
+		this.displayFlag = displayFlag;
+	}
+
+	public Integer getSerialDependOrder() {
+		return serialDependOrder;
+	}
+
+	public void setSerialDependOrder(Integer serialDependOrder) {
+		this.serialDependOrder = serialDependOrder;
+	}
+
+	public String getReferBtmId() {
+		return referBtmId;
+	}
+
+	public void setReferBtmId(String referBtmId) {
+		this.referBtmId = referBtmId;
+	}
+
+	public String getReferBtmName() {
+		return referBtmName;
+	}
+
+	public void setReferBtmName(String referBtmName) {
+		this.referBtmName = referBtmName;
+	}
+
+	public String getReferCodeClassifyOidName() {
+		return referCodeClassifyOidName;
+	}
+
+	public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
+		this.referCodeClassifyOidName = referCodeClassifyOidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeBasicSecDTO{" +
+				"sectype='" + sectype + '\'' +
+				", sectypeText='" + sectypeText + '\'' +
+				", pkCodeRule='" + pkCodeRule + '\'' +
+				", orderNum=" + orderNum +
+				", referBtmId='" + referBtmId + '\'' +
+				", referBtmName='" + referBtmName + '\'' +
+				", referAttributeName='" + referAttributeName + '\'' +
+				", referAttributeId='" + referAttributeId + '\'' +
+				", getValueClass='" + getValueClass + '\'' +
+				", codeDateFormatStr='" + codeDateFormatStr + '\'' +
+				", codeSecLengthType='" + codeSecLengthType + '\'' +
+				", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
+				", codeSecLength='" + codeSecLength + '\'' +
+				", codeLevelType='" + codeLevelType + '\'' +
+				", codeLevelTypeText='" + codeLevelTypeText + '\'' +
+				", codeLevelValue=" + codeLevelValue +
+				", valueCutLength=" + valueCutLength +
+				", valueCutType='" + valueCutType + '\'' +
+				", valueCutTypeText='" + valueCutTypeText + '\'' +
+				", codeGetValueType='" + codeGetValueType + '\'' +
+				", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
+				", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
+				", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", referValueInfo='" + referValueInfo + '\'' +
+				", filterSql='" + filterSql + '\'' +
+				", serialStart='" + serialStart + '\'' +
+				", serialStep=" + serialStep +
+				", codeFillType='" + codeFillType + '\'' +
+				", codeFillTypeText='" + codeFillTypeText + '\'' +
+				", codeFillSeparator='" + codeFillSeparator + '\'' +
+				", codeFillLength='" + codeFillLength + '\'' +
+				", codeFillLimit=" + codeFillLimit +
+				", codeFillFlag='" + codeFillFlag + '\'' +
+				", customCodeSerialClass='" + customCodeSerialClass + '\'' +
+				", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
+				", parentClassifySecOid='" + parentClassifySecOid + '\'' +
+				", parentClassifySecText='" + parentClassifySecText + '\'' +
+				", nullableFlag='" + nullableFlag + '\'' +
+				", componentCodeFlag='" + componentCodeFlag + '\'' +
+				", serialDependFlag='" + serialDependFlag + '\'' +
+				", displayFlag='" + displayFlag + '\'' +
+				", serialDependOrder=" + serialDependOrder +
+				", oidArr='" + oidArr + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeButtonDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeButtonDTO.java
new file mode 100644
index 0000000..4d48ffa
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeButtonDTO.java
@@ -0,0 +1,85 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeButtonDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118494102363L;
+
+	/**
+	 * 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	private String iconcls;
+
+	/**
+	 * 鎵ц鐨刯s鍐呭
+	 */
+	private String executejs;
+
+	/**
+	 * 鎸夐挳鐨勪綅缃�
+	 */
+	private String usedpositiontype;
+
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	public String getIconcls (){
+		return iconcls;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	public void setIconcls (String iconcls){
+		this.iconcls = iconcls;
+	}
+
+	/**
+	 * 鑾峰彇 鎵ц鐨刯s鍐呭
+	 */
+	public String getExecutejs (){
+		return executejs;
+	}
+
+	/**
+	 * 璁剧疆 鎵ц鐨刯s鍐呭
+	 */
+	public void setExecutejs (String executejs){
+		this.executejs = executejs;
+	}
+
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪綅缃�
+	 */
+	public String getUsedpositiontype (){
+		return usedpositiontype;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐨勪綅缃�
+	 */
+	public void setUsedpositiontype (String usedpositiontype){
+		this.usedpositiontype = usedpositiontype;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeButtonDTO{" +
+		"iconcls='" + iconcls +"',"+
+		"executejs='" + executejs +"',"+
+		"usedpositiontype='" + usedpositiontype +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java
new file mode 100644
index 0000000..8a4f0f5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java
@@ -0,0 +1,226 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public class CodeClassifyDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118655590281L;
+
+	/**
+	 * 灞炴�ф帓搴忓彿
+	 */
+	private Integer ordernum;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨�
+	 */
+	private String btmtypeid;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	private String btmtypename;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勪富閿�
+	 */
+	private String coderuleoid;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	private String coderuleoidName;
+	/**
+	 * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	private String codekeyattrrepeatoid;
+
+	/**
+	 * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	private String codekeyattrrepeatoidName;
+	/**
+	 * 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	private String parentcodeclassifyoid;
+
+	/**
+	 * 鏄惁鍚敤涓嬬骇
+	 */
+	private boolean ablechildren;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯涓婚敭
+	 */
+	private String codeResembleRuleOid;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯鍚嶇О
+	 */
+	private String codeResembleRuleOidName;
+
+	public boolean getAblechildren() {
+		return ablechildren;
+	}
+
+	public void setAblechildren(boolean ablechildren) {
+		this.ablechildren = ablechildren;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ф帓搴忓彿
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ф帓搴忓彿
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
+	 */
+	public String getBtmtypeid (){
+		return btmtypeid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炰笟鍔$被鍨�
+	 */
+	public void setBtmtypeid (String btmtypeid){
+		this.btmtypeid = btmtypeid;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	public String getBtmtypename (){
+		return btmtypename;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	public void setBtmtypename (String btmtypename){
+		this.btmtypename = btmtypename;
+	}
+
+	/**
+	 * 鑾峰彇 缂栫爜瑙勫垯鐨勪富閿�
+	 */
+	public String getCoderuleoid (){
+		return coderuleoid;
+	}
+
+	/**
+	 * 璁剧疆 缂栫爜瑙勫垯鐨勪富閿�
+	 */
+	public void setCoderuleoid (String coderuleoid){
+		this.coderuleoid = coderuleoid;
+	}
+
+	/**
+	 * 鑾峰彇缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getCoderuleoidName (){
+		return coderuleoidName;
+	}
+
+	/**
+	 * 璁剧疆缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	public void setCoderuleoidName (String coderuleoidName){
+		this.coderuleoidName = coderuleoidName;
+	}
+	/**
+	 * 鑾峰彇 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	public String getCodekeyattrrepeatoid (){
+		return codekeyattrrepeatoid;
+	}
+
+	/**
+	 * 璁剧疆 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	public void setCodekeyattrrepeatoid (String codekeyattrrepeatoid){
+		this.codekeyattrrepeatoid = codekeyattrrepeatoid;
+	}
+
+	/**
+	 * 鑾峰彇鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	public String getCodekeyattrrepeatoidName (){
+		return codekeyattrrepeatoidName;
+	}
+
+	/**
+	 * 璁剧疆鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	public void setCodekeyattrrepeatoidName (String codekeyattrrepeatoidName){
+		this.codekeyattrrepeatoidName = codekeyattrrepeatoidName;
+	}
+	/**
+	 * 鑾峰彇 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	public String getParentcodeclassifyoid (){
+		return parentcodeclassifyoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	public void setParentcodeclassifyoid (String parentcodeclassifyoid){
+		this.parentcodeclassifyoid = parentcodeclassifyoid;
+	}
+
+	public boolean isAblechildren() {
+		return ablechildren;
+	}
+
+	public String getCodeResembleRuleOid() {
+		return codeResembleRuleOid;
+	}
+
+	public void setCodeResembleRuleOid(String codeResembleRuleOid) {
+		this.codeResembleRuleOid = codeResembleRuleOid;
+	}
+
+	public String getCodeResembleRuleOidName() {
+		return codeResembleRuleOidName;
+	}
+
+	public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
+		this.codeResembleRuleOidName = codeResembleRuleOidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyDTO{" +
+				"ordernum=" + ordernum +
+				", btmtypeid='" + btmtypeid + '\'' +
+				", btmtypename='" + btmtypename + '\'' +
+				", coderuleoid='" + coderuleoid + '\'' +
+				", coderuleoidName='" + coderuleoidName + '\'' +
+				", codekeyattrrepeatoid='" + codekeyattrrepeatoid + '\'' +
+				", codekeyattrrepeatoidName='" + codekeyattrrepeatoidName + '\'' +
+				", parentcodeclassifyoid='" + parentcodeclassifyoid + '\'' +
+				", ablechildren=" + ablechildren +
+				", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
+				", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyProcessTempDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyProcessTempDTO.java
new file mode 100644
index 0000000..50bb9b2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyProcessTempDTO.java
@@ -0,0 +1,152 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyProcessTempDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117374292084L;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿�
+	 */
+	private String codeclassifyoid;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	private String codeclassifyoidName;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifyTemplateOid;
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	private String codeprocessuse;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ�旀樉绀烘枃鏈�
+	 */
+	private String codeprocessuseText;
+
+	/**
+	 * 娴佺▼妯℃澘鐨勭増鏈�
+	 */
+	private String processVersion;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬т富閿�
+	 */
+	private String codeTempAttrOidArr;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
+	 */
+	private String codeTempAttrOidArrName;
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婚搴撳垎绫讳富閿�
+	 */
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	 * 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+	/**
+	 * 鑾峰彇 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	public String getCodeprocessuse (){
+		return codeprocessuse;
+	}
+
+	/**
+	 * 璁剧疆 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	public void setCodeprocessuse (String codeprocessuse){
+		this.codeprocessuse = codeprocessuse;
+	}
+
+	public String getCodeprocessuseText() {
+		return codeprocessuseText;
+	}
+
+	public void setCodeprocessuseText(String codeprocessuseText) {
+		this.codeprocessuseText = codeprocessuseText;
+	}
+
+	public String getProcessVersion() {
+		return processVersion;
+	}
+
+	public void setProcessVersion(String processVersion) {
+		this.processVersion = processVersion;
+	}
+
+	public String getClassifyTemplateOid() {
+		return classifyTemplateOid;
+	}
+
+	public void setClassifyTemplateOid(String classifyTemplateOid) {
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+
+	public String getCodeTempAttrOidArr() {
+		return codeTempAttrOidArr;
+	}
+
+	public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
+		this.codeTempAttrOidArr = codeTempAttrOidArr;
+	}
+
+	public String getCodeTempAttrOidArrName() {
+		return codeTempAttrOidArrName;
+	}
+
+	public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
+		this.codeTempAttrOidArrName = codeTempAttrOidArrName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyProcessTempDTO{" +
+				"codeclassifyoid='" + codeclassifyoid + '\'' +
+				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
+				", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+				", codeprocessuse='" + codeprocessuse + '\'' +
+				", codeprocessuseText='" + codeprocessuseText + '\'' +
+				", processVersion='" + processVersion + '\'' +
+				", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
+				", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTempMapItemDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTempMapItemDTO.java
new file mode 100644
index 0000000..786d4ca
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTempMapItemDTO.java
@@ -0,0 +1,184 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public class CodeClassifyTempMapItemDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118229256252L;
+
+	/**
+	 * 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	private String classifytemplateattroid;
+
+	/**
+	 * 鏄犲皠瑙勫垯涓婚敭
+	 */
+	private String classifytemplatemapoid;
+
+	/**
+	 * 鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String classifytemplatemapoidName;
+	/**
+	 * 闆嗗洟鐮佸睘鎬ey
+	 */
+	private String groupcodeattrid;
+
+	/**
+	 * 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	private String groupcodeattrname;
+
+	/**
+	 * 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	private String switchclassname;
+
+	/**
+	 * 杞崲鍏紡
+	 */
+	private String switcheval;
+
+	/**
+	 * 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	private String targetdateformat;
+
+
+	/**
+	 * 鑾峰彇 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	public String getClassifytemplateattroid (){
+		return classifytemplateattroid;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	public void setClassifytemplateattroid (String classifytemplateattroid){
+		this.classifytemplateattroid = classifytemplateattroid;
+	}
+
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯涓婚敭
+	 */
+	public String getClassifytemplatemapoid (){
+		return classifytemplatemapoid;
+	}
+
+	/**
+	 * 璁剧疆 鏄犲皠瑙勫垯涓婚敭
+	 */
+	public void setClassifytemplatemapoid (String classifytemplatemapoid){
+		this.classifytemplatemapoid = classifytemplatemapoid;
+	}
+
+	/**
+	 * 鑾峰彇鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getClassifytemplatemapoidName (){
+		return classifytemplatemapoidName;
+	}
+
+	/**
+	 * 璁剧疆鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setClassifytemplatemapoidName (String classifytemplatemapoidName){
+		this.classifytemplatemapoidName = classifytemplatemapoidName;
+	}
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬ey
+	 */
+	public String getGroupcodeattrid (){
+		return groupcodeattrid;
+	}
+
+	/**
+	 * 璁剧疆 闆嗗洟鐮佸睘鎬ey
+	 */
+	public void setGroupcodeattrid (String groupcodeattrid){
+		this.groupcodeattrid = groupcodeattrid;
+	}
+
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	public String getGroupcodeattrname (){
+		return groupcodeattrname;
+	}
+
+	/**
+	 * 璁剧疆 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	public void setGroupcodeattrname (String groupcodeattrname){
+		this.groupcodeattrname = groupcodeattrname;
+	}
+
+	/**
+	 * 鑾峰彇 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	public String getSwitchclassname (){
+		return switchclassname;
+	}
+
+	/**
+	 * 璁剧疆 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	public void setSwitchclassname (String switchclassname){
+		this.switchclassname = switchclassname;
+	}
+
+	/**
+	 * 鑾峰彇 杞崲鍏紡
+	 */
+	public String getSwitcheval (){
+		return switcheval;
+	}
+
+	/**
+	 * 璁剧疆 杞崲鍏紡
+	 */
+	public void setSwitcheval (String switcheval){
+		this.switcheval = switcheval;
+	}
+
+	/**
+	 * 鑾峰彇 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	public String getTargetdateformat (){
+		return targetdateformat;
+	}
+
+	/**
+	 * 璁剧疆 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	public void setTargetdateformat (String targetdateformat){
+		this.targetdateformat = targetdateformat;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTempMapItemDTO{" +
+		"classifytemplateattroid='" + classifytemplateattroid +"',"+
+		"classifytemplatemapoid='" + classifytemplatemapoid +"',"+
+		"classifytemplatemapoidName='" + classifytemplatemapoidName +"'," +
+		"groupcodeattrid='" + groupcodeattrid +"',"+
+		"groupcodeattrname='" + groupcodeattrname +"',"+
+		"switchclassname='" + switchclassname +"',"+
+		"switcheval='" + switcheval +"',"+
+		"targetdateformat='" + targetdateformat +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java
new file mode 100644
index 0000000..d764fd2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java
@@ -0,0 +1,1053 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateAttrDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118652601470L;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifytemplateoid;
+
+	/**
+	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	private String classifytemplateoidName;
+	/**
+	 * 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	private String classifyattributeoid;
+
+	/**
+	 * 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	private String classifyattributeoidName;
+	/**
+	 * 灞炴�х殑绫诲瀷
+	 */
+	private String attributedatatype;
+
+	/**
+	 * 鏄惁鍏抽敭灞炴��
+	 */
+	private String keyattrflag;
+
+	/**
+	 * 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	private String queryattrflag;
+
+	/**
+	 * 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	private String seniorqueryattrflag;
+
+	/**
+	 * 鐩镐技鏌ラ噸灞炴��
+	 */
+	private String samerepeatattrflag;
+
+	/**
+	 * 鏄惁鎺掑簭
+	 */
+	private String sortattrflag;
+
+	/**
+	 * 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	private String qrcodeflag;
+
+	/**
+	 * 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	private String barcodeflag;
+
+	/**
+	 * 缁勫悎瑙勫垯
+	 */
+	private String componentrule;
+
+	/**
+	 * 楠岃瘉瑙勫垯
+	 */
+	private String verifyrule;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	private String classifyinvokelevel;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	private String classifyinvokeattr;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	private String classifyinvokeattrname;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	private String classifyinvokeeditflag;
+
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+	/**
+	 * 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	private String formdisplayflag;
+
+	/**
+	 * 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	private String tabledisplayflag;
+
+	/**
+	 * 鎵�灞炲睘鎬у垎缁�
+	 */
+	private String attributegroup;
+
+	/**
+	 * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
+	 */
+	private String enumString;
+
+	/**
+	 * 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	private String enumid;
+
+	/**
+	 * 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	private String enumname;
+
+	/**
+	 * 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	private String enumeditflag;
+
+	/**
+	 * 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	private String referbtmid;
+
+	/**
+	 * 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	private String referbtmname;
+
+	/**
+	 * 鍙傜収绐楀彛閰嶇疆
+	 */
+	private String referConfig;
+
+	/**
+	 * 鏄惁蹇呰緭
+	 */
+	private String requireflag;
+
+	/**
+	 * 鏄惁鍙
+	 */
+	private String readonlyflag;
+
+	/**
+	 * 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	private Integer controllength;
+
+	/**
+	 * 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	private String formdisplaystyle;
+
+	/**
+	 * 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	private String tabledisplaystyle;
+
+	/**
+	 * 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	private String formhref;
+
+	/**
+	 * 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	private String tablehref;
+
+	/**
+	 * 灏忔暟绮惧害
+	 */
+	private Integer precisionlength;
+
+	/**
+	 * 灏忔暟鍒诲害
+	 */
+	private Integer scalelength;
+
+	/**
+	 * 鍙栧�艰寖鍥�
+	 */
+	private String valuearea;
+
+	/**
+	 * 鏃堕棿鏍煎紡
+	 */
+	private String codedateformat;
+
+	/**
+	 * 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	private String tabledisplayjs;
+
+	/**
+	 * 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	private String textareaflag;
+
+	/**
+	 * 棰勮鍥�
+	 */
+	private String imageflag;
+
+	/**
+	 * 榛樿鍊�
+	 */
+	private String defaultvalue;
+
+	/**
+	 * 鍓嶇紑
+	 */
+	private String prefixvalue;
+
+	/**
+	 * 鍚庣紑
+	 */
+	private String suffixvalue;
+
+	/**
+	 * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	private String filtersourceattr;
+
+	/**
+	 * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	private String filtersourceattrname;
+
+	/**
+	 * 灞炴�у垪琛ㄤ腑鐨勫搴�
+	 */
+	private Integer attrTableWidth;
+	/**
+	 * 璇存槑
+	 */
+	@Column(columnDefinition = "璇存槑")
+	private String explain;
+
+	/**
+	 * 閫夋嫨搴撴爣璇�
+	 */
+	@Column(columnDefinition = "閫夋嫨搴撴爣璇�")
+	private String libraryIdentification;
+
+	/**
+	 * 绾ц仈灞炴�х紪鍙�
+	 */
+	@Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
+	private String parentCode;
+
+	/**
+	 * 绾ц仈灞炴�у悕绉�
+	 */
+	@Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
+	private String parentName;
+
+	/**
+	 * 绾ц仈鏌ヨ灞炴��
+	 */
+	@Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
+	private String parentQueryAttr;
+
+	public String getExplain() {
+		return explain;
+	}
+
+	public void setExplain(String explain) {
+		this.explain = explain;
+	}
+
+	public String getLibraryIdentification() {
+		return libraryIdentification;
+	}
+
+	public void setLibraryIdentification(String libraryIdentification) {
+		this.libraryIdentification = libraryIdentification;
+	}
+
+	public String getParentCode() {
+		return parentCode;
+	}
+
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+
+	public String getParentName() {
+		return parentName;
+	}
+
+	public void setParentName(String parentName) {
+		this.parentName = parentName;
+	}
+
+	public String getParentQueryAttr() {
+		return parentQueryAttr;
+	}
+
+	public void setParentQueryAttr(String parentQueryAttr) {
+		this.parentQueryAttr = parentQueryAttr;
+	}
+
+	public String getEnumString() {
+		return enumString;
+	}
+
+	public void setEnumString(String enumString) {
+		this.enumString = enumString;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉�
+	 */
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	public String getClassifyattributeoid (){
+		return classifyattributeoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	public void setClassifyattributeoid (String classifyattributeoid){
+		this.classifyattributeoid = classifyattributeoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	public String getClassifyattributeoidName (){
+		return classifyattributeoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	public void setClassifyattributeoidName (String classifyattributeoidName){
+		this.classifyattributeoidName = classifyattributeoidName;
+	}
+	/**
+	 * 鑾峰彇 灞炴�х殑绫诲瀷
+	 */
+	public String getAttributedatatype (){
+		return attributedatatype;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�х殑绫诲瀷
+	 */
+	public void setAttributedatatype (String attributedatatype){
+		this.attributedatatype = attributedatatype;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
+	 */
+	public String getKeyattrflag (){
+		return keyattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鍏抽敭灞炴��
+	 */
+	public void setKeyattrflag (String keyattrflag){
+		this.keyattrflag = keyattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	public String getQueryattrflag (){
+		return queryattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	public void setQueryattrflag (String queryattrflag){
+		this.queryattrflag = queryattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	public String getSeniorqueryattrflag (){
+		return seniorqueryattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	public void setSeniorqueryattrflag (String seniorqueryattrflag){
+		this.seniorqueryattrflag = seniorqueryattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
+	 */
+	public String getSamerepeatattrflag (){
+		return samerepeatattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鐩镐技鏌ラ噸灞炴��
+	 */
+	public void setSamerepeatattrflag (String samerepeatattrflag){
+		this.samerepeatattrflag = samerepeatattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鎺掑簭
+	 */
+	public String getSortattrflag (){
+		return sortattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鎺掑簭
+	 */
+	public void setSortattrflag (String sortattrflag){
+		this.sortattrflag = sortattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	public String getQrcodeflag (){
+		return qrcodeflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	public void setQrcodeflag (String qrcodeflag){
+		this.qrcodeflag = qrcodeflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	public String getBarcodeflag (){
+		return barcodeflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	public void setBarcodeflag (String barcodeflag){
+		this.barcodeflag = barcodeflag;
+	}
+
+	/**
+	 * 鑾峰彇 缁勫悎瑙勫垯
+	 */
+	public String getComponentrule (){
+		return componentrule;
+	}
+
+	/**
+	 * 璁剧疆 缁勫悎瑙勫垯
+	 */
+	public void setComponentrule (String componentrule){
+		this.componentrule = componentrule;
+	}
+
+	/**
+	 * 鑾峰彇 楠岃瘉瑙勫垯
+	 */
+	public String getVerifyrule (){
+		return verifyrule;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉瑙勫垯
+	 */
+	public void setVerifyrule (String verifyrule){
+		this.verifyrule = verifyrule;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	public String getClassifyinvokelevel (){
+		return classifyinvokelevel;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	public void setClassifyinvokelevel (String classifyinvokelevel){
+		this.classifyinvokelevel = classifyinvokelevel;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattr (){
+		return classifyinvokeattr;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	public void setClassifyinvokeattr (String classifyinvokeattr){
+		this.classifyinvokeattr = classifyinvokeattr;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattrname (){
+		return classifyinvokeattrname;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	public void setClassifyinvokeattrname (String classifyinvokeattrname){
+		this.classifyinvokeattrname = classifyinvokeattrname;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	public String getClassifyinvokeeditflag (){
+		return classifyinvokeeditflag;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
+		this.classifyinvokeeditflag = classifyinvokeeditflag;
+	}
+
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	public String getFormdisplayflag (){
+		return formdisplayflag;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	public void setFormdisplayflag (String formdisplayflag){
+		this.formdisplayflag = formdisplayflag;
+	}
+
+	/**
+	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	public String getTabledisplayflag (){
+		return tabledisplayflag;
+	}
+
+	/**
+	 * 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	public void setTabledisplayflag (String tabledisplayflag){
+		this.tabledisplayflag = tabledisplayflag;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
+	 */
+	public String getAttributegroup (){
+		return attributegroup;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炲睘鎬у垎缁�
+	 */
+	public void setAttributegroup (String attributegroup){
+		this.attributegroup = attributegroup;
+	}
+
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	public String getEnumid (){
+		return enumid;
+	}
+
+	/**
+	 * 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	public void setEnumid (String enumid){
+		this.enumid = enumid;
+	}
+
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	public String getEnumname (){
+		return enumname;
+	}
+
+	/**
+	 * 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	public void setEnumname (String enumname){
+		this.enumname = enumname;
+	}
+
+	/**
+	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	public String getEnumeditflag (){
+		return enumeditflag;
+	}
+
+	/**
+	 * 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	public void setEnumeditflag (String enumeditflag){
+		this.enumeditflag = enumeditflag;
+	}
+
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	public String getReferbtmid (){
+		return referbtmid;
+	}
+
+	/**
+	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	public void setReferbtmid (String referbtmid){
+		this.referbtmid = referbtmid;
+	}
+
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	public String getReferbtmname (){
+		return referbtmname;
+	}
+
+	/**
+	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	public void setReferbtmname (String referbtmname){
+		this.referbtmname = referbtmname;
+	}
+
+
+	/**
+	 * 鑾峰彇 鏄惁蹇呰緭
+	 */
+	public String getRequireflag (){
+		return requireflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇呰緭
+	 */
+	public void setRequireflag (String requireflag){
+		this.requireflag = requireflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鍙
+	 */
+	public String getReadonlyflag (){
+		return readonlyflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鍙
+	 */
+	public void setReadonlyflag (String readonlyflag){
+		this.readonlyflag = readonlyflag;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	public Integer getControllength (){
+		return controllength;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	public void setControllength (Integer controllength){
+		this.controllength = controllength;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getFormdisplaystyle (){
+		return formdisplaystyle;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	public void setFormdisplaystyle (String formdisplaystyle){
+		this.formdisplaystyle = formdisplaystyle;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getTabledisplaystyle (){
+		return tabledisplaystyle;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	public void setTabledisplaystyle (String tabledisplaystyle){
+		this.tabledisplaystyle = tabledisplaystyle;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	public String getFormhref (){
+		return formhref;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	public void setFormhref (String formhref){
+		this.formhref = formhref;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	public String getTablehref (){
+		return tablehref;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	public void setTablehref (String tablehref){
+		this.tablehref = tablehref;
+	}
+
+	/**
+	 * 鑾峰彇 灏忔暟绮惧害
+	 */
+	public Integer getPrecisionlength (){
+		return precisionlength;
+	}
+
+	/**
+	 * 璁剧疆 灏忔暟绮惧害
+	 */
+	public void setPrecisionlength (Integer precisionlength){
+		this.precisionlength = precisionlength;
+	}
+
+	/**
+	 * 鑾峰彇 灏忔暟鍒诲害
+	 */
+	public Integer getScalelength (){
+		return scalelength;
+	}
+
+	/**
+	 * 璁剧疆 灏忔暟鍒诲害
+	 */
+	public void setScalelength (Integer scalelength){
+		this.scalelength = scalelength;
+	}
+
+	/**
+	 * 鑾峰彇 鍙栧�艰寖鍥�
+	 */
+	public String getValuearea (){
+		return valuearea;
+	}
+
+	/**
+	 * 璁剧疆 鍙栧�艰寖鍥�
+	 */
+	public void setValuearea (String valuearea){
+		this.valuearea = valuearea;
+	}
+
+	/**
+	 * 鑾峰彇 鏃堕棿鏍煎紡
+	 */
+	public String getCodedateformat (){
+		return codedateformat;
+	}
+
+	/**
+	 * 璁剧疆 鏃堕棿鏍煎紡
+	 */
+	public void setCodedateformat (String codedateformat){
+		this.codedateformat = codedateformat;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	public String getTabledisplayjs (){
+		return tabledisplayjs;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	public void setTabledisplayjs (String tabledisplayjs){
+		this.tabledisplayjs = tabledisplayjs;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	public String getTextareaflag (){
+		return textareaflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	public void setTextareaflag (String textareaflag){
+		this.textareaflag = textareaflag;
+	}
+
+	/**
+	 * 鑾峰彇 棰勮鍥�
+	 */
+	public String getImageflag (){
+		return imageflag;
+	}
+
+	/**
+	 * 璁剧疆 棰勮鍥�
+	 */
+	public void setImageflag (String imageflag){
+		this.imageflag = imageflag;
+	}
+
+	/**
+	 * 鑾峰彇 榛樿鍊�
+	 */
+	public String getDefaultvalue (){
+		return defaultvalue;
+	}
+
+	/**
+	 * 璁剧疆 榛樿鍊�
+	 */
+	public void setDefaultvalue (String defaultvalue){
+		this.defaultvalue = defaultvalue;
+	}
+
+	/**
+	 * 鑾峰彇 鍓嶇紑
+	 */
+	public String getPrefixvalue (){
+		return prefixvalue;
+	}
+
+	/**
+	 * 璁剧疆 鍓嶇紑
+	 */
+	public void setPrefixvalue (String prefixvalue){
+		this.prefixvalue = prefixvalue;
+	}
+
+	/**
+	 * 鑾峰彇 鍚庣紑
+	 */
+	public String getSuffixvalue (){
+		return suffixvalue;
+	}
+
+	/**
+	 * 璁剧疆 鍚庣紑
+	 */
+	public void setSuffixvalue (String suffixvalue){
+		this.suffixvalue = suffixvalue;
+	}
+
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	public String getFiltersourceattr (){
+		return filtersourceattr;
+	}
+
+	/**
+	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	public void setFiltersourceattr (String filtersourceattr){
+		this.filtersourceattr = filtersourceattr;
+	}
+
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	public String getFiltersourceattrname (){
+		return filtersourceattrname;
+	}
+
+	/**
+	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	public void setFiltersourceattrname (String filtersourceattrname){
+		this.filtersourceattrname = filtersourceattrname;
+	}
+
+	public Integer getAttrTableWidth() {
+		return attrTableWidth;
+	}
+
+	public void setAttrTableWidth(Integer attrTableWidth) {
+		this.attrTableWidth = attrTableWidth;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateAttrDTO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifyattributeoid='" + classifyattributeoid + '\'' +
+				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
+				", attributedatatype='" + attributedatatype + '\'' +
+				", keyattrflag='" + keyattrflag + '\'' +
+				", queryattrflag='" + queryattrflag + '\'' +
+				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
+				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
+				", sortattrflag='" + sortattrflag + '\'' +
+				", qrcodeflag='" + qrcodeflag + '\'' +
+				", barcodeflag='" + barcodeflag + '\'' +
+				", componentrule='" + componentrule + '\'' +
+				", verifyrule='" + verifyrule + '\'' +
+				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
+				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
+				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
+				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
+				", ordernum=" + ordernum +
+				", formdisplayflag='" + formdisplayflag + '\'' +
+				", tabledisplayflag='" + tabledisplayflag + '\'' +
+				", attributegroup='" + attributegroup + '\'' +
+				", enumString='" + enumString + '\'' +
+				", enumid='" + enumid + '\'' +
+				", enumname='" + enumname + '\'' +
+				", enumeditflag='" + enumeditflag + '\'' +
+				", referbtmid='" + referbtmid + '\'' +
+				", referbtmname='" + referbtmname + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", requireflag='" + requireflag + '\'' +
+				", readonlyflag='" + readonlyflag + '\'' +
+				", controllength=" + controllength +
+				", formdisplaystyle='" + formdisplaystyle + '\'' +
+				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
+				", formhref='" + formhref + '\'' +
+				", tablehref='" + tablehref + '\'' +
+				", precisionlength=" + precisionlength +
+				", scalelength=" + scalelength +
+				", valuearea='" + valuearea + '\'' +
+				", codedateformat='" + codedateformat + '\'' +
+				", tabledisplayjs='" + tabledisplayjs + '\'' +
+				", textareaflag='" + textareaflag + '\'' +
+				", imageflag='" + imageflag + '\'' +
+				", defaultvalue='" + defaultvalue + '\'' +
+				", prefixvalue='" + prefixvalue + '\'' +
+				", suffixvalue='" + suffixvalue + '\'' +
+				", filtersourceattr='" + filtersourceattr + '\'' +
+				", filtersourceattrname='" + filtersourceattrname + '\'' +
+				", attrTableWidth=" + attrTableWidth +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java
new file mode 100644
index 0000000..725bdfd
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java
@@ -0,0 +1,155 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateButtonDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119032349661L;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifytemplateoid;
+
+	/**
+	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	private String classifytemplateoidName;
+	/**
+	 * 鎸夐挳鐨勪富閿�
+	 */
+	private String classifybuttonoid;
+
+	/**
+	 * 鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	private String classifybuttonoidName;
+	/**
+	 * 鎸夐挳鐢ㄩ��
+	 */
+	private String buttonuse;
+
+	/**
+	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
+	 */
+	private String buttonUseText;
+
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉�
+	 */
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪富閿�
+	 */
+	public String getClassifybuttonoid (){
+		return classifybuttonoid;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐨勪富閿�
+	 */
+	public void setClassifybuttonoid (String classifybuttonoid){
+		this.classifybuttonoid = classifybuttonoid;
+	}
+
+	/**
+	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getClassifybuttonoidName (){
+		return classifybuttonoidName;
+	}
+
+	/**
+	 * 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	public void setClassifybuttonoidName (String classifybuttonoidName){
+		this.classifybuttonoidName = classifybuttonoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐢ㄩ��
+	 */
+	public String getButtonuse (){
+		return buttonuse;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐢ㄩ��
+	 */
+	public void setButtonuse (String buttonuse){
+		this.buttonuse = buttonuse;
+	}
+
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	public String getButtonUseText() {
+		return buttonUseText;
+	}
+
+	public void setButtonUseText(String buttonUseText) {
+		this.buttonUseText = buttonUseText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateButtonDTO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifybuttonoid='" + classifybuttonoid + '\'' +
+				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
+				", buttonuse='" + buttonuse + '\'' +
+				", buttonUseText='" + buttonUseText + '\'' +
+				", ordernum=" + ordernum +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateDTO.java
new file mode 100644
index 0000000..11db13e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateDTO.java
@@ -0,0 +1,104 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120463849391L;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿�
+	 */
+	private String codeclassifyoid;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	private String codeclassifyoidName;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨�
+	 */
+	private String btmtypeid;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	private String btmtypename;
+
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
+	 */
+	public String getBtmtypeid (){
+		return btmtypeid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炰笟鍔$被鍨�
+	 */
+	public void setBtmtypeid (String btmtypeid){
+		this.btmtypeid = btmtypeid;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	public String getBtmtypename (){
+		return btmtypename;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	public void setBtmtypename (String btmtypename){
+		this.btmtypename = btmtypename;
+	}
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婚搴撳垎绫讳富閿�
+	 */
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	 * 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateDTO{" +
+		"codeclassifyoid='" + codeclassifyoid +"',"+
+		"codeclassifyoidName='" + codeclassifyoidName +"'," +
+		"btmtypeid='" + btmtypeid +"',"+
+		"btmtypename='" + btmtypename +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateMapDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateMapDTO.java
new file mode 100644
index 0000000..c4896d6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateMapDTO.java
@@ -0,0 +1,96 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateMapDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117068736629L;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifyTemplateOid;
+
+	/**
+	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	private String classifyTemplateName;
+	/**
+	 * 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	private String codemapruletype;
+
+	/**
+	 * 鏄犲皠瑙勫垯绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codemapruletypeText;
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifyTemplateOid (){
+		return classifyTemplateOid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉�
+	 */
+	public void setClassifyTemplateOid (String classifyTemplateOid){
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifyTemplateName (){
+		return classifyTemplateName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public void setClassifyTemplateName (String classifyTemplateName){
+		this.classifyTemplateName = classifyTemplateOid;
+	}
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	public String getCodemapruletype (){
+		return codemapruletype;
+	}
+
+	/**
+	 * 璁剧疆 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	public void setCodemapruletype (String codemapruletype){
+		this.codemapruletype = codemapruletype;
+	}
+
+	public String getCodemapruletypeText() {
+		return codemapruletypeText;
+	}
+
+	public void setCodemapruletypeText(String codemapruletypeText) {
+		this.codemapruletypeText = codemapruletypeText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateMapDTO{" +
+				"classifytemplateoid='" + classifyTemplateOid + '\'' +
+				", classifytemplateoidName='" + classifyTemplateName + '\'' +
+				", codemapruletype='" + codemapruletype + '\'' +
+				", codemapruletypeText='" + codemapruletypeText + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
new file mode 100644
index 0000000..72ecc2e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
@@ -0,0 +1,104 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyValueDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117098778726L;
+
+	/**
+	 * 鍒嗙被鐮佹涓婚敭
+	 */
+	private String codeclassifysecoid;
+
+	/**
+	 * 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String codeclassifysecoidName;
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+	/**
+	 * 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	private String parentclassifyvalueoid;
+
+
+	/**
+	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
+	 */
+	public String getCodeclassifysecoid (){
+		return codeclassifysecoid;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被鐮佹涓婚敭
+	 */
+	public void setCodeclassifysecoid (String codeclassifysecoid){
+		this.codeclassifysecoid = codeclassifysecoid;
+	}
+
+	/**
+	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodeclassifysecoidName (){
+		return codeclassifysecoidName;
+	}
+
+	/**
+	 * 璁剧疆鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setCodeclassifysecoidName (String codeclassifysecoidName){
+		this.codeclassifysecoidName = codeclassifysecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	/**
+	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	public String getParentclassifyvalueoid (){
+		return parentclassifyvalueoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
+		this.parentclassifyvalueoid = parentclassifyvalueoid;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyValueDTO{" +
+		"codeclassifysecoid='" + codeclassifysecoid +"',"+
+		"codeclassifysecoidName='" + codeclassifysecoidName +"'," +
+		"ordernum='" + ordernum +"',"+
+		"parentclassifyvalueoid='" + parentclassifyvalueoid +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCompPreviewDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCompPreviewDTO.java
new file mode 100644
index 0000000..1d3df15
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCompPreviewDTO.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.code.dto;
+
+import java.util.Map;
+
+/**
+ * 缁勫悎瑙勫垯鐨勯瑙堟樉绀�
+ * @author weidy
+ * @date 2022-04-06
+ */
+public class CodeCompPreviewDTO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 7023496831561755321L;
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 褰撳墠鐨勮〃鍗曢噷鐨勫睘鎬у唴瀹�
+     */
+    private Map<String,String> data;
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+
+    public Map<String, String> getData() {
+        return data;
+    }
+
+    public void setData(Map<String, String> data) {
+        this.data = data;
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeDeleteBatchDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeDeleteBatchDTO.java
new file mode 100644
index 0000000..6399df5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeDeleteBatchDTO.java
@@ -0,0 +1,49 @@
+package com.vci.ubcs.code.dto;
+
+import java.util.List;
+
+/**
+ * 缂栫爜鍒犻櫎鐨勬暟鎹紶杈撳璞�
+ * @author weidy
+ * @date 2022-3-2
+ */
+public class CodeDeleteBatchDTO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -4153558541948865667L;
+    /**
+     * 鏁版嵁鐨勪富閿�
+     */
+    private List<String> oidList;
+
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    public List<String> getOidList() {
+        return oidList;
+    }
+
+    public void setOidList(List<String> oidList) {
+        this.oidList = oidList;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeDeleteBatchDTO{" +
+                "oidList=" + oidList +
+                ", codeClassifyOid='" + codeClassifyOid + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeExportAttrDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeExportAttrDTO.java
new file mode 100644
index 0000000..8f8ff61
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeExportAttrDTO.java
@@ -0,0 +1,134 @@
+package com.vci.ubcs.code.dto;
+
+import java.util.Map;
+
+/**
+ * 缂栫爜瀵煎嚭閰嶇疆鐨勪俊鎭�
+ * @author weidy
+ * @date 2022-03-2
+ */
+public class CodeExportAttrDTO implements java.io.Serializable{
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 2048221367839030718L;
+
+    /**
+     * 瑕佸鍑虹殑灞炴��,key鏄帓搴忥紝value鏄睘鎬х殑缂栧彿
+     */
+    private Map<Integer,String> attrIdIndexMap ;
+
+    /**
+     * 褰撳墠绗嚑椤�
+     */
+    private Integer page;
+
+    /**
+     * 姣忛〉鏄剧ず鏈�澶ф暟
+     */
+    private Integer limit;
+
+    /**
+     * 鎴鍒扮鍑犻〉
+     */
+    private Integer endPage;
+
+    /**
+     * 鎺掑簭鐨勫瓧娈�
+     */
+    private String sort;
+
+    /**
+     * 鎺掑簭鐨勯『搴�
+     */
+    private String order;
+
+    /**
+     * 鏌ヨ鏉′欢
+     */
+    private Map<String,String> conditionMap;
+
+    /**
+     * 鍒嗙被鐨勪富閿�
+     */
+    private String codeClassifyOid;
+
+    public Integer getEndPage() {
+        return endPage;
+    }
+
+    public void setEndPage(Integer endPage) {
+        this.endPage = endPage;
+    }
+
+    public Map<Integer, String> getAttrIdIndexMap() {
+        return attrIdIndexMap;
+    }
+
+    public void setAttrIdIndexMap(Map<Integer, String> attrIdIndexMap) {
+        this.attrIdIndexMap = attrIdIndexMap;
+    }
+
+    public Integer getPage() {
+        return page;
+    }
+
+    public void setPage(Integer page) {
+        this.page = page;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getOrder() {
+        return order;
+    }
+
+    public void setOrder(String order) {
+        this.order = order;
+    }
+
+    public Map<String, String> getConditionMap() {
+        return conditionMap;
+    }
+
+    public void setConditionMap(Map<String, String> conditionMap) {
+        this.conditionMap = conditionMap;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeExportAttrDTO{" +
+                "attrIdIndexMap=" + attrIdIndexMap +
+                ", page=" + page +
+                ", limit=" + limit +
+                ", endPage=" + endPage +
+                ", sort='" + sort + '\'' +
+                ", order='" + order + '\'' +
+                ", conditionMap=" + conditionMap +
+                ", codeClassifyOid='" + codeClassifyOid + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java
new file mode 100644
index 0000000..d61653c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java
@@ -0,0 +1,84 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeFixedValueDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118504469968L;
+
+	/**
+	 * 鍥哄畾鐮佹涓婚敭
+	 */
+	private String codefixedsecoid;
+
+	/**
+	 * 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String codefixedsecoidName;
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+
+	/**
+	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
+	 */
+	public String getCodefixedsecoid (){
+		return codefixedsecoid;
+	}
+
+	/**
+	 * 璁剧疆 鍥哄畾鐮佹涓婚敭
+	 */
+	public void setCodefixedsecoid (String codefixedsecoid){
+		this.codefixedsecoid = codefixedsecoid;
+	}
+
+	/**
+	 * 鑾峰彇鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodefixedsecoidName (){
+		return codefixedsecoidName;
+	}
+
+	/**
+	 * 璁剧疆鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setCodefixedsecoidName (String codefixedsecoidName){
+		this.codefixedsecoidName = codefixedsecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeFixedValueDTO{" +
+		"codefixedsecoid='" + codefixedsecoid +"',"+
+		"codefixedsecoidName='" + codefixedsecoidName +"'," +
+		"ordernum='" + ordernum +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeImprotDataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeImprotDataDTO.java
new file mode 100644
index 0000000..441d807
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeImprotDataDTO.java
@@ -0,0 +1,66 @@
+package com.vci.ubcs.code.dto;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class CodeImprotDataDTO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713248L;
+        /**
+         * 涓婚搴撳垎绫讳富閿�
+         */
+        private String codeClassifyOid;
+
+        /**
+         * 妯℃澘鐨勪富閿�
+         */
+        private String templateOid;
+        /**
+         * 缂栫爜瑙勫垯鐨勪富閿�
+         */
+        private String codeRuleOid;
+        /**
+         * 鏁版嵁
+         */
+        private List<Map<String,String>> datas = new ArrayList<>();
+
+        public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+        public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+        public String getTemplateOid() {
+        return templateOid;
+    }
+        public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+        public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+        public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+        public List<Map<String, String>> getDatas() {
+        return datas;
+    }
+
+        public void setDatas(List<Map<String, String>> datas) {
+        this.datas = datas;
+    }
+
+        @Override
+        public String toString() {
+        return "CodeImprotDatasVO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", datas=" + datas +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeKeyAttrRepeatRuleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeKeyAttrRepeatRuleDTO.java
new file mode 100644
index 0000000..9da8c7e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeKeyAttrRepeatRuleDTO.java
@@ -0,0 +1,99 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeKeyAttrRepeatRuleDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118144488876L;
+
+	/**
+	 * 鏄惁蹇界暐澶у皬鍐�
+	 */
+	private String ignorecaseflag;
+
+	/**
+	 * 鏄惁蹇界暐绌烘牸
+	 */
+	private String ignorespaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	private String ignoreallspaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	private String ignorewidthflag;
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐绌烘牸
+	 */
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+
+	public String getIgnorewidthflag() {
+		return ignorewidthflag;
+	}
+
+	public void setIgnorewidthflag(String ignorewidthflag) {
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeKeyAttrRepeatRuleDTO{" +
+				"ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
new file mode 100644
index 0000000..994d4a6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
@@ -0,0 +1,92 @@
+package com.vci.ubcs.code.dto;
+
+import com.vci.web.dto.BaseModelDTO;
+
+import java.util.List;
+
+/**
+ * 缂栫爜鐢宠鐨勪俊鎭�
+ * @author weidy
+ * @date 2022-2-28
+ */
+public class CodeOrderDTO extends BaseModelDTO {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713245L;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String templateOid;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    private String codeRuleOid;
+
+    /**
+     * 鏄惁鍦ㄦ祦绋嬩腑涓慨鏀�
+     */
+    private boolean editInProcess;
+
+    /**
+     * 鐮佹閫夋嫨鐨勪俊鎭�
+     */
+    private List<CodeOrderSecDTO> secDTOList;
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    public String getTemplateOid() {
+        return templateOid;
+    }
+
+    public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public List<CodeOrderSecDTO> getSecDTOList() {
+        return secDTOList;
+    }
+
+    public void setSecDTOList(List<CodeOrderSecDTO> secDTOList) {
+        this.secDTOList = secDTOList;
+    }
+
+    public boolean isEditInProcess() {
+        return editInProcess;
+    }
+
+    public void setEditInProcess(boolean editInProcess) {
+        this.editInProcess = editInProcess;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeOrderDTO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", editInProcess=" + editInProcess +
+                ", secDTOList=" + secDTOList +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderSecDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderSecDTO.java
new file mode 100644
index 0000000..4f94789
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderSecDTO.java
@@ -0,0 +1,44 @@
+package com.vci.ubcs.code.dto;
+
+/**
+ * 缂栫爜鐢宠鐨勭爜娈电浉鍏充俊鎭�
+ * @author weidy
+ * @date 2022-02-28
+ */
+public class CodeOrderSecDTO implements java.io.Serializable{
+
+    /**
+     * 鐮佹鐨勪富閿�
+     */
+    private String secOid;
+
+    /**
+     * 鐮佹鍦ㄥ墠绔緭鍏ョ殑鍐呭
+     */
+    private String secValue;
+
+    public String getSecOid() {
+        return secOid;
+    }
+
+    public void setSecOid(String secOid) {
+        this.secOid = secOid;
+    }
+
+    public String getSecValue() {
+        return secValue;
+    }
+
+    public void setSecValue(String secValue) {
+        this.secValue = secValue;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeOrderSecDTO{" +
+                "secOid='" + secOid + '\'' +
+                ", secValue='" + secValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodePhaseAttrDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodePhaseAttrDTO.java
new file mode 100644
index 0000000..bf7ebf2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodePhaseAttrDTO.java
@@ -0,0 +1,64 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodePhaseAttrDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118720105671L;
+
+	/**
+	 * 鎵�灞炴ā鏉块樁娈�
+	 */
+	private String codephaseoid;
+
+	/**
+	 * 鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	private String codephaseoidName;
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉块樁娈�
+	 */
+	public String getCodephaseoid (){
+		return codephaseoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉块樁娈�
+	 */
+	public void setCodephaseoid (String codephaseoid){
+		this.codephaseoid = codephaseoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	public String getCodephaseoidName (){
+		return codephaseoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	public void setCodephaseoidName (String codephaseoidName){
+		this.codephaseoidName = codephaseoidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodePhaseAttrDTO{" +
+		"codephaseoid='" + codephaseoid +"',"+
+		"codephaseoidName='" + codephaseoidName +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeResembleRuleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeResembleRuleDTO.java
new file mode 100644
index 0000000..126b597
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeResembleRuleDTO.java
@@ -0,0 +1,118 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public class CodeResembleRuleDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118908699390L;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	private String ignoreallspaceflag;
+
+	/**
+	 * 鏄惁蹇界暐澶у皬鍐�
+	 */
+	private String ignorecaseflag;
+
+	/**
+	 * 鏄惁蹇界暐绌烘牸
+	 */
+	private String ignorespaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	private String ignorewidthflag;
+
+	/**
+	 * 杩炴帴瀛楃
+	 */
+	private String linkCharacter;
+
+	public String getLinkCharacter() {
+		return linkCharacter;
+	}
+
+	public void setLinkCharacter(String linkCharacter) {
+		this.linkCharacter = linkCharacter;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐绌烘牸
+	 */
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	public String getIgnorewidthflag (){
+		return ignorewidthflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	public void setIgnorewidthflag (String ignorewidthflag){
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeResembleRuleDTO{" +
+				"ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				", linkCharacter='" + linkCharacter + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeRuleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeRuleDTO.java
new file mode 100644
index 0000000..293a9a2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeRuleDTO.java
@@ -0,0 +1,40 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeRuleDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117067738769L;
+
+	/**
+	 * 鐮佹闆嗗悎
+	 */
+	private List<CodeBasicSecDTO> elements;
+
+	public List<CodeBasicSecDTO> getElements() {
+		return elements;
+	}
+
+	public void setElements(List<CodeBasicSecDTO> elements) {
+		this.elements = elements;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeRuleDTO{" +
+				"elements=" + elements +
+				'}'+ super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeSynonymDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeSynonymDTO.java
new file mode 100644
index 0000000..90ad197
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeSynonymDTO.java
@@ -0,0 +1,104 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public class CodeSynonymDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117393017144L;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒�
+	 */
+	private String codeclassifytemplateoid;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	private String codeclassifytemplateoidName;
+	/**
+	 * 婧愬��
+	 */
+	private String sourcevalue;
+
+	/**
+	 * 鍚屼箟璇�
+	 */
+	private String synonymvalue;
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	 */
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 婧愬��
+	 */
+	public String getSourcevalue (){
+		return sourcevalue;
+	}
+
+	/**
+	 * 璁剧疆 婧愬��
+	 */
+	public void setSourcevalue (String sourcevalue){
+		this.sourcevalue = sourcevalue;
+	}
+
+	/**
+	 * 鑾峰彇 鍚屼箟璇�
+	 */
+	public String getSynonymvalue (){
+		return synonymvalue;
+	}
+
+	/**
+	 * 璁剧疆 鍚屼箟璇�
+	 */
+	public void setSynonymvalue (String synonymvalue){
+		this.synonymvalue = synonymvalue;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeSynonymDTO{" +
+		"codeclassifytemplateoid='" + codeclassifytemplateoid +"',"+
+		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
+		"sourcevalue='" + sourcevalue +"',"+
+		"synonymvalue='" + synonymvalue +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java
new file mode 100644
index 0000000..225b060
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeTemplatePhaseDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117809299474L;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒�
+	 */
+	private String codeclassifytemplateoid;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	private String codeclassifytemplateoidName;
+
+	/**
+	 * 鍖呭惈鐨勫睘鎬�
+	 */
+	private List<CodePhaseAttrDTO> attributes;
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	 */
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+
+	public List<CodePhaseAttrDTO> getAttributes() {
+		return attributes;
+	}
+
+	public void setAttributes(List<CodePhaseAttrDTO> attributes) {
+		this.attributes = attributes;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeTemplatePhaseDTO{" +
+				"codeclassifytemplateoid='" + codeclassifytemplateoid + '\'' +
+				", codeclassifytemplateoidName='" + codeclassifytemplateoidName + '\'' +
+				", attributes=" + attributes +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java
new file mode 100644
index 0000000..2edeb0e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java
@@ -0,0 +1,120 @@
+package com.vci.ubcs.code.dto;
+
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 瑕佹帹閫佸緱鏁版嵁
+ * @author wangyi
+ * @date 2022-10-7
+ */
+public class DockingDataDTO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+
+    /**
+     * 绯荤粺鎺ュ彛oid
+     */
+    private String classifyoid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String btmoid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String btmid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String sendtype;
+
+    /**
+     * 鏄惁鍒嗚В浠诲姟
+     */
+    private String sendflag;
+
+    /**
+     * 绯荤粺id
+     */
+    private String classifyid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String classifyname;
+
+    public String getClassifyoid() {
+        return classifyoid;
+    }
+
+    public void setClassifyoid(String classifyoid) {
+        this.classifyoid = classifyoid;
+    }
+
+    public String getBtmoid() {
+        return btmoid;
+    }
+
+    public void setBtmoid(String btmoid) {
+        this.btmoid = btmoid;
+    }
+
+    public String getBtmid() {
+        return btmid;
+    }
+
+    public void setBtmid(String btmid) {
+        this.btmid = btmid;
+    }
+
+    public String getSendtype() {
+        return sendtype;
+    }
+
+    public void setSendtype(String sendtype) {
+        this.sendtype = sendtype;
+    }
+
+    public String getSendflag() {
+        return sendflag;
+    }
+
+    public void setSendflag(String sendflag) {
+        this.sendflag = sendflag;
+    }
+
+    public String getClassifyid() {
+        return classifyid;
+    }
+
+    public void setClassifyid(String classifyid) {
+        this.classifyid = classifyid;
+    }
+
+    public String getClassifyname() {
+        return classifyname;
+    }
+
+    public void setClassifyname(String classifyname) {
+        this.classifyname = classifyname;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingDataDO{" +
+                "classifyoid='" + classifyoid + '\'' +
+                ", btmoid='" + btmoid + '\'' +
+                ", btmid='" + btmid + '\'' +
+                ", sendtype='" + sendtype + '\'' +
+                ", sendflag='" + sendflag + '\'' +
+                ", classifyid='" + classifyid + '\'' +
+                ", classifyname='" + classifyname + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDTO.java
new file mode 100644
index 0000000..3460ca9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDTO.java
@@ -0,0 +1,179 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public class DockingLogeDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120475192779L;
+
+	/**
+	 * 鎺ュ彛鐘舵��
+	 */
+	private String interfacestatus;
+
+	/**
+	 * 鍙傛暟
+	 */
+	private String paramstring;
+
+	/**
+	 * 杩斿洖
+	 */
+	private String returnstring;
+
+	/**
+	 * 绯荤粺缂栧彿
+	 */
+	private String systemcode;
+
+	/**
+	 * 绯荤粺鍚嶇О
+	 */
+	private String systemname;
+
+	/**
+	 * 绯荤粺id
+	 */
+	private String systemoid;
+
+	/**
+	 * 鎺ュ彛绫诲瀷
+	 */
+	private String type;
+
+	/**
+	 * 杩旇繕鎻愮ず
+	 */
+	private String msg;
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	/**
+	 * 鑾峰彇 鎺ュ彛鐘舵��
+	 */
+	public String getInterfacestatus (){
+		return interfacestatus;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛鐘舵��
+	 */
+	public void setInterfacestatus (String interfacestatus){
+		this.interfacestatus = interfacestatus;
+	}
+
+	/**
+	 * 鑾峰彇 鍙傛暟
+	 */
+	public String getParamstring (){
+		return paramstring;
+	}
+
+	/**
+	 * 璁剧疆 鍙傛暟
+	 */
+	public void setParamstring (String paramstring){
+		this.paramstring = paramstring;
+	}
+
+	/**
+	 * 鑾峰彇 杩斿洖
+	 */
+	public String getReturnstring (){
+		return returnstring;
+	}
+
+	/**
+	 * 璁剧疆 杩斿洖
+	 */
+	public void setReturnstring (String returnstring){
+		this.returnstring = returnstring;
+	}
+
+	/**
+	 * 鑾峰彇 绯荤粺缂栧彿
+	 */
+	public String getSystemcode (){
+		return systemcode;
+	}
+
+	/**
+	 * 璁剧疆 绯荤粺缂栧彿
+	 */
+	public void setSystemcode (String systemcode){
+		this.systemcode = systemcode;
+	}
+
+	/**
+	 * 鑾峰彇 绯荤粺鍚嶇О
+	 */
+	public String getSystemname (){
+		return systemname;
+	}
+
+	/**
+	 * 璁剧疆 绯荤粺鍚嶇О
+	 */
+	public void setSystemname (String systemname){
+		this.systemname = systemname;
+	}
+
+	/**
+	 * 鑾峰彇 绯荤粺id
+	 */
+	public String getSystemoid (){
+		return systemoid;
+	}
+
+	/**
+	 * 璁剧疆 绯荤粺id
+	 */
+	public void setSystemoid (String systemoid){
+		this.systemoid = systemoid;
+	}
+
+	/**
+	 * 鑾峰彇 鎺ュ彛绫诲瀷
+	 */
+	public String getType (){
+		return type;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛绫诲瀷
+	 */
+	public void setType (String type){
+		this.type = type;
+	}
+
+
+	@Override
+	public String toString() {
+		return "DockingLogeDTO{" +
+				"interfacestatus='" + interfacestatus + '\'' +
+				", paramstring='" + paramstring + '\'' +
+				", returnstring='" + returnstring + '\'' +
+				", systemcode='" + systemcode + '\'' +
+				", systemname='" + systemname + '\'' +
+				", systemoid='" + systemoid + '\'' +
+				", type='" + type + '\'' +
+				", msg='" + msg + '\'' +
+				'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataDTO.java
new file mode 100644
index 0000000..6bedafb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataDTO.java
@@ -0,0 +1,244 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public class DockingPreApplyDataDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119386802588L;
+
+	/**
+	 * 鐢宠oid
+	 */
+	private String preapplyoid;
+
+	/**
+	 * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
+	 */
+	private String uniquecode;
+
+	/**
+	 * 涓婚搴撶紪鍙�
+	 */
+	private String type;
+
+	/**
+	 * 绯荤粺缂栧彿
+	 */
+	private String systemid;
+
+	/**
+	 * 姝e湪浣跨敤鏍囧織
+	 */
+	private String useddflag;
+
+	/**
+	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被oid
+	 */
+	private String classifyoid;
+
+	/**
+	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+
+	/**
+	 * 鐢宠鎴愬姛鍚庣殑缂栫爜,鎴栬�呭凡缁忓瓨鍦ㄧ殑缂栫爜
+	 */
+	private String num;
+	/**
+	 * 瑙勬牸鍨嬪彿
+	 */
+	private String model;
+	/**
+	 * 闆朵欢绫诲瀷
+	 */
+	private String parttype;
+	/**
+	 * 璁¢噺鍗曚綅
+	 */
+	private String unit;
+
+	/**
+	 * 鍗曢噸
+	 */
+	private String weight;
+
+	/**
+	 * 鏄惁閲嶈浠�
+	 */
+	private String importantPart;
+
+	/**
+	 * 鏄惁鍏抽敭浠�
+	 */
+	private String keyPart;
+	/**
+	 * 鏁版嵁澶勭悊杩斿洖鐘舵�佺爜
+	 */
+	private String datacode;
+
+	/**
+	 * 鏁版嵁澶勭悊杩斿洖淇℃伅
+	 */
+	private String datamsg;
+
+	public String getPreapplyoid() {
+		return preapplyoid;
+	}
+
+	public void setPreapplyoid(String preapplyoid) {
+		this.preapplyoid = preapplyoid;
+	}
+
+	public String getUniquecode() {
+		return uniquecode;
+	}
+
+	public void setUniquecode(String uniquecode) {
+		this.uniquecode = uniquecode;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getSystemid() {
+		return systemid;
+	}
+
+	public void setSystemid(String systemid) {
+		this.systemid = systemid;
+	}
+
+	public String getUseddflag() {
+		return useddflag;
+	}
+
+	public void setUseddflag(String useddflag) {
+		this.useddflag = useddflag;
+	}
+
+	public String getClassifyoid() {
+		return classifyoid;
+	}
+
+	public void setClassifyoid(String classifyoid) {
+		this.classifyoid = classifyoid;
+	}
+
+	public String getClassifyname() {
+		return classifyname;
+	}
+
+	public void setClassifyname(String classifyname) {
+		this.classifyname = classifyname;
+	}
+
+	public String getNum() {
+		return num;
+	}
+
+	public void setNum(String num) {
+		this.num = num;
+	}
+
+	public String getDatacode() {
+		return datacode;
+	}
+
+	public void setDatacode(String datacode) {
+		this.datacode = datacode;
+	}
+
+	public String getDatamsg() {
+		return datamsg;
+	}
+
+	public void setDatamsg(String datamsg) {
+		this.datamsg = datamsg;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getParttype() {
+		return parttype;
+	}
+
+	public void setParttype(String parttype) {
+		this.parttype = parttype;
+	}
+
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public String getWeight() {
+		return weight;
+	}
+
+	public void setWeight(String weight) {
+		this.weight = weight;
+	}
+
+	public String getImportantPart() {
+		return importantPart;
+	}
+
+	public void setImportantPart(String importantPart) {
+		this.importantPart = importantPart;
+	}
+
+	public String getKeyPart() {
+		return keyPart;
+	}
+
+	public void setKeyPart(String keyPart) {
+		this.keyPart = keyPart;
+	}
+
+	@Override
+	public String toString() {
+		return "DockingPreApplyDataDTO{" +
+				"preapplyoid='" + preapplyoid + '\'' +
+				", uniquecode='" + uniquecode + '\'' +
+				", type='" + type + '\'' +
+				", systemid='" + systemid + '\'' +
+				", useddflag='" + useddflag + '\'' +
+				", classifyoid='" + classifyoid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", num='" + num + '\'' +
+				", model='" + model + '\'' +
+				", parttype='" + parttype + '\'' +
+				", unit='" + unit + '\'' +
+				", weight='" + weight + '\'' +
+				", importantPart='" + importantPart + '\'' +
+				", keyPart='" + keyPart + '\'' +
+				", datacode='" + datacode + '\'' +
+				", datamsg='" + datamsg + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataInfoDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataInfoDTO.java
new file mode 100644
index 0000000..bcb7de6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataInfoDTO.java
@@ -0,0 +1,126 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public class DockingPreApplyDataInfoDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117408397326L;
+
+	/**
+	 * data鐨刼id
+	 */
+	private String dataoid;
+
+	/**
+	 * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
+	 */
+	private String uniquecode;
+
+	/**
+	 * 灞炴�ey
+	 */
+	private String key;
+
+	/**
+	 * 灞炴�ey鍚箟
+	 */
+	private String mean;
+
+	/**
+	 * 灞炴�alue
+	 */
+	private String value;
+
+
+	/**
+	 * 鑾峰彇 data鐨刼id
+	 */
+	public String getDataoid (){
+		return dataoid;
+	}
+
+	/**
+	 * 璁剧疆 data鐨刼id
+	 */
+	public void setDataoid (String dataoid){
+		this.dataoid = dataoid;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ey
+	 */
+	public String getKey (){
+		return key;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ey
+	 */
+	public void setKey (String key){
+		this.key = key;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ey鍚箟
+	 */
+	public String getMean (){
+		return mean;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ey鍚箟
+	 */
+	public void setMean (String mean){
+		this.mean = mean;
+	}
+
+	/**
+	 * 鑾峰彇 鍞竴鏍囪瘑
+	 */
+	public String getUniquecode (){
+		return uniquecode;
+	}
+
+	/**
+	 * 璁剧疆 鍞竴鏍囪瘑
+	 */
+	public void setUniquecode (String uniquecode){
+		this.uniquecode = uniquecode;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�alue
+	 */
+	public String getValue (){
+		return value;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�alue
+	 */
+	public void setValue (String value){
+		this.value = value;
+	}
+
+
+	@Override
+	public String toString() {
+		return "DockingPreApplyDataInfoDTO{" +
+		"dataoid='" + dataoid +"',"+
+		"key='" + key +"',"+
+		"mean='" + mean +"',"+
+		"uniquecode='" + uniquecode +"',"+
+		"value='" + value +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrMappingDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrMappingDTO.java
new file mode 100644
index 0000000..e54f5a6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrMappingDTO.java
@@ -0,0 +1,200 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 璁板綍闆嗘垚灞炴�т笌涓绘暟鎹睘鎬ф槧灏勫叧绯诲璞�
+ * @author xiejun
+ * @date 2023-01-06
+ */
+public class DockingPreAttrMappingDTO extends BaseModelVO {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6020487634341415429L;
+    /***
+     * 榛樿鍊�
+     */
+    private String jdefaultValue;
+
+    /***
+     * 榛樿鍊�
+     */
+    private String jmetaListId;
+    /**
+     * 婧愬垎绫籭d
+     */
+    private  String jsourceClsfId;
+    /**
+     * 婧愬垎绫诲悕绉�
+     */
+    private String jsourceClsfName;
+    /**
+     * 婧愬睘鎬id
+     */
+    private String jtargetAttrId;
+
+    /**
+     * 鐩爣灞炴�id
+     */
+    private String jtargetClsfId;
+
+    /***
+     * 妯℃澘Id
+     */
+    private String jviewModeId;
+    /***
+     * 妯℃澘鍚嶇О
+     */
+    private String jviewModeName;
+
+    /***
+     * 鐩爣灞炴�у唴閮ㄥ悕绉�
+     */
+    private String jtargetAttrKey;
+
+    /***
+     * 鐩爣灞炴�у悕绉�
+     */
+    private String jtargetAttrName;
+
+    /***
+     * 鐩爣灞炴�у唴閮ㄥ悕绉�
+     */
+    private String jsourceAttrKey;
+
+    /***
+     * 鐩爣灞炴�у悕绉�
+     */
+    private String jsourceAttrName;
+    /**
+     * 灞炴�у彇鍊艰寖鍥�
+     */
+    private List<DockingPreAttrRangeDTO> dockingPreAttrRangeDTOS;
+
+    public String getJdefaultValue() {
+        return jdefaultValue;
+    }
+
+    public void setJdefaultValue(String jdefaultValue) {
+        this.jdefaultValue = jdefaultValue;
+    }
+
+    public String getJmetaListId() {
+        return jmetaListId;
+    }
+
+    public void setJmetaListId(String jmetaListId) {
+        this.jmetaListId = jmetaListId;
+    }
+
+    public String getJsourceClsfId() {
+        return jsourceClsfId;
+    }
+
+    public void setJsourceClsfId(String jsourceClsfId) {
+        this.jsourceClsfId = jsourceClsfId;
+    }
+
+    public String getJsourceClsfName() {
+        return jsourceClsfName;
+    }
+
+    public void setJsourceClsfName(String jsourceClsfName) {
+        this.jsourceClsfName = jsourceClsfName;
+    }
+
+    public String getJtargetAttrId() {
+        return jtargetAttrId;
+    }
+
+    public void setJtargetAttrId(String jtargetAttrId) {
+        this.jtargetAttrId = jtargetAttrId;
+    }
+
+    public String getJtargetClsfId() {
+        return jtargetClsfId;
+    }
+
+    public void setJtargetClsfId(String jtargetClsfId) {
+        this.jtargetClsfId = jtargetClsfId;
+    }
+
+    public String getJviewModeId() {
+        return jviewModeId;
+    }
+
+    public void setJviewModeId(String jviewModeId) {
+        this.jviewModeId = jviewModeId;
+    }
+
+    public String getJviewModeName() {
+        return jviewModeName;
+    }
+
+    public void setJviewModeName(String jviewModeName) {
+        this.jviewModeName = jviewModeName;
+    }
+
+    public String getJtargetAttrKey() {
+        return jtargetAttrKey;
+    }
+
+    public void setJtargetAttrKey(String jtargetAttrKey) {
+        this.jtargetAttrKey = jtargetAttrKey;
+    }
+
+    public String getJtargetAttrName() {
+        return jtargetAttrName;
+    }
+
+    public void setJtargetAttrName(String jtargetAttrName) {
+        this.jtargetAttrName = jtargetAttrName;
+    }
+
+    public String getJsourceAttrKey() {
+        return jsourceAttrKey;
+    }
+
+    public void setJsourceAttrKey(String jsourceAttrKey) {
+        this.jsourceAttrKey = jsourceAttrKey;
+    }
+
+    public String getJsourceAttrName() {
+        return jsourceAttrName;
+    }
+
+    public void setJsourceAttrName(String jsourceAttrName) {
+        this.jsourceAttrName = jsourceAttrName;
+    }
+
+    public List<DockingPreAttrRangeDTO> getDockingPreAttrRangeDTOS() {
+        return dockingPreAttrRangeDTOS;
+    }
+
+    public void setDockingPreAttrRangeDTOS(List<DockingPreAttrRangeDTO> dockingPreAttrRangeDTOS) {
+        this.dockingPreAttrRangeDTOS = dockingPreAttrRangeDTOS;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrMappingDTO{" +
+                "jdefaultValue='" + jdefaultValue + '\'' +
+                ", jmetaListId='" + jmetaListId + '\'' +
+                ", jsourceClsfId='" + jsourceClsfId + '\'' +
+                ", jsourceClsfName='" + jsourceClsfName + '\'' +
+                ", jtargetAttrId='" + jtargetAttrId + '\'' +
+                ", jtargetClsfId='" + jtargetClsfId + '\'' +
+                ", jviewModeId='" + jviewModeId + '\'' +
+                ", jviewModeName='" + jviewModeName + '\'' +
+                ", jtargetAttrKey='" + jtargetAttrKey + '\'' +
+                ", jtargetAttrName='" + jtargetAttrName + '\'' +
+                ", jsourceAttrKey='" + jsourceAttrKey + '\'' +
+                ", jsourceAttrName='" + jsourceAttrName + '\'' +
+                ", dockingPreAttrRangeDTOS=" + dockingPreAttrRangeDTOS +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrRangeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrRangeDTO.java
new file mode 100644
index 0000000..7fdb561
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrRangeDTO.java
@@ -0,0 +1,82 @@
+package com.vci.ubcs.code.dto;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+public class DockingPreAttrRangeDTO extends BaseModelVO {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6020487634341415410L;
+    /***
+     *灞炴�d
+     */
+    private String jmetaListId;
+    /**
+     * 灞炴�ф灇涓炬樉绀哄悕绉�
+     */
+    private  String jnumText;
+    /**
+     * 灞炴�ф灇涓惧唴閮ㄥ悕绉�
+     */
+    private String jnumTextValue;
+
+    /**
+     * 婧愬睘鎬ф灇涓炬樉绀哄悕绉�
+     */
+    private  String jtargeNumText;
+    /**
+     * 婧愬睘鎬ф灇涓惧唴閮ㄥ悕绉�
+     */
+    private String jtargeNumTextValue;
+
+    public String getJnumText() {
+        return jnumText;
+    }
+
+    public void setJnumText(String jnumText) {
+        this.jnumText = jnumText;
+    }
+
+    public String getJnumTextValue() {
+        return jnumTextValue;
+    }
+
+    public void setJnumTextValue(String jnumTextValue) {
+        this.jnumTextValue = jnumTextValue;
+    }
+
+    public String getJtargeNumText() {
+        return jtargeNumText;
+    }
+
+    public void setJtargeNumText(String jtargeNumText) {
+        this.jtargeNumText = jtargeNumText;
+    }
+
+    public String getJtargeNumTextValue() {
+        return jtargeNumTextValue;
+    }
+
+    public void setJtargeNumTextValue(String jtargeNumTextValue) {
+        this.jtargeNumTextValue = jtargeNumTextValue;
+    }
+
+    public String getJmetaListId() {
+        return jmetaListId;
+    }
+
+    public void setJmetaListId(String jmetaListId) {
+        this.jmetaListId = jmetaListId;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrRangeDTO{" +
+                "jmetaListId='" + jmetaListId + '\'' +
+                ", jnumText='" + jnumText + '\'' +
+                ", jnumTextValue='" + jnumTextValue + '\'' +
+                ", jtargeNumText='" + jtargeNumText + '\'' +
+                ", jtargeNumTextValue='" + jtargeNumTextValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingTaskDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingTaskDTO.java
new file mode 100644
index 0000000..21d6be8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingTaskDTO.java
@@ -0,0 +1,197 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public class DockingTaskDTO extends BaseModelVO {
+
+	/**
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
+	private static final long serialVersionUID = 4615707120806149100L;
+
+	/**
+	 * 绯荤粺鎺ュ彛oid
+	 */
+	private String sysinfooid;
+
+	/**
+	 * 绯荤粺id
+	 */
+	private String systemoid;
+
+	/**
+	 * 绯荤粺缂栧彿
+	 */
+	private String systemcode;
+
+	/**
+	 * 绯荤粺鍚嶇О
+	 */
+	private String systemname;
+
+	/**
+	 * 鍒嗙被oid
+	 */
+	private String classifyoid;
+
+	/**
+	 * 鍒嗙被id
+	 */
+	private String classifyid;
+
+	/**
+	 * 鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+
+	/**
+	 * 涓氬姟绫诲瀷鏁版嵁oid
+	 */
+	private String btmoid;
+
+	/**
+	 * 涓氬姟绫诲瀷鏁版嵁oid
+	 */
+	private String btmid;
+
+	/**
+	 * uniquecode
+	 */
+	private String uniquecode;
+
+	/**
+	 * 鏄惁鍙戦�佹垚鍔�
+	 */
+	private String sendflag;
+
+	private String sendtype;
+	/**
+	 * 鏄惁鍙戦�佹垚鍔�
+	 */
+	private String dataoid;
+
+	public String getDataoid() {
+		return dataoid;
+	}
+
+	public void setDataoid(String dataoid) {
+		this.dataoid = dataoid;
+	}
+	public String getSendtype() {
+		return sendtype;
+	}
+
+	public void setSendtype(String sendtype) {
+		this.sendtype = sendtype;
+	}
+	public String getSysinfooid() {
+		return sysinfooid;
+	}
+
+	public void setSysinfooid(String sysinfooid) {
+		this.sysinfooid = sysinfooid;
+	}
+
+	public String getSystemoid() {
+		return systemoid;
+	}
+
+	public void setSystemoid(String systemoid) {
+		this.systemoid = systemoid;
+	}
+
+	public String getSystemcode() {
+		return systemcode;
+	}
+
+	public void setSystemcode(String systemcode) {
+		this.systemcode = systemcode;
+	}
+
+	public String getSystemname() {
+		return systemname;
+	}
+
+	public void setSystemname(String systemname) {
+		this.systemname = systemname;
+	}
+
+	public String getClassifyoid() {
+		return classifyoid;
+	}
+
+	public void setClassifyoid(String classifyoid) {
+		this.classifyoid = classifyoid;
+	}
+	public String getClassifyid() {
+		return classifyid;
+	}
+
+	public void setClassifyid(String classifyid) {
+		this.classifyid = classifyid;
+	}
+	public String getClassifyname() {
+		return classifyname;
+	}
+
+	public void setClassifyname(String classifyname) {
+		this.classifyname = classifyname;
+	}
+
+	public String getBtmoid() {
+		return btmoid;
+	}
+
+	public void setBtmoid(String btmoid) {
+		this.btmoid = btmoid;
+	}
+	public String getBtmid() {
+		return btmid;
+	}
+
+	public void setBtmid(String btmid) {
+		this.btmid = btmid;
+	}
+
+	public String getSendflag() {
+		return sendflag;
+	}
+
+	public void setSendflag(String sendflag) {
+		this.sendflag = sendflag;
+	}
+
+	public String getUniquecode() {
+		return uniquecode;
+	}
+
+	public void setUniquecode(String uniquecode) {
+		this.uniquecode = uniquecode;
+	}
+
+	@Override
+	public String toString() {
+		return "DockingTaskDTO{" +
+				"sysinfooid='" + sysinfooid + '\'' +
+				", systemoid='" + systemoid + '\'' +
+				", systemcode='" + systemcode + '\'' +
+				", systemname='" + systemname + '\'' +
+				", classifyoid='" + classifyoid + '\'' +
+				", classifyid='" + classifyid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", btmoid='" + btmoid + '\'' +
+				", btmo='" + btmid + '\'' +
+				", uniquecode='" + uniquecode + '\'' +
+				", sendflag='" + sendflag + '\'' +
+				", sendtype='" + sendtype + '\'' +
+				", dataoid='" + dataoid + '\'' +
+				'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java
new file mode 100644
index 0000000..a56fef7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java
@@ -0,0 +1,106 @@
+package com.vci.ubcs.code.dto;
+
+import com.vci.web.dto.BaseModelDTO;
+
+import java.util.List;
+
+/**
+ * 棰勭敵璇风紪鐮佺敵璇风殑淇℃伅
+ * @author weidy
+ * @date 2022-2-28
+ */
+public class PreApplyCodeOrderDTO extends BaseModelDTO {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713245L;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String templateOid;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    private String codeRuleOid;
+
+    /**
+     * 鏄惁鍦ㄦ祦绋嬩腑涓慨鏀�
+     */
+    private boolean editInProcess;
+
+    /**
+     * dockingpadata data鐨刼id
+     */
+    private String dataoid;
+
+    /**
+     * 鐮佹閫夋嫨鐨勪俊鎭�
+     */
+    private List<CodeOrderSecDTO> secDTOList;
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    public String getTemplateOid() {
+        return templateOid;
+    }
+
+    public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public List<CodeOrderSecDTO> getSecDTOList() {
+        return secDTOList;
+    }
+
+    public void setSecDTOList(List<CodeOrderSecDTO> secDTOList) {
+        this.secDTOList = secDTOList;
+    }
+
+    public boolean isEditInProcess() {
+        return editInProcess;
+    }
+
+    public void setEditInProcess(boolean editInProcess) {
+        this.editInProcess = editInProcess;
+    }
+
+    public String getDataoid() {
+        return dataoid;
+    }
+
+    public void setDataoid(String dataoid) {
+        this.dataoid = dataoid;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeOrderDTO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", editInProcess=" + editInProcess +
+                ", secDTOList=" + secDTOList +
+                ", dataoid=" + dataoid +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntAuthorityDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntAuthorityDTO.java
new file mode 100644
index 0000000..2fc60fd
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntAuthorityDTO.java
@@ -0,0 +1,124 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntAuthorityDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119813649189L;
+
+	/**
+	 * 楠岃瘉浠ょ墝
+	 */
+	private String token;
+
+	/**
+	 * 璁よ瘉鏂瑰紡
+	 */
+	private String type;
+
+	/**
+	 * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String typeText;
+	/**
+	 * 楠岃瘉鐢ㄦ埛
+	 */
+	private String useraccount;
+
+	/**
+	 * 楠岃瘉瀵嗙爜
+	 */
+	private String usercode;
+
+
+	/**
+	 * 鑾峰彇 楠岃瘉浠ょ墝
+	 */
+	public String getToken (){
+		return token;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉浠ょ墝
+	 */
+	public void setToken (String token){
+		this.token = token;
+	}
+
+	/**
+	 * 鑾峰彇 璁よ瘉鏂瑰紡
+	 */
+	public String getType (){
+		return type;
+	}
+
+	/**
+	 * 璁剧疆 璁よ瘉鏂瑰紡
+	 */
+	public void setType (String type){
+		this.type = type;
+	}
+
+	/**
+	 * 鑾峰彇璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public String getTypeText (){
+		return typeText;
+	}
+
+	/**
+	 * 璁剧疆璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public void setTypeText (String typeText){
+		this.typeText = typeText;
+	}
+	/**
+	 * 鑾峰彇 楠岃瘉鐢ㄦ埛
+	 */
+	public String getUseraccount (){
+		return useraccount;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉鐢ㄦ埛
+	 */
+	public void setUseraccount (String useraccount){
+		this.useraccount = useraccount;
+	}
+
+	/**
+	 * 鑾峰彇 楠岃瘉瀵嗙爜
+	 */
+	public String getUsercode (){
+		return usercode;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉瀵嗙爜
+	 */
+	public void setUsercode (String usercode){
+		this.usercode = usercode;
+	}
+
+
+	@Override
+	public String toString() {
+		return "SysIntAuthorityDTO{" +
+		"token='" + token +"',"+
+		"type='" + type +"',"+
+		"typeText='" + typeText + "',"  +
+		"useraccount='" + useraccount +"',"+
+		"usercode='" + usercode +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntBaseDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntBaseDTO.java
new file mode 100644
index 0000000..2c024b8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntBaseDTO.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntBaseDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117775925895L;
+
+
+
+	@Override
+	public String toString() {
+		return "SysIntBaseDTO{" +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntHeaderDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntHeaderDTO.java
new file mode 100644
index 0000000..97862a8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntHeaderDTO.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class SysIntHeaderDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117695864945L;
+
+	/**
+	 * SysIntInfoDO 鐨刼id
+	 */
+	private String infoOid;
+
+	/**
+	 * 鍙傛暟key
+	 */
+	private String headerkey;
+
+	/**
+	 * 鍙傛暟value
+	 */
+	private String headeralue;
+
+	/**
+	 * 鏄惁浣跨敤
+	 */
+	private String usedflag;
+
+	public String getInfoOid() {
+		return infoOid;
+	}
+
+	public void setInfoOid(String infoOid) {
+		this.infoOid = infoOid;
+	}
+
+	public String getHeaderkey() {
+		return headerkey;
+	}
+
+	public void setHeaderkey(String headerkey) {
+		this.headerkey = headerkey;
+	}
+
+	public String getHeaderalue() {
+		return headeralue;
+	}
+
+	public void setHeaderalue(String headeralue) {
+		this.headeralue = headeralue;
+	}
+
+	public String getUsedflag() {
+		return usedflag;
+	}
+
+	public void setUsedflag(String usedflag) {
+		this.usedflag = usedflag;
+	}
+
+	@Override
+	public String toString() {
+		return "SysIntHeaderDO{" +
+				"infoOid='" + infoOid + '\'' +
+				", headerkey='" + headerkey + '\'' +
+				", headeralue='" + headeralue + '\'' +
+				", usedflag='" + usedflag + '\'' +
+				'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoBseDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoBseDTO.java
new file mode 100644
index 0000000..1c49665
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoBseDTO.java
@@ -0,0 +1,46 @@
+package com.vci.ubcs.code.dto;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+public class SysIntInfoBseDTO extends BaseModelVO {
+    private SysIntInfoDTO sysIntInfoDTO;
+
+    private List<SysIntParamDTO> sysIntParamDTO;
+
+    private List<SysIntHeaderDTO> sysIntHeaderDTOS;
+
+    public SysIntInfoDTO getSysIntInfoDTO() {
+        return sysIntInfoDTO;
+    }
+
+    public void setSysIntInfoDTO(SysIntInfoDTO sysIntInfoDTO) {
+        this.sysIntInfoDTO = sysIntInfoDTO;
+    }
+
+    public List<SysIntParamDTO> getSysIntParamDTO() {
+        return sysIntParamDTO;
+    }
+
+    public void setSysIntParamDTO(List<SysIntParamDTO> sysIntParamDTO) {
+        this.sysIntParamDTO = sysIntParamDTO;
+    }
+
+    public List<SysIntHeaderDTO> getSysIntHeaderDTOS() {
+        return sysIntHeaderDTOS;
+    }
+
+    public void setSysIntHeaderDTOS(List<SysIntHeaderDTO> sysIntHeaderDTOS) {
+        this.sysIntHeaderDTOS = sysIntHeaderDTOS;
+    }
+
+    @Override
+    public String toString() {
+        return "SysIntInfoBseDTO{" +
+                "sysIntInfoDTO=" + sysIntInfoDTO +
+                ", sysIntParamDTO=" + sysIntParamDTO +
+                ", sysIntHeaderDTOS=" + sysIntHeaderDTOS +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoDTO.java
new file mode 100644
index 0000000..3a03ac5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoDTO.java
@@ -0,0 +1,664 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntInfoDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120053955466L;
+
+	/**
+	 * 璁よ瘉鏂瑰紡
+	 */
+	private String authorityoid;
+
+	/**
+	 * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String authorityoidName;
+	/**
+	 * 鎺ュ彛鍑芥暟
+	 */
+	private String interfaceFunction;
+
+	/**
+	 * 鎺ュ彛绫诲瀷
+	 */
+	private String interfacetype;
+
+	/**
+	 * 鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String interfacetypeText;
+	/**
+	 * 鍙傛暟绫诲瀷
+	 */
+	private String paramtype;
+
+	/**
+	 * 鍙傛暟绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String paramtypeText;
+	/**
+	 * 璇锋眰鏂瑰紡
+	 */
+	private String requestmethod;
+
+	/**
+	 * 璇锋眰鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String requestmethodText;
+	/**
+	 * 鍒嗙被oid
+	 */
+	private String classifyoid;
+	/**
+	 * 鍚敤銆佸仠鐢╰rue/false锛屼笉鐢ㄥ钩鍙扮殑鏋氫妇锛屽噺灏戝骞冲彴鐨勮�﹀悎
+	 */
+	private String usedflag;
+	/**
+	 * 鎺ㄩ�佺郴缁無id
+	 */
+	private String sysbaseoid;
+	/**
+	 * 鎺ㄩ�佺郴缁熺紪鍙�
+	 */
+	private String sysbaseid;
+	/**
+	 * 鎺ㄩ�佺郴缁熷悕绉�
+	 */
+	private String sysbasename;
+	/**
+	 * 璇锋眰鍦板潃
+	 */
+	private String requesturl;
+
+	/**
+	 * 杩斿洖鍊肩被鍨�
+	 */
+	private String returntype;
+
+	/**
+	 * 杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
+	 */
+	private String returntypeText;
+	/**
+	 * 鏉ユ簮绯荤粺涓婚敭
+	 */
+	private String sourcesystemoid;
+
+	/**
+	 * 鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String sourcesystemoidName;
+
+	/**
+	 * 鏉ユ簮绯荤粺鍚嶇О
+	 */
+	private String sourceSysName;
+
+	/**
+	 * 鏉ユ簮绯荤粺鏍囪瘑
+	 */
+	private String sourceSysId;
+
+	/**
+	 * 鐩爣绯荤粺涓婚敭
+	 */
+	private String targetsystemoid;
+
+	/**
+	 * 鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String targetsystemoidName;
+
+	/**
+	 * 鐩爣绯荤粺鍚嶇О
+	 */
+	private String targetSysName;
+
+	/**
+	 * 鐩爣绯荤粺鏍囪瘑
+	 */
+	private String targetSysId;
+
+
+
+	/**
+	 * 鎺ュ彛鎻忚堪
+	 */
+	private String description;
+
+	/**
+	 * 绫昏矾寰�
+	 */
+	private String classPath;
+
+	/**
+	 * 鏁版嵁娴佸悜鏂瑰紡
+	 */
+	private String dataFlowType;
+
+	/**
+	 * 鏁版嵁娴佸悜鏂瑰紡鐨勬樉绀哄瓧娈�
+	 */
+	private String dataFlowTypeText;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨�
+	 */
+	private String btmTypeId;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+	 */
+	private String btmTypeName;
+
+	/**
+	 * 鍛藉悕绌洪棿
+	 */
+	private String namespace;
+
+	/**
+	 * soapAction
+	 */
+	private String soapaction;
+
+	/**
+	 * 鍙傛暟鍚嶇О
+	 */
+	private String targName;
+
+	/**
+	 * cxfaxis
+	 */
+	private String cxfaxis;
+
+	/**
+	 * 鍒嗙被id
+	 */
+	private String classifyid;
+
+	/**
+	 * 鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+	/***
+	 * 鍙傛暟淇℃伅瀵硅薄
+	 */
+	private List<SysIntParamDTO> sysIntParamDTOs;
+	/***
+	 * header淇℃伅瀵硅薄
+	 */
+	private List<SysIntHeaderDTO> sysIntHeaderDTOS;
+
+	public String pushType;
+
+	public String getClassifyid() {
+		return classifyid;
+	}
+
+	public void setClassifyid(String classifyid) {
+		this.classifyid = classifyid;
+	}
+
+	public String getClassifyname() {
+		return classifyname;
+	}
+
+	public void setClassifyname(String classifyname) {
+		this.classifyname = classifyname;
+	}
+
+	public String getTargName() {
+		return targName;
+	}
+
+	public void setTargName(String targName) {
+		this.targName = targName;
+	}
+
+	public String getSoapaction() {
+		return soapaction;
+	}
+
+	public void setSoapaction(String soapaction) {
+		this.soapaction = soapaction;
+	}
+
+	public String getCxfaxis() {
+		return cxfaxis;
+	}
+
+	public void setCxfaxis(String cxfaxis) {
+		this.cxfaxis = cxfaxis;
+	}
+
+	public String getNamespace() {
+		return namespace;
+	}
+
+	public void setNamespace(String namespace) {
+		this.namespace = namespace;
+	}
+
+	public String getBtmTypeId() {
+		return btmTypeId;
+	}
+
+	public void setBtmTypeId(String btmTypeId) {
+		this.btmTypeId = btmTypeId;
+	}
+
+	public String getBtmTypeName() {
+		return btmTypeName;
+	}
+
+	public void setBtmTypeName(String btmTypeName) {
+		this.btmTypeName = btmTypeName;
+	}
+	/**
+	 * 鑾峰彇 璁よ瘉鏂瑰紡
+	 */
+	public String getAuthorityoid (){
+		return authorityoid;
+	}
+
+	/**
+	 * 璁剧疆 璁よ瘉鏂瑰紡
+	 */
+	public void setAuthorityoid (String authorityoid){
+		this.authorityoid = authorityoid;
+	}
+
+	/**
+	 * 鑾峰彇璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public String getAuthorityoidName (){
+		return authorityoidName;
+	}
+
+	/**
+	 * 璁剧疆璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public void setAuthorityoidName (String authorityoidName){
+		this.authorityoidName = authorityoidName;
+	}
+	/**
+	 * 鑾峰彇 鎺ュ彛鍑芥暟
+	 */
+	public String getInterfaceFunction (){
+		return interfaceFunction;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛鍑芥暟
+	 */
+	public void setInterfaceFunction (String interfaceFunction){
+		this.interfaceFunction = interfaceFunction;
+	}
+
+	/**
+	 * 鑾峰彇 鎺ュ彛绫诲瀷
+	 */
+	public String getInterfacetype (){
+		return interfacetype;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛绫诲瀷
+	 */
+	public void setInterfacetype (String interfacetype){
+		this.interfacetype = interfacetype;
+	}
+
+	/**
+	 * 鑾峰彇鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public String getInterfacetypeText (){
+		return interfacetypeText;
+	}
+
+	/**
+	 * 璁剧疆鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public void setInterfacetypeText (String interfacetypeText){
+		this.interfacetypeText = interfacetypeText;
+	}
+	/**
+	 * 鑾峰彇 鍙傛暟绫诲瀷
+	 */
+	public String getParamtype (){
+		return paramtype;
+	}
+
+	/**
+	 * 璁剧疆 鍙傛暟绫诲瀷
+	 */
+	public void setParamtype (String paramtype){
+		this.paramtype = paramtype;
+	}
+
+	/**
+	 * 鑾峰彇鍙傛暟绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public String getParamtypeText (){
+		return paramtypeText;
+	}
+
+	/**
+	 * 璁剧疆鍙傛暟绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public void setParamtypeText (String paramtypeText){
+		this.paramtypeText = paramtypeText;
+	}
+	/**
+	 * 鑾峰彇 璇锋眰鏂瑰紡
+	 */
+	public String getRequestmethod (){
+		return requestmethod;
+	}
+
+	/**
+	 * 璁剧疆 璇锋眰鏂瑰紡
+	 */
+	public void setRequestmethod (String requestmethod){
+		this.requestmethod = requestmethod;
+	}
+
+	/**
+	 * 鑾峰彇璇锋眰鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public String getRequestmethodText (){
+		return requestmethodText;
+	}
+
+	/**
+	 * 璁剧疆璇锋眰鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public void setRequestmethodText (String requestmethodText){
+		this.requestmethodText = requestmethodText;
+	}
+	/**
+	 * 鑾峰彇 璇锋眰鍦板潃
+	 */
+	public String getRequesturl (){
+		return requesturl;
+	}
+
+	/**
+	 * 璁剧疆 璇锋眰鍦板潃
+	 */
+	public void setRequesturl (String requesturl){
+		this.requesturl = requesturl;
+	}
+
+	/**
+	 * 鑾峰彇 杩斿洖鍊肩被鍨�
+	 */
+	public String getReturntype (){
+		return returntype;
+	}
+
+	/**
+	 * 璁剧疆 杩斿洖鍊肩被鍨�
+	 */
+	public void setReturntype (String returntype){
+		this.returntype = returntype;
+	}
+
+	/**
+	 * 鑾峰彇杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
+	 */
+	public String getReturntypeText (){
+		return returntypeText;
+	}
+
+	/**
+	 * 璁剧疆杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
+	 */
+	public void setReturntypeText (String returntypeText){
+		this.returntypeText = returntypeText;
+	}
+	/**
+	 * 鑾峰彇 鏉ユ簮绯荤粺涓婚敭
+	 */
+	public String getSourcesystemoid (){
+		return sourcesystemoid;
+	}
+
+	/**
+	 * 璁剧疆 鏉ユ簮绯荤粺涓婚敭
+	 */
+	public void setSourcesystemoid (String sourcesystemoid){
+		this.sourcesystemoid = sourcesystemoid;
+	}
+
+	/**
+	 * 鑾峰彇鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getSourcesystemoidName (){
+		return sourcesystemoidName;
+	}
+
+	/**
+	 * 璁剧疆鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setSourcesystemoidName (String sourcesystemoidName){
+		this.sourcesystemoidName = sourcesystemoidName;
+	}
+	/**
+	 * 鑾峰彇 鐩爣绯荤粺涓婚敭
+	 */
+	public String getTargetsystemoid (){
+		return targetsystemoid;
+	}
+
+	/**
+	 * 璁剧疆 鐩爣绯荤粺涓婚敭
+	 */
+	public void setTargetsystemoid (String targetsystemoid){
+		this.targetsystemoid = targetsystemoid;
+	}
+
+	/**
+	 * 鑾峰彇鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getTargetsystemoidName (){
+		return targetsystemoidName;
+	}
+
+	/**
+	 * 璁剧疆鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setTargetsystemoidName (String targetsystemoidName){
+		this.targetsystemoidName = targetsystemoidName;
+	}
+
+	@Override
+	public String getDescription() {
+		return description;
+	}
+
+	@Override
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getClassPath() {
+		return classPath;
+	}
+
+	public void setClassPath(String classPath) {
+		this.classPath = classPath;
+	}
+
+	public String getDataFlowType() {
+		return dataFlowType;
+	}
+
+	public void setDataFlowType(String dataFlowType) {
+		this.dataFlowType = dataFlowType;
+	}
+
+	public String getDataFlowTypeText() {
+		return dataFlowTypeText;
+	}
+
+	public void setDataFlowTypeText(String dataFlowTypeText) {
+		this.dataFlowTypeText = dataFlowTypeText;
+	}
+
+	public String getClassifyoid() {
+		return classifyoid;
+	}
+
+	public void setClassifyoid(String classifyoid) {
+		this.classifyoid = classifyoid;
+	}
+
+	public String getUsedflag() {
+		return usedflag;
+	}
+
+	public void setUsedflag(String usedflag) {
+		this.usedflag = usedflag;
+	}
+
+	public String getSysbaseoid() {
+		return sysbaseoid;
+	}
+
+	public void setSysbaseoid(String sysbaseoid) {
+		this.sysbaseoid = sysbaseoid;
+	}
+
+	public String getSysbasename() {
+		return sysbasename;
+	}
+
+	public void setSysbasename(String sysbasename) {
+		this.sysbasename = sysbasename;
+	}
+
+	public String getSysbaseid() {
+		return sysbaseid;
+	}
+
+	public void setSysbaseid(String sysbaseid) {
+		this.sysbaseid = sysbaseid;
+	}
+
+	public List<SysIntParamDTO> getSysIntParamDTOs() {
+		return sysIntParamDTOs;
+	}
+
+	public void setSysIntParamDTOs(List<SysIntParamDTO> sysIntParamDTOs) {
+		this.sysIntParamDTOs = sysIntParamDTOs;
+	}
+
+	public List<SysIntHeaderDTO> getSysIntHeaderDTOS() {
+		return sysIntHeaderDTOS;
+	}
+
+	public void setSysIntHeaderDTOS(List<SysIntHeaderDTO> sysIntHeaderDTOS) {
+		this.sysIntHeaderDTOS = sysIntHeaderDTOS;
+	}
+
+	public String getPushType() {
+		return pushType;
+	}
+
+	public void setPushType(String pushType) {
+		this.pushType = pushType;
+	}
+
+	public String getSourceSysName() {
+		return sourceSysName;
+	}
+
+	public void setSourceSysName(String sourceSysName) {
+		this.sourceSysName = sourceSysName;
+	}
+
+	public String getSourceSysId() {
+		return sourceSysId;
+	}
+
+	public void setSourceSysId(String sourceSysId) {
+		this.sourceSysId = sourceSysId;
+	}
+
+	public String getTargetSysName() {
+		return targetSysName;
+	}
+
+	public void setTargetSysName(String targetSysName) {
+		this.targetSysName = targetSysName;
+	}
+
+	public String getTargetSysId() {
+		return targetSysId;
+	}
+
+	public void setTargetSysId(String targetSysId) {
+		this.targetSysId = targetSysId;
+	}
+
+	@Override
+	public String toString() {
+		return "SysIntInfoDTO{" +
+				"authorityoid='" + authorityoid + '\'' +
+				", authorityoidName='" + authorityoidName + '\'' +
+				", interfaceFunction='" + interfaceFunction + '\'' +
+				", interfacetype='" + interfacetype + '\'' +
+				", interfacetypeText='" + interfacetypeText + '\'' +
+				", paramtype='" + paramtype + '\'' +
+				", paramtypeText='" + paramtypeText + '\'' +
+				", requestmethod='" + requestmethod + '\'' +
+				", requestmethodText='" + requestmethodText + '\'' +
+				", classifyoid='" + classifyoid + '\'' +
+				", usedflag='" + usedflag + '\'' +
+				", sysbaseoid='" + sysbaseoid + '\'' +
+				", sysbaseid='" + sysbaseid + '\'' +
+				", sysbasename='" + sysbasename + '\'' +
+				", requesturl='" + requesturl + '\'' +
+				", returntype='" + returntype + '\'' +
+				", returntypeText='" + returntypeText + '\'' +
+				", sourcesystemoid='" + sourcesystemoid + '\'' +
+				", sourcesystemoidName='" + sourcesystemoidName + '\'' +
+				", sourceSysName='" + sourceSysName + '\'' +
+				", sourceSysId='" + sourceSysId + '\'' +
+				", targetsystemoid='" + targetsystemoid + '\'' +
+				", targetsystemoidName='" + targetsystemoidName + '\'' +
+				", targetSysName='" + targetSysName + '\'' +
+				", targetSysId='" + targetSysId + '\'' +
+				", description='" + description + '\'' +
+				", classPath='" + classPath + '\'' +
+				", dataFlowType='" + dataFlowType + '\'' +
+				", dataFlowTypeText='" + dataFlowTypeText + '\'' +
+				", btmTypeId='" + btmTypeId + '\'' +
+				", btmTypeName='" + btmTypeName + '\'' +
+				", namespace='" + namespace + '\'' +
+				", soapaction='" + soapaction + '\'' +
+				", targName='" + targName + '\'' +
+				", cxfaxis='" + cxfaxis + '\'' +
+				", classifyid='" + classifyid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", sysIntParamDTOs=" + sysIntParamDTOs +
+				", sysIntHeaderDTOS=" + sysIntHeaderDTOS +
+				", pushType='" + pushType + '\'' +
+				'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntParamDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntParamDTO.java
new file mode 100644
index 0000000..83b678b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntParamDTO.java
@@ -0,0 +1,81 @@
+package com.vci.ubcs.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class SysIntParamDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120661255093L;
+
+	/**
+	 * SysIntInfoDO 鐨刼id
+	 */
+	private String infoOid;
+
+	/**
+	 * 鍙傛暟key
+	 */
+	private String paramkey;
+
+	/**
+	 * 鍙傛暟value
+	 */
+	private String paramvalue;
+
+	/**
+	 * 鏄惁浣跨敤
+	 */
+	private String usedflag;
+
+
+	public String getInfoOid() {
+		return infoOid;
+	}
+
+	public void setInfoOid(String infoOid) {
+		this.infoOid = infoOid;
+	}
+
+	public String getParamkey() {
+		return paramkey;
+	}
+
+	public void setParamkey(String paramkey) {
+		this.paramkey = paramkey;
+	}
+
+	public String getParamvalue() {
+		return paramvalue;
+	}
+
+	public void setParamvalue(String paramvalue) {
+		this.paramvalue = paramvalue;
+	}
+
+	public String getUsedflag() {
+		return usedflag;
+	}
+
+	public void setUsedflag(String usedflag) {
+		this.usedflag = usedflag;
+	}
+
+	@Override
+	public String toString() {
+		return "SysIntParamDO{" +
+				"infoOid='" + infoOid + '\'' +
+				", paramkey='" + paramkey + '\'' +
+				", paramvalue='" + paramvalue + '\'' +
+				", usedflag='" + usedflag + '\'' +
+				'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/UpdateSysInfoStatusDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/UpdateSysInfoStatusDTO.java
new file mode 100644
index 0000000..3dd7233
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/UpdateSysInfoStatusDTO.java
@@ -0,0 +1,40 @@
+package com.vci.ubcs.code.dto;
+
+public class UpdateSysInfoStatusDTO {
+    private String oid;
+    private String update;
+    private String ts;
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getUpdate() {
+        return update;
+    }
+
+    public void setUpdate(String update) {
+        this.update = update;
+    }
+
+    public String getTs() {
+        return ts;
+    }
+    public void setTs(String ts) {
+        this.ts = ts;
+    }
+    @Override
+    public String toString() {
+        return "SysInfoDTO{" +
+                "oid='" + oid + '\'' +
+                ", update='" + update + '\'' +
+                ", ts='" + ts + '\'' +
+                '}';
+    }
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/JsonRootDataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/JsonRootDataDTO.java
new file mode 100644
index 0000000..a7abb8a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/JsonRootDataDTO.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.code.dto.datapush.classify;
+
+
+public class JsonRootDataDTO {
+    private NodeDataDTO data;
+
+    public NodeDataDTO getData() {
+        return data;
+    }
+
+    public void setData(NodeDataDTO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "JsonRootDataDTO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java
new file mode 100644
index 0000000..06d0875
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.code.dto.datapush.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("classify")
+public class NodeClassifyDTO {
+        /**
+         * 鍒嗙被id
+         */
+        @XStreamAsAttribute
+        private String id;
+        /***
+         * 鍒嗙被鍚嶇О
+         */
+        @XStreamAsAttribute
+        private String name;
+        /***
+         * 鐖惰妭鐐筰d
+         */
+        @XStreamAsAttribute
+        private String pid;
+        /***
+         * 鍒嗙被浠e彿
+         */
+        @XStreamAsAttribute
+        private String classCode;
+        /***
+         * 鎻忚堪
+         */
+        @XStreamAsAttribute
+        private  String description;
+        /***
+         * 鍒嗙被閾炬帴璺緞
+         */
+        @XStreamAsAttribute
+        private  String fullPathName;
+        /***
+         * 鍒嗙被鐘舵��
+         */
+        @XStreamAsAttribute
+        private String lcStatus;
+
+        public String getId() {
+        return id;
+    }
+
+        public void setId(String id) {
+        this.id = id;
+    }
+
+        public String getName() {
+        return name;
+    }
+
+        public void setName(String name) {
+        this.name = name;
+    }
+
+        public String getPid() {
+        return pid;
+    }
+
+        public void setPid(String pid) {
+        this.pid = pid;
+    }
+
+        public String getClassCode() {
+        return classCode;
+    }
+
+        public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+        public String getDescription() {
+        return description;
+    }
+
+        public void setDescription(String description) {
+        this.description = description;
+    }
+
+        public String getFullPathName() {
+        return fullPathName;
+    }
+
+        public void setFullPathName(String fullPathName) {
+        this.fullPathName = fullPathName;
+    }
+
+        public String getLcStatus() {
+        return lcStatus;
+    }
+
+        public void setLcStatus(String lcStatus) {
+        this.lcStatus = lcStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeClassifyDTO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", pid='" + pid + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", description='" + description + '\'' +
+                ", fullPathName='" + fullPathName + '\'' +
+                ", lcStatus='" + lcStatus + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java
new file mode 100644
index 0000000..7351eb4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java
@@ -0,0 +1,24 @@
+package com.vci.ubcs.code.dto.datapush.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+@XStreamAlias("data")
+public class NodeDataDTO {
+
+    private NodeLibraryDTO library;
+
+    public NodeLibraryDTO getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(NodeLibraryDTO library) {
+        this.library = library;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeDataDTO{" +
+                "library=" + library +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java
new file mode 100644
index 0000000..a6d2ac7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java
@@ -0,0 +1,50 @@
+package com.vci.ubcs.code.dto.datapush.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("library")
+public class NodeLibraryDTO {
+    @XStreamAsAttribute
+    private String id;
+    @XStreamAsAttribute
+    private String name;
+    @XStreamImplicit
+    private List<NodeClassifyDTO> classify;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<NodeClassifyDTO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<NodeClassifyDTO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeLibraryDTO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", classify=" + classify +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/classfy.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/classfy.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/classfy.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/classfy.json
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/data.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/data.xml
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/data.xml
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/data.xml
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java
new file mode 100644
index 0000000..d2b8e7e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.code.dto.datapush.data;
+
+public class NodeJosnDTO {
+
+    private NodedataDTO data;
+
+    public NodedataDTO getData() {
+        return data;
+    }
+
+    public void setData(NodedataDTO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeJosnDTO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java
new file mode 100644
index 0000000..8ea3daf
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java
@@ -0,0 +1,71 @@
+package com.vci.ubcs.code.dto.datapush.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("object")
+public class NodeObjectDTO {
+    @XStreamAsAttribute
+   private String  code="" ;
+    @XStreamAsAttribute
+    private String status="" ;
+    @XStreamAsAttribute
+    private String library="";
+    @XStreamAsAttribute
+    private String classCode="";
+    @XStreamImplicit
+    private List<NodeProDTO> pro;
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public List<NodeProDTO> getPro() {
+        return pro;
+    }
+
+    public void setPro(List<NodeProDTO> pro) {
+        this.pro = pro;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeObjectDTO{" +
+                "code='" + code + '\'' +
+                ", status='" + status + '\'' +
+                ", library='" + library + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", pro=" + pro +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java
new file mode 100644
index 0000000..1e4c759
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java
@@ -0,0 +1,47 @@
+package com.vci.ubcs.code.dto.datapush.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("pro")
+public class NodeProDTO {
+    @XStreamAsAttribute
+    private String filedName;
+    @XStreamAsAttribute
+    private String outname;
+    @XStreamAsAttribute
+    private String filedValue;
+
+    public String getFiledName() {
+        return filedName;
+    }
+
+    public void setFiledName(String filedName) {
+        this.filedName = filedName;
+    }
+
+    public String getOutname() {
+        return outname;
+    }
+
+    public void setOutname(String outname) {
+        this.outname = outname;
+    }
+
+    public String getFiledValue() {
+        return filedValue;
+    }
+
+    public void setFiledValue(String filedValue) {
+        this.filedValue = filedValue;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeProDTO{" +
+                "filedName='" + filedName + '\'' +
+                ", outname='" + outname + '\'' +
+                ", filedValue='" + filedValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java
new file mode 100644
index 0000000..fe832e9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java
@@ -0,0 +1,27 @@
+package com.vci.ubcs.code.dto.datapush.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("data")
+public class NodedataDTO {
+    @XStreamImplicit
+    private List<NodeObjectDTO> object;
+
+    public List<NodeObjectDTO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<NodeObjectDTO> object) {
+        this.object = object;
+    }
+
+    @Override
+    public String toString() {
+        return "NodedataDTO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/data.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/data.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/data.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/data.json
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/result.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/result.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/result.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/result.json
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultJsonDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultJsonDTO.java
new file mode 100644
index 0000000..3e42ba1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultJsonDTO.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.code.dto.datapush.result;
+
+
+public class ResultJsonDTO {
+    private ResultNodeDataDTO data;
+
+    public ResultNodeDataDTO getData() {
+        return data;
+    }
+
+    public void setData(ResultNodeDataDTO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultJsonDTO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java
new file mode 100644
index 0000000..e07d7a3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java
@@ -0,0 +1,28 @@
+package com.vci.ubcs.code.dto.datapush.result;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("data")
+public class ResultNodeDataDTO {
+
+    @XStreamImplicit
+    private List<ResultNodeObjectDTO> object;
+
+    public List<ResultNodeObjectDTO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<ResultNodeObjectDTO> object) {
+        this.object = object;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeDataDTO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java
new file mode 100644
index 0000000..70b118d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java
@@ -0,0 +1,70 @@
+package com.vci.ubcs.code.dto.datapush.result;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("object")
+public class ResultNodeObjectDTO {
+    /***
+     * 鏁版嵁缂栫爜
+     */
+    @XStreamAsAttribute
+    private  String code;
+    /***
+     * 鏁版嵁oid
+     */
+    @XStreamAsAttribute
+    private  String oid;
+    /***
+     * 閿欒鏍囪瘑
+     */
+    @XStreamAsAttribute
+    private String erroid;
+    /***
+     * 閿欒淇℃伅
+     */
+    @XStreamAsAttribute
+    private String msg;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getErroid() {
+        return erroid;
+    }
+
+    public void setErroid(String erroid) {
+        this.erroid = erroid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultNodeObjectDTO{" +
+                "code='" + code + '\'' +
+                ", oid='" + oid + '\'' +
+                ", erroid='" + erroid + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java
new file mode 100644
index 0000000..613af71
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java
@@ -0,0 +1,169 @@
+package com.vci.ubcs.code.po;
+
+import com.vci.starter.poi.annotation.ExcelColumn;
+
+/**
+ * 涓婚搴撳垎绫荤殑瀵煎叆瀵煎嚭瀵硅薄
+ * @author weidy
+ * @date 2022-04-01
+ */
+public class CodeClassifyPO implements java.io.Serializable{
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6101784029360306020L;
+    /**
+     * 鎵�鍦ㄦ暟鎹
+     */
+    @ExcelColumn(rowIndexColumn = true,value = "")
+    private String rowIndex;
+
+
+    /**
+     * 鍒嗙被缂栧彿
+     */
+    @ExcelColumn(value="鍒嗙被缂栧彿",nullable = false)
+    private String id;
+    /**
+     * 鍒嗙被鍚嶇О
+     */
+    @ExcelColumn(value="鍒嗙被鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    @ExcelColumn(value = "鎻忚堪")
+    private String description;
+
+    /**
+     * 缂栫爜瑙勫垯缂栧彿
+     */
+    @ExcelColumn(value = "缂栫爜瑙勫垯缂栧彿")
+    private String codeRuleId;
+
+    /**
+     * 涓氬姟绫诲瀷缂栧彿
+     */
+    @ExcelColumn(value = "涓氬姟绫诲瀷缂栧彿")
+    private String btmTypeId;
+
+    /**
+     * 鏌ラ噸瑙勫垯缂栧彿
+     */
+    @ExcelColumn(value = "鏌ラ噸瑙勫垯缂栧彿")
+    private String keyRepeatRuleId;
+
+    /**
+     * 鍒嗙被璺緞
+     */
+    @ExcelColumn(value = "鍒嗙被璺緞",nullable = false)
+    private String path;
+
+    /**
+     * 鐘舵�佹枃鏈�
+     */
+    @ExcelColumn(value = "鐘舵��")
+    private String lcStatusText;
+
+    /**
+     * 鐘舵��
+     */
+    private String lcStatus;
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(String rowIndex) {
+        this.rowIndex = rowIndex;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeRuleId() {
+        return codeRuleId;
+    }
+
+    public void setCodeRuleId(String codeRuleId) {
+        this.codeRuleId = codeRuleId;
+    }
+
+    public String getBtmTypeId() {
+        return btmTypeId;
+    }
+
+    public void setBtmTypeId(String btmTypeId) {
+        this.btmTypeId = btmTypeId;
+    }
+
+    public String getKeyRepeatRuleId() {
+        return keyRepeatRuleId;
+    }
+
+    public void setKeyRepeatRuleId(String keyRepeatRuleId) {
+        this.keyRepeatRuleId = keyRepeatRuleId;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getLcStatusText() {
+        return lcStatusText;
+    }
+
+    public void setLcStatusText(String lcStatusText) {
+        this.lcStatusText = lcStatusText;
+    }
+
+    public String getLcStatus() {
+        return lcStatus;
+    }
+
+    public void setLcStatus(String lcStatus) {
+        this.lcStatus = lcStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyPO{" +
+                "rowIndex='" + rowIndex + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", codeRuleId='" + codeRuleId + '\'' +
+                ", btmTypeId='" + btmTypeId + '\'' +
+                ", keyRepeatRuleId='" + keyRepeatRuleId + '\'' +
+                ", path='" + path + '\'' +
+                ", lcStatusText='" + lcStatusText + '\'' +
+                ", lcStatus='" + lcStatus + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
new file mode 100644
index 0000000..f128e54
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
@@ -0,0 +1,651 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeBasicSecVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118400017877L;
+
+	/**
+	* 鐮佹绫诲瀷
+	*/
+	private String sectype;
+
+
+	/**
+	* 鐮佹绫诲瀷鏄剧ず鏂囨湰
+	*/
+	private String sectypeText;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒�
+	 */
+	private String pkCodeRule;
+
+	/**
+	 * 鐮佹鎺掑簭鍙�
+	 */
+	private Integer orderNum;
+
+	/**
+	 * 鐮佹闀垮害绫诲瀷
+	 */
+	private String codeSecLengthType;
+	/**
+	 * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeSecLengthTypeText;
+
+	/**
+	 * 鐮佹闀垮害
+	 */
+	private String codeSecLength;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬х殑鏂囨湰
+	 */
+	private String referAttributeName;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	private String referAttributeId;
+
+	/**
+	 * 鍙栧�艰鍒�
+	 */
+	private String getValueClass ;
+
+	//鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
+	/**
+	 * 鏃ユ湡鏍煎紡
+	 */
+	private String codeDateFormatStr;
+
+	/**
+	 * 灞傜骇绫诲瀷
+	 */
+	private String codeLevelType;
+
+	/**
+	 * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeLevelTypeText;
+
+	/**
+	 * 灞傜骇鐨勫��
+	 */
+	private Integer codeLevelValue;
+
+	/**
+	 * 鍊兼埅鍙栭暱搴�
+	 */
+	private Integer valueCutLength;
+
+	/**
+	 * 瀛楃鎴彇绫诲瀷
+	 */
+	private String valueCutType;
+
+	/**
+	 * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
+	 */
+	private String valueCutTypeText;
+
+	/**
+	 * 鍙栧�肩被鍨�
+	 */
+	private String codeGetValueType;
+
+	/**
+	 * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
+	 */
+	private String codeGetValueTypeText;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
+	 */
+	private String referCodeClassifyOid;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鍚嶇О
+	 */
+	private String referCodeClassifyOidName;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨�
+	 */
+	private String referBtmId;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	private String referBtmName;
+
+	/**
+	 * 鍙傜収鐨勭獥鍙i厤缃�
+	 */
+	private String referConfig;
+
+	/**
+	 * 鏄剧ず淇℃伅
+	 */
+	private String referValueInfo;
+
+	/**
+	 * 杩囨护鐨剆ql鍐呭
+	 */
+	private String filterSql ;
+
+
+	/**
+	 * 娴佹按鍙疯捣濮嬪��
+	 */
+	private String serialStart;
+
+	/**
+	 * 娴佹按鐨勬闀�
+	 */
+	private Integer serialStep;
+
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡
+	 */
+	private String codeFillType;
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String codeFillTypeText;
+
+	/**
+	 * 琛ヤ綅鏃剁殑瀛楃
+	 */
+	private String codeFillSeparator;
+
+	/**
+	 * 濉厖闀垮害
+	 */
+	private String codeFillLength;
+
+	/**
+	 * 涓婇檺
+	 */
+	private Integer codeFillLimit;
+
+	/**
+	 * 娴佹按鏄惁琛ョ爜
+	 */
+	private String codeFillFlag;
+
+	/**
+	 * 鑷畾涔夌殑娴佹按绠楁硶绫�
+	 */
+	private String customCodeSerialClass;
+
+	/**
+	 * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
+	 */
+	private String matchClassifyValueFlag;
+
+	/**
+	 * 鐖跺垎绫荤爜娈典富閿�
+	 */
+	private String parentClassifySecOid;
+
+	/**
+	 * 鐖跺垎绫荤爜娈靛悕绉�
+	 */
+	private String parentClassifySecText;
+
+
+	/**
+	 * 鏄惁鍙互涓虹┖
+	 */
+	private String nullableFlag;
+
+	/**
+	 * 鏄惁鍙備笌缂栫爜
+	 */
+	private String componentCodeFlag;
+
+	/**
+	 * 鏄惁娴佹按渚濊禆
+	 */
+	private String serialDependFlag;
+
+	/**
+	 * 鏄惁鏄剧ず
+	 */
+	private String displayFlag;
+
+	/**
+	 * 娴佹按渚濊禆椤哄簭
+	 */
+	private Integer serialDependOrder;
+
+	/**
+	 * 鍥哄畾鐮佺殑鐮佸�煎唴瀹�
+	 */
+	private List<CodeFixedValueVO> fixedValueVOList;
+
+	public String getReferCodeClassifyOidName() {
+		return referCodeClassifyOidName;
+	}
+
+	public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
+		this.referCodeClassifyOidName = referCodeClassifyOidName;
+	}
+
+	public String getReferAttributeId() {
+		return referAttributeId;
+	}
+
+	public void setReferAttributeId(String referAttributeId) {
+		this.referAttributeId = referAttributeId;
+	}
+
+	//鍒嗙被鐨勫唴瀹逛笉鑳界洿鎺ユ斁锛屽洜涓哄彲鑳藉緢澶�
+
+	public String getPkCodeRule() {
+		return pkCodeRule;
+	}
+
+	public void setPkCodeRule(String pkCodeRule) {
+		this.pkCodeRule = pkCodeRule;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getCodeSecLengthTypeText() {
+		return codeSecLengthTypeText;
+	}
+
+	public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
+		this.codeSecLengthTypeText = codeSecLengthTypeText;
+	}
+
+	public String getMatchClassifyValueFlag() {
+		return matchClassifyValueFlag;
+	}
+
+	public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
+		this.matchClassifyValueFlag = matchClassifyValueFlag;
+	}
+
+	public String getParentClassifySecOid() {
+		return parentClassifySecOid;
+	}
+
+	public void setParentClassifySecOid(String parentClassifySecOid) {
+		this.parentClassifySecOid = parentClassifySecOid;
+	}
+
+	public String getParentClassifySecText() {
+		return parentClassifySecText;
+	}
+
+	public void setParentClassifySecText(String parentClassifySecText) {
+		this.parentClassifySecText = parentClassifySecText;
+	}
+
+	public String getNullableFlag() {
+		return nullableFlag;
+	}
+
+	public void setNullableFlag(String nullableFlag) {
+		this.nullableFlag = nullableFlag;
+	}
+
+	public String getComponentCodeFlag() {
+		return componentCodeFlag;
+	}
+
+	public void setComponentCodeFlag(String componentCodeFlag) {
+		this.componentCodeFlag = componentCodeFlag;
+	}
+
+	public String getSerialDependFlag() {
+		return serialDependFlag;
+	}
+
+	public void setSerialDependFlag(String serialDependFlag) {
+		this.serialDependFlag = serialDependFlag;
+	}
+
+	public String getDisplayFlag() {
+		return displayFlag;
+	}
+
+	public void setDisplayFlag(String displayFlag) {
+		this.displayFlag = displayFlag;
+	}
+
+	public Integer getSerialDependOrder() {
+		return serialDependOrder;
+	}
+
+	public void setSerialDependOrder(Integer serialDependOrder) {
+		this.serialDependOrder = serialDependOrder;
+	}
+
+	/**
+	* 璁剧疆 鐮佹绫诲瀷
+	*/
+	public void setSectype (String sectype){
+		this.sectype = sectype;
+	}
+
+	public String getSectypeText() {
+		return sectypeText;
+	}
+
+	public void setSectypeText(String sectypeText) {
+		this.sectypeText = sectypeText;
+	}
+
+	public String getSectype() {
+		return sectype;
+	}
+
+	public String getCodeSecLengthType() {
+		return codeSecLengthType;
+	}
+
+	public void setCodeSecLengthType(String codeSecLengthType) {
+		this.codeSecLengthType = codeSecLengthType;
+	}
+
+	public String getCodeSecLength() {
+		return codeSecLength;
+	}
+
+	public void setCodeSecLength(String codeSecLength) {
+		this.codeSecLength = codeSecLength;
+	}
+
+	public String getGetValueClass() {
+		return getValueClass;
+	}
+
+	public void setGetValueClass(String getValueClass) {
+		this.getValueClass = getValueClass;
+	}
+
+	public String getCodeDateFormatStr() {
+		return codeDateFormatStr;
+	}
+
+	public void setCodeDateFormatStr(String codeDateFormatStr) {
+		this.codeDateFormatStr = codeDateFormatStr;
+	}
+
+	public String getCodeLevelType() {
+		return codeLevelType;
+	}
+
+	public void setCodeLevelType(String codeLevelType) {
+		this.codeLevelType = codeLevelType;
+	}
+
+	public String getCodeLevelTypeText() {
+		return codeLevelTypeText;
+	}
+
+	public void setCodeLevelTypeText(String codeLevelTypeText) {
+		this.codeLevelTypeText = codeLevelTypeText;
+	}
+
+	public Integer getCodeLevelValue() {
+		return codeLevelValue;
+	}
+
+	public void setCodeLevelValue(Integer codeLevelValue) {
+		this.codeLevelValue = codeLevelValue;
+	}
+
+	public Integer getValueCutLength() {
+		return valueCutLength;
+	}
+
+	public void setValueCutLength(Integer valueCutLength) {
+		this.valueCutLength = valueCutLength;
+	}
+
+	public String getValueCutType() {
+		return valueCutType;
+	}
+
+	public void setValueCutType(String valueCutType) {
+		this.valueCutType = valueCutType;
+	}
+
+	public String getValueCutTypeText() {
+		return valueCutTypeText;
+	}
+
+	public void setValueCutTypeText(String valueCutTypeText) {
+		this.valueCutTypeText = valueCutTypeText;
+	}
+
+	public String getCodeGetValueType() {
+		return codeGetValueType;
+	}
+
+	public void setCodeGetValueType(String codeGetValueType) {
+		this.codeGetValueType = codeGetValueType;
+	}
+
+	public String getCodeGetValueTypeText() {
+		return codeGetValueTypeText;
+	}
+
+	public void setCodeGetValueTypeText(String codeGetValueTypeText) {
+		this.codeGetValueTypeText = codeGetValueTypeText;
+	}
+
+	public String getReferCodeClassifyOid() {
+		return referCodeClassifyOid;
+	}
+
+	public void setReferCodeClassifyOid(String referCodeClassifyOid) {
+		this.referCodeClassifyOid = referCodeClassifyOid;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	public String getReferValueInfo() {
+		return referValueInfo;
+	}
+
+	public void setReferValueInfo(String referValueInfo) {
+		this.referValueInfo = referValueInfo;
+	}
+
+	public String getFilterSql() {
+		return filterSql;
+	}
+
+	public void setFilterSql(String filterSql) {
+		this.filterSql = filterSql;
+	}
+
+	public String getSerialStart() {
+		return serialStart;
+	}
+
+	public void setSerialStart(String serialStart) {
+		this.serialStart = serialStart;
+	}
+
+	public Integer getSerialStep() {
+		return serialStep;
+	}
+
+	public void setSerialStep(Integer serialStep) {
+		this.serialStep = serialStep;
+	}
+
+	public String getCodeFillType() {
+		return codeFillType;
+	}
+
+	public void setCodeFillType(String codeFillType) {
+		this.codeFillType = codeFillType;
+	}
+
+	public String getCodeFillTypeText() {
+		return codeFillTypeText;
+	}
+
+	public void setCodeFillTypeText(String codeFillTypeText) {
+		this.codeFillTypeText = codeFillTypeText;
+	}
+
+	public String getCodeFillSeparator() {
+		return codeFillSeparator;
+	}
+
+	public void setCodeFillSeparator(String codeFillSeparator) {
+		this.codeFillSeparator = codeFillSeparator;
+	}
+
+	public String getCodeFillLength() {
+		return codeFillLength;
+	}
+
+	public void setCodeFillLength(String codeFillLength) {
+		this.codeFillLength = codeFillLength;
+	}
+
+	public Integer getCodeFillLimit() {
+		return codeFillLimit;
+	}
+
+	public void setCodeFillLimit(Integer codeFillLimit) {
+		this.codeFillLimit = codeFillLimit;
+	}
+
+	public String getCodeFillFlag() {
+		return codeFillFlag;
+	}
+
+	public void setCodeFillFlag(String codeFillFlag) {
+		this.codeFillFlag = codeFillFlag;
+	}
+
+	public String getCustomCodeSerialClass() {
+		return customCodeSerialClass;
+	}
+
+	public void setCustomCodeSerialClass(String customCodeSerialClass) {
+		this.customCodeSerialClass = customCodeSerialClass;
+	}
+
+
+	public List<CodeFixedValueVO> getFixedValueVOList() {
+		return fixedValueVOList;
+	}
+
+	public void setFixedValueVOList(List<CodeFixedValueVO> fixedValueVOList) {
+		this.fixedValueVOList = fixedValueVOList;
+	}
+
+	public String getReferAttributeName() {
+		return referAttributeName;
+	}
+
+	public void setReferAttributeName(String referAttributeName) {
+		this.referAttributeName = referAttributeName;
+	}
+
+	public String getReferBtmId() {
+		return referBtmId;
+	}
+
+	public void setReferBtmId(String referBtmId) {
+		this.referBtmId = referBtmId;
+	}
+
+	public String getReferBtmName() {
+		return referBtmName;
+	}
+
+	public void setReferBtmName(String referBtmName) {
+		this.referBtmName = referBtmName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeBasicSecVO{" +
+				"sectype='" + sectype + '\'' +
+				", sectypeText='" + sectypeText + '\'' +
+				", pkCodeRule='" + pkCodeRule + '\'' +
+				", orderNum=" + orderNum +
+				", codeSecLengthType='" + codeSecLengthType + '\'' +
+				", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
+				", codeSecLength='" + codeSecLength + '\'' +
+				", referAttributeName='" + referAttributeName + '\'' +
+				", referAttributeId='" + referAttributeId + '\'' +
+				", getValueClass='" + getValueClass + '\'' +
+				", codeDateFormatStr='" + codeDateFormatStr + '\'' +
+				", codeLevelType='" + codeLevelType + '\'' +
+				", codeLevelTypeText='" + codeLevelTypeText + '\'' +
+				", codeLevelValue=" + codeLevelValue +
+				", valueCutLength=" + valueCutLength +
+				", valueCutType='" + valueCutType + '\'' +
+				", valueCutTypeText='" + valueCutTypeText + '\'' +
+				", codeGetValueType='" + codeGetValueType + '\'' +
+				", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
+				", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
+				", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
+				", referBtmId='" + referBtmId + '\'' +
+				", referBtmName='" + referBtmName + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", referValueInfo='" + referValueInfo + '\'' +
+				", filterSql='" + filterSql + '\'' +
+				", serialStart='" + serialStart + '\'' +
+				", serialStep=" + serialStep +
+				", codeFillType='" + codeFillType + '\'' +
+				", codeFillTypeText='" + codeFillTypeText + '\'' +
+				", codeFillSeparator='" + codeFillSeparator + '\'' +
+				", codeFillLength='" + codeFillLength + '\'' +
+				", codeFillLimit=" + codeFillLimit +
+				", codeFillFlag='" + codeFillFlag + '\'' +
+				", customCodeSerialClass='" + customCodeSerialClass + '\'' +
+				", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
+				", parentClassifySecOid='" + parentClassifySecOid + '\'' +
+				", parentClassifySecText='" + parentClassifySecText + '\'' +
+				", nullableFlag='" + nullableFlag + '\'' +
+				", componentCodeFlag='" + componentCodeFlag + '\'' +
+				", serialDependFlag='" + serialDependFlag + '\'' +
+				", displayFlag='" + displayFlag + '\'' +
+				", serialDependOrder=" + serialDependOrder +
+				", fixedValueVOList=" + fixedValueVOList +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeButtonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeButtonVO.java
new file mode 100644
index 0000000..8c12ef6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeButtonVO.java
@@ -0,0 +1,98 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeButtonVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118774202884L;
+
+	/**
+	* 鎸夐挳鐨勫浘鏍囨牱寮�
+	*/
+	private String iconcls;
+
+
+	/**
+	* 鎵ц鐨刯s鍐呭
+	*/
+	private String executejs;
+
+
+	/**
+	* 鎸夐挳鐨勪綅缃�
+	*/
+	private String usedpositiontype;
+
+
+	/**
+	* 鎸夐挳鐨勪綅缃樉绀烘枃鏈�
+	*/
+	private String usedpositiontypeText;
+
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	public String getIconcls (){
+		return iconcls;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐨勫浘鏍囨牱寮�
+	*/
+	public void setIconcls (String iconcls){
+		this.iconcls = iconcls;
+	}
+	/**
+	 * 鑾峰彇 鎵ц鐨刯s鍐呭
+	 */
+	public String getExecutejs (){
+		return executejs;
+	}
+
+	/**
+	* 璁剧疆 鎵ц鐨刯s鍐呭
+	*/
+	public void setExecutejs (String executejs){
+		this.executejs = executejs;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪綅缃�
+	 */
+	public String getUsedpositiontype (){
+		return usedpositiontype;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐨勪綅缃�
+	*/
+	public void setUsedpositiontype (String usedpositiontype){
+		this.usedpositiontype = usedpositiontype;
+	}
+
+	public String getUsedpositiontypeText() {
+		return usedpositiontypeText;
+	}
+
+	public void setUsedpositiontypeText(String usedpositiontypeText) {
+		this.usedpositiontypeText = usedpositiontypeText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeButtonVO{" +
+				"iconcls='" + iconcls + '\'' +
+				", executejs='" + executejs + '\'' +
+				", usedpositiontype='" + usedpositiontype + '\'' +
+				", usedpositiontypeText='" + usedpositiontypeText + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyAttributeVO.java
new file mode 100644
index 0000000..0d040e1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyAttributeVO.java
@@ -0,0 +1,63 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫绘墍闇�灞炴�ч泦鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyAttributeVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120914631514L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	private String codeclassifyoid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	private String codeclassifyoidName;
+
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婚搴撳垎绫讳富閿�
+	*/
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyAttributeVO{" +
+		"codeclassifyoid='" + codeclassifyoid +"'," +
+		"codeclassifyoidName='" + codeclassifyoidName +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
new file mode 100644
index 0000000..4cafaba
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
@@ -0,0 +1,167 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyProcessTempVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118047426785L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	private String codeclassifyoid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	private String codeclassifyoidName;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifyTemplateOid;
+
+	/**
+	* 娴佺▼妯℃澘鐢ㄩ��
+	*/
+	private String codeprocessuse;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ�斿悕绉�
+	 */
+	private String codeprocessuseText;
+
+	/**
+	 * 娴佺▼妯℃澘鐨勭増鏈�
+	 */
+	private String processVersion;
+
+	/**
+	 * 鍏宠仈鐨勬ā鏉垮睘鎬х殑涓婚敭闆嗗悎瀛楃涓�
+	 */
+	private String codeTempAttrOidArr;
+
+	/**
+	 * 鍏宠仈鐨勬ā鏉垮睘鎬х殑鍚嶇О闆嗗悎瀛楃涓�
+	 */
+	private String codeTempAttrOidArrName;
+
+	/**
+	 * 鍏宠仈鐨勬ā鏉垮睘鎬�
+	 */
+	private List<CodeClassifyTemplateAttrVO> attrList;
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婚搴撳垎绫讳富閿�
+	*/
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+	/**
+	 * 鑾峰彇 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	public String getCodeprocessuse (){
+		return codeprocessuse;
+	}
+
+	/**
+	* 璁剧疆 娴佺▼妯℃澘鐢ㄩ��
+	*/
+	public void setCodeprocessuse (String codeprocessuse){
+		this.codeprocessuse = codeprocessuse;
+	}
+
+	public String getCodeprocessuseText() {
+		return codeprocessuseText;
+	}
+
+	public void setCodeprocessuseText(String codeprocessuseText) {
+		this.codeprocessuseText = codeprocessuseText;
+	}
+
+	public String getClassifyTemplateOid() {
+		return classifyTemplateOid;
+	}
+
+	public void setClassifyTemplateOid(String classifyTemplateOid) {
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+
+	public String getProcessVersion() {
+		return processVersion;
+	}
+
+	public void setProcessVersion(String processVersion) {
+		this.processVersion = processVersion;
+	}
+
+	public List<CodeClassifyTemplateAttrVO> getAttrList() {
+		return attrList;
+	}
+
+	public void setAttrList(List<CodeClassifyTemplateAttrVO> attrList) {
+		this.attrList = attrList;
+	}
+
+	public String getCodeTempAttrOidArr() {
+		return codeTempAttrOidArr;
+	}
+
+	public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
+		this.codeTempAttrOidArr = codeTempAttrOidArr;
+	}
+
+	public String getCodeTempAttrOidArrName() {
+		return codeTempAttrOidArrName;
+	}
+
+	public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
+		this.codeTempAttrOidArrName = codeTempAttrOidArrName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyProcessTempVO{" +
+				"codeclassifyoid='" + codeclassifyoid + '\'' +
+				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
+				", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+				", codeprocessuse='" + codeprocessuse + '\'' +
+				", codeprocessuseText='" + codeprocessuseText + '\'' +
+				", processVersion='" + processVersion + '\'' +
+				", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
+				", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
+				", attrList=" + attrList +
+				'}' + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTempMapItemVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTempMapItemVO.java
new file mode 100644
index 0000000..737d1cb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTempMapItemVO.java
@@ -0,0 +1,210 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public class CodeClassifyTempMapItemVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120984500249L;
+
+	/**
+	* 鍒嗙被妯℃澘灞炴�т富閿�
+	*/
+	private String classifytemplateattroid;
+
+	/**
+	 * 妯℃澘灞炴�ey
+	 */
+	private String classifyAttrId;
+
+	/**
+	 * 妯℃澘灞炴�у悕绉�
+	 */
+	private String classifyAttrName;
+
+	/**
+	* 鏄犲皠瑙勫垯涓婚敭
+	*/
+	private String classifytemplatemapoid;
+
+	/**
+	* 鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String classifytemplatemapoidName;
+
+	/**
+	* 闆嗗洟鐮佸睘鎬ey
+	*/
+	private String groupcodeattrid;
+
+
+	/**
+	* 闆嗗洟鐮佸睘鎬у悕绉�
+	*/
+	private String groupcodeattrname;
+
+
+	/**
+	* 杞崲鐨勮嚜瀹氫箟绫�
+	*/
+	private String switchclassname;
+
+
+	/**
+	* 杞崲鍏紡
+	*/
+	private String switcheval;
+
+
+	/**
+	* 鐩爣绔殑鏃堕棿鏍煎紡
+	*/
+	private String targetdateformat;
+
+
+
+	/**
+	 * 鑾峰彇 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	public String getClassifytemplateattroid (){
+		return classifytemplateattroid;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被妯℃澘灞炴�т富閿�
+	*/
+	public void setClassifytemplateattroid (String classifytemplateattroid){
+		this.classifytemplateattroid = classifytemplateattroid;
+	}
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯涓婚敭
+	 */
+	public String getClassifytemplatemapoid (){
+		return classifytemplatemapoid;
+	}
+
+	/**
+	* 璁剧疆 鏄犲皠瑙勫垯涓婚敭
+	*/
+	public void setClassifytemplatemapoid (String classifytemplatemapoid){
+		this.classifytemplatemapoid = classifytemplatemapoid;
+	}
+	/**
+	 * 鑾峰彇鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getClassifytemplatemapoidName (){
+		return classifytemplatemapoidName;
+	}
+
+	/**
+	* 璁剧疆鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	*/
+	public void setClassifytemplatemapoidName (String classifytemplatemapoidName){
+		this.classifytemplatemapoidName = classifytemplatemapoidName;
+	}
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬ey
+	 */
+	public String getGroupcodeattrid (){
+		return groupcodeattrid;
+	}
+
+	/**
+	* 璁剧疆 闆嗗洟鐮佸睘鎬ey
+	*/
+	public void setGroupcodeattrid (String groupcodeattrid){
+		this.groupcodeattrid = groupcodeattrid;
+	}
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	public String getGroupcodeattrname (){
+		return groupcodeattrname;
+	}
+
+	/**
+	* 璁剧疆 闆嗗洟鐮佸睘鎬у悕绉�
+	*/
+	public void setGroupcodeattrname (String groupcodeattrname){
+		this.groupcodeattrname = groupcodeattrname;
+	}
+	/**
+	 * 鑾峰彇 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	public String getSwitchclassname (){
+		return switchclassname;
+	}
+
+	/**
+	* 璁剧疆 杞崲鐨勮嚜瀹氫箟绫�
+	*/
+	public void setSwitchclassname (String switchclassname){
+		this.switchclassname = switchclassname;
+	}
+	/**
+	 * 鑾峰彇 杞崲鍏紡
+	 */
+	public String getSwitcheval (){
+		return switcheval;
+	}
+
+	/**
+	* 璁剧疆 杞崲鍏紡
+	*/
+	public void setSwitcheval (String switcheval){
+		this.switcheval = switcheval;
+	}
+	/**
+	 * 鑾峰彇 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	public String getTargetdateformat (){
+		return targetdateformat;
+	}
+
+	/**
+	* 璁剧疆 鐩爣绔殑鏃堕棿鏍煎紡
+	*/
+	public void setTargetdateformat (String targetdateformat){
+		this.targetdateformat = targetdateformat;
+	}
+
+	public String getClassifyAttrId() {
+		return classifyAttrId;
+	}
+
+	public void setClassifyAttrId(String classifyAttrId) {
+		this.classifyAttrId = classifyAttrId;
+	}
+
+	public String getClassifyAttrName() {
+		return classifyAttrName;
+	}
+
+	public void setClassifyAttrName(String classifyAttrName) {
+		this.classifyAttrName = classifyAttrName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTempMapItemVO{" +
+				"classifytemplateattroid='" + classifytemplateattroid + '\'' +
+				", classifyAttrId='" + classifyAttrId + '\'' +
+				", classifyAttrName='" + classifyAttrName + '\'' +
+				", classifytemplatemapoid='" + classifytemplatemapoid + '\'' +
+				", classifytemplatemapoidName='" + classifytemplatemapoidName + '\'' +
+				", groupcodeattrid='" + groupcodeattrid + '\'' +
+				", groupcodeattrname='" + groupcodeattrname + '\'' +
+				", switchclassname='" + switchclassname + '\'' +
+				", switcheval='" + switcheval + '\'' +
+				", targetdateformat='" + targetdateformat + '\'' +
+				'}' + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
new file mode 100644
index 0000000..bf9b047
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
@@ -0,0 +1,1071 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateAttrVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119806919617L;
+
+	/**
+	* 鎵�灞炴ā鏉�
+	*/
+	private String classifytemplateoid;
+
+	/**
+	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	private String classifytemplateoidName;
+
+	/**
+	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	*/
+	private String classifyattributeoid;
+
+	/**
+	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	*/
+	private String classifyattributeoidName;
+
+	/**
+	* 灞炴�х殑绫诲瀷
+	*/
+	private String attributedatatype;
+
+	/**
+	 * 灞炴�х被鍨嬫樉绀�
+	 */
+	private String attributeDataTypeText;
+
+
+	/**
+	* 鏄惁鍏抽敭灞炴��
+	*/
+	private String keyattrflag;
+
+
+	/**
+	* 鏄惁蹇�熸煡璇㈠睘鎬�
+	*/
+	private String queryattrflag;
+
+
+	/**
+	* 鏄惁楂樼骇鏌ヨ灞炴��
+	*/
+	private String seniorqueryattrflag;
+
+
+	/**
+	* 鐩镐技鏌ラ噸灞炴��
+	*/
+	private String samerepeatattrflag;
+
+
+	/**
+	* 鏄惁鎺掑簭
+	*/
+	private String sortattrflag;
+
+
+	/**
+	* 鏄惁鐢熸垚浜岀淮鐮�
+	*/
+	private String qrcodeflag;
+
+
+	/**
+	* 鏄惁鐢熸垚涓�缁寸爜
+	*/
+	private String barcodeflag;
+
+
+	/**
+	* 缁勫悎瑙勫垯
+	*/
+	private String componentrule;
+
+
+	/**
+	* 楠岃瘉瑙勫垯
+	*/
+	private String verifyrule;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆灞傜骇
+	*/
+	private String classifyinvokelevel;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	*/
+	private String classifyinvokeattr;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	*/
+	private String classifyinvokeattrname;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	*/
+	private String classifyinvokeeditflag;
+
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+
+	/**
+	* 琛ㄥ崟閲屾槸鍚︽樉绀�
+	*/
+	private String formdisplayflag;
+
+
+	/**
+	* 鍒楄〃閲屾槸鍚︽樉绀�
+	*/
+	private String tabledisplayflag;
+
+
+	/**
+	* 鎵�灞炲睘鎬у垎缁�
+	*/
+	private String attributegroup;
+
+
+	/**
+	* 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	*/
+	private String enumid;
+
+
+	/**
+	* 浣跨敤鏋氫妇涓枃鍚嶇О
+	*/
+	private String enumname;
+
+
+	/**
+	* 鏋氫妇鏄惁鍙互缂栬緫
+	*/
+	private String enumeditflag;
+
+
+	/**
+	* 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	*/
+	private String referbtmid;
+
+
+	/**
+	* 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	*/
+	private String referbtmname;
+
+
+	/**
+	* 鍙傜収绐楀彛閰嶇疆
+	*/
+	private String referConfig;
+
+
+	/**
+	* 鏄惁蹇呰緭
+	*/
+	private String requireflag;
+
+
+	/**
+	* 鏄惁鍙
+	*/
+	private String readonlyflag;
+
+
+	/**
+	* 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	*/
+	private Integer controllength;
+
+
+	/**
+	* 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	*/
+	private String formdisplaystyle;
+
+
+	/**
+	* 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	*/
+	private String tabledisplaystyle;
+
+
+	/**
+	* 琛ㄥ崟涓秴閾炬帴鍐呭
+	*/
+	private String formhref;
+
+
+	/**
+	* 琛ㄦ牸涓秴閾炬帴鍐呭
+	*/
+	private String tablehref;
+
+
+	/**
+	* 灏忔暟绮惧害
+	*/
+	private Integer precisionlength;
+
+
+	/**
+	* 灏忔暟鍒诲害
+	*/
+	private Integer scalelength;
+
+
+	/**
+	* 鍙栧�艰寖鍥�
+	*/
+	private String valuearea;
+
+
+	/**
+	* 鏃堕棿鏍煎紡
+	*/
+	private String codedateformat;
+
+
+	/**
+	* 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	*/
+	private String tabledisplayjs;
+
+
+	/**
+	* 鏄惁鏄剧ず澶氳鏂囨湰
+	*/
+	private String textareaflag;
+
+
+	/**
+	* 棰勮鍥�
+	*/
+	private String imageflag;
+
+
+	/**
+	* 榛樿鍊�
+	*/
+	private String defaultvalue;
+
+
+	/**
+	* 鍓嶇紑
+	*/
+	private String prefixvalue;
+
+
+	/**
+	* 鍚庣紑
+	*/
+	private String suffixvalue;
+
+
+	/**
+	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	*/
+	private String filtersourceattr;
+
+
+	/**
+	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	*/
+	private String filtersourceattrname;
+
+	/**
+	 * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
+	 */
+	private String enumString;
+
+	/**
+	 * 灞炴�у垪琛ㄤ腑鐨勫搴�
+	 */
+	private Integer attrTableWidth;
+
+	/**
+	 * 璇存槑
+	 */
+	@Column(columnDefinition = "璇存槑")
+	private String explain;
+
+	/**
+	 * 閫夋嫨搴撴爣璇�
+	 */
+	@Column(columnDefinition = "閫夋嫨搴撴爣璇�")
+	private String libraryIdentification;
+
+	/**
+	 * 绾ц仈灞炴�х紪鍙�
+	 */
+	@Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
+	private String parentCode;
+
+	/**
+	 * 绾ц仈灞炴�у悕绉�
+	 */
+	@Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
+	private String parentName;
+
+	/**
+	 * 绾ц仈鏌ヨ灞炴��
+	 */
+	@Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
+	private String parentQueryAttr;
+
+	public String getExplain() {
+		return explain;
+	}
+
+	public void setExplain(String explain) {
+		this.explain = explain;
+	}
+
+	public String getLibraryIdentification() {
+		return libraryIdentification;
+	}
+
+	public void setLibraryIdentification(String libraryIdentification) {
+		this.libraryIdentification = libraryIdentification;
+	}
+
+	public String getParentCode() {
+		return parentCode;
+	}
+
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+
+	public String getParentName() {
+		return parentName;
+	}
+
+	public void setParentName(String parentName) {
+		this.parentName = parentName;
+	}
+
+	public String getParentQueryAttr() {
+		return parentQueryAttr;
+	}
+
+	public void setParentQueryAttr(String parentQueryAttr) {
+		this.parentQueryAttr = parentQueryAttr;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉�
+	*/
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	public String getClassifyattributeoid (){
+		return classifyattributeoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	*/
+	public void setClassifyattributeoid (String classifyattributeoid){
+		this.classifyattributeoid = classifyattributeoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	public String getClassifyattributeoidName (){
+		return classifyattributeoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	*/
+	public void setClassifyattributeoidName (String classifyattributeoidName){
+		this.classifyattributeoidName = classifyattributeoidName;
+	}
+	/**
+	 * 鑾峰彇 灞炴�х殑绫诲瀷
+	 */
+	public String getAttributedatatype (){
+		return attributedatatype;
+	}
+
+	/**
+	* 璁剧疆 灞炴�х殑绫诲瀷
+	*/
+	public void setAttributedatatype (String attributedatatype){
+		this.attributedatatype = attributedatatype;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
+	 */
+	public String getKeyattrflag (){
+		return keyattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鍏抽敭灞炴��
+	*/
+	public void setKeyattrflag (String keyattrflag){
+		this.keyattrflag = keyattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	public String getQueryattrflag (){
+		return queryattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
+	*/
+	public void setQueryattrflag (String queryattrflag){
+		this.queryattrflag = queryattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	public String getSeniorqueryattrflag (){
+		return seniorqueryattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
+	*/
+	public void setSeniorqueryattrflag (String seniorqueryattrflag){
+		this.seniorqueryattrflag = seniorqueryattrflag;
+	}
+	/**
+	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
+	 */
+	public String getSamerepeatattrflag (){
+		return samerepeatattrflag;
+	}
+
+	/**
+	* 璁剧疆 鐩镐技鏌ラ噸灞炴��
+	*/
+	public void setSamerepeatattrflag (String samerepeatattrflag){
+		this.samerepeatattrflag = samerepeatattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鎺掑簭
+	 */
+	public String getSortattrflag (){
+		return sortattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鎺掑簭
+	*/
+	public void setSortattrflag (String sortattrflag){
+		this.sortattrflag = sortattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	public String getQrcodeflag (){
+		return qrcodeflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
+	*/
+	public void setQrcodeflag (String qrcodeflag){
+		this.qrcodeflag = qrcodeflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	public String getBarcodeflag (){
+		return barcodeflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
+	*/
+	public void setBarcodeflag (String barcodeflag){
+		this.barcodeflag = barcodeflag;
+	}
+	/**
+	 * 鑾峰彇 缁勫悎瑙勫垯
+	 */
+	public String getComponentrule (){
+		return componentrule;
+	}
+
+	/**
+	* 璁剧疆 缁勫悎瑙勫垯
+	*/
+	public void setComponentrule (String componentrule){
+		this.componentrule = componentrule;
+	}
+	/**
+	 * 鑾峰彇 楠岃瘉瑙勫垯
+	 */
+	public String getVerifyrule (){
+		return verifyrule;
+	}
+
+	/**
+	* 璁剧疆 楠岃瘉瑙勫垯
+	*/
+	public void setVerifyrule (String verifyrule){
+		this.verifyrule = verifyrule;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	public String getClassifyinvokelevel (){
+		return classifyinvokelevel;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
+	*/
+	public void setClassifyinvokelevel (String classifyinvokelevel){
+		this.classifyinvokelevel = classifyinvokelevel;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattr (){
+		return classifyinvokeattr;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	*/
+	public void setClassifyinvokeattr (String classifyinvokeattr){
+		this.classifyinvokeattr = classifyinvokeattr;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattrname (){
+		return classifyinvokeattrname;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	*/
+	public void setClassifyinvokeattrname (String classifyinvokeattrname){
+		this.classifyinvokeattrname = classifyinvokeattrname;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	public String getClassifyinvokeeditflag (){
+		return classifyinvokeeditflag;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	*/
+	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
+		this.classifyinvokeeditflag = classifyinvokeeditflag;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	public String getFormdisplayflag (){
+		return formdisplayflag;
+	}
+
+	/**
+	* 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
+	*/
+	public void setFormdisplayflag (String formdisplayflag){
+		this.formdisplayflag = formdisplayflag;
+	}
+	/**
+	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	public String getTabledisplayflag (){
+		return tabledisplayflag;
+	}
+
+	/**
+	* 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
+	*/
+	public void setTabledisplayflag (String tabledisplayflag){
+		this.tabledisplayflag = tabledisplayflag;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
+	 */
+	public String getAttributegroup (){
+		return attributegroup;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炲睘鎬у垎缁�
+	*/
+	public void setAttributegroup (String attributegroup){
+		this.attributegroup = attributegroup;
+	}
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	public String getEnumid (){
+		return enumid;
+	}
+
+	/**
+	* 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	*/
+	public void setEnumid (String enumid){
+		this.enumid = enumid;
+	}
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	public String getEnumname (){
+		return enumname;
+	}
+
+	/**
+	* 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
+	*/
+	public void setEnumname (String enumname){
+		this.enumname = enumname;
+	}
+	/**
+	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	public String getEnumeditflag (){
+		return enumeditflag;
+	}
+
+	/**
+	* 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
+	*/
+	public void setEnumeditflag (String enumeditflag){
+		this.enumeditflag = enumeditflag;
+	}
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	public String getReferbtmid (){
+		return referbtmid;
+	}
+
+	/**
+	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	*/
+	public void setReferbtmid (String referbtmid){
+		this.referbtmid = referbtmid;
+	}
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	public String getReferbtmname (){
+		return referbtmname;
+	}
+
+	/**
+	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	*/
+	public void setReferbtmname (String referbtmname){
+		this.referbtmname = referbtmname;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	/**
+
+	/**
+	 * 鑾峰彇 鏄惁蹇呰緭
+	 */
+	public String getRequireflag (){
+		return requireflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇呰緭
+	*/
+	public void setRequireflag (String requireflag){
+		this.requireflag = requireflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鍙
+	 */
+	public String getReadonlyflag (){
+		return readonlyflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鍙
+	*/
+	public void setReadonlyflag (String readonlyflag){
+		this.readonlyflag = readonlyflag;
+	}
+	/**
+	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	public Integer getControllength (){
+		return controllength;
+	}
+
+	/**
+	* 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	*/
+	public void setControllength (Integer controllength){
+		this.controllength = controllength;
+	}
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getFormdisplaystyle (){
+		return formdisplaystyle;
+	}
+
+	/**
+	* 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	*/
+	public void setFormdisplaystyle (String formdisplaystyle){
+		this.formdisplaystyle = formdisplaystyle;
+	}
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getTabledisplaystyle (){
+		return tabledisplaystyle;
+	}
+
+	/**
+	* 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	*/
+	public void setTabledisplaystyle (String tabledisplaystyle){
+		this.tabledisplaystyle = tabledisplaystyle;
+	}
+	/**
+	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	public String getFormhref (){
+		return formhref;
+	}
+
+	/**
+	* 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
+	*/
+	public void setFormhref (String formhref){
+		this.formhref = formhref;
+	}
+	/**
+	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	public String getTablehref (){
+		return tablehref;
+	}
+
+	/**
+	* 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
+	*/
+	public void setTablehref (String tablehref){
+		this.tablehref = tablehref;
+	}
+	/**
+	 * 鑾峰彇 灏忔暟绮惧害
+	 */
+	public Integer getPrecisionlength (){
+		return precisionlength;
+	}
+
+	/**
+	* 璁剧疆 灏忔暟绮惧害
+	*/
+	public void setPrecisionlength (Integer precisionlength){
+		this.precisionlength = precisionlength;
+	}
+	/**
+	 * 鑾峰彇 灏忔暟鍒诲害
+	 */
+	public Integer getScalelength (){
+		return scalelength;
+	}
+
+	/**
+	* 璁剧疆 灏忔暟鍒诲害
+	*/
+	public void setScalelength (Integer scalelength){
+		this.scalelength = scalelength;
+	}
+	/**
+	 * 鑾峰彇 鍙栧�艰寖鍥�
+	 */
+	public String getValuearea (){
+		return valuearea;
+	}
+
+	/**
+	* 璁剧疆 鍙栧�艰寖鍥�
+	*/
+	public void setValuearea (String valuearea){
+		this.valuearea = valuearea;
+	}
+	/**
+	 * 鑾峰彇 鏃堕棿鏍煎紡
+	 */
+	public String getCodedateformat (){
+		return codedateformat;
+	}
+
+	/**
+	* 璁剧疆 鏃堕棿鏍煎紡
+	*/
+	public void setCodedateformat (String codedateformat){
+		this.codedateformat = codedateformat;
+	}
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	public String getTabledisplayjs (){
+		return tabledisplayjs;
+	}
+
+	/**
+	* 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	*/
+	public void setTabledisplayjs (String tabledisplayjs){
+		this.tabledisplayjs = tabledisplayjs;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	public String getTextareaflag (){
+		return textareaflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
+	*/
+	public void setTextareaflag (String textareaflag){
+		this.textareaflag = textareaflag;
+	}
+	/**
+	 * 鑾峰彇 棰勮鍥�
+	 */
+	public String getImageflag (){
+		return imageflag;
+	}
+
+	/**
+	* 璁剧疆 棰勮鍥�
+	*/
+	public void setImageflag (String imageflag){
+		this.imageflag = imageflag;
+	}
+	/**
+	 * 鑾峰彇 榛樿鍊�
+	 */
+	public String getDefaultvalue (){
+		return defaultvalue;
+	}
+
+	/**
+	* 璁剧疆 榛樿鍊�
+	*/
+	public void setDefaultvalue (String defaultvalue){
+		this.defaultvalue = defaultvalue;
+	}
+	/**
+	 * 鑾峰彇 鍓嶇紑
+	 */
+	public String getPrefixvalue (){
+		return prefixvalue;
+	}
+
+	/**
+	* 璁剧疆 鍓嶇紑
+	*/
+	public void setPrefixvalue (String prefixvalue){
+		this.prefixvalue = prefixvalue;
+	}
+	/**
+	 * 鑾峰彇 鍚庣紑
+	 */
+	public String getSuffixvalue (){
+		return suffixvalue;
+	}
+
+	/**
+	* 璁剧疆 鍚庣紑
+	*/
+	public void setSuffixvalue (String suffixvalue){
+		this.suffixvalue = suffixvalue;
+	}
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	public String getFiltersourceattr (){
+		return filtersourceattr;
+	}
+
+	public String getAttributeDataTypeText() {
+		return attributeDataTypeText;
+	}
+
+	public void setAttributeDataTypeText(String attributeDataTypeText) {
+		this.attributeDataTypeText = attributeDataTypeText;
+	}
+
+	/**
+	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	*/
+	public void setFiltersourceattr (String filtersourceattr){
+		this.filtersourceattr = filtersourceattr;
+	}
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	public String getFiltersourceattrname (){
+		return filtersourceattrname;
+	}
+
+	/**
+	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	*/
+	public void setFiltersourceattrname (String filtersourceattrname){
+		this.filtersourceattrname = filtersourceattrname;
+	}
+
+	public String getEnumString() {
+		return enumString;
+	}
+
+	public void setEnumString(String enumString) {
+		this.enumString = enumString;
+	}
+
+
+	public Integer getAttrTableWidth() {
+		return attrTableWidth;
+	}
+
+	public void setAttrTableWidth(Integer attrTableWidth) {
+		this.attrTableWidth = attrTableWidth;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateAttrVO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifyattributeoid='" + classifyattributeoid + '\'' +
+				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
+				", attributedatatype='" + attributedatatype + '\'' +
+				", attributeDataTypeText='" + attributeDataTypeText + '\'' +
+				", keyattrflag='" + keyattrflag + '\'' +
+				", queryattrflag='" + queryattrflag + '\'' +
+				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
+				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
+				", sortattrflag='" + sortattrflag + '\'' +
+				", qrcodeflag='" + qrcodeflag + '\'' +
+				", barcodeflag='" + barcodeflag + '\'' +
+				", componentrule='" + componentrule + '\'' +
+				", verifyrule='" + verifyrule + '\'' +
+				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
+				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
+				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
+				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
+				", ordernum=" + ordernum +
+				", formdisplayflag='" + formdisplayflag + '\'' +
+				", tabledisplayflag='" + tabledisplayflag + '\'' +
+				", attributegroup='" + attributegroup + '\'' +
+				", enumid='" + enumid + '\'' +
+				", enumname='" + enumname + '\'' +
+				", enumeditflag='" + enumeditflag + '\'' +
+				", referbtmid='" + referbtmid + '\'' +
+				", referbtmname='" + referbtmname + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", requireflag='" + requireflag + '\'' +
+				", readonlyflag='" + readonlyflag + '\'' +
+				", controllength=" + controllength +
+				", formdisplaystyle='" + formdisplaystyle + '\'' +
+				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
+				", formhref='" + formhref + '\'' +
+				", tablehref='" + tablehref + '\'' +
+				", precisionlength=" + precisionlength +
+				", scalelength=" + scalelength +
+				", valuearea='" + valuearea + '\'' +
+				", codedateformat='" + codedateformat + '\'' +
+				", tabledisplayjs='" + tabledisplayjs + '\'' +
+				", textareaflag='" + textareaflag + '\'' +
+				", imageflag='" + imageflag + '\'' +
+				", defaultvalue='" + defaultvalue + '\'' +
+				", prefixvalue='" + prefixvalue + '\'' +
+				", suffixvalue='" + suffixvalue + '\'' +
+				", filtersourceattr='" + filtersourceattr + '\'' +
+				", filtersourceattrname='" + filtersourceattrname + '\'' +
+				", enumString='" + enumString + '\'' +
+				", attrTableWidth=" + attrTableWidth +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
new file mode 100644
index 0000000..a4a0926
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
@@ -0,0 +1,170 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateButtonVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118535405378L;
+
+	/**
+	* 鎵�灞炴ā鏉�
+	*/
+	private String classifytemplateoid;
+
+	/**
+	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	private String classifytemplateoidName;
+
+	/**
+	* 鎸夐挳鐨勪富閿�
+	*/
+	private String classifybuttonoid;
+
+	/**
+	* 鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	*/
+	private String classifybuttonoidName;
+
+	/**
+	* 鎸夐挳鐢ㄩ��
+	*/
+	private String buttonuse;
+
+	/**
+	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
+	 */
+	private String buttonUseText;
+
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+	/**
+	 * 鎸夐挳鐨勭浉鍏冲唴瀹�
+	 */
+	private CodeButtonVO buttonVO;
+
+
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉�
+	*/
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪富閿�
+	 */
+	public String getClassifybuttonoid (){
+		return classifybuttonoid;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐨勪富閿�
+	*/
+	public void setClassifybuttonoid (String classifybuttonoid){
+		this.classifybuttonoid = classifybuttonoid;
+	}
+	/**
+	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getClassifybuttonoidName (){
+		return classifybuttonoidName;
+	}
+
+	/**
+	* 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	*/
+	public void setClassifybuttonoidName (String classifybuttonoidName){
+		this.classifybuttonoidName = classifybuttonoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐢ㄩ��
+	 */
+	public String getButtonuse (){
+		return buttonuse;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐢ㄩ��
+	*/
+	public void setButtonuse (String buttonuse){
+		this.buttonuse = buttonuse;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	public String getButtonUseText() {
+		return buttonUseText;
+	}
+
+	public void setButtonUseText(String buttonUseText) {
+		this.buttonUseText = buttonUseText;
+	}
+
+	public CodeButtonVO getButtonVO() {
+		return buttonVO;
+	}
+
+	public void setButtonVO(CodeButtonVO buttonVO) {
+		this.buttonVO = buttonVO;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateButtonVO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifybuttonoid='" + classifybuttonoid + '\'' +
+				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
+				", buttonuse='" + buttonuse + '\'' +
+				", buttonUseText='" + buttonUseText + '\'' +
+				", ordernum=" + ordernum +
+				", buttonVO=" + buttonVO +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateMapVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateMapVO.java
new file mode 100644
index 0000000..87c4828
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateMapVO.java
@@ -0,0 +1,96 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateMapVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120808516800L;
+
+	/**
+	* 鎵�灞炴ā鏉�
+	*/
+	private String classifyTemplateOid;
+
+	/**
+	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	private String classifyTemplateName;
+
+	/**
+	* 鏄犲皠瑙勫垯绫诲瀷
+	*/
+	private String codemapruletype;
+
+
+	/**
+	* 鏄犲皠瑙勫垯绫诲瀷鏄剧ず鏂囨湰
+	*/
+	private String codemapruletypeText;
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifyTemplateOid (){
+		return classifyTemplateOid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉�
+	*/
+	public void setClassifyTemplateOid (String classifyTemplateOid){
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifyTemplateName (){
+		return classifyTemplateName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	public void setClassifyTemplateName (String classifyTemplateName){
+		this.classifyTemplateName = classifyTemplateName;
+	}
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	public String getCodemapruletype (){
+		return codemapruletype;
+	}
+
+	/**
+	* 璁剧疆 鏄犲皠瑙勫垯绫诲瀷
+	*/
+	public void setCodemapruletype (String codemapruletype){
+		this.codemapruletype = codemapruletype;
+	}
+
+	public String getCodemapruletypeText() {
+		return codemapruletypeText;
+	}
+
+	public void setCodemapruletypeText(String codemapruletypeText) {
+		this.codemapruletypeText = codemapruletypeText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateMapVO{" +
+				"classifytemplateoid='" + classifyTemplateOid + '\'' +
+				", classifytemplateoidName='" + classifyTemplateName + '\'' +
+				", codemapruletype='" + codemapruletype + '\'' +
+				", codemapruletypeText='" + codemapruletypeText + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateVO.java
new file mode 100644
index 0000000..2a22128
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateVO.java
@@ -0,0 +1,105 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118684061936L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	private String codeclassifyoid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	private String codeclassifyoidName;
+
+	/**
+	 * 鍖呭惈鐨勫睘鎬у唴瀹�
+	 */
+	private List<CodeClassifyTemplateAttrVO> attributes;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨�
+	 */
+	private String btmTypeId;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	private String btmTypeName;
+
+	public String getBtmTypeId() {
+		return btmTypeId;
+	}
+
+	public void setBtmTypeId(String btmTypeId) {
+		this.btmTypeId = btmTypeId;
+	}
+
+	public String getBtmTypeName() {
+		return btmTypeName;
+	}
+
+	public void setBtmTypeName(String btmTypeName) {
+		this.btmTypeName = btmTypeName;
+	}
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婚搴撳垎绫讳富閿�
+	*/
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+
+	public List<CodeClassifyTemplateAttrVO> getAttributes() {
+		return attributes;
+	}
+
+	public void setAttributes(List<CodeClassifyTemplateAttrVO> attributes) {
+		this.attributes = attributes;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateVO{" +
+				"codeclassifyoid='" + codeclassifyoid + '\'' +
+				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
+				", attributes=" + attributes +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java
new file mode 100644
index 0000000..c143673
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java
@@ -0,0 +1,263 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫绘樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public class CodeClassifyVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119254063830L;
+
+	/**
+	* 灞炴�ф帓搴忓彿
+	*/
+	private Integer ordernum;
+
+
+	/**
+	* 鎵�灞炰笟鍔$被鍨�
+	*/
+	private String btmtypeid;
+
+
+	/**
+	* 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	*/
+	private String btmtypename;
+
+
+	/**
+	* 缂栫爜瑙勫垯鐨勪富閿�
+	*/
+	private String coderuleoid;
+
+	/**
+	* 缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	*/
+	private String coderuleoidName;
+
+	/**
+	* 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	*/
+	private String codekeyattrrepeatoid;
+
+	/**
+	* 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	*/
+	private String codekeyattrrepeatoidName;
+
+	/**
+	* 涓婄骇鏁版嵁鐨勪富閿�
+	*/
+	private String parentcodeclassifyoid;
+
+	/**
+	 * 鏁版嵁鎵�鍦ㄧ殑灞傜骇
+	 */
+	private Integer dataLevel;
+
+	/**
+	 * 灞傜骇鐨勮矾寰�
+	 */
+	private String path;
+
+	/***
+	 * 鍚嶇О璺緞
+	 */
+	private String namePath;
+	/***
+	 * 浠g爜璺緞
+	 */
+	private String idPath;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯涓婚敭
+	 */
+	private String codeResembleRuleOid;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯鍚嶇О
+	 */
+	private String codeResembleRuleOidName;
+
+	public String getCodeResembleRuleOid() {
+		return codeResembleRuleOid;
+	}
+
+	public void setCodeResembleRuleOid(String codeResembleRuleOid) {
+		this.codeResembleRuleOid = codeResembleRuleOid;
+	}
+
+	public String getCodeResembleRuleOidName() {
+		return codeResembleRuleOidName;
+	}
+
+	public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
+		this.codeResembleRuleOidName = codeResembleRuleOidName;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ф帓搴忓彿
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 灞炴�ф帓搴忓彿
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
+	 */
+	public String getBtmtypeid (){
+		return btmtypeid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炰笟鍔$被鍨�
+	*/
+	public void setBtmtypeid (String btmtypeid){
+		this.btmtypeid = btmtypeid;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	public String getBtmtypename (){
+		return btmtypename;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	*/
+	public void setBtmtypename (String btmtypename){
+		this.btmtypename = btmtypename;
+	}
+	/**
+	 * 鑾峰彇 缂栫爜瑙勫垯鐨勪富閿�
+	 */
+	public String getCoderuleoid (){
+		return coderuleoid;
+	}
+
+	/**
+	* 璁剧疆 缂栫爜瑙勫垯鐨勪富閿�
+	*/
+	public void setCoderuleoid (String coderuleoid){
+		this.coderuleoid = coderuleoid;
+	}
+	/**
+	 * 鑾峰彇缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getCoderuleoidName (){
+		return coderuleoidName;
+	}
+
+	/**
+	* 璁剧疆缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	*/
+	public void setCoderuleoidName (String coderuleoidName){
+		this.coderuleoidName = coderuleoidName;
+	}
+	/**
+	 * 鑾峰彇 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	public String getCodekeyattrrepeatoid (){
+		return codekeyattrrepeatoid;
+	}
+
+	/**
+	* 璁剧疆 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	*/
+	public void setCodekeyattrrepeatoid (String codekeyattrrepeatoid){
+		this.codekeyattrrepeatoid = codekeyattrrepeatoid;
+	}
+	/**
+	 * 鑾峰彇鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	public String getCodekeyattrrepeatoidName (){
+		return codekeyattrrepeatoidName;
+	}
+
+	/**
+	* 璁剧疆鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	*/
+	public void setCodekeyattrrepeatoidName (String codekeyattrrepeatoidName){
+		this.codekeyattrrepeatoidName = codekeyattrrepeatoidName;
+	}
+	/**
+	 * 鑾峰彇 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	public String getParentcodeclassifyoid (){
+		return parentcodeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婄骇鏁版嵁鐨勪富閿�
+	*/
+	public void setParentcodeclassifyoid (String parentcodeclassifyoid){
+		this.parentcodeclassifyoid = parentcodeclassifyoid;
+	}
+
+	public Integer getDataLevel() {
+		return dataLevel;
+	}
+
+	public void setDataLevel(Integer dataLevel) {
+		this.dataLevel = dataLevel;
+	}
+
+	public String getPath() {
+		return path;
+	}
+
+	public void setPath(String path) {
+		this.path = path;
+	}
+
+	public String getNamePath() {
+		return namePath;
+	}
+
+	public void setNamePath(String namePath) {
+		this.namePath = namePath;
+	}
+
+	public String getIdPath() {
+		return idPath;
+	}
+
+	public void setIdPath(String idPath) {
+		this.idPath = idPath;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyVO{" +
+				"ordernum=" + ordernum +
+				", btmtypeid='" + btmtypeid + '\'' +
+				", btmtypename='" + btmtypename + '\'' +
+				", coderuleoid='" + coderuleoid + '\'' +
+				", coderuleoidName='" + coderuleoidName + '\'' +
+				", codekeyattrrepeatoid='" + codekeyattrrepeatoid + '\'' +
+				", codekeyattrrepeatoidName='" + codekeyattrrepeatoidName + '\'' +
+				", parentcodeclassifyoid='" + parentcodeclassifyoid + '\'' +
+				", dataLevel=" + dataLevel +
+				", path='" + path + '\'' +
+				", namePath='" + namePath + '\'' +
+				", idPath='" + idPath + '\'' +
+				", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
+				", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
+				'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java
new file mode 100644
index 0000000..65ffcfc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyValueVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117941539567L;
+
+	/**
+	* 鍒嗙被鐮佹涓婚敭
+	*/
+	private String codeclassifysecoid;
+
+	/**
+	* 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String codeclassifysecoidName;
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+	/**
+	* 涓婄骇鍒嗙被鐮佸�间富閿�
+	*/
+	private String parentclassifyvalueoid;
+
+	/**
+	 * 鍒嗙被鐮佸�间腑鐨勭紪鍙�
+	 */
+	private String id;
+
+	/**
+	 * 鍒嗙被鐮佸�间腑鐨勫悕绉�
+	 */
+	private String name;
+
+	/**
+	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
+	 */
+	public String getCodeclassifysecoid (){
+		return codeclassifysecoid;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被鐮佹涓婚敭
+	*/
+	public void setCodeclassifysecoid (String codeclassifysecoid){
+		this.codeclassifysecoid = codeclassifysecoid;
+	}
+	/**
+	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodeclassifysecoidName (){
+		return codeclassifysecoidName;
+	}
+
+	/**
+	* 璁剧疆鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	public void setCodeclassifysecoidName (String codeclassifysecoidName){
+		this.codeclassifysecoidName = codeclassifysecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+	/**
+	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	public String getParentclassifyvalueoid (){
+		return parentclassifyvalueoid;
+	}
+
+	/**
+	* 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
+	*/
+	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
+		this.parentclassifyvalueoid = parentclassifyvalueoid;
+	}
+
+	@Override
+	public String getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyValueVO{" +
+				"codeclassifysecoid='" + codeclassifysecoid + '\'' +
+				", codeclassifysecoidName='" + codeclassifysecoidName + '\'' +
+				", ordernum=" + ordernum +
+				", parentclassifyvalueoid='" + parentclassifyvalueoid + '\'' +
+				", id='" + id + '\'' +
+				", name='" + name + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
new file mode 100644
index 0000000..623b01c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
@@ -0,0 +1,83 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeFixedValueVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117767594607L;
+
+	/**
+	* 鍥哄畾鐮佹涓婚敭
+	*/
+	private String codefixedsecoid;
+
+	/**
+	* 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String codefixedsecoidName;
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+
+
+	/**
+	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
+	 */
+	public String getCodefixedsecoid (){
+		return codefixedsecoid;
+	}
+
+	/**
+	* 璁剧疆 鍥哄畾鐮佹涓婚敭
+	*/
+	public void setCodefixedsecoid (String codefixedsecoid){
+		this.codefixedsecoid = codefixedsecoid;
+	}
+	/**
+	 * 鑾峰彇鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodefixedsecoidName (){
+		return codefixedsecoidName;
+	}
+
+	/**
+	* 璁剧疆鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	public void setCodefixedsecoidName (String codefixedsecoidName){
+		this.codefixedsecoidName = codefixedsecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeFixedValueVO{" +
+		"codefixedsecoid='" + codefixedsecoid +"'," +
+		"codefixedsecoidName='" + codefixedsecoidName +"'," +
+		"ordernum='" + ordernum +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImProtRusultVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImProtRusultVO.java
new file mode 100644
index 0000000..17ac3fd
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImProtRusultVO.java
@@ -0,0 +1,41 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+public class CodeImProtRusultVO {
+
+    private String redisUuid;
+    private String fileOid="";
+    private String filePath;
+
+    public String getRedisUuid() {
+        return redisUuid;
+    }
+
+    public void setRedisUuid(String redisUuid) {
+        this.redisUuid = redisUuid;
+    }
+
+    public String getFileOid() {
+        return fileOid;
+    }
+
+    public void setFileOid(String fileOid) {
+        this.fileOid = fileOid;
+    }
+
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImProtRusultVO{" +
+                "redisUuid='" + redisUuid + '\'' +
+                ", fileOid='" + fileOid + '\'' +
+                ", filePath='" + filePath + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java
new file mode 100644
index 0000000..74c749f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java
@@ -0,0 +1,123 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+
+/**
+ * 瀵煎叆缂栫爜淇℃伅鐨勬墽琛岀粨鏋�
+ * @author weidy
+ * @date 2022-3-6
+ */
+public class CodeImportResultVO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6938911732592877094L;
+
+    /**
+     * 鏄惁鎴愬姛鐨�
+     */
+    private boolean success ;
+    /**
+     * 鍏抽敭灞炴�ф牎楠岃鍒欑殑淇℃伅
+     */
+    private String keyAttrRuleInfo;
+
+    /**
+     * 鍏抽敭灞炴�ф牎楠屽悗锛岄噸澶嶇殑琛屽彿
+     */
+    private Set<String> keyAttrRepeatRowIndexList  = new HashSet<>();
+
+    /***
+     * 鏍规嵁鍏抽敭鐔熸倝鏌ヨ鐨勯噸澶嶇殑鏁版嵁瀵硅薄
+     */
+    private Map<String,  List<ClientBusinessObject>> indexTODataMap=new HashMap<>();
+
+    /**
+     * excel鑷韩閲嶅鐨勮鍙�
+     */
+    private Set<String> selfRepeatRowIndexList = new HashSet<>();
+
+    /**
+     * 鏁版嵁鐨勫唴瀹规湁绌虹殑琛屽彿
+     */
+    private Set<String> nullRowIndexList = new HashSet<>();
+
+    /**
+     * 娌℃湁閫氳繃楠岃瘉鐨勮鍙�
+     */
+    private Set<String> unPassVerifyRowIndexSet = new HashSet<>();
+
+    public Set<String> getUnPassVerifyRowIndexSet() {
+        return unPassVerifyRowIndexSet;
+    }
+
+    public void setUnPassVerifyRowIndexSet(Set<String> unPassVerifyRowIndexSet) {
+        this.unPassVerifyRowIndexSet = unPassVerifyRowIndexSet;
+    }
+
+    public Set<String> getNullRowIndexList() {
+        return nullRowIndexList;
+    }
+
+    public void setNullRowIndexList(Set<String> nullRowIndexList) {
+        this.nullRowIndexList = nullRowIndexList;
+    }
+
+    public String getKeyAttrRuleInfo() {
+        return keyAttrRuleInfo;
+    }
+
+    public void setKeyAttrRuleInfo(String keyAttrRuleInfo) {
+        this.keyAttrRuleInfo = keyAttrRuleInfo;
+    }
+
+    public Set<String> getKeyAttrRepeatRowIndexList() {
+        return keyAttrRepeatRowIndexList;
+    }
+
+    public void setKeyAttrRepeatRowIndexList(Set<String> keyAttrRepeatRowIndexList) {
+        this.keyAttrRepeatRowIndexList = keyAttrRepeatRowIndexList;
+    }
+
+    public Set<String> getSelfRepeatRowIndexList() {
+        return selfRepeatRowIndexList;
+    }
+
+    public void setSelfRepeatRowIndexList(Set<String> selfRepeatRowIndexList) {
+        this.selfRepeatRowIndexList = selfRepeatRowIndexList;
+    }
+
+    public Map<String,List<ClientBusinessObject>> getIndexTODataMap() {
+        return indexTODataMap;
+    }
+
+    public void setIndexTODataMap(Map<String, List<ClientBusinessObject>> indexTODataMap) {
+        this.indexTODataMap = indexTODataMap;
+    }
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImportResultVO{" +
+                "success=" + success +
+                ", keyAttrRuleInfo='" + keyAttrRuleInfo + '\'' +
+                ", keyAttrRepeatRowIndexList=" + keyAttrRepeatRowIndexList +
+                ", indexTODataMap=" + indexTODataMap +
+                ", selfRepeatRowIndexList=" + selfRepeatRowIndexList +
+                ", nullRowIndexList=" + nullRowIndexList +
+                ", unPassVerifyRowIndexSet=" + unPassVerifyRowIndexSet +
+                '}';
+    }
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java
new file mode 100644
index 0000000..a0f186f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CodeImportTemplateVO {
+    private List<ColumnVO> cloNamesList=new ArrayList<>();
+    private CodeClassifyTemplateVO codeClassifyTemplateVO;
+    private CodeClassifyVO codeClassifyVO;
+    public List<ColumnVO> getCloNamesList() {
+        return cloNamesList;
+    }
+
+    public void setCloNamesList(List<ColumnVO> cloNamesList) {
+        this.cloNamesList = cloNamesList;
+    }
+
+    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
+        return codeClassifyTemplateVO;
+    }
+
+    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
+        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
+    }
+
+    public CodeClassifyVO getCodeClassifyVO() {
+        return codeClassifyVO;
+    }
+
+    public void setCodeClassifyVO(CodeClassifyVO codeClassifyVO) {
+        this.codeClassifyVO = codeClassifyVO;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImportTemplateVO{" +
+                "cloNamesList=" + cloNamesList +
+                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
+                ", codeClassifyVO=" + codeClassifyVO +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java
new file mode 100644
index 0000000..d6bbb76
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java
@@ -0,0 +1,132 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/***
+ *
+ */
+public class CodeImprotDataVO implements Serializable {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713247L;
+    /***
+     * 鏁版嵁鍦╡xecl涓殑浣嶇疆
+     */
+    private  String rowIndex;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String templateOid;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    private String codeRuleOid;
+
+    /***
+     * 鍐呴儴瀛楁
+     */
+
+    private List<String> fields = new ArrayList();
+
+    /**
+     * 鍒楀悕
+     */
+    private List<String> colNames = new ArrayList();
+    /**
+     * 鏁版嵁
+     */
+    private List<Map<String,String>> datas = new ArrayList<>();
+    private CodeClassifyTemplateVO codeClassifyTemplateVO;
+    private CodeClassifyVO codeClassifyVO;
+
+    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
+        return codeClassifyTemplateVO;
+    }
+
+    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
+        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
+    }
+
+    public CodeClassifyVO getCodeClassifyVO() {
+        return codeClassifyVO;
+    }
+
+    public void setCodeClassifyVO(CodeClassifyVO codeClassifyVO) {
+        this.codeClassifyVO = codeClassifyVO;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+    public String getTemplateOid() {
+        return templateOid;
+    }
+    public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+    public List<Map<String, String>> getDatas() {
+        return datas;
+    }
+
+    public void setDatas(List<Map<String, String>> datas) {
+        this.datas = datas;
+    }
+
+    public List<String> getColNames() {
+        return colNames;
+    }
+
+    public void setColNames(List<String> colNames) {
+        this.colNames = colNames;
+    }
+
+    public String getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(String rowIndex) {
+        this.rowIndex = rowIndex;
+    }
+
+    public List<String> getFields() {
+        return fields;
+    }
+
+    public void setFields(List<String> fields) {
+        this.fields = fields;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImprotDataVO{" +
+                "rowIndex='" + rowIndex + '\'' +
+                ", codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", fields=" + fields +
+                ", colNames=" + colNames +
+                ", datas=" + datas +
+                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
+                ", codeClassifyVO=" + codeClassifyVO +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotParmaDatVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotParmaDatVO.java
new file mode 100644
index 0000000..ac03baf
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotParmaDatVO.java
@@ -0,0 +1,41 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import java.util.List;
+
+public class CodeImprotParmaDatVO {
+    private List<CodeImprotSaveDatVO> codeImprotSaveDatVOList;
+    private String classifyAttr;
+    private Boolean isImprot;
+
+    public List<CodeImprotSaveDatVO> getCodeImprotSaveDatVOList() {
+        return codeImprotSaveDatVOList;
+    }
+
+    public void setCodeImprotSaveDatVOList(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList) {
+        this.codeImprotSaveDatVOList = codeImprotSaveDatVOList;
+    }
+
+    public String getClassifyAttr() {
+        return classifyAttr;
+    }
+
+    public void setClassifyAttr(String classifyAttr) {
+        this.classifyAttr = classifyAttr;
+    }
+
+    public Boolean getImprot() {
+        return isImprot;
+    }
+
+    public void setImprot(Boolean improt) {
+        isImprot = improt;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImprotParmaDatVO{" +
+                "codeImprotSaveDatVOList=" + codeImprotSaveDatVOList +
+                ", isImprot=" + isImprot +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotResembleVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotResembleVO.java
new file mode 100644
index 0000000..e75d645
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotResembleVO.java
@@ -0,0 +1,66 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CodeImprotResembleVO {
+    private String path;
+    private List<String> fields=new ArrayList<>();
+    private Map<String, String> conditionMap = new HashMap<>();
+    private List<String> rownIndex=new ArrayList<>();
+    private List<Map<String,String>>dataList=new ArrayList<>();
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public Map<String, String> getConditionMap() {
+        return conditionMap;
+    }
+
+    public void setConditionMap(Map<String, String> conditionMap) {
+        this.conditionMap = conditionMap;
+    }
+
+    public List<String> getRownIndex() {
+        return rownIndex;
+    }
+
+    public void setRownIndex(List<String> rownIndex) {
+        this.rownIndex = rownIndex;
+    }
+
+    public List<String> getFields() {
+        return fields;
+    }
+
+    public void setFields(List<String> fields) {
+        this.fields = fields;
+    }
+
+    public List<Map<String, String>> getDataList() {
+        return dataList;
+    }
+
+    public void setDataList(List<Map<String, String>> dataList) {
+        this.dataList = dataList;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeImprotResembleVO{" +
+                "path='" + path + '\'' +
+                ", fields=" + fields +
+                ", conditionMap=" + conditionMap +
+                ", rownIndex=" + rownIndex +
+                ", dataList=" + dataList +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotSaveDatVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotSaveDatVO.java
new file mode 100644
index 0000000..696e3d1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotSaveDatVO.java
@@ -0,0 +1,55 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class CodeImprotSaveDatVO {
+    /**
+     * 缂栫爜鐢宠瀵硅薄
+     */
+    private CodeOrderDTO orderDTO;
+    /**
+     * 鍒楀悕锛堟眽瀛楋級
+     */
+    private List<String> Clos=new ArrayList<>();
+    /***
+     * 鍒楄〃鏁版嵁
+     */
+    private List<Map<String,String>> dataList=new ArrayList<>();
+
+    public CodeOrderDTO getOrderDTO() {
+        return orderDTO;
+    }
+
+    public void setOrderDTO(CodeOrderDTO orderDTO) {
+        this.orderDTO = orderDTO;
+    }
+
+    public List<String> getClos() {
+        return Clos;
+    }
+
+    public void setClos(List<String> clos) {
+        Clos = clos;
+    }
+
+    public List<Map<String, String>> getDataList() {
+        return dataList;
+    }
+
+    public void setDataList(List<Map<String, String>> dataList) {
+        this.dataList = dataList;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImprotSaveDatVO{" +
+                "orderDTO=" + orderDTO +
+                ", Clos=" + Clos +
+                ", dataList=" + dataList +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java
new file mode 100644
index 0000000..56f6e33
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java
@@ -0,0 +1,98 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeKeyAttrRepeatRuleVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118009866089L;
+
+	/**
+	* 鏄惁蹇界暐澶у皬鍐�
+	*/
+	private String ignorecaseflag;
+
+
+	/**
+	* 鏄惁蹇界暐绌烘牸
+	*/
+	private String ignorespaceflag;
+
+
+	/**
+	* 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	private String ignoreallspaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	private String ignorewidthflag;
+
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	*/
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐绌烘牸
+	*/
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+
+	public String getIgnorewidthflag() {
+		return ignorewidthflag;
+	}
+
+	public void setIgnorewidthflag(String ignorewidthflag) {
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeKeyAttrRepeatRuleVO{" +
+				"ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodePhaseAttrVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodePhaseAttrVO.java
new file mode 100644
index 0000000..065e5d9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodePhaseAttrVO.java
@@ -0,0 +1,77 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 闃舵鐨勫睘鎬ф樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodePhaseAttrVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117417389038L;
+
+	/**
+	* 鎵�灞炴ā鏉块樁娈�
+	*/
+	private String codephaseoid;
+
+	/**
+	* 鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	*/
+	private String codephaseoidName;
+
+	/**
+	 * 灞炴�х殑鍒嗙粍鍚嶇О
+	 */
+	private String attrGroupName;
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉块樁娈�
+	 */
+	public String getCodephaseoid (){
+		return codephaseoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉块樁娈�
+	*/
+	public void setCodephaseoid (String codephaseoid){
+		this.codephaseoid = codephaseoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	public String getCodephaseoidName (){
+		return codephaseoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	*/
+	public void setCodephaseoidName (String codephaseoidName){
+		this.codephaseoidName = codephaseoidName;
+	}
+
+	public String getAttrGroupName() {
+		return attrGroupName;
+	}
+
+	public void setAttrGroupName(String attrGroupName) {
+		this.attrGroupName = attrGroupName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodePhaseAttrVO{" +
+				"codephaseoid='" + codephaseoid + '\'' +
+				", codephaseoidName='" + codephaseoidName + '\'' +
+				", attrGroupName='" + attrGroupName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeResembleRuleVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeResembleRuleVO.java
new file mode 100644
index 0000000..78aa958
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeResembleRuleVO.java
@@ -0,0 +1,119 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public class CodeResembleRuleVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119066298945L;
+
+	/**
+	* 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	private String ignoreallspaceflag;
+
+
+	/**
+	* 鏄惁蹇界暐澶у皬鍐�
+	*/
+	private String ignorecaseflag;
+
+
+	/**
+	* 鏄惁蹇界暐绌烘牸
+	*/
+	private String ignorespaceflag;
+
+
+	/**
+	* 鏄惁蹇界暐鍏ㄥ崐瑙�
+	*/
+	private String ignorewidthflag;
+
+	/**
+	 * 杩炴帴瀛楃
+	 */
+	private String linkCharacter;
+
+
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	*/
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐绌烘牸
+	*/
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	public String getIgnorewidthflag (){
+		return ignorewidthflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐鍏ㄥ崐瑙�
+	*/
+	public void setIgnorewidthflag (String ignorewidthflag){
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+	public String getLinkCharacter() {
+		return linkCharacter;
+	}
+
+	public void setLinkCharacter(String linkCharacter) {
+		this.linkCharacter = linkCharacter;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeResembleRuleVO{" +
+				"ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				", linkCharacter='" + linkCharacter + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleVO.java
new file mode 100644
index 0000000..57bceaf
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleVO.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeRuleVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117684483406L;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勭紪鍙�
+	 */
+	private String id;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勫悕绉�
+	 */
+	private String name;
+
+	/**
+	 * 缂栫爜鐨勭爜娈典俊鎭�
+	 */
+	private List<CodeBasicSecVO> secVOList;
+
+
+	@Override
+	public String getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public List<CodeBasicSecVO> getSecVOList() {
+		return secVOList;
+	}
+
+	public void setSecVOList(List<CodeBasicSecVO> secVOList) {
+		this.secVOList = secVOList;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeRuleVO{" +
+				"id='" + id + '\'' +
+				", name='" + name + '\'' +
+				", secVOList=" + secVOList +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java
new file mode 100644
index 0000000..9375366
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+/**
+ * 娴佹按绠楁硶绫荤殑鏄剧ず淇℃伅
+ * @author weidy
+ * @date 2022-2-17
+ */
+public class CodeSerialAlgorithmVO implements java.io.Serializable{
+
+    /**
+     * 绠楁硶缂栧彿
+     */
+    private String id;
+
+    /**
+     * 绫荤殑鍏ㄨ矾寰�
+     */
+    private String classFullName;
+
+    /**
+     * 绫荤殑鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getClassFullName() {
+        return classFullName;
+    }
+
+    public void setClassFullName(String classFullName) {
+        this.classFullName = classFullName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeSerialAlgorithmVO{" +
+                "id='" + id + '\'' +
+                ", classFullName='" + classFullName + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSynonymVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSynonymVO.java
new file mode 100644
index 0000000..ed629df
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSynonymVO.java
@@ -0,0 +1,103 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍚屼箟璇嶉厤缃樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public class CodeSynonymVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118039132189L;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒�
+	*/
+	private String codeclassifytemplateoid;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	private String codeclassifytemplateoidName;
+
+	/**
+	* 婧愬��
+	*/
+	private String sourcevalue;
+
+
+	/**
+	* 鍚屼箟璇�
+	*/
+	private String synonymvalue;
+
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	*/
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 婧愬��
+	 */
+	public String getSourcevalue (){
+		return sourcevalue;
+	}
+
+	/**
+	* 璁剧疆 婧愬��
+	*/
+	public void setSourcevalue (String sourcevalue){
+		this.sourcevalue = sourcevalue;
+	}
+	/**
+	 * 鑾峰彇 鍚屼箟璇�
+	 */
+	public String getSynonymvalue (){
+		return synonymvalue;
+	}
+
+	/**
+	* 璁剧疆 鍚屼箟璇�
+	*/
+	public void setSynonymvalue (String synonymvalue){
+		this.synonymvalue = synonymvalue;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeSynonymVO{" +
+		"codeclassifytemplateoid='" + codeclassifytemplateoid +"'," +
+		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
+		"sourcevalue='" + sourcevalue +"'," +
+		"synonymvalue='" + synonymvalue +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
new file mode 100644
index 0000000..9f39e97
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
@@ -0,0 +1,83 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 妯℃澘闃舵鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeTemplatePhaseVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117825912259L;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒�
+	*/
+	private String codeclassifytemplateoid;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	private String codeclassifytemplateoidName;
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	*/
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeTemplatePhaseVO{" +
+		"codeclassifytemplateoid='" + codeclassifytemplateoid +"'," +
+		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
+		"ordernum='" + ordernum +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ColumnVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ColumnVO.java
new file mode 100644
index 0000000..ae69b40
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ColumnVO.java
@@ -0,0 +1,51 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ConfigAttrMappingVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ConfigAttrMappingVO.java
new file mode 100644
index 0000000..6e77cb7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ConfigAttrMappingVO.java
@@ -0,0 +1,6 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+public class ConfigAttrMappingVO {
+    private String systemId;
+    private String ll;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DataResembleVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DataResembleVO.java
new file mode 100644
index 0000000..e39cb0b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DataResembleVO.java
@@ -0,0 +1,36 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java
new file mode 100644
index 0000000..e347c95
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java
@@ -0,0 +1,120 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingLogeVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingLogeVO.java
new file mode 100644
index 0000000..f743ebc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingLogeVO.java
@@ -0,0 +1,177 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataInfoVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataInfoVO.java
new file mode 100644
index 0000000..e480cfc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataInfoVO.java
@@ -0,0 +1,121 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataVO.java
new file mode 100644
index 0000000..d684d82
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataVO.java
@@ -0,0 +1,256 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrMappingVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrMappingVO.java
new file mode 100644
index 0000000..95626b5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrMappingVO.java
@@ -0,0 +1,199 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrRangeVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrRangeVO.java
new file mode 100644
index 0000000..c2e11ba
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrRangeVO.java
@@ -0,0 +1,83 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingTaskVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingTaskVO.java
new file mode 100644
index 0000000..144bc70
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingTaskVO.java
@@ -0,0 +1,200 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java
new file mode 100644
index 0000000..8aff07b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java
@@ -0,0 +1,109 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntAuthorityVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntAuthorityVO.java
new file mode 100644
index 0000000..a091113
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntAuthorityVO.java
@@ -0,0 +1,123 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntBaseVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntBaseVO.java
new file mode 100644
index 0000000..679b89e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntBaseVO.java
@@ -0,0 +1,25 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntHeaderVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntHeaderVO.java
new file mode 100644
index 0000000..c3ddf8f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntHeaderVO.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntInfoVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntInfoVO.java
new file mode 100644
index 0000000..9e6e96a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntInfoVO.java
@@ -0,0 +1,746 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntParamVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntParamVO.java
new file mode 100644
index 0000000..f71efe1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntParamVO.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.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/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDataVO.java
new file mode 100644
index 0000000..998269f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDataVO.java
@@ -0,0 +1,119 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+/**
+ * 鍒嗙被鏁版嵁淇℃伅
+ */
+@XStreamAlias("object")
+public class ApplyDataVO {
+    /***
+     * 杈撳叆涓婚敭
+     */
+    @XStreamAsAttribute
+    private String id;
+    /**
+     * 缂栫爜
+     */
+    @XStreamAsAttribute
+    private String code;
+    /**
+     * 鐘舵��
+     */
+    @XStreamAsAttribute
+    private  String status;
+    /**
+     * 鏁版嵁鎿嶄綔绫诲瀷
+     */
+    @XStreamAsAttribute
+    private  String operate;
+    /***
+     * 鍒涘缓鑰�
+     */
+    @XStreamAsAttribute
+    private String creator;
+
+    /**
+     * 鏇存敼鑰�
+     */
+    @XStreamAsAttribute
+    private  String editor;
+    /***
+     * 鏁版嵁灞炴�у璞�
+     */
+    @XStreamImplicit
+    private List<ProppertyVO> prop;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getOperate() {
+        return operate;
+    }
+
+    public void setOperate(String operate) {
+        this.operate = operate;
+    }
+
+    public List<ProppertyVO> getProp() {
+        return prop;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getEditor() {
+        return editor;
+    }
+
+    public void setEditor(String editor) {
+        this.editor = editor;
+    }
+
+    public void setProp(List<ProppertyVO> prop) {
+        this.prop = prop;
+    }
+
+    @Override
+    public String toString() {
+        return "ApplyDataVO{" +
+                "id='" + id + '\'' +
+                ", code='" + code + '\'' +
+                ", status='" + status + '\'' +
+                ", operate='" + operate + '\'' +
+                ", creator='" + creator + '\'' +
+                ", editor='" + editor + '\'' +
+                ", prop=" + prop +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDatasVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDatasVO.java
new file mode 100644
index 0000000..6b7a8e9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDatasVO.java
@@ -0,0 +1,27 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("objects")
+public class ApplyDatasVO {
+    @XStreamImplicit
+    private List<ApplyDataVO> object;
+
+    public List<ApplyDataVO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<ApplyDataVO> object) {
+        this.object = object;
+    }
+
+    @Override
+    public String toString() {
+        return "ApplyDatasVO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfyVO.java
new file mode 100644
index 0000000..3428a1e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfyVO.java
@@ -0,0 +1,83 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/**
+ * 鍒嗙被淇℃伅
+ */
+@XStreamAlias("classify")
+public class ClassfyVO {
+    /**
+     * 鍒嗙被浠e彿
+     */
+    @XStreamAsAttribute
+    private String classCode;
+    /**
+     * 搴撲唬鍙�
+     */
+    @XStreamAsAttribute
+    private String library;
+    /**
+     * 绫昏矾寰�
+     */
+    @XStreamAsAttribute
+    private  String fullclsfNamePath;
+    /**
+     * 鐮佹淇℃伅
+     */
+    private SectionsVO sections;
+
+    private ApplyDatasVO objects;
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getFullclsfNamePath() {
+        return fullclsfNamePath;
+    }
+
+    public void setFullclsfNamePath(String fullclsfNamePath) {
+        this.fullclsfNamePath = fullclsfNamePath;
+    }
+
+    public SectionsVO getSections() {
+        return sections;
+    }
+
+    public void setSections(SectionsVO sections) {
+        this.sections = sections;
+    }
+
+    public ApplyDatasVO getObjects() {
+        return objects;
+    }
+
+    public void setObjects(ApplyDatasVO objects) {
+        this.objects = objects;
+    }
+
+    @Override
+    public String toString() {
+        return "ClassVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
+                ", sections=" + sections +
+                ", objects=" + objects +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfysVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfysVO.java
new file mode 100644
index 0000000..1435d12
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfysVO.java
@@ -0,0 +1,30 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("classifys")
+public class ClassfysVO {
+    /**
+     *鍒嗙被淇℃伅
+     */
+    @XStreamImplicit
+    private List<ClassfyVO> classify;
+
+    public List<ClassfyVO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<ClassfyVO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "ClassfysVO{" +
+                "classify=" + classify +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/InterParameterVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/InterParameterVO.java
new file mode 100644
index 0000000..a41591e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/InterParameterVO.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+/***
+ * 闆嗘垚鎺ュ彛鍙傛暟锛堢敵璇�/鏇存柊锛岀姸鎬侊級
+ */
+public class InterParameterVO {
+    private RootDataVO data;
+    public RootDataVO getData() {
+        return data;
+    }
+    public void setData(RootDataVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "InterParameterVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ProppertyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ProppertyVO.java
new file mode 100644
index 0000000..b5f9e3c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ProppertyVO.java
@@ -0,0 +1,56 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("prop")
+public class ProppertyVO {
+    /**
+     * 灞炴�у瓧娈�
+     */
+    @XStreamAsAttribute
+    private  String key;
+    /**
+     * 灞炴�ф樉绀哄悕绉�
+     */
+    @XStreamAsAttribute
+    private String text;
+    /**
+     * 灞炴�у��
+     */
+    @XStreamAsAttribute
+    private  String value;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "ProppertyVO{" +
+                "key='" + key + '\'' +
+                ", text='" + text + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/RootDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/RootDataVO.java
new file mode 100644
index 0000000..780777a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/RootDataVO.java
@@ -0,0 +1,58 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/**
+ *鏁版嵁淇℃伅
+ */
+@XStreamAlias("data")
+public class RootDataVO {
+    /***
+     * 闆嗘垚绯荤粺鏍囪瘑
+     */
+    @XStreamAsAttribute
+    private String systemId;
+    /**
+     * 鎿嶄綔鐢ㄦ埛淇℃伅
+     */
+    private UserVO user;
+    /***
+     * 鏁版嵁淇℃伅
+     */
+    private ClassfysVO classifys;
+
+
+    public String getSystemId() {
+        return systemId;
+    }
+
+    public void setSystemId(String systemId) {
+        this.systemId = systemId;
+    }
+
+    public UserVO getUser() {
+        return user;
+    }
+
+    public void setUser(UserVO user) {
+        this.user = user;
+    }
+
+    public ClassfysVO getClassifys() {
+        return classifys;
+    }
+
+    public void setClassifys(ClassfysVO classifys) {
+        this.classifys = classifys;
+    }
+
+    @Override
+    public String toString() {
+        return "InterParameterVO{" +
+                "systemId='" + systemId + '\'' +
+                ", user=" + user +
+                ", classifys=" + classifys +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionVO.java
new file mode 100644
index 0000000..f749e12
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionVO.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("section")
+public class SectionVO {
+    /**
+     * 鐮佹鍚嶇О
+     */
+    @XStreamAsAttribute
+    private  String name;
+    /***
+     * 鐮佹鍊�
+     */
+    @XStreamAsAttribute
+    private String value;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "SectionVO{" +
+                "name='" + name + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionsVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionsVO.java
new file mode 100644
index 0000000..bf3da16
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionsVO.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("sections")
+public class SectionsVO {
+    @XStreamImplicit
+    private List<SectionVO> section;
+    public List<SectionVO> getSection() {
+        return section;
+    }
+
+    public void setSection(List<SectionVO> section) {
+        this.section = section;
+    }
+
+    @Override
+    public String toString() {
+        return "SectionsVO{" +
+                "section=" + section +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/UserVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/UserVO.java
new file mode 100644
index 0000000..09dd685
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/UserVO.java
@@ -0,0 +1,56 @@
+package com.vci.ubcs.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("user")
+public class UserVO {
+    /**
+     * 鍒涘缓/鏇存敼浜鸿处鍙�
+     */
+    @XStreamAsAttribute
+    private  String userName;
+     /**
+      * 鍒涘缓/鏇存敼浜烘樉绀哄悕绉�
+     */
+     @XStreamAsAttribute
+    private  String trueName;
+    /**
+     * 鍒涘缓/鏇存敼浜烘搷浣滄満鍣╥p
+     */
+    @XStreamAsAttribute
+    private  String ip;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getTrueName() {
+        return trueName;
+    }
+
+    public void setTrueName(String trueName) {
+        this.trueName = trueName;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    @Override
+    public String toString() {
+        return "UserVO{" +
+                "userName='" + userName + '\'' +
+                ", trueName='" + trueName + '\'' +
+                ", ip='" + ip + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java
new file mode 100644
index 0000000..b824ce1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java
@@ -0,0 +1,73 @@
+package com.vci.ubcs.code.vo.universalInter.attrmap;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/**
+ * 灞炴�ф槧灏�
+ */
+@XStreamAlias("clsf")
+public class ClsfAttrMappingDO {
+    /***
+     * 鏁版嵁婧愮郴缁熷唴閮ㄥ瓧娈�
+     */
+    @XStreamAsAttribute
+    private String sourceKey="";
+    /***
+     * 鏁版嵁婧愮郴缁熷悕绉�
+     */
+    @XStreamAsAttribute
+    private String  sourceName="";
+    /***
+     * 鐩爣绯荤粺鍐呴儴瀛楁
+     */
+    @XStreamAsAttribute
+    private String targetKey="" ;
+    /***
+     * 鐩爣绯荤粺鍐呴儴鍚嶇О
+     */
+    @XStreamAsAttribute
+    private String targetName="";
+
+    public String getSourceKey() {
+        return sourceKey;
+    }
+
+    public void setSourceKey(String sourceKey) {
+        this.sourceKey = sourceKey;
+    }
+
+    public String getSourceName() {
+        return sourceName;
+    }
+
+    public void setSourceName(String sourceName) {
+        this.sourceName = sourceName;
+    }
+
+    public String getTargetKey() {
+        return targetKey;
+    }
+
+    public void setTargetKey(String targetKey) {
+        this.targetKey = targetKey;
+    }
+
+    public String getTargetName() {
+        return targetName;
+    }
+
+    public void setTargetName(String targetName) {
+        this.targetName = targetName;
+    }
+
+    @Override
+    public String toString() {
+        return "ClsfAttrMappingDO{" +
+                "sourceKey='" + sourceKey + '\'' +
+                ", sourceName='" + sourceName + '\'' +
+                ", targetKey='" + targetKey + '\'' +
+                ", targetName='" + targetName + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataAttributeVO.java
new file mode 100644
index 0000000..91860a3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataAttributeVO.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.code.vo.universalInter.attrmap;
+
+public class DataAttributeVO {
+    /**
+     * 瀛楁鍚�
+     */
+    private String field;
+    /***
+     * 灞炴�ф樉绀哄悕绉�
+     */
+    private String text;
+
+    /**
+     * 蹇呭~
+     */
+    private boolean required;
+
+    /**
+     * 鍏抽敭灞炴��
+     */
+    private boolean keyAttr;
+
+
+    /**
+     * 榛樿鍊�
+     */
+    private String defaultValue;
+
+    /**
+     * 鍊�
+     */
+    private String value;
+
+    /**
+     * 鍓嶇紑
+     */
+    private String prefix;
+
+    /**
+     * 鍓嶇紑
+     */
+    private String suffix;
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public boolean isRequired() {
+        return required;
+    }
+
+    public void setRequired(boolean required) {
+        this.required = required;
+    }
+
+    public boolean isKeyAttr() {
+        return keyAttr;
+    }
+
+    public void setKeyAttr(boolean keyAttr) {
+        this.keyAttr = keyAttr;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public String getSuffix() {
+        return suffix;
+    }
+
+    public void setSuffix(String suffix) {
+        this.suffix = suffix;
+    }
+
+    @Override
+    public String toString() {
+        return "DataObjectVO{" +
+                "field='" + field + '\'' +
+                ", required=" + required +
+                ", keyAttr=" + keyAttr +
+                ", defaultValue='" + defaultValue + '\'' +
+                ", value='" + value + '\'' +
+                ", prefix='" + prefix + '\'' +
+                ", suffix='" + suffix + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataObjectVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataObjectVO.java
new file mode 100644
index 0000000..4d2071e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataObjectVO.java
@@ -0,0 +1,24 @@
+package com.vci.ubcs.code.vo.universalInter.attrmap;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataObjectVO {
+    private List<String> colName = new ArrayList();
+    private List<RowDatas> rowData = new ArrayList();
+
+    public List<String> getColName() {
+        return colName;
+    }
+
+    public void setColName(List<String> colName) {
+        this.colName = colName;
+    }
+    public List<RowDatas> getRowData() {
+        return rowData;
+    }
+
+    public void setRowData(List<RowDatas> rowData) {
+        this.rowData = rowData;
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/GeneralMappingUtil.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/GeneralMappingUtil.java
new file mode 100644
index 0000000..8be4a6f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/GeneralMappingUtil.java
@@ -0,0 +1,30 @@
+package com.vci.ubcs.code.vo.universalInter.attrmap;
+
+public class GeneralMappingUtil {
+
+    private static GeneralMappingUtil newInstance=null;
+    public static GeneralMappingUtil getNewInstance() {
+        if(newInstance==null){
+            newInstance=new GeneralMappingUtil();
+        }
+        return newInstance;
+    }
+
+    /***
+     * 閫氳繃绯荤粺鏍囪瘑鑾峰彇瀵瑰簲鐨勯泦鎴愬睘鎬ф槧灏�
+     * @param system
+     */
+    private void getLibraryClsfAttrMapping(String system){
+        try {
+           /** String fileNamePath=LocalFileUtil.getProjectFolder();
+            fileNamePath+=File.separator+"mdmInMapXml"+File.separator+"clsfAttrMap.xml";
+            String  clasAttrXml= LocalFileUtil.readContentForFile(fileNamePath);
+            XStream xStream = new XStream(new DomDriver());
+            xStream.processAnnotations(ApplyCodeDO.class);
+            xStream.autodetectAnnotations(true);
+            ApplyCodeDO applyCodeDO = (ApplyCodeDO) xStream.fromXML(clasAttrXml);**/
+        }catch (Throwable e){
+            new Throwable("璇诲彇灞炴�ф槧灏勬枃浠跺嚭閿�!");
+        }
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryClsfDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryClsfDO.java
new file mode 100644
index 0000000..00f1794
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryClsfDO.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.code.vo.universalInter.attrmap;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+/***
+ * 搴撹妭鐐�
+ */
+@XStreamAlias("clsf")
+public class LibraryClsfDO {
+    @XStreamAsAttribute
+    private String library;
+    @XStreamImplicit(itemFieldName="prop")
+    private List<ClsfAttrMappingDO> prop;
+
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+    public List<ClsfAttrMappingDO> getProp() {
+        return prop;
+    }
+
+    public void setProp(List<ClsfAttrMappingDO> prop) {
+        this.prop = prop;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryClsfDO{" +
+                "library='" + library + '\'' +
+                ", prop=" + prop +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryDO.java
new file mode 100644
index 0000000..05514a2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryDO.java
@@ -0,0 +1,33 @@
+package com.vci.ubcs.code.vo.universalInter.attrmap;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+/***
+ * 搴撹妭鐐�
+ */
+@XStreamAlias("clsfs")
+public class LibraryDO {
+    /***
+     * 搴撹妭鐐�
+     */
+    @XStreamImplicit(itemFieldName="clsf")
+    private List<LibraryClsfDO> clsf;
+
+    public List<LibraryClsfDO> getClsf() {
+        return clsf;
+    }
+
+    public void setClsf(List<LibraryClsfDO> clsf) {
+        this.clsf = clsf;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryDO{" +
+                "clsf=" + clsf +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/RowDatas.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/RowDatas.java
new file mode 100644
index 0000000..a93a87d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/RowDatas.java
@@ -0,0 +1,125 @@
+package com.vci.ubcs.code.vo.universalInter.attrmap;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RowDatas {
+    /**
+     * 鏁版嵁id
+     */
+    private String oid;
+    /***
+     * 鍒涘缓鑰�
+     */
+    private String creator;
+    /***
+     * 鏇存敼鑰�
+     */
+    private  String editor;
+    /**
+     * 鏁版嵁浣嶇疆
+     */
+    private String rowIndex;
+    /***
+     * 鎿嶄綔绫诲瀷
+     */
+    private String operation;
+    /**
+     * 鏁版嵁鐘舵��
+     */
+    private String status;
+    /***
+     * 缂栫爜
+     */
+    private String code;
+
+    private Map<Integer, String> data = new HashMap();
+
+    private Map<String, String> filedValue = new HashMap();
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getEditor() {
+        return editor;
+    }
+
+    public void setEditor(String editor) {
+        this.editor = editor;
+    }
+
+    public String getOperation() {
+        return operation;
+    }
+
+    public void setOperation(String operation) {
+        this.operation = operation;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(String rowIndex) {
+        this.rowIndex = rowIndex;
+    }
+
+    public Map<Integer, String> getData() {
+        return data;
+    }
+
+    public void setData(Map<Integer, String> data) {
+        this.data = data;
+    }
+
+    public Map<String, String> getFiledValue() {
+        return filedValue;
+    }
+
+    public void setFiledValue(Map<String, String> filedValue) {
+        this.filedValue = filedValue;
+    }
+
+    @Override
+    public String toString() {
+        return "RowDatas{" +
+                "oid='" + oid + '\'' +
+                ", creator='" + creator + '\'' +
+                ", editor='" + editor + '\'' +
+                ", rowIndex='" + rowIndex + '\'' +
+                ", operation='" + operation + '\'' +
+                ", status='" + status + '\'' +
+                ", code='" + code + '\'' +
+                ", data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/appcode.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/appcode.xml
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/appcode.xml
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/appcode.xml
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/clsfAttrMap.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/clsfAttrMap.xml
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/clsfAttrMap.xml
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/clsfAttrMap.xml
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/tt.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/tt.xml
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/tt.xml
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/tt.xml
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxx.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxx.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxx.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxx.json
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxxxxxxxx.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxxxxxxxx.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxxxxxxxx.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxxxxxxxx.json
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ClassifyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ClassifyVO.java
new file mode 100644
index 0000000..9b51c6a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ClassifyVO.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("classify")
+public class ClassifyVO {
+    /**
+     * 鍒嗙被id
+     */
+    @XStreamAsAttribute
+    private String id;
+    /***
+     * 鍒嗙被鍚嶇О
+     */
+    @XStreamAsAttribute
+    private String name;
+    /***
+     * 鐖惰妭鐐筰d
+     */
+    @XStreamAsAttribute
+    private String pid;
+    /***
+     * 鍒嗙被浠e彿
+     */
+    @XStreamAsAttribute
+    private String classCode;
+    /***
+     * 鎻忚堪
+     */
+    @XStreamAsAttribute
+    private  String description;
+    /***
+     * 鍒嗙被閾炬帴璺緞
+     */
+    @XStreamAsAttribute
+    private  String fullPathName;
+    /***
+     * 鍒嗙被鐘舵��
+     */
+    @XStreamAsAttribute
+    private String lcStatus;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPid() {
+        return pid;
+    }
+
+    public void setPid(String pid) {
+        this.pid = pid;
+    }
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getFullPathName() {
+        return fullPathName;
+    }
+
+    public void setFullPathName(String fullPathName) {
+        this.fullPathName = fullPathName;
+    }
+
+    public String getLcStatus() {
+        return lcStatus;
+    }
+
+    public void setLcStatus(String lcStatus) {
+        this.lcStatus = lcStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "ClassifyVO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", pid='" + pid + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", description='" + description + '\'' +
+                ", fullPathName='" + fullPathName + '\'' +
+                ", lcStatus='" + lcStatus + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/LibraryVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/LibraryVO.java
new file mode 100644
index 0000000..0373bf8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/LibraryVO.java
@@ -0,0 +1,49 @@
+package com.vci.ubcs.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+@XStreamAlias("library ")
+public class LibraryVO {
+    @XStreamAsAttribute
+    private String id;
+    @XStreamAsAttribute
+    private  String name;
+    @XStreamImplicit
+    private List<ClassifyVO>classify;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<ClassifyVO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<ClassifyVO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryVO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", classify=" + classify +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryClassifyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryClassifyVO.java
new file mode 100644
index 0000000..5d6e451
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryClassifyVO.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.code.vo.universalInter.classify;
+
+public class QueryClassifyVO {
+    /***
+     *
+     */
+    private QueryData data;
+
+    public QueryData getData() {
+        return data;
+    }
+
+    public void setData(QueryData data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "QueryClassifyVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryData.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryData.java
new file mode 100644
index 0000000..4134a08
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryData.java
@@ -0,0 +1,45 @@
+package com.vci.ubcs.code.vo.universalInter.classify;
+
+import com.vci.ubcs.code.vo.universalInter.apply.UserVO;
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("data")
+public class QueryData {
+    @XStreamAsAttribute
+    private String systemId;
+    private UserVO userVo;
+    private QueryLibraryVO library ;
+    public QueryLibraryVO getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(QueryLibraryVO library) {
+        this.library = library;
+    }
+
+    public String getSystemId() {
+        return systemId;
+    }
+
+    public void setSystemId(String systemId) {
+        this.systemId = systemId;
+    }
+
+    public UserVO getUserVo() {
+        return userVo;
+    }
+
+    public void setUserVo(UserVO userVo) {
+        this.userVo = userVo;
+    }
+
+    @Override
+    public String toString() {
+        return "QueryData{" +
+                "systemId='" + systemId + '\'' +
+                ", library=" + library +
+                '}';
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryLibraryVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryLibraryVO.java
new file mode 100644
index 0000000..28c0d19
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryLibraryVO.java
@@ -0,0 +1,39 @@
+package com.vci.ubcs.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("library")
+public class QueryLibraryVO {
+    @XStreamAsAttribute
+    private String id;
+    @XStreamImplicit
+    private List<String> classifyid;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public List<String> getClassifyid() {
+        return classifyid;
+    }
+
+    public void setClassifyid(List<String> classifyid) {
+        this.classifyid = classifyid;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryVO{" +
+                "id='" + id + '\'' +
+                ", classifyid=" + classifyid +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultClassifyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultClassifyVO.java
new file mode 100644
index 0000000..630729f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultClassifyVO.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.code.vo.universalInter.classify;
+
+public class ResultClassifyVO {
+
+   private   ResultData resultData;
+
+    public ResultData getResultData() {
+        return resultData;
+    }
+
+    public void setResultData(ResultData resultData) {
+        this.resultData = resultData;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassifyVO{" +
+                "resultData=" + resultData +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultData.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultData.java
new file mode 100644
index 0000000..742a140
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultData.java
@@ -0,0 +1,45 @@
+package com.vci.ubcs.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+@XStreamAlias("data")
+public class ResultData {
+    @XStreamAlias("errorid")
+    private  String errorid;
+    @XStreamAlias("msg")
+    private String msg;
+    private LibraryVO library ;
+
+    public LibraryVO getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(LibraryVO library) {
+        this.library = library;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultData{" +
+                "code='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", library=" + library +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/classify.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/classify.xml
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/classify.xml
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/classify.xml
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/xxx.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/xxx.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/xxx.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/xxx.json
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionVO.java
new file mode 100644
index 0000000..a296ae4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionVO.java
@@ -0,0 +1,60 @@
+package com.vci.ubcs.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("condtion")
+public class CondtionVO {
+    @XStreamAsAttribute
+    private  String classCode;
+    @XStreamAsAttribute
+    private String library;
+    @XStreamAsAttribute
+    private String queryFileds;
+    @XStreamImplicit
+    private List<PropertyVO> pro;
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getQueryFileds() {
+        return queryFileds;
+    }
+
+    public void setQueryFileds(String queryFileds) {
+        this.queryFileds = queryFileds;
+    }
+
+    public List<PropertyVO> getPro() {
+        return pro;
+    }
+
+    public void setPro(List<PropertyVO> pro) {
+        this.pro = pro;
+    }
+
+    @Override
+    public String toString() {
+        return "CondtionVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", queryFileds='" + queryFileds + '\'' +
+                ", pro=" + pro +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionsVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionsVO.java
new file mode 100644
index 0000000..e327212
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionsVO.java
@@ -0,0 +1,48 @@
+package com.vci.ubcs.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.vci.ubcs.code.vo.universalInter.apply.UserVO;
+
+@XStreamAlias("condtions")
+public class CondtionsVO {
+    @XStreamAsAttribute
+    private  String systemId;
+
+    private UserVO user;
+
+    private CondtionVO condtion;
+
+    public String getSystemId() {
+        return systemId;
+    }
+
+    public void setSystemId(String systemId) {
+        this.systemId = systemId;
+    }
+
+    public UserVO getUser() {
+        return user;
+    }
+
+    public void setUser(UserVO user) {
+        this.user = user;
+    }
+
+    public CondtionVO getCondtion() {
+        return condtion;
+    }
+
+    public void setCondtion(CondtionVO condtion) {
+        this.condtion = condtion;
+    }
+
+    @Override
+    public String toString() {
+        return "CondtionsVO{" +
+                "systemId='" + systemId + '\'' +
+                ", user=" + user +
+                ", condtion=" + condtion +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataCondtionsVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataCondtionsVO.java
new file mode 100644
index 0000000..7ba8788
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataCondtionsVO.java
@@ -0,0 +1,20 @@
+package com.vci.ubcs.code.vo.universalInter.data;
+
+public class DataCondtionsVO {
+    private CondtionsVO condtions;
+
+    public CondtionsVO getCondtions() {
+        return condtions;
+    }
+
+    public void setCondtions(CondtionsVO condtions) {
+        this.condtions = condtions;
+    }
+
+    @Override
+    public String toString() {
+        return "DataCondtionsVO{" +
+                "condtions=" + condtions +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataObjectVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataObjectVO.java
new file mode 100644
index 0000000..5f2792b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataObjectVO.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("object")
+public class DataObjectVO {
+    @XStreamAsAttribute
+    private String code;
+    @XStreamAsAttribute
+    private String  status;
+    @XStreamAsAttribute
+    private  String library;
+    @XStreamAsAttribute
+    private String classCode;
+    @XStreamImplicit
+    private List<PropertyVO> pro;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public List<PropertyVO> getPro() {
+        return pro;
+    }
+
+    public void setPro(List<PropertyVO> pro) {
+        this.pro = pro;
+    }
+
+    @Override
+    public String toString() {
+        return "DataObjectVO{" +
+                "code='" + code + '\'' +
+                ", status='" + status + '\'' +
+                ", library='" + library + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", pro=" + pro +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/PropertyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/PropertyVO.java
new file mode 100644
index 0000000..f6ff00f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/PropertyVO.java
@@ -0,0 +1,48 @@
+package com.vci.ubcs.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("pro")
+public class PropertyVO {
+    @XStreamAsAttribute
+    private String filedName;
+    @XStreamAsAttribute
+    private String outname;
+
+    @XStreamAsAttribute
+    private String filedValue;
+
+    public String getFiledName() {
+        return filedName;
+    }
+
+    public void setFiledName(String filedName) {
+        this.filedName = filedName;
+    }
+
+    public String getFiledValue() {
+        return filedValue;
+    }
+
+    public void setFiledValue(String filedValue) {
+        this.filedValue = filedValue;
+    }
+
+    public String getOutname() {
+        return outname;
+    }
+
+    public void setOutname(String outname) {
+        this.outname = outname;
+    }
+
+    @Override
+    public String toString() {
+        return "PropertyVO{" +
+                "filedName='" + filedName + '\'' +
+                ", outname='" + outname + '\'' +
+                ", filedValue='" + filedValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultDataVO.java
new file mode 100644
index 0000000..96bfa3c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultDataVO.java
@@ -0,0 +1,47 @@
+package com.vci.ubcs.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("data")
+public class ResultDataVO {
+    private String errorid;
+    private String msg;
+    @XStreamImplicit
+    private List<DataObjectVO> object;
+
+    public List<DataObjectVO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<DataObjectVO> object) {
+        this.object = object;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataVO{" +
+                "errorid='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", object=" + object +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultVO.java
new file mode 100644
index 0000000..2126f69
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultVO.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.code.vo.universalInter.data;
+
+public class ResultVO {
+
+    private ResultDataVO data;
+
+    public ResultDataVO getData() {
+        return data;
+    }
+
+    public void setData(ResultDataVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/result.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/result.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/result.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/result.json
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/xx.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/xx.xml
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/xx.xml
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/xx.xml
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfyVO.java
new file mode 100644
index 0000000..d755599
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfyVO.java
@@ -0,0 +1,49 @@
+package com.vci.ubcs.code.vo.universalInter.result.json;
+
+public class JSONResultClassfyVO {
+    private  String classCode;
+    private  String library;
+    private  String fullclsfNamePath;
+    private JSONResultDataObjectDO  objects;
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getFullclsfNamePath() {
+        return fullclsfNamePath;
+    }
+
+    public void setFullclsfNamePath(String fullclsfNamePath) {
+        this.fullclsfNamePath = fullclsfNamePath;
+    }
+
+    public JSONResultDataObjectDO getObjects() {
+        return objects;
+    }
+
+    public void setObjects(JSONResultDataObjectDO objects) {
+        this.objects = objects;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassfyVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
+                ", objects=" + objects +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfysVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfysVO.java
new file mode 100644
index 0000000..bf4d03f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfysVO.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.code.vo.universalInter.result.json;
+
+import java.util.List;
+public class JSONResultClassfysVO {
+    private List<JSONResultClassfyVO> classify;
+
+    public List<JSONResultClassfyVO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<JSONResultClassfyVO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassfysVO{" +
+                "classfy=" + classify +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDO.java
new file mode 100644
index 0000000..3aca1e6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDO.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.code.vo.universalInter.result.json;
+
+import java.util.List;
+
+/***
+ * objects鑺傜偣
+ * @author xj
+ */
+public class JSONResultDataObjectDO {
+    /***
+     * objects涓嬫暟鎹璞�
+     */
+    private List<JSONResultDataObjectDetailDO> object ;
+    public List<JSONResultDataObjectDetailDO> getObject() {
+        return object;
+    }
+    public void setObject(List<JSONResultDataObjectDetailDO> object) {
+        this.object = object;
+    }
+    @Override
+    public String toString() {
+        return "ResultDataObjectDO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java
new file mode 100644
index 0000000..050844f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java
@@ -0,0 +1,62 @@
+package com.vci.ubcs.code.vo.universalInter.result.json;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/***
+ * object鑺傜偣
+ * @author xj
+ */
+@XStreamAlias("obect")
+public class JSONResultDataObjectDetailDO {
+    @XStreamAsAttribute
+    private String  id;
+    @XStreamAsAttribute
+    private  String errorid;
+    @XStreamAsAttribute
+    private String code;
+    @XStreamAlias("msg")
+    private String msg;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataObjectDetailDO{" +
+                "id='" + id + '\'' +
+                ", errorid='" + errorid + '\'' +
+                ", code='" + code + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataVO.java
new file mode 100644
index 0000000..81d58c5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataVO.java
@@ -0,0 +1,19 @@
+package com.vci.ubcs.code.vo.universalInter.result.json;
+public class JSONResultDataVO {
+    private JSONResultSystemVO data;
+
+    public JSONResultSystemVO getData() {
+        return data;
+    }
+
+    public void setData(JSONResultSystemVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultSystemVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultSystemVO.java
new file mode 100644
index 0000000..a6fdaee
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultSystemVO.java
@@ -0,0 +1,52 @@
+package com.vci.ubcs.code.vo.universalInter.result.json;
+
+/***
+ * 杩斿洖缁撴灉瀵硅薄
+ */
+public class JSONResultSystemVO {
+    /***
+     * 閿欒鏍囪瘑
+     */
+    private String errorid;
+    /***
+     * 娑堟伅
+     */
+    private  String msg;
+    /**
+     * 杩斿洖缁撴灉瀵硅薄
+     */
+    private  JSONResultClassfysVO classifys;
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public JSONResultClassfysVO getClassifys() {
+        return classifys;
+    }
+
+    public void setClassifys(JSONResultClassfysVO classifys) {
+        this.classifys = classifys;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultSystemVO{" +
+                "errorid='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", classifys=" + classifys +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/tt.json b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/tt.json
similarity index 100%
rename from Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/tt.json
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/tt.json
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultClassfyVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultClassfyVO.java
new file mode 100644
index 0000000..6fa457e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultClassfyVO.java
@@ -0,0 +1,60 @@
+package com.vci.ubcs.code.vo.universalInter.result.xml;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+import java.util.List;
+
+@XStreamAlias("classfy")
+public class XMLResultClassfyVO {
+    @XStreamAsAttribute
+    private  String classCode;
+    @XStreamAsAttribute
+    private  String library;
+    @XStreamAsAttribute
+    private  String fullclsfNamePath;
+    @XStreamAlias("objects")
+    private List<XMLResultDataObjectDetailDO> objects;
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getFullclsfNamePath() {
+        return fullclsfNamePath;
+    }
+
+    public void setFullclsfNamePath(String fullclsfNamePath) {
+        this.fullclsfNamePath = fullclsfNamePath;
+    }
+
+    public List<XMLResultDataObjectDetailDO> getObjects() {
+        return objects;
+    }
+
+    public void setObjects(List<XMLResultDataObjectDetailDO> objects) {
+        this.objects = objects;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassfyVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
+                ", objects=" + objects +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java
new file mode 100644
index 0000000..c8d7d4a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java
@@ -0,0 +1,62 @@
+package com.vci.ubcs.code.vo.universalInter.result.xml;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/***
+ * object鑺傜偣
+ * @author xj
+ */
+@XStreamAlias("object")
+public class XMLResultDataObjectDetailDO {
+    @XStreamAsAttribute
+    private String  id;
+    @XStreamAsAttribute
+    private  String errorid;
+    @XStreamAsAttribute
+    private String code;
+    @XStreamAlias("msg")
+    private String msg;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataObjectDetailDO{" +
+                "id='" + id + '\'' +
+                ", errorid='" + errorid + '\'' +
+                ", code='" + code + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataVO.java
new file mode 100644
index 0000000..ffe4e11
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataVO.java
@@ -0,0 +1,19 @@
+package com.vci.ubcs.code.vo.universalInter.result.xml;
+
+public class XMLResultDataVO {
+    private XMLResultSystemVO data;
+    public XMLResultSystemVO getData() {
+        return data;
+    }
+
+    public void setData(XMLResultSystemVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultSystemVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultSystemVO.java
new file mode 100644
index 0000000..db89fd3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultSystemVO.java
@@ -0,0 +1,61 @@
+package com.vci.ubcs.code.vo.universalInter.result.xml;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+import java.util.List;
+
+/***
+ * 杩斿洖缁撴灉瀵硅薄
+ */
+@XStreamAlias("data")
+public class XMLResultSystemVO {
+    /***
+     * 閿欒鏍囪瘑
+     */
+    @XStreamAsAttribute
+    private String errorid;
+    /***
+     * 娑堟伅
+     */
+    @XStreamAlias("msg")
+    private  String msg;
+    /**
+     * 杩斿洖缁撴灉瀵硅薄
+     */
+    @XStreamAlias("classifys")
+    private List<XMLResultClassfyVO> classifys;
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public List<XMLResultClassfyVO> getClassifys() {
+        return classifys;
+    }
+
+    public void setClassifys(List<XMLResultClassfyVO> classifys) {
+        this.classifys = classifys;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultSystemVO{" +
+                "errorid='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", classifys=" + classifys +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-desk-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-desk-api/pom.xml
new file mode 100644
index 0000000..0493508
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-desk-api/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-desk-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/entity/Notice.java b/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/entity/Notice.java
new file mode 100644
index 0000000..308fa8f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/entity/Notice.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+import java.util.Date;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_notice")
+@EqualsAndHashCode(callSuper = true)
+public class Notice extends TenantEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鏍囬
+	 */
+	@ApiModelProperty(value = "鏍囬")
+	private String title;
+
+	/**
+	 * 閫氱煡绫诲瀷
+	 */
+	@ApiModelProperty(value = "閫氱煡绫诲瀷")
+	private Integer category;
+
+	/**
+	 * 鍙戝竷鏃ユ湡
+	 */
+	@ApiModelProperty(value = "鍙戝竷鏃ユ湡")
+	private Date releaseTime;
+
+	/**
+	 * 鍐呭
+	 */
+	@ApiModelProperty(value = "鍐呭")
+	private String content;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/feign/INoticeClient.java b/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/feign/INoticeClient.java
new file mode 100644
index 0000000..9246b61
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/feign/INoticeClient.java
@@ -0,0 +1,49 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.feign;
+
+import com.vci.ubcs.desk.entity.Notice;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.BladePage;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * Notice Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_DESK_NAME
+)
+public interface INoticeClient {
+
+	String API_PREFIX = "/client";
+	String TOP = API_PREFIX + "/top";
+
+	/**
+	 * 鑾峰彇notice鍒楄〃
+	 *
+	 * @param current
+	 * @param size
+	 * @return
+	 */
+	@GetMapping(TOP)
+	BladePage<Notice> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/vo/NoticeVO.java b/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/vo/NoticeVO.java
new file mode 100644
index 0000000..b800381
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/vo/NoticeVO.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.desk.vo;
+
+import com.vci.ubcs.desk.entity.Notice;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 閫氱煡鍏憡瑙嗗浘绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class NoticeVO extends Notice {
+
+	@ApiModelProperty(value = "閫氱煡绫诲瀷鍚�")
+	private String categoryName;
+
+	@ApiModelProperty(value = "绉熸埛缂栧彿")
+	private String tenantId;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-dict-api/pom.xml
new file mode 100644
index 0000000..767d1e9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/pom.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-dict-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-cache</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictBizCache.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictBizCache.java
new file mode 100644
index 0000000..06c34d1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictBizCache.java
@@ -0,0 +1,133 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.cache;
+
+import com.vci.ubcs.system.enums.DictBizEnum;
+import com.vci.ubcs.system.feign.IDictBizClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.entity.DictBiz;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 涓氬姟瀛楀吀缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class DictBizCache {
+
+	private static final String DICT_ID = "dictBiz:id";
+	private static final String DICT_VALUE = "dictBiz:value";
+	private static final String DICT_LIST = "dictBiz:list";
+
+	private static IDictBizClient dictClient;
+
+	private static IDictBizClient getDictClient() {
+		if (dictClient == null) {
+			dictClient = SpringUtil.getBean(IDictBizClient.class);
+		}
+		return dictClient;
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param id 涓婚敭
+	 * @return DictBiz
+	 */
+	public static DictBiz getById(Long id) {
+		String keyPrefix = DICT_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix, id, () -> {
+			R<DictBiz> result = getDictClient().getById(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿鏋氫妇
+	 * @param dictKey Integer鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(DictBizEnum code, Integer dictKey) {
+		return getValue(code.getName(), dictKey);
+	}
+
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey Integer鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(String code, Integer dictKey) {
+		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, String.valueOf(dictKey), () -> {
+			R<String> result = getDictClient().getValue(code, String.valueOf(dictKey));
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿鏋氫妇
+	 * @param dictKey String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(DictBizEnum code, String dictKey) {
+		return getValue(code.getName(), dictKey);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(String code, String dictKey) {
+		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, dictKey, () -> {
+			R<String> result = getDictClient().getValue(code, dictKey);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀闆嗗悎
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return List<DictBiz>
+	 */
+	public static List<DictBiz> getList(String code) {
+		String keyPrefix = DICT_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> {
+			R<List<DictBiz>> result = getDictClient().getList(code);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictCache.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictCache.java
new file mode 100644
index 0000000..521b743
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictCache.java
@@ -0,0 +1,160 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.cache;
+
+import com.vci.ubcs.system.enums.DictEnum;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.entity.Dict;
+import com.vci.ubcs.system.feign.IDictClient;
+
+import java.util.List;
+import java.util.Optional;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 瀛楀吀缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class DictCache {
+
+	private static final String DICT_ID = "dict:id:";
+	private static final String DICT_KEY = "dict:key:";
+	private static final String DICT_VALUE = "dict:value:";
+	private static final String DICT_LIST = "dict:list:";
+
+	private static final Boolean TENANT_MODE = Boolean.FALSE;
+
+	private static IDictClient dictClient;
+
+	private static IDictClient getDictClient() {
+		if (dictClient == null) {
+			dictClient = SpringUtil.getBean(IDictClient.class);
+		}
+		return dictClient;
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param id 涓婚敭
+	 * @return Dict
+	 */
+	public static Dict getById(Long id) {
+		return CacheUtil.get(DICT_CACHE, DICT_ID, id, () -> {
+			R<Dict> result = getDictClient().getById(id);
+			return result.getData();
+		}, TENANT_MODE);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code      瀛楀吀缂栧彿鏋氫妇
+	 * @param dictValue 瀛楀吀鍊�
+	 * @return String
+	 */
+	public static String getKey(DictEnum code, String dictValue) {
+		return getKey(code.getName(), dictValue);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀閿�
+	 *
+	 * @param code      瀛楀吀缂栧彿
+	 * @param dictValue 瀛楀吀鍊�
+	 * @return String
+	 */
+	public static String getKey(String code, String dictValue) {
+		return CacheUtil.get(DICT_CACHE, DICT_KEY + code + StringPool.COLON, dictValue, () -> {
+			List<Dict> list = getList(code);
+			Optional<String> key = list.stream().filter(
+				dict -> dict.getDictValue().equalsIgnoreCase(dictValue)
+			).map(Dict::getDictKey).findFirst();
+			return key.orElse(StringPool.EMPTY);
+		}, TENANT_MODE);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿鏋氫妇
+	 * @param dictKey Integer鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(DictEnum code, Integer dictKey) {
+		return getValue(code.getName(), dictKey);
+	}
+
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey Integer鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(String code, Integer dictKey) {
+		return CacheUtil.get(DICT_CACHE, DICT_VALUE + code + StringPool.COLON, String.valueOf(dictKey), () -> {
+			R<String> result = getDictClient().getValue(code, String.valueOf(dictKey));
+			return result.getData();
+		}, TENANT_MODE);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿鏋氫妇
+	 * @param dictKey String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(DictEnum code, String dictKey) {
+		return getValue(code.getName(), dictKey);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(String code, String dictKey) {
+		return CacheUtil.get(DICT_CACHE, DICT_VALUE + code + StringPool.COLON, dictKey, () -> {
+			R<String> result = getDictClient().getValue(code, dictKey);
+			return result.getData();
+		}, TENANT_MODE);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀闆嗗悎
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return List<Dict>
+	 */
+	public static List<Dict> getList(String code) {
+		return CacheUtil.get(DICT_CACHE, DICT_LIST, code, () -> {
+			R<List<Dict>> result = getDictClient().getList(code);
+			return result.getData();
+		}, TENANT_MODE);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/constant/DictConstant.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/constant/DictConstant.java
new file mode 100644
index 0000000..60039ee
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/constant/DictConstant.java
@@ -0,0 +1,38 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.constant;
+
+/**
+ * 瀛楀吀甯搁噺.
+ *
+ * @author zhuangqian
+ */
+public interface DictConstant {
+
+	String SEX_CODE = "sex";
+
+	String NOTICE_CODE = "notice";
+
+	String MENU_CATEGORY_CODE = "menu_category";
+
+	String BUTTON_FUNC_CODE = "button_func";
+
+	String YES_NO_CODE = "yes_no";
+
+	String FLOW_CATEGORY_CODE = "flow_category";
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/dto/DictDTO.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/dto/DictDTO.java
new file mode 100644
index 0000000..99da697
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/dto/DictDTO.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.system.entity.Dict;
+
+/**
+ * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DictDTO extends Dict {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/Dict.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/Dict.java
new file mode 100644
index 0000000..2bf366b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/Dict.java
@@ -0,0 +1,102 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_sys_dict")
+@ApiModel(value = "Dict瀵硅薄", description = "Dict瀵硅薄")
+public class Dict implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鐖朵富閿�
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐖朵富閿�")
+	private Long parentId;
+
+	/**
+	 * 瀛楀吀鐮�
+	 */
+	@ApiModelProperty(value = "瀛楀吀鐮�")
+	private String code;
+
+	/**
+	 * 瀛楀吀鍊�
+	 */
+	@ApiModelProperty(value = "瀛楀吀鍊�")
+	private String dictKey;
+
+	/**
+	 * 瀛楀吀鍚嶇О
+	 */
+	@ApiModelProperty(value = "瀛楀吀鍚嶇О")
+	private String dictValue;
+
+	/**
+	 * 鎺掑簭
+	 */
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+
+	/**
+	 * 瀛楀吀澶囨敞
+	 */
+	@ApiModelProperty(value = "瀛楀吀澶囨敞")
+	private String remark;
+
+	/**
+	 * 鏄惁宸插皝瀛�
+	 */
+	@ApiModelProperty(value = "鏄惁宸插皝瀛�")
+	private Integer isSealed;
+
+	/**
+	 * 鏄惁宸插垹闄�
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "鏄惁宸插垹闄�")
+	private Integer isDeleted;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/DictBiz.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/DictBiz.java
new file mode 100644
index 0000000..42458b0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/DictBiz.java
@@ -0,0 +1,108 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_sys_dict_biz")
+@ApiModel(value = "DictBiz瀵硅薄", description = "DictBiz瀵硅薄")
+public class DictBiz implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	@ApiModelProperty(value = "绉熸埛ID")
+	private String tenantId;
+
+	/**
+	 * 鐖朵富閿�
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐖朵富閿�")
+	private Long parentId;
+
+	/**
+	 * 瀛楀吀鐮�
+	 */
+	@ApiModelProperty(value = "瀛楀吀鐮�")
+	private String code;
+
+	/**
+	 * 瀛楀吀鍊�
+	 */
+	@ApiModelProperty(value = "瀛楀吀鍊�")
+	private String dictKey;
+
+	/**
+	 * 瀛楀吀鍚嶇О
+	 */
+	@ApiModelProperty(value = "瀛楀吀鍚嶇О")
+	private String dictValue;
+
+	/**
+	 * 鎺掑簭
+	 */
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+
+	/**
+	 * 瀛楀吀澶囨敞
+	 */
+	@ApiModelProperty(value = "瀛楀吀澶囨敞")
+	private String remark;
+
+	/**
+	 * 鏄惁宸插皝瀛�
+	 */
+	@ApiModelProperty(value = "鏄惁宸插皝瀛�")
+	private Integer isSealed;
+
+	/**
+	 * 鏄惁宸插垹闄�
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "鏄惁宸插垹闄�")
+	private Integer isDeleted;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictBizEnum.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictBizEnum.java
new file mode 100644
index 0000000..4fab70f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictBizEnum.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 涓氬姟瀛楀吀鏋氫妇绫�
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum DictBizEnum {
+
+	/**
+	 * 娴嬭瘯
+	 */
+	TEST("test"),
+	;
+
+	final String name;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictEnum.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictEnum.java
new file mode 100644
index 0000000..194c333
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictEnum.java
@@ -0,0 +1,95 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 绯荤粺瀛楀吀鏋氫妇绫�
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum DictEnum {
+
+	/**
+	 * 鎬у埆
+	 */
+	SEX("sex"),
+	/**
+	 * 閫氱煡绫诲瀷
+	 */
+	NOTICE("notice"),
+	/**
+	 * 鑿滃崟绫诲瀷
+	 */
+	MENU_CATEGORY("menu_category"),
+	/**
+	 * 鎸夐挳鍔熻兘
+	 */
+	BUTTON_FUNC("button_func"),
+	/**
+	 * 鏄惁
+	 */
+	YES_NO("yes_no"),
+	/**
+	 * 娴佺▼绫诲瀷
+	 */
+	FLOW("flow"),
+	/**
+	 * 鏈烘瀯绫诲瀷
+	 */
+	ORG_CATEGORY("org_category"),
+	/**
+	 * 鏁版嵁鏉冮檺
+	 */
+	DATA_SCOPE_TYPE("data_scope_type"),
+	/**
+	 * 鎺ュ彛鏉冮檺
+	 */
+	API_SCOPE_TYPE("api_scope_type"),
+	/**
+	 * 鏉冮檺绫诲瀷
+	 */
+	SCOPE_CATEGORY("scope_category"),
+	/**
+	 * 瀵硅薄瀛樺偍绫诲瀷
+	 */
+	OSS("oss"),
+	/**
+	 * 鐭俊鏈嶅姟绫诲瀷
+	 */
+	SMS("sms"),
+	/**
+	 * 宀椾綅绫诲瀷
+	 */
+	POST_CATEGORY("post_category"),
+	/**
+	 * 琛屾斂鍖哄垝
+	 */
+	REGION("region"),
+	/**
+	 * 鐢ㄦ埛骞冲彴
+	 */
+	USER_TYPE("user_type"),
+	;
+
+	final String name;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java
new file mode 100644
index 0000000..8d10154
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java
@@ -0,0 +1,73 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.DictBiz;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_SYSTEM_NAME,
+	fallback = IDictBizClientFallback.class
+)
+public interface IDictBizClient {
+
+	String API_PREFIX = "/client";
+	String GET_BY_ID = API_PREFIX + "/dict-biz/get-by-id";
+	String GET_VALUE = API_PREFIX + "/dict-biz/get-value";
+	String GET_LIST = API_PREFIX + "/dict-biz/get-list";
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param id 涓婚敭
+	 * @return
+	 */
+	@GetMapping(GET_BY_ID)
+	R<DictBiz> getById(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斿��
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	@GetMapping(GET_VALUE)
+	R<String> getValue(@RequestParam("code") String code, @RequestParam("dictKey") String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	@GetMapping(GET_LIST)
+	R<List<DictBiz>> getList(@RequestParam("code") String code);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClientFallback.java
new file mode 100644
index 0000000..08c4506
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClientFallback.java
@@ -0,0 +1,46 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.DictBiz;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IDictBizClientFallback implements IDictBizClient {
+	@Override
+	public R<DictBiz> getById(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getValue(String code, String dictKey) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<DictBiz>> getList(String code) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClient.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClient.java
new file mode 100644
index 0000000..ec6381c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClient.java
@@ -0,0 +1,73 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+
+import com.vci.ubcs.system.entity.Dict;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_SYSTEM_NAME,
+	fallback = IDictClientFallback.class
+)
+public interface IDictClient {
+
+	String API_PREFIX = "/client";
+	String GET_BY_ID = API_PREFIX + "/dict/get-by-id";
+	String GET_VALUE = API_PREFIX + "/dict/get-value";
+	String GET_LIST = API_PREFIX + "/dict/get-list";
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param id 涓婚敭
+	 * @return
+	 */
+	@GetMapping(GET_BY_ID)
+	R<Dict> getById(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斿��
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	@GetMapping(GET_VALUE)
+	R<String> getValue(@RequestParam("code") String code, @RequestParam("dictKey") String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	@GetMapping(GET_LIST)
+	R<List<Dict>> getList(@RequestParam("code") String code);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClientFallback.java
new file mode 100644
index 0000000..c38a839
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClientFallback.java
@@ -0,0 +1,46 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import com.vci.ubcs.system.entity.Dict;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IDictClientFallback implements IDictClient {
+	@Override
+	public R<Dict> getById(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getValue(String code, String dictKey) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<Dict>> getList(String code) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictBizVO.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictBizVO.java
new file mode 100644
index 0000000..738acc0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictBizVO.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import com.vci.ubcs.system.entity.DictBiz;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DictBizVO瀵硅薄", description = "DictBizVO瀵硅薄")
+public class DictBizVO extends DictBiz implements INode<DictBizVO> {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 鐖惰妭鐐笽D
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<DictBizVO> children;
+
+	@Override
+	public List<DictBizVO> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 涓婄骇瀛楀吀
+	 */
+	private String parentName;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictVO.java b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictVO.java
new file mode 100644
index 0000000..4821549
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictVO.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import com.vci.ubcs.system.entity.Dict;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DictVO瀵硅薄", description = "DictVO瀵硅薄")
+public class DictVO extends Dict implements INode<DictVO> {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 鐖惰妭鐐笽D
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<DictVO> children;
+
+	@Override
+	public List<DictVO> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 涓婄骇瀛楀吀
+	 */
+	private String parentName;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml
new file mode 100644
index 0000000..56f0aac
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-omd-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/DictBizCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/DictBizCache.java
new file mode 100644
index 0000000..ed9fa81
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/DictBizCache.java
@@ -0,0 +1,133 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.cache;
+
+import com.vci.ubcs.omd.entity.DictBizM;
+import com.vci.ubcs.omd.enums.DictBizEnum;
+import com.vci.ubcs.omd.feign.IDictBizClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 涓氬姟瀛楀吀缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class DictBizCache {
+
+	private static final String DICT_ID = "dictBiz:id";
+	private static final String DICT_VALUE = "dictBiz:value";
+	private static final String DICT_LIST = "dictBiz:list";
+
+	private static IDictBizClient dictClient;
+
+	private static IDictBizClient getDictClient() {
+		if (dictClient == null) {
+			dictClient = SpringUtil.getBean(IDictBizClient.class);
+		}
+		return dictClient;
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param id 涓婚敭
+	 * @return DictBiz
+	 */
+	public static DictBizM getById(Long id) {
+		String keyPrefix = DICT_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix, id, () -> {
+			R<DictBizM> result = getDictClient().getById(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿鏋氫妇
+	 * @param dictKey Integer鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(DictBizEnum code, Integer dictKey) {
+		return getValue(code.getName(), dictKey);
+	}
+
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey Integer鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(String code, Integer dictKey) {
+		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, String.valueOf(dictKey), () -> {
+			R<String> result = getDictClient().getValue(code, String.valueOf(dictKey));
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿鏋氫妇
+	 * @param dictKey String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(DictBizEnum code, String dictKey) {
+		return getValue(code.getName(), dictKey);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(String code, String dictKey) {
+		String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, dictKey, () -> {
+			R<String> result = getDictClient().getValue(code, dictKey);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀闆嗗悎
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return List<DictBiz>
+	 */
+	public static List<DictBizM> getList(String code) {
+		String keyPrefix = DICT_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> {
+			R<List<DictBizM>> result = getDictClient().getList(code);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/DictBizM.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/DictBizM.java
new file mode 100644
index 0000000..0d952f2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/DictBizM.java
@@ -0,0 +1,108 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_sys_dict_biz")
+@ApiModel(value = "DictBiz瀵硅薄", description = "DictBiz瀵硅薄")
+public class DictBizM implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	@ApiModelProperty(value = "绉熸埛ID")
+	private String tenantId;
+
+	/**
+	 * 鐖朵富閿�
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐖朵富閿�")
+	private Long parentId;
+
+	/**
+	 * 瀛楀吀鐮�
+	 */
+	@ApiModelProperty(value = "瀛楀吀鐮�")
+	private String code;
+
+	/**
+	 * 瀛楀吀鍊�
+	 */
+	@ApiModelProperty(value = "瀛楀吀鍊�")
+	private String dictKey;
+
+	/**
+	 * 瀛楀吀鍚嶇О
+	 */
+	@ApiModelProperty(value = "瀛楀吀鍚嶇О")
+	private String dictValue;
+
+	/**
+	 * 鎺掑簭
+	 */
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+
+	/**
+	 * 瀛楀吀澶囨敞
+	 */
+	@ApiModelProperty(value = "瀛楀吀澶囨敞")
+	private String remark;
+
+	/**
+	 * 鏄惁宸插皝瀛�
+	 */
+	@ApiModelProperty(value = "鏄惁宸插皝瀛�")
+	private Integer isSealed;
+
+	/**
+	 * 鏄惁宸插垹闄�
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "鏄惁宸插垹闄�")
+	private Integer isDeleted;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/DictBizEnum.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/DictBizEnum.java
new file mode 100644
index 0000000..8f093c4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/DictBizEnum.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 涓氬姟瀛楀吀鏋氫妇绫�
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum DictBizEnum {
+
+	/**
+	 * 娴嬭瘯
+	 */
+	TEST("test"),
+	;
+
+	final String name;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClient.java
new file mode 100644
index 0000000..777821c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClient.java
@@ -0,0 +1,84 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+
+import com.vci.ubcs.omd.entity.DictBizM;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = "blade-omd",
+	fallback = IDictBizClientFallback.class
+)
+public interface IDictBizClient {
+
+	String API_PREFIX = "/client";
+	String GET_BY_ID = API_PREFIX + "/dict-biz/get-by-id";
+	String GET_VALUE = API_PREFIX + "/dict-biz/get-value";
+	String GET_LIST = API_PREFIX + "/dict-biz/get-list";
+	String CHECK_VALUE = API_PREFIX + "/dict-biz/check-value";
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param id 涓婚敭
+	 * @return
+	 */
+	@GetMapping(GET_BY_ID)
+	R<DictBizM> getById(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斿��
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	@GetMapping(GET_VALUE)
+	R<String> getValue(@RequestParam("code") String code, @RequestParam("dictKey") String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	@GetMapping(GET_LIST)
+	R<List<DictBizM>> getList(@RequestParam("code") String code);
+
+	/**
+	 * 妫�鏌ュ瓧鍏告槸鍚﹀瓨鍦紝瀛樺湪鍗宠繑鍥烇紝涓嶅瓨鍦ㄦ柊澧�
+	 *
+	 * @param dict 瀛楀吀鏁版嵁
+	 * @return
+	 */
+	@GetMapping(CHECK_VALUE)
+	R getCheck(@Valid @RequestBody DictBizM dict);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClientFallback.java
new file mode 100644
index 0000000..acacfe8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClientFallback.java
@@ -0,0 +1,51 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.omd.entity.DictBizM;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IDictBizClientFallback implements IDictBizClient {
+	@Override
+	public R<DictBizM> getById(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getValue(String code, String dictKey) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<DictBizM>> getList(String code) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R getCheck(DictBizM dict) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/DictBizMVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/DictBizMVO.java
new file mode 100644
index 0000000..4afbd3f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/DictBizMVO.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.omd.entity.DictBizM;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DictBizVO瀵硅薄", description = "DictBizVO瀵硅薄")
+public class DictBizMVO extends DictBizM implements INode<DictBizM> {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 鐖惰妭鐐笽D
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<DictBizM> children;
+
+	@Override
+	public List<DictBizM> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 涓婄骇瀛楀吀
+	 */
+	private String parentName;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-scope-api/pom.xml
new file mode 100644
index 0000000..0a2df20
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-scope-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-secure</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-cache</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-datascope</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/ApiScopeCache.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/ApiScopeCache.java
new file mode 100644
index 0000000..2256c06
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/ApiScopeCache.java
@@ -0,0 +1,77 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.feign.IApiScopeClient;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 鎺ュ彛鏉冮檺缂撳瓨
+ *
+ * @author Chill
+ */
+public class ApiScopeCache {
+
+	private static final String SCOPE_CACHE_CODE = "apiScope:code:";
+
+	private static IApiScopeClient apiScopeClient;
+
+	private static IApiScopeClient getApiScopeClient() {
+		if (apiScopeClient == null) {
+			apiScopeClient = SpringUtil.getBean(IApiScopeClient.class);
+		}
+		return apiScopeClient;
+	}
+
+	/**
+	 * 鑾峰彇鎺ュ彛鏉冮檺鍦板潃
+	 *
+	 * @param roleId 瑙掕壊id
+	 * @return permissions
+	 */
+	public static List<String> permissionPath(String roleId) {
+		List<String> permissions = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CODE, roleId, List.class, Boolean.FALSE);
+		if (permissions == null) {
+			permissions = getApiScopeClient().permissionPath(roleId);
+			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CODE, roleId, permissions);
+		}
+		return permissions;
+	}
+
+	/**
+	 * 鑾峰彇鎺ュ彛鏉冮檺淇℃伅
+	 *
+	 * @param permission 鏉冮檺缂栧彿
+	 * @param roleId     瑙掕壊id
+	 * @return permissions
+	 */
+	public static List<String> permissionCode(String permission, String roleId) {
+		List<String> permissions = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CODE, permission + StringPool.COLON + roleId, List.class, Boolean.FALSE);
+		if (permissions == null) {
+			permissions = getApiScopeClient().permissionCode(permission, roleId);
+			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CODE, permission + StringPool.COLON + roleId, permissions);
+		}
+		return permissions;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/DataScopeCache.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/DataScopeCache.java
new file mode 100644
index 0000000..db0a742
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/DataScopeCache.java
@@ -0,0 +1,96 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.datascope.model.DataScopeModel;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import com.vci.ubcs.system.feign.IDataScopeClient;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 鏁版嵁鏉冮檺缂撳瓨
+ *
+ * @author Chill
+ */
+public class DataScopeCache {
+
+	private static final String SCOPE_CACHE_CODE = "dataScope:code:";
+	private static final String SCOPE_CACHE_CLASS = "dataScope:class:";
+	private static final String DEPT_CACHE_ANCESTORS = "dept:ancestors:";
+
+	private static IDataScopeClient dataScopeClient;
+
+	private static IDataScopeClient getDataScopeClient() {
+		if (dataScopeClient == null) {
+			dataScopeClient = SpringUtil.getBean(IDataScopeClient.class);
+		}
+		return dataScopeClient;
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param mapperId 鏁版嵁鏉冮檺mapperId
+	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
+	 * @return DataScopeModel
+	 */
+	public static DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
+		DataScopeModel dataScope = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CLASS, mapperId + StringPool.COLON + roleId, DataScopeModel.class, Boolean.FALSE);
+		if (dataScope == null || !dataScope.getSearched()) {
+			dataScope = getDataScopeClient().getDataScopeByMapper(mapperId, roleId);
+			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CLASS, mapperId + StringPool.COLON + roleId, dataScope);
+		}
+		return StringUtil.isNotBlank(dataScope.getResourceCode()) ? dataScope : null;
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
+	 * @return DataScopeModel
+	 */
+	public static DataScopeModel getDataScopeByCode(String code) {
+		DataScopeModel dataScope = CacheUtil.get(SYS_CACHE, SCOPE_CACHE_CODE, code, DataScopeModel.class, Boolean.FALSE);
+		if (dataScope == null || !dataScope.getSearched()) {
+			dataScope = getDataScopeClient().getDataScopeByCode(code);
+			CacheUtil.put(SYS_CACHE, SCOPE_CACHE_CODE, code, dataScope);
+		}
+		return StringUtil.isNotBlank(dataScope.getResourceCode()) ? dataScope : null;
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬瀛愮骇
+	 *
+	 * @param deptId 閮ㄩ棬id
+	 * @return deptIds
+	 */
+	public static List<Long> getDeptAncestors(Long deptId) {
+		List ancestors = CacheUtil.get(SYS_CACHE, DEPT_CACHE_ANCESTORS, deptId, List.class);
+		if (CollectionUtil.isEmpty(ancestors)) {
+			ancestors = getDataScopeClient().getDeptAncestors(deptId);
+			CacheUtil.put(SYS_CACHE, DEPT_CACHE_ANCESTORS, deptId, ancestors);
+		}
+		return ancestors;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/config/ScopeConfiguration.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/config/ScopeConfiguration.java
new file mode 100644
index 0000000..27ba4d3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/config/ScopeConfiguration.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.config;
+
+
+import com.vci.ubcs.system.handler.DataScopeModelHandler;
+import lombok.AllArgsConstructor;
+import org.springblade.core.datascope.handler.ScopeModelHandler;
+import org.springblade.core.secure.config.RegistryConfiguration;
+import org.springblade.core.secure.handler.IPermissionHandler;
+import com.vci.ubcs.system.handler.ApiScopePermissionHandler;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 鍏叡灏佽鍖呴厤缃被
+ *
+ * @author Chill
+ */
+@Configuration(proxyBeanMethods = false)
+@AllArgsConstructor
+@AutoConfigureBefore(RegistryConfiguration.class)
+public class ScopeConfiguration {
+
+	@Bean
+	public ScopeModelHandler scopeModelHandler() {
+		return new DataScopeModelHandler();
+	}
+
+	@Bean
+	public IPermissionHandler permissionHandler() {
+		return new ApiScopePermissionHandler();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClient.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClient.java
new file mode 100644
index 0000000..053ceaa
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClient.java
@@ -0,0 +1,60 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 鎺ュ彛鏉冮檺Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_SYSTEM_NAME,
+	fallback = IApiScopeClientFallback.class
+)
+public interface IApiScopeClient {
+
+	String API_PREFIX = "/client/api-scope";
+	String PERMISSION_PATH = API_PREFIX + "/permission-path";
+	String PERMISSION_CODE = API_PREFIX + "/permission-code";
+
+	/**
+	 * 鑾峰彇鎺ュ彛鏉冮檺鍦板潃
+	 *
+	 * @param roleId 瑙掕壊id
+	 * @return permissions
+	 */
+	@GetMapping(PERMISSION_PATH)
+	List<String> permissionPath(@RequestParam("roleId") String roleId);
+
+	/**
+	 * 鑾峰彇鎺ュ彛鏉冮檺淇℃伅
+	 *
+	 * @param permission 鏉冮檺缂栧彿
+	 * @param roleId     瑙掕壊id
+	 * @return permissions
+	 */
+	@GetMapping(PERMISSION_CODE)
+	List<String> permissionCode(@RequestParam("permission") String permission, @RequestParam("roleId") String roleId);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClientFallback.java
new file mode 100644
index 0000000..001cd59
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClientFallback.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * IApiScopeClientFallback
+ *
+ * @author Chill
+ */
+@Component
+public class IApiScopeClientFallback implements IApiScopeClient {
+	@Override
+	public List<String> permissionPath(String roleId) {
+		return null;
+	}
+
+	@Override
+	public List<String> permissionCode(String permission, String roleId) {
+		return null;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClient.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClient.java
new file mode 100644
index 0000000..fca2a12
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClient.java
@@ -0,0 +1,72 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import org.springblade.core.datascope.model.DataScopeModel;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 鏁版嵁鏉冮檺Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_SYSTEM_NAME,
+	fallback = IDataScopeClientFallback.class
+)
+public interface IDataScopeClient {
+
+	String API_PREFIX = "/client/data-scope";
+	String GET_DATA_SCOPE_BY_MAPPER = API_PREFIX + "/by-mapper";
+	String GET_DATA_SCOPE_BY_CODE = API_PREFIX + "/by-code";
+	String GET_DEPT_ANCESTORS = API_PREFIX + "/dept-ancestors";
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param mapperId 鏁版嵁鏉冮檺mapperId
+	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
+	 * @return DataScopeModel
+	 */
+	@GetMapping(GET_DATA_SCOPE_BY_MAPPER)
+	DataScopeModel getDataScopeByMapper(@RequestParam("mapperId") String mapperId, @RequestParam("roleId") String roleId);
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
+	 * @return DataScopeModel
+	 */
+	@GetMapping(GET_DATA_SCOPE_BY_CODE)
+	DataScopeModel getDataScopeByCode(@RequestParam("code") String code);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬瀛愮骇
+	 *
+	 * @param deptId 閮ㄩ棬id
+	 * @return deptIds
+	 */
+	@GetMapping(GET_DEPT_ANCESTORS)
+	List<Long> getDeptAncestors(@RequestParam("deptId") Long deptId);
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClientFallback.java
new file mode 100644
index 0000000..fd6018d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClientFallback.java
@@ -0,0 +1,45 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import org.springblade.core.datascope.model.DataScopeModel;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * IDataScopeClientFallback
+ *
+ * @author Chill
+ */
+@Component
+public class IDataScopeClientFallback implements IDataScopeClient {
+	@Override
+	public DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
+		return null;
+	}
+
+	@Override
+	public DataScopeModel getDataScopeByCode(String code) {
+		return null;
+	}
+
+	@Override
+	public List<Long> getDeptAncestors(Long deptId) {
+		return null;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/ApiScopePermissionHandler.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/ApiScopePermissionHandler.java
new file mode 100644
index 0000000..509adbf
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/ApiScopePermissionHandler.java
@@ -0,0 +1,61 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.handler;
+
+import com.vci.ubcs.system.cache.ApiScopeCache;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.handler.IPermissionHandler;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.WebUtil;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * 鎺ュ彛鏉冮檺鏍¢獙绫�
+ *
+ * @author Chill
+ */
+public class ApiScopePermissionHandler implements IPermissionHandler {
+
+	@Override
+	public boolean permissionAll() {
+		HttpServletRequest request = WebUtil.getRequest();
+		BladeUser user = AuthUtil.getUser();
+		if (request == null || user == null) {
+			return false;
+		}
+		String uri = request.getRequestURI();
+		List<String> paths = ApiScopeCache.permissionPath(user.getRoleId());
+		if (paths == null || paths.size() == 0) {
+			return false;
+		}
+		return paths.stream().anyMatch(uri::contains);
+	}
+
+	@Override
+	public boolean hasPermission(String permission) {
+		HttpServletRequest request = WebUtil.getRequest();
+		BladeUser user = AuthUtil.getUser();
+		if (request == null || user == null) {
+			return false;
+		}
+		List<String> codes = ApiScopeCache.permissionCode(permission, user.getRoleId());
+		return codes != null && codes.size() != 0;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/DataScopeModelHandler.java b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/DataScopeModelHandler.java
new file mode 100644
index 0000000..4ca0c14
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/DataScopeModelHandler.java
@@ -0,0 +1,65 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.handler;
+
+import com.vci.ubcs.system.cache.DataScopeCache;
+import org.springblade.core.datascope.handler.ScopeModelHandler;
+import org.springblade.core.datascope.model.DataScopeModel;
+
+import java.util.List;
+
+/**
+ * 閫氱敤鏁版嵁鏉冮檺瑙勫垯
+ *
+ * @author Chill
+ */
+public class DataScopeModelHandler implements ScopeModelHandler {
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param mapperId 鏁版嵁鏉冮檺mapperId
+	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
+	 * @return DataScopeModel
+	 */
+	@Override
+	public DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
+		return DataScopeCache.getDataScopeByMapper(mapperId, roleId);
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
+	 * @return DataScopeModel
+	 */
+	@Override
+	public DataScopeModel getDataScopeByCode(String code) {
+		return DataScopeCache.getDataScopeByCode(code);
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬瀛愮骇
+	 *
+	 * @param deptId 閮ㄩ棬id
+	 * @return deptIds
+	 */
+	@Override
+	public List<Long> getDeptAncestors(Long deptId) {
+		return DataScopeCache.getDeptAncestors(deptId);
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-system-api/pom.xml
new file mode 100644
index 0000000..dd0f493
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/pom.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-system-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-cache</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/ParamCache.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/ParamCache.java
new file mode 100644
index 0000000..c5bee3e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/ParamCache.java
@@ -0,0 +1,72 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.cache;
+
+import com.vci.ubcs.system.feign.ISysClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import com.vci.ubcs.system.entity.Param;
+
+import static org.springblade.core.cache.constant.CacheConstant.PARAM_CACHE;
+
+/**
+ * 鍙傛暟缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class ParamCache {
+
+	private static final String PARAM_ID = "param:id:";
+	private static final String PARAM_VALUE = "param:value:";
+
+	private static ISysClient sysClient;
+
+	private static ISysClient getSysClient() {
+		if (sysClient == null) {
+			sysClient = SpringUtil.getBean(ISysClient.class);
+		}
+		return sysClient;
+	}
+
+	/**
+	 * 鑾峰彇鍙傛暟瀹炰綋
+	 *
+	 * @param id 涓婚敭
+	 * @return Param
+	 */
+	public static Param getById(Long id) {
+		return CacheUtil.get(PARAM_CACHE, PARAM_ID, id, () -> {
+			R<Param> result = getSysClient().getParam(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇鍙傛暟閰嶇疆
+	 *
+	 * @param paramKey 鍙傛暟鍊�
+	 * @return String
+	 */
+	public static String getValue(String paramKey) {
+		return CacheUtil.get(PARAM_CACHE, PARAM_VALUE, paramKey, () -> {
+			R<String> result = getSysClient().getParamValue(paramKey);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/RegionCache.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/RegionCache.java
new file mode 100644
index 0000000..f7b8c73
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/RegionCache.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.cache;
+
+import com.vci.ubcs.system.feign.ISysClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import com.vci.ubcs.system.entity.Region;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 琛屾斂鍖哄垝缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class RegionCache {
+	public static final int PROVINCE_LEVEL = 1;
+	public static final int CITY_LEVEL = 2;
+	public static final int DISTRICT_LEVEL = 3;
+	public static final int TOWN_LEVEL = 4;
+	public static final int VILLAGE_LEVEL = 5;
+
+	private static final String REGION_CODE = "region:code:";
+
+	private static ISysClient sysClient;
+
+	private static ISysClient getSysClient() {
+		if (sysClient == null) {
+			sysClient = SpringUtil.getBean(ISysClient.class);
+		}
+		return sysClient;
+	}
+
+	/**
+	 * 鑾峰彇琛屾斂鍖哄垝瀹炰綋
+	 *
+	 * @param code 鍖哄垝缂栧彿
+	 * @return Param
+	 */
+	public static Region getByCode(String code) {
+		return CacheUtil.get(SYS_CACHE, REGION_CODE, code, () -> {
+			R<Region> result = getSysClient().getRegion(code);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/SysCache.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/SysCache.java
new file mode 100644
index 0000000..3c1e0cd
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/SysCache.java
@@ -0,0 +1,374 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.cache;
+
+
+import com.vci.ubcs.system.entity.*;
+import com.vci.ubcs.system.feign.ISysClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 绯荤粺缂撳瓨
+ *
+ * @author Chill
+ */
+public class SysCache {
+	private static final String MENU_ID = "menu:id:";
+	private static final String DEPT_ID = "dept:id:";
+	private static final String DEPT_NAME = "dept:name:";
+	private static final String DEPT_NAME_FUZZY = "dept:nameFuzzy:";
+	private static final String DEPT_NAME_ID = "deptName:id:";
+	private static final String DEPT_NAMES_ID = "deptNames:id:";
+	private static final String DEPT_CHILD_ID = "deptChild:id:";
+	private static final String DEPT_CHILDIDS_ID = "deptChildIds:id:";
+	private static final String POST_ID = "post:id:";
+	private static final String POST_NAME = "post:name:";
+	private static final String POST_NAME_FUZZY = "post:nameFuzzy:";
+	private static final String POST_NAME_ID = "postName:id:";
+	private static final String POST_NAMES_ID = "postNames:id:";
+	private static final String ROLE_ID = "role:id:";
+	private static final String ROLE_NAME = "role:name:";
+	private static final String ROLE_NAME_ID = "roleName:id:";
+	private static final String ROLE_NAMES_ID = "roleNames:id:";
+	private static final String ROLE_ALIAS_ID = "roleAlias:id:";
+	private static final String ROLE_ALIASES_ID = "roleAliases:id:";
+	public static final String TENANT_ID = "tenant:id:";
+	public static final String TENANT_TENANT_ID = "tenant:tenantId:";
+	public static final String TENANT_PACKAGE_ID = "tenant:packageId:";
+
+	private static ISysClient sysClient;
+
+	private static ISysClient getSysClient() {
+		if (sysClient == null) {
+			sysClient = SpringUtil.getBean(ISysClient.class);
+		}
+		return sysClient;
+	}
+
+	/**
+	 * 鑾峰彇鑿滃崟
+	 *
+	 * @param id 涓婚敭
+	 * @return 鑿滃崟
+	 */
+	public static Menu getMenu(Long id) {
+		return CacheUtil.get(SYS_CACHE, MENU_ID, id, () -> {
+			R<Menu> result = getSysClient().getMenu(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬
+	 *
+	 * @param id 涓婚敭
+	 * @return 閮ㄩ棬
+	 */
+	public static Dept getDept(Long id) {
+		return CacheUtil.get(SYS_CACHE, DEPT_ID, id, () -> {
+			R<Dept> result = getSysClient().getDept(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param deptNames 閮ㄩ棬鍚�
+	 * @return 閮ㄩ棬id
+	 */
+	public static String getDeptIds(String tenantId, String deptNames) {
+		return CacheUtil.get(SYS_CACHE, DEPT_NAME, tenantId + StringPool.DASH + deptNames, () -> {
+			R<String> result = getSysClient().getDeptIds(tenantId, deptNames);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param deptNames 閮ㄩ棬鍚嶆ā绯婃煡璇�
+	 * @return 閮ㄩ棬id
+	 */
+	public static String getDeptIdsByFuzzy(String tenantId, String deptNames) {
+		return CacheUtil.get(SYS_CACHE, DEPT_NAME_FUZZY, tenantId + StringPool.DASH + deptNames, () -> {
+			R<String> result = getSysClient().getDeptIdsByFuzzy(tenantId, deptNames);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鍚�
+	 *
+	 * @param id 涓婚敭
+	 * @return 閮ㄩ棬鍚�
+	 */
+	public static String getDeptName(Long id) {
+		return CacheUtil.get(SYS_CACHE, DEPT_NAME_ID, id, () -> {
+			R<String> result = getSysClient().getDeptName(id);
+			return result.getData();
+		});
+	}
+
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鍚嶉泦鍚�
+	 *
+	 * @param deptIds 涓婚敭闆嗗悎
+	 * @return 閮ㄩ棬鍚�
+	 */
+	public static List<String> getDeptNames(String deptIds) {
+		return CacheUtil.get(SYS_CACHE, DEPT_NAMES_ID, deptIds, () -> {
+			R<List<String>> result = getSysClient().getDeptNames(deptIds);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛愰儴闂ㄩ泦鍚�
+	 *
+	 * @param deptId 涓婚敭
+	 * @return 瀛愰儴闂�
+	 */
+	public static List<Dept> getDeptChild(Long deptId) {
+		return CacheUtil.get(SYS_CACHE, DEPT_CHILD_ID, deptId, () -> {
+			R<List<Dept>> result = getSysClient().getDeptChild(deptId);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛愰儴闂↖D闆嗗悎
+	 *
+	 * @param deptId 涓婚敭
+	 * @return 瀛愰儴闂↖D
+	 */
+	public static List<Long> getDeptChildIds(Long deptId) {
+		if (deptId == null) {
+			return null;
+		}
+		List<Long> deptIdList = CacheUtil.get(SYS_CACHE, DEPT_CHILDIDS_ID, deptId, List.class);
+		if (deptIdList == null) {
+			deptIdList = new ArrayList<>();
+			List<Dept> deptChild = getDeptChild(deptId);
+			if (deptChild != null) {
+				List<Long> collect = deptChild.stream().map(Dept::getId).collect(Collectors.toList());
+				deptIdList.addAll(collect);
+			}
+			deptIdList.add(deptId);
+			CacheUtil.put(SYS_CACHE, DEPT_CHILDIDS_ID, deptId, deptIdList);
+		}
+		return deptIdList;
+	}
+
+	/**
+	 * 鑾峰彇宀椾綅
+	 *
+	 * @param id 涓婚敭
+	 * @return
+	 */
+	public static Post getPost(Long id) {
+		return CacheUtil.get(SYS_CACHE, POST_ID, id, () -> {
+			R<Post> result = getSysClient().getPost(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇宀椾綅id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param postNames 宀椾綅鍚�
+	 * @return
+	 */
+	public static String getPostIds(String tenantId, String postNames) {
+		return CacheUtil.get(SYS_CACHE, POST_NAME, tenantId + StringPool.DASH + postNames, () -> {
+			R<String> result = getSysClient().getPostIds(tenantId, postNames);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇宀椾綅id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param postNames 宀椾綅鍚嶆ā绯婃煡璇�
+	 * @return
+	 */
+	public static String getPostIdsByFuzzy(String tenantId, String postNames) {
+		return CacheUtil.get(SYS_CACHE, POST_NAME_FUZZY, tenantId + StringPool.DASH + postNames, () -> {
+			R<String> result = getSysClient().getPostIdsByFuzzy(tenantId, postNames);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇宀椾綅鍚�
+	 *
+	 * @param id 涓婚敭
+	 * @return 宀椾綅鍚�
+	 */
+	public static String getPostName(Long id) {
+		return CacheUtil.get(SYS_CACHE, POST_NAME_ID, id, () -> {
+			R<String> result = getSysClient().getPostName(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇宀椾綅鍚嶉泦鍚�
+	 *
+	 * @param postIds 涓婚敭闆嗗悎
+	 * @return 宀椾綅鍚�
+	 */
+	public static List<String> getPostNames(String postIds) {
+		return CacheUtil.get(SYS_CACHE, POST_NAMES_ID, postIds, () -> {
+			R<List<String>> result = getSysClient().getPostNames(postIds);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瑙掕壊
+	 *
+	 * @param id 涓婚敭
+	 * @return Role
+	 */
+	public static Role getRole(Long id) {
+		return CacheUtil.get(SYS_CACHE, ROLE_ID, id, () -> {
+			R<Role> result = getSysClient().getRole(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瑙掕壊id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param roleNames 瑙掕壊鍚�
+	 * @return
+	 */
+	public static String getRoleIds(String tenantId, String roleNames) {
+		return CacheUtil.get(SYS_CACHE, ROLE_NAME, tenantId + StringPool.DASH + roleNames, () -> {
+			R<String> result = getSysClient().getRoleIds(tenantId, roleNames);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚�
+	 *
+	 * @param id 涓婚敭
+	 * @return 瑙掕壊鍚�
+	 */
+	public static String getRoleName(Long id) {
+		return CacheUtil.get(SYS_CACHE, ROLE_NAME_ID, id, () -> {
+			R<String> result = getSysClient().getRoleName(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瑙掕壊鍒悕
+	 *
+	 * @param id 涓婚敭
+	 * @return 瑙掕壊鍒悕
+	 */
+	public static String getRoleAlias(Long id) {
+		return CacheUtil.get(SYS_CACHE, ROLE_ALIAS_ID, id, () -> {
+			R<String> result = getSysClient().getRoleAlias(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚嶉泦鍚�
+	 *
+	 * @param roleIds 涓婚敭闆嗗悎
+	 * @return 瑙掕壊鍚�
+	 */
+	public static List<String> getRoleNames(String roleIds) {
+		return CacheUtil.get(SYS_CACHE, ROLE_NAMES_ID, roleIds, () -> {
+			R<List<String>> result = getSysClient().getRoleNames(roleIds);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瑙掕壊鍒悕闆嗗悎
+	 *
+	 * @param roleIds 涓婚敭闆嗗悎
+	 * @return 瑙掕壊鍒悕
+	 */
+	public static List<String> getRoleAliases(String roleIds) {
+		return CacheUtil.get(SYS_CACHE, ROLE_ALIASES_ID, roleIds, () -> {
+			R<List<String>> result = getSysClient().getRoleAliases(roleIds);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇绉熸埛
+	 *
+	 * @param id 涓婚敭
+	 * @return Tenant
+	 */
+	public static Tenant getTenant(Long id) {
+		return CacheUtil.get(SYS_CACHE, TENANT_ID, id, () -> {
+			R<Tenant> result = getSysClient().getTenant(id);
+			return result.getData();
+		}, Boolean.FALSE);
+	}
+
+	/**
+	 * 鑾峰彇绉熸埛
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @return Tenant
+	 */
+	public static Tenant getTenant(String tenantId) {
+		return CacheUtil.get(SYS_CACHE, TENANT_TENANT_ID, tenantId, () -> {
+			R<Tenant> result = getSysClient().getTenant(tenantId);
+			return result.getData();
+		}, Boolean.FALSE);
+	}
+
+	/**
+	 * 鑾峰彇绉熸埛浜у搧鍖�
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @return Tenant
+	 */
+	public static TenantPackage getTenantPackage(String tenantId) {
+		return CacheUtil.get(SYS_CACHE, TENANT_PACKAGE_ID, tenantId, () -> {
+			R<TenantPackage> result = getSysClient().getTenantPackage(tenantId);
+			return result.getData();
+		}, Boolean.FALSE);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/DeptDTO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/DeptDTO.java
new file mode 100644
index 0000000..681b7b1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/DeptDTO.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.dto;
+
+import com.vci.ubcs.system.entity.Dept;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DeptDTO extends Dept {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/MenuDTO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/MenuDTO.java
new file mode 100644
index 0000000..e7a9558
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/MenuDTO.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+public class MenuDTO implements Serializable {
+	private static final long serialVersionUID = 1L;
+	private String alias;
+	private String path;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/ParamDTO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/ParamDTO.java
new file mode 100644
index 0000000..3d075db
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/ParamDTO.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.dto;
+
+import com.vci.ubcs.system.entity.Param;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ParamDTO extends Param {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/PostDTO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/PostDTO.java
new file mode 100644
index 0000000..04fbe07
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/PostDTO.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.system.entity.Post;
+
+/**
+ * 宀椾綅琛ㄦ暟鎹紶杈撳璞″疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PostDTO extends Post {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleDTO.java
new file mode 100644
index 0000000..8339a65
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleDTO.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.system.entity.Role;
+
+/**
+ * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RoleDTO extends Role {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleMenuDTO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleMenuDTO.java
new file mode 100644
index 0000000..f2cf921
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleMenuDTO.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.vci.ubcs.system.entity.RoleMenu;
+
+/**
+ * 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RoleMenuDTO extends RoleMenu {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ApiScope.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ApiScope.java
new file mode 100644
index 0000000..493f3c2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ApiScope.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("pl_auth_scope_api")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ApiScope瀵硅薄", description = "ApiScope瀵硅薄")
+public class ApiScope extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鑿滃崟涓婚敭
+	 */
+	@ApiModelProperty(value = "鑿滃崟涓婚敭")
+	private Long menuId;
+	/**
+	 * 璧勬簮缂栧彿
+	 */
+	@ApiModelProperty(value = "璧勬簮缂栧彿")
+	private String resourceCode;
+	/**
+	 * 鎺ュ彛鏉冮檺鍚嶇О
+	 */
+	@ApiModelProperty(value = "鎺ュ彛鏉冮檺鍚嶇О")
+	private String scopeName;
+	/**
+	 * 鎺ュ彛鏉冮檺瀛楁
+	 */
+	@ApiModelProperty(value = "鎺ュ彛鏉冮檺瀛楁")
+	private String scopePath;
+	/**
+	 * 鎺ュ彛鏉冮檺绫诲瀷
+	 */
+	@ApiModelProperty(value = "鎺ュ彛鏉冮檺绫诲瀷")
+	private Integer scopeType;
+	/**
+	 * 鎺ュ彛鏉冮檺澶囨敞
+	 */
+	@ApiModelProperty(value = "鎺ュ彛鏉冮檺澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/AuthClient.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/AuthClient.java
new file mode 100644
index 0000000..62dcde1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/AuthClient.java
@@ -0,0 +1,98 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("pl_sys_client")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Client瀵硅薄", description = "Client瀵硅薄")
+public class AuthClient extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 瀹㈡埛绔痠d
+	 */
+	@ApiModelProperty(value = "瀹㈡埛绔痠d")
+	private String clientId;
+	/**
+	 * 瀹㈡埛绔瘑閽�
+	 */
+	@ApiModelProperty(value = "瀹㈡埛绔瘑閽�")
+	private String clientSecret;
+	/**
+	 * 璧勬簮闆嗗悎
+	 */
+	@ApiModelProperty(value = "璧勬簮闆嗗悎")
+	private String resourceIds;
+	/**
+	 * 鎺堟潈鑼冨洿
+	 */
+	@ApiModelProperty(value = "鎺堟潈鑼冨洿")
+	private String scope;
+	/**
+	 * 鎺堟潈绫诲瀷
+	 */
+	@ApiModelProperty(value = "鎺堟潈绫诲瀷")
+	private String authorizedGrantTypes;
+	/**
+	 * 鍥炶皟鍦板潃
+	 */
+	@ApiModelProperty(value = "鍥炶皟鍦板潃")
+	private String webServerRedirectUri;
+	/**
+	 * 鏉冮檺
+	 */
+	@ApiModelProperty(value = "鏉冮檺")
+	private String authorities;
+	/**
+	 * 浠ょ墝杩囨湡绉掓暟
+	 */
+	@ApiModelProperty(value = "浠ょ墝杩囨湡绉掓暟")
+	private Integer accessTokenValidity;
+	/**
+	 * 鍒锋柊浠ょ墝杩囨湡绉掓暟
+	 */
+	@ApiModelProperty(value = "鍒锋柊浠ょ墝杩囨湡绉掓暟")
+	private Integer refreshTokenValidity;
+	/**
+	 * 闄勫姞璇存槑
+	 */
+	@JsonIgnore
+	@ApiModelProperty(value = "闄勫姞璇存槑")
+	private String additionalInformation;
+	/**
+	 * 鑷姩鎺堟潈
+	 */
+	@ApiModelProperty(value = "鑷姩鎺堟潈")
+	private String autoapprove;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Combination.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Combination.java
new file mode 100644
index 0000000..a46d65c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Combination.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)瀹炰綋绫�
+ *
+ * @author ldc
+ * @since 2023-03-20 14:56:26
+ */
+@Data
+@TableName("pl_sys_combination")
+@ApiModel(value = "Combination瀵硅薄", description = "Combination瀵硅薄")
+public class Combination implements Serializable {
+	private static final long serialVersionUID = 905936175743821305L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 缁勫悎鍚嶇О
+	 */
+	@ApiModelProperty(value = "缁勫悎鍚嶇О")
+	private String name;
+
+	/**
+	 * 鎻忚堪
+	 */
+	@TableField("\"DESC\"")
+	@ApiModelProperty(value = "鎻忚堪")
+	private String desc;
+
+	/**
+	 * 鍒涘缓鏃堕棿
+	 */
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+
+	/**
+	 * 鍒涘缓浜�
+	 */
+	@ApiModelProperty(value = "鍒涘缓浜�")
+	private String createUser;
+
+	/**
+	 * 淇敼鏃堕棿
+	 */
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@ApiModelProperty(value = "淇敼鏃堕棿")
+	private Date updateTime;
+
+	/**
+	 * 淇敼浜�
+	 */
+	@ApiModelProperty(value = "淇敼浜�")
+	private String updateUser;
+
+	/**
+	 * 鎺堟潈浜�
+	 */
+	@ApiModelProperty(value = "鎺堟潈浜�")
+	private String licensors;
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) {
+			return true;
+		}
+		if (o == null || getClass() != o.getClass()) {
+			return false;
+		}
+		Combination that = (Combination) o;
+		return Objects.equals(id, that.id) && Objects.equals(name, that.name) && Objects.equals(desc, that.desc) && Objects.equals(createTime, that.createTime) && Objects.equals(createUser, that.createUser) && Objects.equals(updateTime, that.updateTime) && Objects.equals(updateUser, that.updateUser) && Objects.equals(licensors, that.licensors);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(id, name, desc, createTime, createUser, updateTime, updateUser, licensors);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/DataScope.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/DataScope.java
new file mode 100644
index 0000000..af86ec2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/DataScope.java
@@ -0,0 +1,86 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("pl_auth_scope_data")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DataScope瀵硅薄", description = "DataScope瀵硅薄")
+public class DataScope extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鑿滃崟涓婚敭
+	 */
+	@ApiModelProperty(value = "鑿滃崟涓婚敭")
+	private Long menuId;
+	/**
+	 * 璧勬簮缂栧彿
+	 */
+	@ApiModelProperty(value = "璧勬簮缂栧彿")
+	private String resourceCode;
+	/**
+	 * 鏁版嵁鏉冮檺鍚嶇О
+	 */
+	@ApiModelProperty(value = "鏁版嵁鏉冮檺鍚嶇О")
+	private String scopeName;
+	/**
+	 * 鏁版嵁鏉冮檺鍙瀛楁
+	 */
+	@ApiModelProperty(value = "鏁版嵁鏉冮檺鍙瀛楁")
+	private String scopeField;
+	/**
+	 * 鏁版嵁鏉冮檺绫诲悕
+	 */
+	@ApiModelProperty(value = "鏁版嵁鏉冮檺绫诲悕")
+	private String scopeClass;
+	/**
+	 * 鏁版嵁鏉冮檺瀛楁
+	 */
+	@ApiModelProperty(value = "鏁版嵁鏉冮檺瀛楁")
+	private String scopeColumn;
+	/**
+	 * 鏁版嵁鏉冮檺绫诲瀷
+	 */
+	@ApiModelProperty(value = "鏁版嵁鏉冮檺绫诲瀷")
+	private Integer scopeType;
+	/**
+	 * 鏁版嵁鏉冮檺鍊煎煙
+	 */
+	@ApiModelProperty(value = "鏁版嵁鏉冮檺鍊煎煙")
+	private String scopeValue;
+	/**
+	 * 鏁版嵁鏉冮檺澶囨敞
+	 */
+	@ApiModelProperty(value = "鏁版嵁鏉冮檺澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Dept.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Dept.java
new file mode 100644
index 0000000..77a8b90
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Dept.java
@@ -0,0 +1,108 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_dept")
+@ApiModel(value = "Dept瀵硅薄", description = "Dept瀵硅薄")
+public class Dept implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	@ApiModelProperty(value = "绉熸埛ID")
+	private String tenantId;
+
+	/**
+	 * 鐖朵富閿�
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐖朵富閿�")
+	private Long parentId;
+
+	/**
+	 * 鏈烘瀯鍚�
+	 */
+	@ApiModelProperty(value = "鏈烘瀯鍚�")
+	private String deptName;
+
+	/**
+	 * 鏈烘瀯鍏ㄧО
+	 */
+	@ApiModelProperty(value = "閮ㄩ棬鍏ㄧО")
+	private String fullName;
+
+	/**
+	 * 绁栫骇鏈烘瀯涓婚敭
+	 */
+	@ApiModelProperty(value = "绁栫骇鏈烘瀯涓婚敭")
+	private String ancestors;
+
+	/**
+	 * 鏈烘瀯绫诲瀷
+	 */
+	@ApiModelProperty(value = "鏈烘瀯绫诲瀷")
+	private Integer deptCategory;
+
+	/**
+	 * 鎺掑簭
+	 */
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+	/**
+	 * 鏄惁宸插垹闄�
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "鏄惁宸插垹闄�")
+	private Integer isDeleted;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Menu.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Menu.java
new file mode 100644
index 0000000..790f531
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Menu.java
@@ -0,0 +1,149 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.utils.Func;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_sys_menu")
+@ApiModel(value = "Menu瀵硅薄", description = "Menu瀵硅薄")
+public class Menu implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鑿滃崟鐖朵富閿�
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鑿滃崟鐖朵富閿�")
+	private Long parentId;
+
+	/**
+	 * 鑿滃崟缂栧彿
+	 */
+	@ApiModelProperty(value = "鑿滃崟缂栧彿")
+	private String code;
+
+	/**
+	 * 鑿滃崟鍚嶇О
+	 */
+	@ApiModelProperty(value = "鑿滃崟鍚嶇О")
+	private String name;
+
+	/**
+	 * 鑿滃崟鍒悕
+	 */
+	@ApiModelProperty(value = "鑿滃崟鍒悕")
+	private String alias;
+
+	/**
+	 * 璇锋眰鍦板潃
+	 */
+	@ApiModelProperty(value = "璇锋眰鍦板潃")
+	private String path;
+
+	/**
+	 * 鑿滃崟璧勬簮
+	 */
+	@ApiModelProperty(value = "鑿滃崟璧勬簮")
+	private String source;
+
+	/**
+	 * 鎺掑簭
+	 */
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+
+	/**
+	 * 鑿滃崟绫诲瀷
+	 */
+	@ApiModelProperty(value = "鑿滃崟绫诲瀷")
+	private Integer category;
+
+	/**
+	 * 鎿嶄綔鎸夐挳绫诲瀷
+	 */
+	@ApiModelProperty(value = "鎿嶄綔鎸夐挳绫诲瀷")
+	private Integer action;
+
+	/**
+	 * 鏄惁鎵撳紑鏂伴〉闈�
+	 */
+	@ApiModelProperty(value = "鏄惁鎵撳紑鏂伴〉闈�")
+	private Integer isOpen;
+
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+	/**
+	 * 鏄惁宸插垹闄�
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "鏄惁宸插垹闄�")
+	private Integer isDeleted;
+
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		Menu other = (Menu) obj;
+		if (Func.equals(this.getId(), other.getId())) {
+			return true;
+		}
+		return false;
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(id, parentId, code);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Param.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Param.java
new file mode 100644
index 0000000..a72e25a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Param.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_oq_param")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Param瀵硅薄", description = "Param瀵硅薄")
+public class Param extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鍙傛暟鍚�
+	 */
+	@ApiModelProperty(value = "鍙傛暟鍚�")
+	private String paramName;
+
+	/**
+	 * 鍙傛暟閿�
+	 */
+	@ApiModelProperty(value = "鍙傛暟閿�")
+	private String paramKey;
+
+	/**
+	 * 鍙傛暟鍊�
+	 */
+	@ApiModelProperty(value = "鍙傛暟鍊�")
+	private String paramValue;
+
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Post.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Post.java
new file mode 100644
index 0000000..ba72d5e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Post.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 宀椾綅琛ㄥ疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_post")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Post瀵硅薄", description = "宀椾綅琛�")
+public class Post extends TenantEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 绫诲瀷
+	 */
+	@ApiModelProperty(value = "绫诲瀷")
+	private Integer category;
+	/**
+	 * 宀椾綅缂栧彿
+	 */
+	@ApiModelProperty(value = "宀椾綅缂栧彿")
+	private String postCode;
+	/**
+	 * 宀椾綅鍚嶇О
+	 */
+	@ApiModelProperty(value = "宀椾綅鍚嶇О")
+	private String postName;
+	/**
+	 * 宀椾綅鎺掑簭
+	 */
+	@ApiModelProperty(value = "宀椾綅鎺掑簭")
+	private Integer sort;
+	/**
+	 * 宀椾綅鎻忚堪
+	 */
+	@ApiModelProperty(value = "宀椾綅鎻忚堪")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Region.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Region.java
new file mode 100644
index 0000000..17bd660
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Region.java
@@ -0,0 +1,128 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 琛屾斂鍖哄垝琛ㄥ疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_sys_region")
+@ApiModel(value = "Region瀵硅薄", description = "琛屾斂鍖哄垝琛�")
+public class Region implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鍖哄垝缂栧彿
+	 */
+	@TableId(value = "code", type = IdType.INPUT)
+	@ApiModelProperty(value = "鍖哄垝缂栧彿")
+	private String code;
+	/**
+	 * 鐖跺尯鍒掔紪鍙�
+	 */
+	@ApiModelProperty(value = "鐖跺尯鍒掔紪鍙�")
+	private String parentCode;
+	/**
+	 * 绁栧尯鍒掔紪鍙�
+	 */
+	@ApiModelProperty(value = "绁栧尯鍒掔紪鍙�")
+	private String ancestors;
+	/**
+	 * 鍖哄垝鍚嶇О
+	 */
+	@ApiModelProperty(value = "鍖哄垝鍚嶇О")
+	private String name;
+	/**
+	 * 鐪佺骇鍖哄垝缂栧彿
+	 */
+	@ApiModelProperty(value = "鐪佺骇鍖哄垝缂栧彿")
+	private String provinceCode;
+	/**
+	 * 鐪佺骇鍚嶇О
+	 */
+	@ApiModelProperty(value = "鐪佺骇鍚嶇О")
+	private String provinceName;
+	/**
+	 * 甯傜骇鍖哄垝缂栧彿
+	 */
+	@ApiModelProperty(value = "甯傜骇鍖哄垝缂栧彿")
+	private String cityCode;
+	/**
+	 * 甯傜骇鍚嶇О
+	 */
+	@ApiModelProperty(value = "甯傜骇鍚嶇О")
+	private String cityName;
+	/**
+	 * 鍖虹骇鍖哄垝缂栧彿
+	 */
+	@ApiModelProperty(value = "鍖虹骇鍖哄垝缂栧彿")
+	private String districtCode;
+	/**
+	 * 鍖虹骇鍚嶇О
+	 */
+	@ApiModelProperty(value = "鍖虹骇鍚嶇О")
+	private String districtName;
+	/**
+	 * 闀囩骇鍖哄垝缂栧彿
+	 */
+	@ApiModelProperty(value = "闀囩骇鍖哄垝缂栧彿")
+	private String townCode;
+	/**
+	 * 闀囩骇鍚嶇О
+	 */
+	@ApiModelProperty(value = "闀囩骇鍚嶇О")
+	private String townName;
+	/**
+	 * 鏉戠骇鍖哄垝缂栧彿
+	 */
+	@ApiModelProperty(value = "鏉戠骇鍖哄垝缂栧彿")
+	private String villageCode;
+	/**
+	 * 鏉戠骇鍚嶇О
+	 */
+	@ApiModelProperty(value = "鏉戠骇鍚嶇О")
+	private String villageName;
+	/**
+	 * 灞傜骇
+	 */
+	@ApiModelProperty(value = "灞傜骇")
+	private Integer regionLevel;
+	/**
+	 * 鎺掑簭
+	 */
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Role.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Role.java
new file mode 100644
index 0000000..e69f157
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Role.java
@@ -0,0 +1,100 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@NoArgsConstructor
+@TableName("pl_org_role")
+@ApiModel(value = "Role瀵硅薄", description = "Role瀵硅薄")
+public class Role implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	@ApiModelProperty(value = "绉熸埛ID")
+	private String tenantId;
+
+	/**
+	 * 鐖朵富閿�
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐖朵富閿�")
+	private Long parentId;
+
+	/**
+	 * 瑙掕壊鍚�
+	 */
+	@ApiModelProperty(value = "瑙掕壊鍚�")
+	private String roleName;
+
+	/**
+	 * 鎺掑簭
+	 */
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+
+	/**
+	 * 瑙掕壊鍒悕
+	 */
+	@ApiModelProperty(value = "瑙掕壊鍒悕")
+	private String roleAlias;
+
+	/**
+	 * 鏄惁宸插垹闄�
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "鏄惁宸插垹闄�")
+	private Integer isDeleted;
+
+	public Role(String tenantId, Long parentId, String roleName, Integer sort, String roleAlias, Integer isDeleted) {
+		this.tenantId = tenantId;
+		this.parentId = parentId;
+		this.roleName = roleName;
+		this.sort = sort;
+		this.roleAlias = roleAlias;
+		this.isDeleted = isDeleted;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleMenu.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleMenu.java
new file mode 100644
index 0000000..1483b7e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleMenu.java
@@ -0,0 +1,70 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@NoArgsConstructor
+@TableName("pl_org_role_menu")
+@ApiModel(value = "RoleMenu瀵硅薄", description = "RoleMenu瀵硅薄")
+public class RoleMenu implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鑿滃崟id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鑿滃崟id")
+	private Long menuId;
+
+	/**
+	 * 瑙掕壊id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "瑙掕壊id")
+	private Long roleId;
+
+	public RoleMenu(Long menuId, Long roleId) {
+		this.menuId = menuId;
+		this.roleId = roleId;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleScope.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleScope.java
new file mode 100644
index 0000000..cb34c1f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleScope.java
@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_auth_role_scope")
+@ApiModel(value = "RoleScope瀵硅薄", description = "RoleScope瀵硅薄")
+public class RoleScope implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鏉冮檺绫诲瀷
+	 */
+	@ApiModelProperty(value = "鏉冮檺绫诲瀷")
+	private Integer scopeCategory;
+
+	/**
+	 * 鏉冮檺id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鏉冮檺id")
+	private Long scopeId;
+
+	/**
+	 * 瑙掕壊id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "瑙掕壊id")
+	private Long roleId;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Strategy.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Strategy.java
new file mode 100644
index 0000000..3526db2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Strategy.java
@@ -0,0 +1,175 @@
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 瀵嗙爜绛栫暐(PlSysStrategy)瀹炰綋绫�
+ *
+ * @author ldc
+ * @since 2023-03-20 15:00:22
+ */
+@Data
+@TableName("pl_sys_pwdstrategy")
+@ApiModel(value = "Strategy瀵硅薄", description = "Strategy瀵硅薄")
+public class Strategy implements Serializable {
+	private static final long serialVersionUID = 420195522547332354L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 绛栫暐鍚嶇О
+	 */
+	@ApiModelProperty(value = "绛栫暐鍚嶇О")
+	private String strategyName;
+
+	/**
+	 * 瀵嗙爜鏈�灏忛暱搴�
+	 */
+	@ApiModelProperty(value = "瀵嗙爜鏈�灏忛暱搴�")
+	private Long minPwdLen;
+
+	/**
+	 * 瀵嗙爜鏈�澶ч暱搴�
+	 */
+	@ApiModelProperty(value = "瀵嗙爜鏈�澶ч暱搴�")
+	private Long maxPwdLen;
+
+	/**
+	 * 瀵嗙爜缁勫悎鏂瑰紡
+	 */
+	@ApiModelProperty(value = "瀵嗙爜缁勫悎鏂瑰紡")
+	private String combinationIds;
+
+	/**
+	 * 蹇呭~绉嶇被
+	 */
+	@ApiModelProperty(value = "蹇呭~绉嶇被")
+	private Long requiredType;
+
+	/**
+	 * 杩囨湡鏃堕棿
+	 */
+	@ApiModelProperty(value = "杩囨湡鏃堕棿")
+	private Long expirationTime;
+
+	/**
+	 * 鎻愰啋鏃堕棿
+	 */
+	@ApiModelProperty(value = "鎻愰啋鏃堕棿")
+	private Long reminderTime;
+
+	/**
+	 * 閿佸畾娆℃暟
+	 */
+	@ApiModelProperty(value = "閿佸畾娆℃暟")
+	private Long lockingNum;
+
+	/**
+	 * 閿佸畾鏃堕棿
+	 */
+	@ApiModelProperty(value = "閿佸畾鏃堕棿")
+	private Long lockingTime;
+
+	/**
+	 * 鎻忚堪
+	 */
+	@ApiModelProperty(value = "鎻忚堪")
+	@TableField("\"DESC\"")
+	private String desc;
+
+	/**
+	 * 鏄惁涓洪粯璁ょ瓥鐣�
+	 */
+	@ApiModelProperty(value = "鏄惁涓洪粯璁ょ瓥鐣�,鏄惁涓洪粯璁わ紝1浠h〃榛樿锛�0浠h〃闈為粯璁�")
+	private Long isDefault;
+
+	/**
+	 * 鍒涘缓鏃堕棿
+	 */
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+
+	/**
+	 * 鍒涘缓浜�
+	 */
+	@ApiModelProperty(value = "鍒涘缓浜�")
+	private String createUser;
+
+	/**
+	 * 淇敼鏃堕棿
+	 */
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@ApiModelProperty(value = "淇敼鏃堕棿")
+	private Date updateTime;
+
+	/**
+	 * 淇敼浜�
+	 */
+	@ApiModelProperty(value = "淇敼浜�")
+	private String updateUser;
+
+	/**
+	 * 鎺堟潈浜�
+	 */
+	@ApiModelProperty(value = "鎺堟潈浜�")
+	private String licensors;
+
+	/**
+	 * 缁勫悎鍚嶇О
+	 */
+	@ApiModelProperty(value = "缁勫悎鍚嶇О")
+	@TableField(exist = false)
+	private String combinationNames;
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) {
+			return true;
+		}
+		if (o == null || getClass() != o.getClass()) {
+			return false;
+		}
+		if (!super.equals(o)) {
+			return false;
+		}
+		Strategy strategy = (Strategy) o;
+		return Objects.equals(id, strategy.id) && Objects.equals(strategyName, strategy.strategyName) && Objects.equals(minPwdLen, strategy.minPwdLen) && Objects.equals(maxPwdLen, strategy.maxPwdLen) && Objects.equals(combinationIds, strategy.combinationIds) && Objects.equals(requiredType, strategy.requiredType) && Objects.equals(expirationTime, strategy.expirationTime) && Objects.equals(reminderTime, strategy.reminderTime) && Objects.equals(lockingNum, strategy.lockingNum) && Objects.equals(lockingTime, strategy.lockingTime) && Objects.equals(desc, strategy.desc) && Objects.equals(isDefault, strategy.isDefault);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(super.hashCode(), id, strategyName, minPwdLen, maxPwdLen, combinationIds, requiredType, expirationTime, reminderTime, lockingNum, lockingTime, desc, isDefault);
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Tenant.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Tenant.java
new file mode 100644
index 0000000..8fc78f3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Tenant.java
@@ -0,0 +1,103 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.NullSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_tenant")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Tenant瀵硅薄", description = "Tenant瀵硅薄")
+public class Tenant extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	@ApiModelProperty(value = "绉熸埛ID")
+	private String tenantId;
+
+	/**
+	 * 绉熸埛鍏ㄧО
+	 */
+	@ApiModelProperty(value = "绉熸埛鍏ㄧО")
+	private String fullName;
+
+	/**
+	 * 绉熸埛鍚嶇О
+	 */
+	@ApiModelProperty(value = "绉熸埛鍚嶇О")
+	private String tenantName;
+	/**
+	 * 鍩熷悕鍦板潃
+	 */
+	@ApiModelProperty(value = "鍩熷悕鍦板潃")
+	private String domainUrl;
+	/**
+	 * 绯荤粺鑳屾櫙
+	 */
+	@ApiModelProperty(value = "绯荤粺鑳屾櫙")
+	private String backgroundUrl;
+	/**
+	 * 鑱旂郴浜�
+	 */
+	@ApiModelProperty(value = "鑱旂郴浜�")
+	private String linkman;
+	/**
+	 * 鑱旂郴鐢佃瘽
+	 */
+	@ApiModelProperty(value = "鑱旂郴鐢佃瘽")
+	private String contactNumber;
+	/**
+	 * 鑱旂郴鍦板潃
+	 */
+	@ApiModelProperty(value = "鑱旂郴鍦板潃")
+	private String address;
+
+	/**
+	 * 浜у搧鍖匢D
+	 */
+	@JsonSerialize(nullsUsing = NullSerializer.class)
+	@ApiModelProperty(value = "浜у搧鍖匢D")
+	private Long packageId;
+	/**
+	 * 鏁版嵁婧怚D
+	 */
+	@JsonSerialize(nullsUsing = NullSerializer.class)
+	@ApiModelProperty(value = "鏁版嵁婧怚D")
+	private Long datasourceId;
+	/**
+	 * 鎺堟潈鐮�
+	 */
+	@ApiModelProperty(value = "鎺堟潈鐮�")
+	private String licenseKey;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TenantPackage.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TenantPackage.java
new file mode 100644
index 0000000..06be789
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TenantPackage.java
@@ -0,0 +1,56 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 绉熸埛浜у搧琛ㄥ疄浣撶被
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("pl_org_tenant_package")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "TenantPackage瀵硅薄", description = "绉熸埛浜у搧琛�")
+public class TenantPackage extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 浜у搧鍖呭悕绉�
+	 */
+	@ApiModelProperty(value = "浜у搧鍖呭悕绉�")
+	private String packageName;
+	/**
+	 * 鑿滃崟ID
+	 */
+	@ApiModelProperty(value = "鑿滃崟ID")
+	private String menuId;
+	/**
+	 * 澶囨敞
+	 */
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenu.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenu.java
new file mode 100644
index 0000000..d83ca64
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenu.java
@@ -0,0 +1,61 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 椤堕儴鑿滃崟琛ㄥ疄浣撶被
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("pl_sys_top_menu")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "TopMenu瀵硅薄", description = "椤堕儴鑿滃崟琛�")
+public class TopMenu extends TenantEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 椤堕儴鑿滃崟缂栧彿
+	 */
+	@ApiModelProperty(value = "椤堕儴鑿滃崟缂栧彿")
+	private String code;
+	/**
+	 * 椤堕儴鑿滃崟鍚�
+	 */
+	@ApiModelProperty(value = "椤堕儴鑿滃崟鍚�")
+	private String name;
+	/**
+	 * 椤堕儴鑿滃崟璧勬簮
+	 */
+	@ApiModelProperty(value = "椤堕儴鑿滃崟璧勬簮")
+	private String source;
+	/**
+	 * 椤堕儴鑿滃崟鎺掑簭
+	 */
+	@ApiModelProperty(value = "椤堕儴鑿滃崟鎺掑簭")
+	private Integer sort;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenuSetting.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenuSetting.java
new file mode 100644
index 0000000..2c156ef
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenuSetting.java
@@ -0,0 +1,38 @@
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+/**
+ * TopMenuSetting
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_sys_top_menu_setting")
+public class TopMenuSetting {
+
+	/**
+	 * 涓婚敭id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 椤堕儴鑿滃崟id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long topMenuId;
+
+	/**
+	 * 鑿滃崟id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long menuId;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/UserPwdstrategy.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/UserPwdstrategy.java
new file mode 100644
index 0000000..fbe8bf9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/UserPwdstrategy.java
@@ -0,0 +1,77 @@
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * (UserPwdStrtategy)瀹炰綋绫�
+ *
+ * @author makejava
+ * @since 2023-03-20 14:59:29
+ */
+
+@Data
+@NoArgsConstructor
+@TableName("pl_sys_user_pwdstrategy")
+@ApiModel(value = "UserPwdStrtategy", description = "UserPwdStrtategy")
+public class UserPwdstrategy implements Serializable {
+
+	private static final long serialVersionUid = -556926788101426521L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "ID", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鐢ㄦ埛id
+	 */
+	@ApiModelProperty(value = "鐢ㄦ埛id")
+	private Long userId;
+
+	/**
+	 * 瀵嗙爜绛栫暐id
+	 */
+	@ApiModelProperty(value = "瀵嗙爜绛栫暐id")
+	@TableField(value = "PWDSTRATEGY_ID")
+	private Long pwdstrategyId;
+
+	public UserPwdstrategy(Long userId, Long pwdStrategyId) {
+		this.userId = userId;
+		this.pwdstrategyId = pwdStrategyId;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) {
+			return true;
+		}
+		if (o == null || getClass() != o.getClass()) {
+			return false;
+		}
+		UserPwdstrategy that = (UserPwdstrategy) o;
+		return Objects.equals(id, that.id) && Objects.equals(userId, that.userId) && Objects.equals(pwdstrategyId, that.pwdstrategyId);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(id, userId, pwdstrategyId);
+	}
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ValueRange.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ValueRange.java
new file mode 100644
index 0000000..910c211
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ValueRange.java
@@ -0,0 +1,104 @@
+package com.vci.ubcs.system.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * (ValueRange)瀹炰綋绫�
+ *
+ * @author makejava
+ * @since 2023-03-20 14:59:29
+ */
+@Data
+@TableName("pl_sys_value_range")
+@ApiModel(value = "ValueRange", description = "ValueRange")
+public class ValueRange implements Serializable {
+	private static final long serialVersionUID = -62275902377620042L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鍊�
+	 */
+	@ApiModelProperty(value = "鍊�")
+	private String value;
+
+	/**
+	 * 缁勫悎鏂瑰紡ID
+	 */
+	@ApiModelProperty(value = "缁勫悎鏂瑰紡ID")
+	private Long combinationId;
+
+	/**
+	 * 鍒涘缓鏃堕棿
+	 */
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+
+	/**
+	 * 鍒涘缓浜�
+	 */
+	@ApiModelProperty(value = "鍒涘缓浜�")
+	private String createUser;
+
+	/**
+	 * 淇敼鏃堕棿
+	 */
+	@DateTimeFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+		pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@ApiModelProperty(value = "淇敼鏃堕棿")
+	private Date updateTime;
+
+	/**
+	 * 淇敼浜�
+	 */
+	@ApiModelProperty(value = "淇敼浜�")
+	private String updateUser;
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) {
+			return true;
+		}
+		if (o == null || getClass() != o.getClass()) {
+			return false;
+		}
+		if (!super.equals(o)) {
+			return false;
+		}
+		ValueRange that = (ValueRange) o;
+		return Objects.equals(id, that.id) && Objects.equals(value, that.value) && Objects.equals(combinationId, that.combinationId);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(super.hashCode(), id, value, combinationId);
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java
new file mode 100644
index 0000000..b72209a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java
@@ -0,0 +1,324 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import com.vci.ubcs.system.entity.*;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_SYSTEM_NAME,
+	fallback = ISysClientFallback.class
+)
+public interface ISysClient {
+
+	String API_PREFIX = "/client";
+	String MENU = API_PREFIX + "/menu";
+	String DEPT = API_PREFIX + "/dept";
+	String DEPT_IDS = API_PREFIX + "/dept-ids";
+	String DEPT_IDS_FUZZY = API_PREFIX + "/dept-ids-fuzzy";
+	String DEPT_NAME = API_PREFIX + "/dept-name";
+	String DEPT_NAMES = API_PREFIX + "/dept-names";
+	String DEPT_CHILD = API_PREFIX + "/dept-child";
+	String POST = API_PREFIX + "/post";
+	String POST_IDS = API_PREFIX + "/post-ids";
+	String POST_IDS_FUZZY = API_PREFIX + "/post-ids-fuzzy";
+	String POST_NAME = API_PREFIX + "/post-name";
+	String POST_NAMES = API_PREFIX + "/post-names";
+	String ROLE = API_PREFIX + "/role";
+	String ROLE_IDS = API_PREFIX + "/role-ids";
+	String ROLE_NAME = API_PREFIX + "/role-name";
+	String ROLE_NAMES = API_PREFIX + "/role-names";
+	String ROLE_ALIAS = API_PREFIX + "/role-alias";
+	String ROLE_ALIASES = API_PREFIX + "/role-aliases";
+	String TENANT = API_PREFIX + "/tenant";
+	String TENANT_ID = API_PREFIX + "/tenant-id";
+	//鏌ヨ瓒呯骇绠$悊鍛�
+	String TENANT_MGR_ID = API_PREFIX + "/tenant-mgr-id";
+	String TENANT_PACKAGE = API_PREFIX + "/tenant-package";
+	String PARAM = API_PREFIX + "/param";
+	String PARAM_VALUE = API_PREFIX + "/param-value";
+	String REGION = API_PREFIX + "/region";
+	String STRATEGY = API_PREFIX + "/query-tenantid-name";
+	String STRATEGYBYID = API_PREFIX + "/query-userid";
+	String REGEX = API_PREFIX + "/combination-regex";
+	String REGEXONE = API_PREFIX + "/combination-regex-one";
+	/**
+	 * 鑾峰彇鑿滃崟
+	 *
+	 * @param id 涓婚敭
+	 * @return Menu
+	 */
+	@GetMapping(MENU)
+	R<Menu> getMenu(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬
+	 *
+	 * @param id 涓婚敭
+	 * @return Dept
+	 */
+	@GetMapping(DEPT)
+	R<Dept> getDept(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param deptNames 閮ㄩ棬鍚�
+	 * @return 閮ㄩ棬id
+	 */
+	@GetMapping(DEPT_IDS)
+	R<String> getDeptIds(@RequestParam("tenantId") String tenantId, @RequestParam("deptNames") String deptNames);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param deptNames 閮ㄩ棬鍚�
+	 * @return 閮ㄩ棬id
+	 */
+	@GetMapping(DEPT_IDS_FUZZY)
+	R<String> getDeptIdsByFuzzy(@RequestParam("tenantId") String tenantId, @RequestParam("deptNames") String deptNames);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鍚�
+	 *
+	 * @param id 涓婚敭
+	 * @return 閮ㄩ棬鍚�
+	 */
+	@GetMapping(DEPT_NAME)
+	R<String> getDeptName(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鍚�
+	 *
+	 * @param deptIds 涓婚敭
+	 * @return
+	 */
+	@GetMapping(DEPT_NAMES)
+	R<List<String>> getDeptNames(@RequestParam("deptIds") String deptIds);
+
+	/**
+	 * 鑾峰彇瀛愰儴闂↖D
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	@GetMapping(DEPT_CHILD)
+	R<List<Dept>> getDeptChild(@RequestParam("deptId") Long deptId);
+
+	/**
+	 * 鑾峰彇宀椾綅
+	 *
+	 * @param id 涓婚敭
+	 * @return Post
+	 */
+	@GetMapping(POST)
+	R<Post> getPost(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇宀椾綅id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param postNames 宀椾綅鍚�
+	 * @return 宀椾綅id
+	 */
+	@GetMapping(POST_IDS)
+	R<String> getPostIds(@RequestParam("tenantId") String tenantId, @RequestParam("postNames") String postNames);
+
+	/**
+	 * 鑾峰彇宀椾綅id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param postNames 宀椾綅鍚�
+	 * @return 宀椾綅id
+	 */
+	@GetMapping(POST_IDS_FUZZY)
+	R<String> getPostIdsByFuzzy(@RequestParam("tenantId") String tenantId, @RequestParam("postNames") String postNames);
+
+	/**
+	 * 鑾峰彇宀椾綅鍚�
+	 *
+	 * @param id 涓婚敭
+	 * @return 宀椾綅鍚�
+	 */
+	@GetMapping(POST_NAME)
+	R<String> getPostName(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇宀椾綅鍚�
+	 *
+	 * @param postIds 涓婚敭
+	 * @return
+	 */
+	@GetMapping(POST_NAMES)
+	R<List<String>> getPostNames(@RequestParam("postIds") String postIds);
+
+	/**
+	 * 鑾峰彇瑙掕壊
+	 *
+	 * @param id 涓婚敭
+	 * @return Role
+	 */
+	@GetMapping(ROLE)
+	R<Role> getRole(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇瑙掕壊id
+	 *
+	 * @param tenantId  绉熸埛id
+	 * @param roleNames 瑙掕壊鍚�
+	 * @return 瑙掕壊id
+	 */
+	@GetMapping(ROLE_IDS)
+	R<String> getRoleIds(@RequestParam("tenantId") String tenantId, @RequestParam("roleNames") String roleNames);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚�
+	 *
+	 * @param id 涓婚敭
+	 * @return 瑙掕壊鍚�
+	 */
+	@GetMapping(ROLE_NAME)
+	R<String> getRoleName(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍒悕
+	 *
+	 * @param id 涓婚敭
+	 * @return 瑙掕壊鍒悕
+	 */
+	@GetMapping(ROLE_ALIAS)
+	R<String> getRoleAlias(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚�
+	 *
+	 * @param roleIds 涓婚敭
+	 * @return
+	 */
+	@GetMapping(ROLE_NAMES)
+	R<List<String>> getRoleNames(@RequestParam("roleIds") String roleIds);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍒悕
+	 *
+	 * @param roleIds 涓婚敭
+	 * @return 瑙掕壊鍒悕
+	 */
+	@GetMapping(ROLE_ALIASES)
+	R<List<String>> getRoleAliases(@RequestParam("roleIds") String roleIds);
+
+	/**
+	 * 鑾峰彇绉熸埛
+	 *
+	 * @param id 涓婚敭
+	 * @return Tenant
+	 */
+	@GetMapping(TENANT)
+	R<Tenant> getTenant(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇绉熸埛
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @return Tenant
+	 */
+	@GetMapping(TENANT_ID)
+	R<Tenant> getTenant(@RequestParam("tenantId") String tenantId);
+
+	/**
+	 * 鑾峰彇绉熸埛浜у搧鍖�
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @return Tenant
+	 */
+	@GetMapping(TENANT_PACKAGE)
+	R<TenantPackage> getTenantPackage(@RequestParam("tenantId") String tenantId);
+
+	/**
+	 * 鑾峰彇鍙傛暟
+	 *
+	 * @param id 涓婚敭
+	 * @return Param
+	 */
+	@GetMapping(PARAM)
+	R<Param> getParam(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇鍙傛暟閰嶇疆
+	 *
+	 * @param paramKey 鍙傛暟key
+	 * @return String
+	 */
+	@GetMapping(PARAM_VALUE)
+	R<String> getParamValue(@RequestParam("paramKey") String paramKey);
+
+	/**
+	 * 鑾峰彇琛屾斂鍖哄垝
+	 *
+	 * @param code 涓婚敭
+	 * @return Region
+	 */
+	@GetMapping(REGION)
+	R<Region> getRegion(@RequestParam("code") String code);
+
+	/**
+	 * 鏍规嵁绉熸埛id浠ュ強鐢ㄦ埛鍚嶈幏鍙栧瘑鐮佺瓥鐣�
+	 * @param tenantId
+	 * @param name
+	 * @return
+	 */
+	@PostMapping(STRATEGY)
+	R<Strategy>  getByTenantIdAndName(@RequestParam("tenantId") String tenantId, @RequestParam("name") String name);
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛id鑾峰彇瀵嗙爜绛栫暐
+	 * @param userId
+	 * @return
+	 */
+	@PostMapping(STRATEGYBYID)
+	R<Strategy>  getByUserId(@RequestParam("id") Long userId);
+
+	/**
+	 * 鏍规嵁缁勫悎鏂瑰紡id鑾峰彇鍊�
+	 * @return
+	 */
+	@PostMapping(REGEX)
+	R<String> getRegex(@RequestBody List<String> combinationIds);
+
+	/**
+	 * 鏍规嵁缁勫悎鏂瑰紡id鑾峰彇鍊�
+	 * @return
+	 */
+	@PostMapping(REGEXONE)
+	R<List<String>> getRegexByList(@RequestBody List<String> combinationIds);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java
new file mode 100644
index 0000000..2cf5e43
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java
@@ -0,0 +1,174 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import com.vci.ubcs.system.entity.*;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class ISysClientFallback implements ISysClient {
+
+	@Override
+	public R<Menu> getMenu(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Dept> getDept(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getDeptIds(String tenantId, String deptNames) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getDeptIdsByFuzzy(String tenantId, String deptNames) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getDeptName(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<String>> getDeptNames(String deptIds) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<Dept>> getDeptChild(Long deptId) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Post> getPost(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getPostIds(String tenantId, String postNames) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getPostIdsByFuzzy(String tenantId, String postNames) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getPostName(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<String>> getPostNames(String postIds) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Role> getRole(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getRoleIds(String tenantId, String roleNames) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getRoleName(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getRoleAlias(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<String>> getRoleNames(String roleIds) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<String>> getRoleAliases(String roleIds) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Tenant> getTenant(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Tenant> getTenant(String tenantId) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<TenantPackage> getTenantPackage(String tenantId) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Param> getParam(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getParamValue(String paramKey) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Region> getRegion(String code) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Strategy> getByTenantIdAndName(String tenantId, String name) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Strategy> getByUserId(Long userId) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<String> getRegex(List<String> combinationIds) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<String>> getRegexByList(List<String> combinationIds) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ApiScopeVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ApiScopeVO.java
new file mode 100644
index 0000000..65481f4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ApiScopeVO.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.vci.ubcs.system.entity.ApiScope;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ApiScopeVO瀵硅薄", description = "ApiScopeVO瀵硅薄")
+public class ApiScopeVO extends ApiScope {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 瑙勫垯绫诲瀷鍚�
+	 */
+	private String scopeTypeName;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/CheckedTreeVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/CheckedTreeVO.java
new file mode 100644
index 0000000..feecf0e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/CheckedTreeVO.java
@@ -0,0 +1,37 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * CheckedTreeVO
+ *
+ * @author Chill
+ */
+@Data
+public class CheckedTreeVO {
+
+	private List<String> menu;
+
+	private List<String> dataScope;
+
+	private List<String> apiScope;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DataScopeVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DataScopeVO.java
new file mode 100644
index 0000000..077bbde
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DataScopeVO.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.vci.ubcs.system.entity.DataScope;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DataScopeVO瀵硅薄", description = "DataScopeVO瀵硅薄")
+public class DataScopeVO extends DataScope {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 瑙勫垯绫诲瀷鍚�
+	 */
+	private String scopeTypeName;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DeptVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DeptVO.java
new file mode 100644
index 0000000..0b07ad1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DeptVO.java
@@ -0,0 +1,84 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.system.entity.Dept;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DeptVO瀵硅薄", description = "DeptVO瀵硅薄")
+public class DeptVO extends Dept implements INode<DeptVO> {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 鐖惰妭鐐笽D
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<DeptVO> children;
+
+	/**
+	 * 鏄惁鏈夊瓙瀛欒妭鐐�
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private Boolean hasChildren;
+
+	@Override
+	public List<DeptVO> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 涓婄骇鏈烘瀯
+	 */
+	private String parentName;
+
+	/**
+	 * 鏈烘瀯绫诲瀷鍚嶇О
+	 */
+	private String deptCategoryName;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantTreeVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantTreeVO.java
new file mode 100644
index 0000000..7f4337a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantTreeVO.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import lombok.Data;
+import org.springblade.core.tool.node.TreeNode;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * GrantTreeVO
+ *
+ * @author Chill
+ */
+@Data
+public class GrantTreeVO implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	private List<TreeNode> menu;
+
+	private List<TreeNode> dataScope;
+
+	private List<TreeNode> apiScope;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantVO.java
new file mode 100644
index 0000000..8059d66
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantVO.java
@@ -0,0 +1,49 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * GrantVO
+ *
+ * @author Chill
+ */
+@Data
+public class GrantVO implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "roleIds闆嗗悎")
+	private List<Long> roleIds;
+
+	@ApiModelProperty(value = "menuIds闆嗗悎")
+	private List<Long> menuIds;
+
+	@ApiModelProperty(value = "topMenuIds闆嗗悎")
+	private List<Long> topMenuIds;
+
+	@ApiModelProperty(value = "dataScopeIds闆嗗悎")
+	private List<Long> dataScopeIds;
+
+	@ApiModelProperty(value = "apiScopeIds闆嗗悎")
+	private List<Long> apiScopeIds;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/MenuVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/MenuVO.java
new file mode 100644
index 0000000..94e7ec2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/MenuVO.java
@@ -0,0 +1,93 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.system.entity.Menu;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "MenuVO瀵硅薄", description = "MenuVO瀵硅薄")
+public class MenuVO extends Menu implements INode<MenuVO> {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 鐖惰妭鐐笽D
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<MenuVO> children;
+
+	/**
+	 * 鏄惁鏈夊瓙瀛欒妭鐐�
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private Boolean hasChildren;
+
+	@Override
+	public List<MenuVO> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 涓婄骇鑿滃崟
+	 */
+	private String parentName;
+
+	/**
+	 * 鑿滃崟绫诲瀷
+	 */
+	private String categoryName;
+
+	/**
+	 * 鎸夐挳鍔熻兘
+	 */
+	private String actionName;
+
+	/**
+	 * 鏄惁鏂扮獥鍙f墦寮�
+	 */
+	private String isOpenName;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ParamVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ParamVO.java
new file mode 100644
index 0000000..d8b4f0d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ParamVO.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.vci.ubcs.system.entity.Param;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ParamVO瀵硅薄", description = "ParamVO瀵硅薄")
+public class ParamVO extends Param {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/PostVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/PostVO.java
new file mode 100644
index 0000000..fa901c7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/PostVO.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.vci.ubcs.system.entity.Post;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 宀椾綅琛ㄨ鍥惧疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "PostVO瀵硅薄", description = "宀椾綅琛�")
+public class PostVO extends Post {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 宀椾綅鍒嗙被鍚�
+	 */
+	private String categoryName;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RegionVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RegionVO.java
new file mode 100644
index 0000000..bb8075f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RegionVO.java
@@ -0,0 +1,89 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.system.entity.Region;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.core.tool.utils.Func;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 琛屾斂鍖哄垝琛ㄨ鍥惧疄浣撶被
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "RegionVO瀵硅薄", description = "琛屾斂鍖哄垝琛�")
+public class RegionVO extends Region implements INode<RegionVO> {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 鐖惰妭鐐笽D
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 鐖惰妭鐐瑰悕绉�
+	 */
+	private String parentName;
+
+	/**
+	 * 鏄惁鏈夊瓙瀛欒妭鐐�
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private Boolean hasChildren;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<RegionVO> children;
+
+	@Override
+	public Long getId() {
+		return Func.toLong(this.getCode());
+	}
+
+	@Override
+	public Long getParentId() {
+		return Func.toLong(this.getParentCode());
+	}
+
+	@Override
+	public List<RegionVO> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleMenuVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleMenuVO.java
new file mode 100644
index 0000000..1c1c152
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleMenuVO.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.vci.ubcs.system.entity.RoleMenu;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "RoleMenuVO瀵硅薄", description = "RoleMenuVO瀵硅薄")
+public class RoleMenuVO extends RoleMenu {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleVO.java
new file mode 100644
index 0000000..a934b0a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleVO.java
@@ -0,0 +1,72 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.system.entity.Role;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "RoleVO瀵硅薄", description = "RoleVO瀵硅薄")
+public class RoleVO extends Role implements INode<RoleVO> {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 鐖惰妭鐐笽D
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<RoleVO> children;
+
+	@Override
+	public List<RoleVO> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 涓婄骇瑙掕壊
+	 */
+	private String parentName;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/TenantVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/TenantVO.java
new file mode 100644
index 0000000..0e9e15f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/TenantVO.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.vo;
+
+import com.vci.ubcs.system.entity.Tenant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "TenantVO瀵硅薄", description = "TenantVO瀵硅薄")
+public class TenantVO extends Tenant {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鏄惁寮�鍚笁鍛�
+	 */
+	private Integer ssaEnable;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/UserPwdstrategyVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/UserPwdstrategyVO.java
new file mode 100644
index 0000000..590990a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/UserPwdstrategyVO.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.system.vo;
+
+import com.vci.ubcs.system.entity.UserPwdstrategy;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * (UserPwdStrtategy)瀹炰綋绫�
+ *
+ * @author makejava
+ * @since 2023-03-20 14:59:29
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "TenantVO瀵硅薄", description = "TenantVO瀵硅薄")
+public class UserPwdstrategyVO extends UserPwdstrategy {
+
+	private static final long serialVersionUID = 336389756425054417L;
+
+	@ApiModelProperty(value = "闇�瑕佷慨鏀规垨鑰呮柊澧炲瘑鐮佺瓥鐣ョ殑鐢ㄦ埛id")
+	private List<Long> userIds;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-user-api/pom.xml
new file mode 100644
index 0000000..77fc76b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/pom.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-user-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-cache</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/cache/UserCache.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/cache/UserCache.java
new file mode 100644
index 0000000..3c9d670
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/cache/UserCache.java
@@ -0,0 +1,87 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.cache;
+
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.feign.IUserClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+
+import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
+import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
+
+/**
+ * 绯荤粺缂撳瓨
+ *
+ * @author Chill
+ */
+public class UserCache {
+	private static final String USER_CACHE_ID = "user:id:";
+	private static final String USER_CACHE_ACCOUNT = "user:account:";
+
+	private static IUserClient userClient;
+
+	private static IUserClient getUserClient() {
+		if (userClient == null) {
+			userClient = SpringUtil.getBean(IUserClient.class);
+		}
+		return userClient;
+	}
+
+	/**
+	 * 鏍规嵁浠诲姟鐢ㄦ埛id鑾峰彇鐢ㄦ埛淇℃伅
+	 *
+	 * @param taskUserId 浠诲姟鐢ㄦ埛id
+	 * @return
+	 */
+	public static User getUserByTaskUser(String taskUserId) {
+		Long userId = Func.toLong(StringUtil.removePrefix(taskUserId, TASK_USR_PREFIX));
+		return getUser(userId);
+	}
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛
+	 *
+	 * @param userId 鐢ㄦ埛id
+	 * @return
+	 */
+	public static User getUser(Long userId) {
+		return CacheUtil.get(USER_CACHE, USER_CACHE_ID, userId, () -> {
+			R<User> result = getUserClient().userInfoById(userId);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @param account  璐﹀彿鍚�
+	 * @return
+	 */
+	public static User getUser(String tenantId, String account) {
+		return CacheUtil.get(USER_CACHE, USER_CACHE_ACCOUNT, tenantId + StringPool.DASH + account, () -> {
+			R<User> result = getUserClient().userByAccount(tenantId, account);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/User.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/User.java
new file mode 100644
index 0000000..7c5ecc7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/User.java
@@ -0,0 +1,113 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+import java.util.Date;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_user")
+@EqualsAndHashCode(callSuper = true)
+public class User extends TenantEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鐢ㄦ埛缂栧彿
+	 */
+	private String code;
+	/**
+	 * 鐢ㄦ埛骞冲彴
+	 */
+	private Integer userType;
+	/**
+	 * 璐﹀彿
+	 */
+	private String account;
+	/**
+	 * 瀵嗙爜
+	 */
+	private String password;
+	/**
+	 * 鏄电О
+	 */
+	private String name;
+	/**
+	 * 鐪熷悕
+	 */
+	private String realName;
+	/**
+	 * 澶村儚
+	 */
+	private String avatar;
+	/**
+	 * 閭
+	 */
+	private String email;
+	/**
+	 * 鎵嬫満
+	 */
+	private String phone;
+	/**
+	 * 鐢熸棩
+	 */
+	private Date birthday;
+	/**
+	 * 鎬у埆
+	 */
+	private Integer sex;
+	/**
+	 * 瑙掕壊id
+	 */
+	private String roleId;
+	/**
+	 * 閮ㄩ棬id
+	 */
+	private String deptId;
+	/**
+	 * 瀵嗙爜绛栫暐
+	 */
+	@TableField(exist = false)
+	private String pwdStrategy;
+	/**
+	 * 宀椾綅id
+	 */
+	private String postId;
+	/**
+	 * 瀵嗙爜淇敼鏃堕棿
+	 */
+	private Date pwdUpdateTime;
+	/**
+	 * 鐢ㄦ埛瀵嗙骇
+	 */
+	private String secretgrade;
+	/**
+	 * 瀵嗙爜绛栫暐淇敼鐘舵��
+	 */
+	private Long strategyUpdateStatus;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserApp.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserApp.java
new file mode 100644
index 0000000..73c992a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserApp.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_user_app")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserApp瀵硅薄", description = "UserApp瀵硅薄")
+public class UserApp extends Model<UserApp> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鐢ㄦ埛ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐢ㄦ埛ID")
+	private Long userId;
+
+	/**
+	 * 鐢ㄦ埛鎷撳睍淇℃伅
+	 */
+	@ApiModelProperty(value = "鐢ㄦ埛鎷撳睍淇℃伅")
+	private String userExt;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserDept.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserDept.java
new file mode 100644
index 0000000..8ea6934
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserDept.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_user_dept")
+@ApiModel(value = "UserDept瀵硅薄", description = "UserDept瀵硅薄")
+public class UserDept implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鐢ㄦ埛ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐢ㄦ埛ID")
+	private Long userId;
+
+	/**
+	 * 閮ㄩ棬ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "閮ㄩ棬ID")
+	private Long deptId;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserInfo.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserInfo.java
new file mode 100644
index 0000000..d71dda9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserInfo.java
@@ -0,0 +1,68 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.support.Kv;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛淇℃伅
+ *
+ * @author Chill
+ */
+@Data
+@ApiModel(description = "鐢ㄦ埛淇℃伅")
+public class UserInfo implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 绗笁鏂规巿鏉僫d
+	 */
+	@ApiModelProperty(value = "绗笁鏂规巿鏉僫d")
+	private String oauthId;
+
+	/**
+	 * 鐢ㄦ埛鍩虹淇℃伅
+	 */
+	@ApiModelProperty(value = "鐢ㄦ埛")
+	private User user;
+
+	/**
+	 * 鎷撳睍淇℃伅
+	 */
+	@ApiModelProperty(value = "鎷撳睍淇℃伅")
+	private Kv detail;
+
+	/**
+	 * 鏉冮檺鏍囪瘑闆嗗悎
+	 */
+	@ApiModelProperty(value = "鏉冮檺闆嗗悎")
+	private List<String> permissions;
+
+	/**
+	 * 瑙掕壊闆嗗悎
+	 */
+	@ApiModelProperty(value = "瑙掕壊闆嗗悎")
+	private List<String> roles;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOauth.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOauth.java
new file mode 100644
index 0000000..3b1f7b5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOauth.java
@@ -0,0 +1,107 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_user_oauth")
+public class UserOauth implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	private String tenantId;
+
+	/**
+	 * 绗笁鏂圭郴缁熺敤鎴稩D
+	 */
+	private String uuid;
+
+	/**
+	 * 鐢ㄦ埛ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐢ㄦ埛涓婚敭")
+	private Long userId;
+
+	/**
+	 * 鐢ㄦ埛鍚�
+	 */
+	private String username;
+	/**
+	 * 鐢ㄦ埛鏄电О
+	 */
+	private String nickname;
+	/**
+	 * 鐢ㄦ埛澶村儚
+	 */
+	private String avatar;
+	/**
+	 * 鐢ㄦ埛缃戝潃
+	 */
+	private String blog;
+	/**
+	 * 鎵�鍦ㄥ叕鍙�
+	 */
+	private String company;
+	/**
+	 * 浣嶇疆
+	 */
+	private String location;
+	/**
+	 * 鐢ㄦ埛閭
+	 */
+	private String email;
+	/**
+	 * 鐢ㄦ埛澶囨敞锛堝悇骞冲彴涓殑鐢ㄦ埛涓汉浠嬬粛锛�
+	 */
+	private String remark;
+	/**
+	 * 鎬у埆
+	 */
+	private String gender;
+	/**
+	 * 鐢ㄦ埛鏉ユ簮
+	 */
+	private String source;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOther.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOther.java
new file mode 100644
index 0000000..fa211e9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOther.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_user_other")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserOther瀵硅薄", description = "UserOther瀵硅薄")
+public class UserOther extends Model<UserOther> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鐢ㄦ埛ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐢ㄦ埛ID")
+	private Long userId;
+
+	/**
+	 * 鐢ㄦ埛鎷撳睍淇℃伅
+	 */
+	@ApiModelProperty(value = "鐢ㄦ埛鎷撳睍淇℃伅")
+	private String userExt;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserWeb.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserWeb.java
new file mode 100644
index 0000000..1c6785a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserWeb.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_org_user_web")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserWeb瀵硅薄", description = "UserWeb瀵硅薄")
+public class UserWeb extends Model<UserWeb> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "涓婚敭")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 鐢ㄦ埛ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "鐢ㄦ埛ID")
+	private Long userId;
+
+	/**
+	 * 鐢ㄦ埛鎷撳睍淇℃伅
+	 */
+	@ApiModelProperty(value = "鐢ㄦ埛鎷撳睍淇℃伅")
+	private String userExt;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/enums/UserEnum.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/enums/UserEnum.java
new file mode 100644
index 0000000..8ce6759
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/enums/UserEnum.java
@@ -0,0 +1,69 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 鐢ㄦ埛绫诲瀷鏋氫妇
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum UserEnum {
+
+	/**
+	 * web
+	 */
+	WEB("web", 1),
+
+	/**
+	 * app
+	 */
+	APP("app", 2),
+
+	/**
+	 * other
+	 */
+	OTHER("other", 3),
+	;
+
+	final String name;
+	final int category;
+
+	/**
+	 * 鍖归厤鏋氫妇鍊�
+	 *
+	 * @param name 鍚嶇О
+	 * @return BladeUserEnum
+	 */
+	public static UserEnum of(String name) {
+		if (name == null) {
+			return null;
+		}
+		UserEnum[] values = UserEnum.values();
+		for (UserEnum smsEnum : values) {
+			if (smsEnum.name.equals(name)) {
+				return smsEnum;
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserClient.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserClient.java
new file mode 100644
index 0000000..3333042
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserClient.java
@@ -0,0 +1,137 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.feign;
+
+
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.entity.UserInfo;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.user.entity.UserOauth;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * User Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_USER_NAME
+)
+public interface IUserClient {
+
+	String API_PREFIX = "/client";
+	String USER_INFO = API_PREFIX + "/user-info";
+	String USER_INFO_BY_TYPE = API_PREFIX + "/user-info-by-type";
+	String USER_INFO_BY_ID = API_PREFIX + "/user-info-by-id";
+	String USER_INFO_BY_ACCOUNT = API_PREFIX + "/user-info-by-account";
+	String USER_AUTH_INFO = API_PREFIX + "/user-auth-info";
+	String SAVE_USER = API_PREFIX + "/save-user";
+	String SAVE_USER_LIST = API_PREFIX + "/save-user-list";
+	String REMOVE_USER = API_PREFIX + "/remove-user";
+	String UPDATE_USER = API_PREFIX+"/update-user";
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛淇℃伅
+	 *
+	 * @param userId 鐢ㄦ埛id
+	 * @return
+	 */
+	@GetMapping(USER_INFO_BY_ID)
+	R<User> userInfoById(@RequestParam("userId") Long userId);
+
+	/**
+	 * 鏍规嵁璐﹀彿鑾峰彇鐢ㄦ埛淇℃伅
+	 *
+	 * @param tenantId 绉熸埛id
+	 * @param account  璐﹀彿
+	 * @return
+	 */
+	@GetMapping(USER_INFO_BY_ACCOUNT)
+	R<User> userByAccount(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛淇℃伅
+	 *
+	 * @param tenantId 绉熸埛ID
+	 * @param account  璐﹀彿
+	 * @return
+	 */
+	@GetMapping(USER_INFO)
+	R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛淇℃伅
+	 *
+	 * @param tenantId 绉熸埛ID
+	 * @param account  璐﹀彿
+	 * @param userType 鐢ㄦ埛骞冲彴
+	 * @return
+	 */
+	@GetMapping(USER_INFO_BY_TYPE)
+	R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("userType") String userType);
+
+	/**
+	 * 鑾峰彇绗笁鏂瑰钩鍙颁俊鎭�
+	 *
+	 * @param userOauth 绗笁鏂规巿鏉冪敤鎴蜂俊鎭�
+	 * @return UserInfo
+	 */
+	@PostMapping(USER_AUTH_INFO)
+	R<UserInfo> userAuthInfo(@RequestBody UserOauth userOauth);
+
+	/**
+	 * 鏂板缓鐢ㄦ埛
+	 *
+	 * @param user 鐢ㄦ埛瀹炰綋
+	 * @return
+	 */
+	@PostMapping(SAVE_USER)
+	R<Boolean> saveUser(@RequestBody User user);
+
+	/**
+	 * 鏂板缓澶氫釜鐢ㄦ埛
+	 * @param users
+	 * @return
+	 */
+	@PostMapping(SAVE_USER_LIST)
+	R<Boolean> saveUserList(@RequestBody List<User> users);
+
+	/**
+	 * 鍒犻櫎鐢ㄦ埛
+	 *
+	 * @param tenantIds 绉熸埛id闆嗗悎
+	 * @return
+	 */
+	@PostMapping(REMOVE_USER)
+	R<Boolean> removeUser(@RequestParam("tenantIds") String tenantIds);
+
+	/**
+	 * 淇敼鐢ㄦ埛鍩虹淇℃伅
+	 * @param user
+	 * @return
+	 */
+	@PostMapping(UPDATE_USER)
+	R<Boolean> updateUser(@RequestBody User user);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserSearchClient.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserSearchClient.java
new file mode 100644
index 0000000..8e58ffc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserSearchClient.java
@@ -0,0 +1,81 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.feign;
+
+
+import com.vci.ubcs.system.user.entity.User;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * User Search Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_USER_NAME
+)
+public interface IUserSearchClient {
+
+	String API_PREFIX = "/client";
+	String LIST_BY_USER = API_PREFIX + "/user/list-by-user";
+	String LIST_BY_DEPT = API_PREFIX + "/user/list-by-dept";
+	String LIST_BY_POST = API_PREFIX + "/user/list-by-post";
+	String LIST_BY_ROLE = API_PREFIX + "/user/list-by-role";
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param userId 鐢ㄦ埛ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	@GetMapping(LIST_BY_USER)
+	R<List<User>> listByUser(@RequestParam("userId") String userId);
+
+	/**
+	 * 鏍规嵁閮ㄩ棬ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param deptId 閮ㄩ棬ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	@GetMapping(LIST_BY_DEPT)
+	R<List<User>> listByDept(@RequestParam("deptId") String deptId);
+
+	/**
+	 * 鏍规嵁宀椾綅ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param postId 宀椾綅ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	@GetMapping(LIST_BY_POST)
+	R<List<User>> listByPost(@RequestParam("postId") String postId);
+
+	/**
+	 * 鏍规嵁瑙掕壊ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param roleId 瑙掕壊ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	@GetMapping(LIST_BY_ROLE)
+	R<List<User>> listByRole(@RequestParam("roleId") String roleId);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/vo/UserVO.java b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/vo/UserVO.java
new file mode 100644
index 0000000..fe96185
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/vo/UserVO.java
@@ -0,0 +1,90 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.system.user.entity.User;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserVO瀵硅薄", description = "UserVO瀵硅薄")
+public class UserVO extends User {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 瀵嗙爜
+	 */
+	@JsonIgnore
+	private String password;
+
+	/**
+	 * 瀵嗙爜绛栫暐
+	 */
+	private String pwdStrategy;
+
+	/**
+	 * 绉熸埛鍚�
+	 */
+	private String tenantName;
+
+	/**
+	 * 鐢ㄦ埛骞冲彴鍚�
+	 */
+	private String userTypeName;
+
+	/**
+	 * 瑙掕壊鍚�
+	 */
+	private String roleName;
+
+	/**
+	 * 閮ㄩ棬鍚�
+	 */
+	private String deptName;
+
+	/**
+	 * 宀椾綅鍚�
+	 */
+	private String postName;
+
+	/**
+	 * 鎬у埆
+	 */
+	private String sexName;
+
+	/**
+	 * 鎷撳睍淇℃伅
+	 */
+	private String userExt;
+
+}
diff --git a/Source/UBCS/ubcs-service/pom.xml b/Source/UBCS/ubcs-service/pom.xml
new file mode 100644
index 0000000..de84b5e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>UBCS</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-service</artifactId>
+    <name>${project.artifactId}</name>
+    <version>3.0.1.RELEASE</version>
+    <packaging>pom</packaging>
+    <description>BladeX 寰湇鍔¢泦鍚�</description>
+
+    <modules>
+        <module>ubcs-desk</module>
+        <module>ubcs-system</module>
+        <module>ubcs-user</module>
+        <module>ubcs-code</module>
+        <module>ubcs-omd</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-metrics</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-tenant</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-api-crypto</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-dict-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-scope-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/pom.xml b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
new file mode 100644
index 0000000..76c2d09
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>ubcs-service</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <artifactId>ubcs-code</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <axis2.version>1.7.9</axis2.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-web</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.cloud</groupId>
+                    <artifactId>spring-cloud-starter-openfeign</artifactId>
+                </exclusion>
+<!--                <exclusion>-->
+<!--                    <groupId>com.vci</groupId>-->
+<!--                    <artifactId>vci-starter-corba</artifactId>-->
+<!--                </exclusion>-->
+                <exclusion>
+                    <groupId>org.apache.logging.log4j</groupId>
+                    <artifactId>log4j-slf4j-impl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-webservice</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vci.mdm</groupId>
+            <artifactId>vci-mdm-wrj-webducking</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>de.odysseus.staxon</groupId>
+            <artifactId>staxon</artifactId>
+            <version>1.3</version>
+        </dependency>
+
+        <!--axis2 begin -->
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-adb</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-kernel</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-transport-http</artifactId>
+            <version>${axis2.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax-servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-transport-local</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-jaxws</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <!--axis2 end -->
+
+        <!--webservice鐨勫唴瀹�-->
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-webservice</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-code-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.8</version>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <excludeGroupIds>com.vci.platform</excludeGroupIds>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.0.2</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                        </manifest>
+                    </archive>
+                    <excludes>
+                        <exclude>application-dev.yml</exclude>
+                        <exclude>application-prod.yml</exclude>
+                        <exclude>application.yml</exclude>
+                        <exclude>properties/conf.properties</exclude>
+                        <exclude>properties/eventConf.properties</exclude>
+                        <exclude>lib/*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
new file mode 100644
index 0000000..50230ec
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
@@ -0,0 +1,44 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.code;
+
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * Code鍚姩鍣�
+ *
+ * @author ludc
+ */
+@SpringBootApplication
+@EnableFeignClients(basePackages = {"com.vci.*","org.springblade"})
+@ComponentScan({"com.vci.*"})
+@EnableScheduling
+@EnableCaching
+public class CodeApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_NAME_CODE, CodeApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java
new file mode 100644
index 0000000..6fc7456
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java
@@ -0,0 +1,57 @@
+package com.vci.ubcs.code.Scheduling;
+
+
+import com.vci.ubcs.code.service.CodeDuckingSyncServiceI;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 闆嗘垚浠诲姟瀹氭椂鍣�
+ * 鎻掑叆dockingtask涓�
+ * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
+ */
+@Component
+public class DockingClassSyncScheduling {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
+
+    @Value("${clsfSyncPush.isStart:false}")
+    public boolean CLSF_SYNC_PUSH_ISSTARE;
+
+    /**
+     * 鏄惁鍒濆鍖栧畬鎴愪簡
+     */
+    public static volatile String FINISH_INIT = "false";
+
+    /**
+     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
+     */
+    @PostConstruct()
+    public void onInit(){
+        FINISH_INIT = "true";
+    }
+
+    //榛樿姣忓垎閽熸墽琛屾柟娉�
+    @Scheduled(cron = "${clsfSyncPush.cronTime:0 0/10 * * * ?}")
+    public void scheduled() {
+        if(CLSF_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
+            codeDuckingSyncServiceI.DockingClassSyncScheduing();
+            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
+            String time = formatter.format(new Date());
+            String outinfo = "============鍦� "+time+" 鎵ц浜嗗垎绫婚泦鎴愭帹閫�";
+            logger.info(outinfo);
+        }
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java
new file mode 100644
index 0000000..699196e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java
@@ -0,0 +1,56 @@
+package com.vci.ubcs.code.Scheduling;
+
+import com.vci.ubcs.code.service.CodeDuckingSyncServiceI;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 闆嗘垚浠诲姟瀹氭椂鍣�
+ * 鎻掑叆dockingtask涓�
+ * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
+ */
+@Component
+public class DockingDataSyncScheduling {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
+
+    @Value("${dataSyncPush.isStart:false}")
+    public boolean DATA_SYNC_PUSH_ISSTARE;
+
+    /**
+     * 鏄惁鍒濆鍖栧畬鎴愪簡
+     */
+    public static volatile String FINISH_INIT = "false";
+
+    /**
+     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
+     */
+    @PostConstruct()
+    public void onInit(){
+        FINISH_INIT = "true";
+    }
+
+    //榛樿姣忓垎閽熸墽琛屾柟娉�
+    @Scheduled(cron = "${dataSyncPush.cronTime:0 0/10 * * * ?}")
+    public void scheduled() {
+        if(DATA_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
+            codeDuckingSyncServiceI.DockingDataSyncScheduing();
+            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
+            String time = formatter.format(new Date());
+            String outinfo = "============鍦� "+time+" 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
+            logger.info(outinfo);
+        }
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingScheduling.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingScheduling.java
new file mode 100644
index 0000000..430cebf
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingScheduling.java
@@ -0,0 +1,57 @@
+package com.vci.ubcs.code.Scheduling;
+
+
+import com.vci.ubcs.code.service.CodeDuckingServiceI;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 闆嗘垚浠诲姟瀹氭椂鍣�
+ * 鎻掑叆dockingtask涓�
+ * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
+ */
+@Component
+public class DockingScheduling {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private CodeDuckingServiceI codeDuckingServiceI;
+
+    @Value("${docking.insertCache2:false}")
+    public boolean INSERT_CACHE2;
+
+    /**
+     * 鏄惁鍒濆鍖栧畬鎴愪簡
+     */
+    public static volatile String FINISH_INIT = "false";
+
+    /**
+     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
+     */
+    @PostConstruct()
+    public void onInit(){
+        FINISH_INIT = "true";
+    }
+
+    //榛樿姣忓垎閽熸墽琛屾柟娉�
+    @Scheduled(cron = "${docking.cron:0 0/10 * * * ?}")
+    public void scheduled() {
+        if(INSERT_CACHE2 && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
+            codeDuckingServiceI.DockingScheduing();
+            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
+            String time = formatter.format(new Date());
+            String outinfo = "============鍦� "+time+" 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
+            logger.info(outinfo);
+        }
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java
new file mode 100644
index 0000000..b553c41
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java
@@ -0,0 +1,20 @@
+package com.vci.ubcs.code.algorithm;
+
+import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
+import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod;
+
+/**
+ * 娴佹按绠楁硶鐨勭ず渚�
+ */
+@MdmSerialAlgorithm(text = "娴佹按绠楁硶鐨勭ず渚�",description = "璇蜂笉瑕佷娇鐢ㄨ繖涓被锛岃繖涓被鍙槸绀轰緥锛岀敤浜庢煡鐪嬪浣曠紪鍐欐祦姘寸畻娉�")
+public class CustomSerialAlgorithmExample {
+
+    /**
+     * 鐢熸垚娴佹按鍙风殑鏂规硶
+     * @return 娴佹按鍙风殑淇℃伅
+     */
+    @MdmSerialAlgorithmMethod
+    public String serialGenerate(){
+        return "";
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMap.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMap.java
new file mode 100644
index 0000000..8b443ed
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMap.java
@@ -0,0 +1,28 @@
+package com.vci.ubcs.code.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 闆嗘垚鏃惰嚜瀹氫箟鐨勮浆鎹㈢被
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MdmIntegrationMap {
+
+    /**
+     * 鍊硷紝瀹為檯灏辨槸杩欎釜娉ㄨВ鎵�鍦ㄧ殑绫荤殑鍏ㄨ矾寰�
+     * @return 鍊�
+     */
+    String value() default "";
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     * @return 浜嬩欢鍚嶇О
+     */
+    String text();
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMapMethod.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMapMethod.java
new file mode 100644
index 0000000..b462cf9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMapMethod.java
@@ -0,0 +1,24 @@
+package com.vci.ubcs.code.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 闆嗘垚鏃惰嚜瀹氫箟鐨勮浆鎹㈡柟娉�
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MdmIntegrationMapMethod {
+
+    /**
+     * 鍊硷紝
+     * @return 鍊�
+     */
+    String value() default "";
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java
new file mode 100644
index 0000000..7e7fe98
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java
@@ -0,0 +1,37 @@
+package com.vci.ubcs.code.annotation;
+
+import org.springframework.stereotype.Component;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鑷畾涔夋祦姘寸畻娉曠殑娉ㄨВ
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Component
+public @interface MdmSerialAlgorithm {
+
+    /**
+     * 鍊硷紝瀹為檯灏辨槸杩欎釜娉ㄨВ鎵�鍦ㄧ殑绫荤殑鍏ㄨ矾寰�
+     * @return 鍊�
+     */
+    String value() default "";
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     * @return 浜嬩欢鍚嶇О
+     */
+    String text();
+
+    /**
+     * 鎻忚堪
+     * @return 鎻忚堪
+     */
+    String description() default "";
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java
new file mode 100644
index 0000000..752206b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.code.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鑷畾涔夋祦姘寸畻娉曞鐞嗘柟娉曠殑娉ㄨВ
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MdmSerialAlgorithmMethod {
+
+    /**
+     * 鍊�
+     * @return 鍊�
+     */
+    String value() default "";
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
new file mode 100644
index 0000000..634fea2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
@@ -0,0 +1,169 @@
+package com.vci.ubcs.code.constant;
+
+/**
+ * 涓绘暟鎹浉鍏崇殑涓氬姟绫诲瀷缂栧彿
+ */
+public class MdmBtmTypeConstant {
+
+    /**
+     * 涓婚搴撳垎绫�
+     */
+    public static final String CODE_CLASSIFY = "codeclassify";
+    /**
+     * 涓婚搴撳垎绫诲寘鍚殑妯℃澘
+     */
+    public static final String CODE_CLASSIFY_TEMPLATE = "codeclstemplate";
+    /**
+     * 涓婚搴撳垎绫绘ā鏉� 鍖呭惈鐨勫睘鎬�
+     */
+    public static final String CODE_CLASSIFY_TEMPLATE_ATTR = "codeclstempattr";
+
+    /**
+     * 涓绘暟鎹腑鐨勬寜閽墿灞�
+     */
+    public static final String CODE_BUTTON = "codebutton";
+    /**
+     * 涓绘暟鎹腑鐨勬ā鏉垮叧鑱旂殑鎸夐挳
+     */
+    public static final String CODE_TEMPLATE_BUTTON = "codetempbutton";
+    /**
+     * 涓绘暟鎹腑鐨勭紪鐮佽鍒�
+     */
+    public static final String CODE_RULE = "coderule";
+
+
+    /**
+     * 鍏抽敭灞炴�у垽鏂噸澶�
+     */
+    public static final String CODE_KEY_ATTR_REPEAT_RULE = "codekeyattrrepeat";
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯
+     */
+    public static final String CODE_RESEMBLE_RULE = "coderesemblerule";
+    /**
+     * 妯℃澘闃舵
+     */
+    public static final String CODE_TEMPLATE_PHASE = "codetempphase";
+    /**
+     * 闃舵鐨勫睘鎬�
+     */
+    public static final String CODE_PHASE_ATTR = "codephaseattr";
+
+    /**
+     * 涓绘暟鎹垎绫讳娇鐢ㄧ殑娴佺▼妯℃澘
+     */
+    public static final String CODE_CLASSIFY_PROCESS_TEMPLATE = "codeclsflowtemp";
+
+    /**
+     *鍒嗙被鐨勬ā鏉垮搴旀祦绋嬩腑鐨勯樁娈甸厤缃�
+     */
+    public static final String CODE_CLASSIFY_PROCESS_PHASE = "codeclsflowphase" ;
+
+    /**
+     * 鍥哄畾鐮佺殑鐮佸��
+     */
+    public static final String CODE_FIXED_VALUE = "codefixedvalue";
+
+    /**
+     * 鍒嗙被鐮佺殑鐮佸��
+     */
+    public static final String CODE_CLASSIFY_VALUE = "codeclassifyvalue";
+
+    /**
+     * 鏄犲皠瑙勫垯
+     */
+    public static final String CODE_TEMPLATE_MAP = "codetempmap";
+    /**
+     * 鏄犲皠瑙勫垯鏄庣粏
+     */
+    public static final String CODE_TEMPLATE_MAP_ITEM = "codetempmapitem";
+    /**
+     * 鐮佹鍩虹淇℃伅
+     */
+    public static final String CODE_BASIC_SEC = "codebasicsec";
+
+    /**
+     * 鍚屼箟璇嶉厤缃�
+     */
+    public static final String CODE_SYNONYM = "codesynonym";
+    /**
+     * 鍏ㄩ儴鐨勭爜鍊�
+     */
+    public static final String CODE_ALL_CODE = "codeallcode";
+
+    /**
+     * 缂栫爜瑙勫垯鐨勬祦姘村��
+     */
+    public static final String CODE_SERIAL_VALUE = "codeserialvalue" ;
+
+    /**
+     * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇�
+     */
+    public static final String DOCKING_LOGE = "codedockinglog";
+
+    /**
+     * 璧勬簮瀵规帴瑙﹀彂鍣ㄦ彃鍏ヨ鎺ㄩ�佺殑鏁版嵁
+     */
+    public static final String DOCKING_DATA = "codedockingdata";
+
+    /**
+     * 璧勬簮瀵规帴瑙﹀彂鍣ㄦ彃鍏ヨ鎺ㄩ�佺殑鏁版嵁鍜岀郴缁熶俊鎭�
+     */
+    public static final String DOCKING_TASK = "codedockingtask";
+
+    /**
+     * 棰勭敵璇锋暟鎹�
+     */
+    public static final String DOCKING_PRE_APPLY_DATA = "dockingpadata";
+
+    /**
+     * 棰勭敵璇锋暟鎹俊鎭�
+     */
+    public static final String DOCKING_PRE_APPLY_DATA_INFO = "dockingpadatainfo";
+
+    /**
+     * 绯荤粺闆嗘垚鐨勭郴缁�
+     */
+    public static final String SYS_INT_BASE = "sysintbase";
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勫熀纭�淇℃伅
+     */
+    public static final String SYS_INT_INFO = "sysintinfo";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹柟寮�
+     */
+    public static final String SYS_INT_AUTHORITY = "sysintauthority";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勫弬鏁�,http瀵瑰簲鐨刾aramter
+     */
+    public static final String SYS_INT_PARAMTERY = "sysintparemter";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佷俊鎭�,http瀵瑰簲鐨刪eader,webserver瀵瑰簲鐨勮处鍙峰瘑鐮佺瓑淇℃伅
+     */
+    public static final String SYS_INT_HEADER = "sysintheader";
+
+
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JINTEGMAPCONFIG = "jintegmapconifg";
+
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JCLASS = "jclass";
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JMETAATRR = "jmetaattr";
+
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JRANGE = "jrange";
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmDuckingConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmDuckingConstant.java
new file mode 100644
index 0000000..b8f9f3a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmDuckingConstant.java
@@ -0,0 +1,146 @@
+package com.vci.ubcs.code.constant;
+
+/**
+ * 涓绘暟鎹帹閫佺浉鍏�
+ */
+public class MdmDuckingConstant {
+
+    /**
+     *  dockingtask sendFlag 鎺ㄩ�佹垚鍔�
+     */
+    public static final String SEND_FLAG_TRUE = "true";
+
+    /**
+     * dockingtask sendFlag 鏈帹閫佹垚鍔�
+     */
+    public static final String SEND_FLAG_FALSE = "false";
+
+    /**
+     *  dockingloge interfacestatus 鎺ㄩ�佹垚鍔�
+     */
+    public static final String INTERFACE_STATUS_TRUE = "true";
+
+    /**
+     * dockingloge interfacestatus 鏈帹閫佹垚鍔�
+     */
+    public static final String INTERFACE_STATUS_FALSE = "false";
+
+    /**
+     * 瀛樻斁cache1鐨勬枃浠跺すkey,鏆傛椂涓嶇敤浜�
+     */
+    public static String DOCKING_CACHE1 = "DOCKING_CACHE1";
+
+    /**
+     * 瀛樻斁cache2鍒犻櫎鏁版嵁鐨勬枃浠跺すkey
+     */
+    public static String DOCKING_CACHE2_DELETE = "DOCKING_CACHE2_DELETE:";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝btmnam=DOCKING_DEFAULT_CLASSIFY
+     */
+    public static String DOCKING_DEFAULT_CLASSIFY = "CODECLASSIFY";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyoid=DOCKING_DEFAULT_CLASSIFYOID
+     */
+    public static String DOCKING_DEFAULT_CLASSIFYOID = "CODECLASSIFYOID";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyid=DOCKING_DEFAULT_CLASSIFYID
+     */
+    public static String DOCKING_DEFAULT_CLASSIFYID = "CODECLASSIFY";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyoname=DOCKING_DEFAULT_CLASSIFYNAME
+     */
+    public static String DOCKING_DEFAULT_CLASSIFYNAME = "CODECLASSIFYNAME";
+
+    /**
+     * 杩斿洖鏁版嵁鏍煎紡
+     */
+    public static String DATATYPE_JSON = "json";
+    public static String DATATYPE_XML = "xml";
+
+    public static String URLTYPE_WEBSERVICE = "webservice";
+    public static String URLTYPE_HTTP= "http";
+    public static String URLTYPE_GET = "get";
+    public static String URLTYPE_POST = "post";
+    public static String URLTYPE_CORBA = "corba";
+
+    public static String PARAM_XMLDATA = "xmlData";
+
+    public static String CACHE_TIME="cache_time";//瀛樺偍涓婁竴娆℃墽琛岀殑鏃堕棿
+
+    public static String CACHE_OID="oid";
+    public static String CACHE_BTMID="btmid";
+    public static String CACHE_BTMNAME="btmname";
+    public static String CACHE_TS="ts";
+    public static String CACHE_TYPE="type";
+    public static String CACHE_LCSTATUS="lcstatus";
+    public static String CACHE_CLASSIFYID="classifyid";
+    public static String CACHE_CLASSIFYOID="classifyoid";
+    public static String CACHE_CLASSIFYNAME="classifyname";
+    public static String CACHE_CLASSIFYOID_DDEFAULT="classifyoid";//鍒嗙被鏁版嵁鐨勬椂鍊檕id
+    public static String CACHE_CLASSIFYNAME_DDEFAULT="鍒嗙被鏁版嵁";//鍒嗙被鏁版嵁鐨勬椂鍊欏垎绫诲悕绉�
+
+    public static String PRE_APPLY_DATA_USER_TRUE ="true";//棰勭敵璇风殑鏁版嵁姝e湪浣跨敤锛岃〃绀鸿繖涓猽nique杩欐潯鏁版嵁鏄渶鏂扮殑
+    public static String PRE_APPLY_DATA_USER_FALSE ="false";//棰勭敵璇风殑鏁版嵁鏈娇鐢紝涓嶆槸鏈�鏂扮殑
+
+    //鍙杕pm涓�
+    public static String XML_MPM_MODEL="specification";//瑙勬牸
+    public static String XML_MPM_PARTTYPE="parttype";//闆朵欢鍨嬪彿
+    public static String XML_MPM_UNIT="unit";//鍗曚綅
+
+    //datalog
+    public static String DATA_LOGE_OUT="out";//鎺ㄩ�佹暟鎹�
+    public static String DATA_LOGE_IN="in";//鎺ユ敹鏁版嵁
+
+
+    //瑙f瀽xml
+    public static String XML_OBJECT="object";
+    public static String XML_CODE="code";
+    public static String XML_CODE_SUCCESS="200";
+    public static String XML_CODE_FAIL="500";
+    public static String XML_TYPE="type";
+    public static String XML_SYSTEMID="systemid";
+    public static String XML_SYSTEMID_MPM="MPM";//鍐欐鐨勫伐鑹虹郴缁焛d
+    public static String XML_DATAS="datas";
+    public static String XML_DATA="data";
+    public static String XML_UNIQUE="unique";
+    public static String XML_PROS="props";
+    public static String XML_PRO="prop";
+    public static String XML_PRO_TRAN="prop_tran";
+    public static String XML_ATTR="attr";
+    public static String XML_KEY="key";
+    public static String XML_MEAN="mean";
+    public static String XML_VALUE="value";
+    public static String XML_TEXT="text";
+    public static String XML_STATE="state";
+    public static String XML_MSG="msg";
+    public static String XML_NUM="num";
+    public static String XML_NAMEPATH="namepath";
+    public static String XML_NAME="name";
+    public static String XML_IDPATH="idpath";
+    public static String XML_ID="id";
+    public static String XML_ORDERNUM="orderNum";
+    public static String XML_PARENTID="parentId";
+    public static String XML_SENDTYPE="sendtype";
+    public static String XML_STATE_200="200";
+    public static String XML_STATE_400="400";
+    public static String XML_STATE_500="500";
+    public static String XML_DATACODE="datacode";
+    public static String XML_DATACODE_200="200";
+    public static String XML_DATACODE_500="500";
+    public static String XML_DATAMSG="datamsg";
+    public static String XML_MDMKEY="mdmkey";
+    public static String XML_MDMVALUE="mdmvalue";
+    public static String XML_SYSTEMKEY="systemkey";
+    public static String XML_SYSTEMVALUE="systemvalue";
+
+    public static String FLAG_TRUE="true";
+    public static String FLAG_FAIL="fail";
+
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java
new file mode 100644
index 0000000..1662da4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java
@@ -0,0 +1,105 @@
+package com.vci.ubcs.code.constant;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 涓绘暟鎹紩鎿庣浉鍏崇殑甯搁噺
+ * @author weidy
+ * @date 2022-3-8
+ */
+public class MdmEngineConstant {
+    /**
+     * 缂栫爜鐨勫瓧娈�
+     */
+    public static final String CODE_FIELD = "id";
+
+    /**
+     * 鐘舵��
+     */
+    public static final String CODE_STATUS_FILED = "lcstatus";
+
+    /**
+     * 闆嗗洟鐮佺殑瀛楁
+     */
+    public static final String CODE_GROUP_FIELD = "groupcode";
+
+    /**
+     * 鍒嗙被鐨勪富閿瓧娈�
+     */
+    public static final String CODE_CLASSIFY_OID_FIELD = "codeclsfid";
+
+    /**
+     * 妯℃澘鐨勪富閿瓧娈�
+     */
+    public static final String CODE_TEMPLATE_OID_FIELD = "codetemplateoid";
+
+    /**
+     * 鍒嗙被鍏ㄨ矾寰勭殑瀛楁
+     */
+    public static final String CODE_FULL_PATH_FILED = "codeclsfpath";
+
+    /**
+     * 鐮佹鐨勯暱搴︾殑瀛楁锛�-杩欎笉鏄暟鎹簱閲岀殑瀛楁
+     */
+    public static final String CODE_SEC_LENGTH_FIELD = "codeSecLengthField";
+
+    /**
+     * 瀵嗙骇鐨勫瓧娈�
+     */
+    public static final String SECRET_FIELD = "secretgrade";
+    /**
+     * 鍒涘缓鑰呭瓧娈�
+     */
+    public static final String CODE_CREATOR = "creator";
+    /**
+     * 鏇存敼鑰呭瓧娈�
+     */
+    public static final String CODE_EDITOR = "lastmodifier";
+    /**
+     * 榛樿鐨勫睘鎬у垪琛�
+     */
+    public static final List DEFAULT_ATTR_LIST = new ArrayList(){{
+        add(CODE_FIELD);
+        add(CODE_STATUS_FILED);
+        add(CODE_GROUP_FIELD);
+        add(CODE_CLASSIFY_OID_FIELD);
+        add(CODE_TEMPLATE_OID_FIELD);
+        add(CODE_FULL_PATH_FILED);
+    }};
+
+    /**
+     * 榛樿鐨勫睘鎬у垪琛�
+     */
+    public static final List DEFAULT_SYNC_ATTR_LIST = new ArrayList(){{
+        add(CODE_FIELD);
+        add(CODE_STATUS_FILED);
+        add(CODE_GROUP_FIELD);
+        add(CODE_CLASSIFY_OID_FIELD);
+        add(CODE_TEMPLATE_OID_FIELD);
+        add(CODE_FULL_PATH_FILED);
+        add(CODE_EDITOR);
+        add(CODE_CREATOR);
+    }};
+
+    /**
+     * 琛屽彿
+     */
+    public static final String IMPORT_ROW_INDEX = "${rowIndex}";
+
+    /**
+     * 绌虹殑娴佹按渚濇嵁
+     */
+    public static final String EMPTY_SERIAL_UNIT = "${emptyserial}";
+
+    /**
+     * 娴佹按渚濊禆鐨勮繛鎺ョ
+     */
+    public static final String SERIAL_UNIT_SPACE = "${serial}";
+
+    /**
+     * 娴佺▼鍊肩殑鍒嗛殧绗�
+     */
+    public static final String SERIAL_VALUE_SPACE = "${sav}";
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEnumIdConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEnumIdConstant.java
new file mode 100644
index 0000000..8d53109
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEnumIdConstant.java
@@ -0,0 +1,78 @@
+package com.vci.ubcs.code.constant;
+
+/**
+ * 涓绘暟鎹殑鏋氫妇鍚嶇О
+ */
+public class MdmEnumIdConstant {
+    /**
+     * 鎸夐挳鐨勪娇鐢ㄤ綅缃�
+     */
+    public static final String CODE_BUTTON_POSITION = "codeButtonPosition" ;
+
+    /**
+     * 鐮佹闀垮害绫诲瀷
+     */
+    public static final String CODE_SEC_LENGTH = "codeSecLength";
+    /**
+     * 鏃ユ湡鏍煎紡
+     */
+    public static final String CODE_DATA_FORMAT = "codeDateFormatEnum";
+    /**
+     * 灞傜骇鐮佹鐨勫眰绾х被鍨�
+     */
+    public static final String CODE_LEVEL_TYPE = "codeLevelType";
+    /**
+     * 瀛楃鎴彇绫诲瀷
+     */
+    public static final String CODE_CUT_TYPE = "codeCutType";
+    /**
+     * 缂栫爜鍙栧�肩被鍨�
+     */
+    public static final String CODE_GET_VALUE_TYPE = "codeGetValueType";
+    /**
+     * 涓婚搴撳垎绫荤殑娴佺▼鐢ㄩ��
+     */
+    public static final String CODE_CLASSIFY_PROCESS_USE = "codeClassifyProcessUse";
+    /**
+     * 缂栫爜鏄犲皠瑙勫垯绫诲瀷
+     */
+    public static final String CODE_MAP_RULE_TYPE = "codeMapRuleType";
+    /**
+     * 鐮佹绫诲瀷
+     */
+    public static final String CODE_SEC_TYPE = "codeSecType";
+    /**
+     * 鎸夐挳鐨勭敤閫�
+     */
+    public static final String CODE_TEMPLATE_BUTTON_USE = "codeTemplateButtonUse";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛绫诲瀷
+     */
+    public static final String SYS_INTEGRATION_REQUEST_TYPE = "sysIntegrationRequestType";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
+     */
+    public static final String SYS_INTEGRATION_REQUEST_METHOD_TYPE = "sysIntegrationRequestMethodType";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
+     */
+    public static final String SYS_INTEGRATION_PARAM_AND_RETURN_TYPE = "sysIntegrationParamAndReturnType";
+
+    /**
+     * 绯荤粺闆嗘垚楠岃瘉鏂瑰紡
+     */
+    public static final String SYS_INTEGRATION_AUTHORITY_TYPE = "sysIntegrationAuthorityType";
+
+    /**
+     * 鏁版嵁娴佸悜鏂瑰紡
+     */
+    public static final String SYS_INTEGRATION_DATA_FLOW_TYPE = "sysIntegrationDataFlowType";
+    /***
+     * 绯荤粺鎺ュ彛鎺ㄩ�佹柟寮�
+     */
+    public static  final  String SYS_INTEGRATION_PUSH_TYPE="sysIntegrationPushType";
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLifeCycleConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLifeCycleConstant.java
new file mode 100644
index 0000000..48c12f5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLifeCycleConstant.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.code.constant;
+
+/**
+ * 鐢熷懡鍛ㄦ湡鐨勫悕绉�
+ * @author weidy
+ * @date 2022-2-11
+ */
+public class MdmLifeCycleConstant {
+    /**
+     * 鍒嗙被妯℃澘鐨勭敓鍛藉懆鏈�
+     */
+    public static final String CODE_CLASSIFY_TEMPLATE_LC ="codeClsTempLc";
+
+    /**
+     * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
+     */
+    public static final String CODE_RULE_LC = "codeRuleLC";
+    /**
+     * 鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡
+     */
+    public static final String CODE_ALL_CODE_LC = "codeAllCodeLC" ;
+    /**
+     * 缂栫爜鐨勯粯璁ょ殑鐢熷懡鍛ㄦ湡
+     */
+    public static final String CODE_DEFAULT_LC = "codeDataLC";
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLinkTypeConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLinkTypeConstant.java
new file mode 100644
index 0000000..53239d2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLinkTypeConstant.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.code.constant;
+
+/**
+ * 涓绘暟鎹噷鐨勯摼鎺ョ被鍨嬪悕绉�
+ * @author weidy
+ * @date 2022-1-18
+ */
+public class MdmLinkTypeConstant {
+    /**
+     * 缂栫爜瑙勫垯鐨勬槑缁�
+     */
+    public static final String CODE_RULE_ITEM = "codeRuleItem";
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySyncController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySyncController.java
new file mode 100644
index 0000000..754d0fa
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySyncController.java
@@ -0,0 +1,169 @@
+package com.vci.ubcs.code.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.dto.datapush.result.ResultJsonDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultNodeDataDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO;
+import com.vci.ubcs.code.service.UniversalInterfaceI;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.starter.web.annotation.controller.VciUnCheckRight;
+import com.vci.starter.web.annotation.controller.VciUnUseResponseAdvice;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+
+/**
+ * 涓婚搴撳垎绫绘帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+@RestController
+@VciUnCheckRight
+@RequestMapping("/codeSyncUniversalControoler")
+public class CodeApplySyncController {
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+    /**
+     * 鎺ュ彛闆嗘垚鏈嶅姟
+     */
+    @Autowired
+    private UniversalInterfaceI universalInterface;
+    /****
+     * 鐢宠鎺ュ彛
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/applyCode")
+   public String applyCode(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType)  {
+        String result="";
+        try {
+            result = universalInterface.applyCode(dataString, dataType);
+        }catch (Throwable e){
+            e.printStackTrace();
+            logger.error("applyCode->"+e.getMessage());
+        }
+         return result;
+    }
+
+    /****
+     * 鏇存柊/鍒犻櫎/鐘舵�佹帴鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/syncData")
+    public String syncData(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType)  {
+        String result="";
+        try {
+            result= universalInterface.syncEditData(dataString,dataType);
+        }catch (Throwable e){
+            e.printStackTrace();;
+            logger.error("syncData->"+e.getMessage());
+        }
+        return result;
+    }
+
+
+    /****
+     * 鏌ヨ鍒嗙被鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/queryClassify")
+    public String queryClassify(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType) throws Throwable {
+        String result="";
+        try {
+             result = universalInterface.queryClassify(dataString, dataType);
+        }catch (Throwable e){
+            e.printStackTrace();
+            logger.error("queryClassify->"+e.getMessage());
+        }
+        return result;
+    }
+
+    /****
+     * 鏌ヨ鍒嗙被鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/queryData")
+    public String queryData(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType) throws Throwable {
+        String result="";
+        try {
+            result= universalInterface.queryData(dataString,dataType);
+        }catch (Throwable e){
+            e.printStackTrace();
+            logger.error("queryData->"+e.getMessage());
+        }
+        return result;
+    }
+
+    /****
+     * 鏌ヨ鍒嗙被鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/testPushData")
+    public String testPushData(@RequestParam("dataString")String dataString, @RequestParam("dataType")String dataType) throws Throwable {
+        String result="";
+        ResultJsonDTO resultJsonDTO=new ResultJsonDTO();
+        ResultNodeDataDTO resultNodeDataDTO =new ResultNodeDataDTO();
+        ResultNodeObjectDTO resultNodeObjectDTO=new ResultNodeObjectDTO();
+        resultNodeObjectDTO.setCode("01001");
+        resultNodeObjectDTO.setOid("0001");
+        resultNodeObjectDTO.setMsg("娴嬭瘯鎴愬姛");
+        resultNodeObjectDTO.setErroid("0");
+        resultNodeDataDTO.setObject(Arrays.asList(resultNodeObjectDTO));
+        if(dataType.equalsIgnoreCase("json")){
+            resultJsonDTO.setData(resultNodeDataDTO);
+            Object object = JSONObject.toJSON(resultJsonDTO);
+            result = object.toString();
+        }else{
+            //缁勭粐杩斿洖鎺ュ彛淇℃伅
+            XStream xStream = new XStream(new DomDriver());
+            xStream.processAnnotations(ResultNodeDataDTO.class);
+            xStream.autodetectAnnotations(true);
+            String results=xStream.toXML(resultNodeDataDTO);
+            result ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + results;
+
+        }
+       //result="\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" ?><data>\\n  <object code=\\\"01001\\\" oid=\\\"0001\\\" erroid=\\\"0\\\" msg=\\\"娴嬭瘯鎴愬姛\\\"/>\\n</data>\"";
+        //缁勭粐杩斿洖鎺ュ彛淇℃伅
+       /* XStream xStream = new XStream(new DomDriver());
+        xStream.processAnnotations(ResultNodeDataDTO.class);
+        xStream.autodetectAnnotations(true);
+        ResultNodeDataDTO resultNodeDataDTOs = (ResultNodeDataDTO) xStream.fromXML(result);
+        resultJsonDTO.setData(resultNodeDataDTO);*/
+        return result;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
new file mode 100644
index 0000000..17b1034
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
@@ -0,0 +1,190 @@
+package com.vci.ubcs.code.controller;
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeBasicSecDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * 鐮佹鍩虹淇℃伅鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeBasicSecController")
+public class CodeBasicSecController {
+    /**
+    * 鐮佹鍩虹淇℃伅 鏈嶅姟
+    */
+    @Autowired
+    private CodeBasicSecServiceI codeBasicSecService;
+
+    /**
+     * 鐮佹鍩虹淇℃伅鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeBasicSec")
+    public DataGrid<CodeBasicSecVO> gridCodeBasicSec(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeBasicSecService.gridCodeBasicSec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeBasicSecVO> addSave(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
+        CodeBasicSecVO codeBasicSecVO = null;
+        try {
+            codeBasicSecVO = codeBasicSecService.addSave(codeBasicSecDTO);
+        } catch (VciBaseException e) {
+            return BaseResult.fail(e.getCode());
+        }
+        return BaseResult.success(codeBasicSecVO);
+    }
+
+    /**
+     * 淇敼 鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeBasicSecVO> editSave(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
+        CodeBasicSecVO codeBasicSecVO = null;
+        try {
+            codeBasicSecVO = codeBasicSecService.editSave(codeBasicSecDTO);
+        } catch (VciBaseException e) {
+            return BaseResult.fail(e.getCode());
+        }
+        return BaseResult.success(codeBasicSecVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) {
+        return codeBasicSecService.deleteCodeBasicSec(codeBasicSecDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
+    * @param oid 涓婚敭
+    * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeBasicSecVO> getObjectByOid(String oid){
+        CodeBasicSecVO codeBasicSecVO = codeBasicSecService.getObjectByOid(oid);
+        return BaseResult.success(codeBasicSecVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeBasicSecVO> listCodeBasicSecByOids(String oids){
+        Collection<CodeBasicSecVO> voCollection =  codeBasicSecService.listCodeBasicSecByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeBasicSecService.refDataGridCodeBasicSec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鍙傛暟鍒嗙被鐮佹鍩虹淇℃伅鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑锛屽繀椤昏鏈夌紪鐮佽鍒欑殑涓婚敭 pkCodeRule
+     * @return 鐮佹鐨勪俊鎭�
+     */
+    @GetMapping("/refDataGridClassifySec")
+    public DataGrid<CodeBasicSecVO> refDataGridClassifySec(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeBasicSecService.refDataGridClassifySec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鍏嬮殕鐮佹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱idArr锛氶�夋嫨婧愮爜娈典富閿殑闆嗗悎锛宲kCodeRule锛氱洰鏍囩紪鐮佽鍒欑殑涓婚敭
+     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @PostMapping("/clone")
+    public BaseResult cloneCodeBasicSec(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
+        VciBaseUtil.alertNotNull(codeBasicSecDTO.getOidArr(),"閫夋嫨鐮佹涓婚敭");
+        List<String> oidArr = VciBaseUtil.str2List(codeBasicSecDTO.getOidArr());
+        if (CollectionUtils.isEmpty(oidArr)){
+            return BaseResult.fail("閫夋嫨鐮佹涓婚敭涓嶈兘涓虹┖");
+        }
+        return codeBasicSecService.cloneCodeBasicSec(oidArr,codeBasicSecDTO.getPkCodeRule());
+    }
+
+    /**
+     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
+     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
+     * @return 鍒嗙被鐮佹鏍戠粨鏋�
+     */
+    @GetMapping("/treeCodeClassifySec")
+    public List<Tree> gridCodeClassifySecTree (String oid){
+        VciBaseUtil.alertNotNull(oid,"鍒嗙被鐮佹涓婚敭");
+        return codeBasicSecService.gridCodeClassifySecTree(oid);
+    }
+
+    /**
+     * 涓婄Щ
+     * @param oid 涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/upOrderNum")
+    public BaseResult upOrderNum(String oid){
+        codeBasicSecService.upOrderNum(oid);
+        return BaseResult.success();
+    }
+
+    /**
+     * 涓嬬Щ
+     * @param oid 涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/downOrderNum")
+    public BaseResult downOrderNum(String oid){
+        codeBasicSecService.downOrderNum(oid);
+        return BaseResult.success();
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
new file mode 100644
index 0000000..ef2c081
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
@@ -0,0 +1,136 @@
+package com.vci.ubcs.code.controller;
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeButtonDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeButtonController")
+public class CodeButtonController {
+    /**
+    * 涓绘暟鎹腑鐨勬寜閽墿灞� 鏈嶅姟
+    */
+    @Autowired
+    private CodeButtonServiceI codeButtonService;
+
+    /**
+     * 涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeButton")
+    public DataGrid<CodeButtonVO> gridCodeButton(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+
+        return codeButtonService.gridCodeButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeButtonVO> addSave(@RequestBody CodeButtonDTO codeButtonDTO){
+         CodeButtonVO codeButtonVO = codeButtonService.addSave(codeButtonDTO);
+         return BaseResult.success(codeButtonVO);
+    }
+
+    /**
+     * 淇敼 涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeButtonVO> editSave(@RequestBody CodeButtonDTO codeButtonDTO){
+        CodeButtonVO codeButtonVO = codeButtonService.editSave(codeButtonDTO);
+        return BaseResult.success(codeButtonVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeButton( CodeButtonDTO codeButtonDTO) {
+        return codeButtonService.deleteCodeButton(codeButtonDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeButtonVO> getObjectByOid(String oid){
+        CodeButtonVO codeButtonVO = codeButtonService.getObjectByOid(oid);
+        return BaseResult.success(codeButtonVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeButtonVO> listCodeButtonByOids(String oids){
+        Collection<CodeButtonVO> voCollection =  codeButtonService.listCodeButtonByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+    /**
+     * 鍚敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍚敤缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @PostMapping("/enableData")
+    public BaseResult enableOrgDuty(CodeButtonDTO buttonDTO) {
+        return codeButtonService.enableCodeButton(buttonDTO);
+    }
+
+    /**
+     * 鍋滅敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍋滅敤缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @PostMapping("/disableData")
+    public BaseResult disableOrgDuty(CodeButtonDTO buttonDTO) {
+        return codeButtonService.disableCodeButton(buttonDTO);
+    }
+
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeButtonVO> refDataGridCodeButton(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeButtonService.refDataGridCodeButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java
new file mode 100644
index 0000000..8b517df
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java
@@ -0,0 +1,255 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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.lang.StringUtils;
+import com.vci.ubcs.code.dto.CodeClassifyDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+import java.util.List;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED;
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED;
+
+/**
+ * 涓婚搴撳垎绫绘帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+@RestController
+@RequestMapping("/codeClassifyController")
+public class CodeClassifyController {
+    /**
+    * 涓婚搴撳垎绫� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyService;
+
+    /**
+     * 涓婚搴撳垎绫绘爲
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撳垎绫绘樉绀烘爲
+     */
+    @GetMapping("/treeCodeClassify")
+    public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject)  {
+        return codeClassifyService.treeCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 涓婚搴撶殑鏍�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撴樉绀烘爲
+     */
+    @GetMapping("/treeTopCodeClassify")
+    public List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject){
+        return codeClassifyService.treeTopCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 澧炲姞 涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyVO> addSave(@RequestBody CodeClassifyDTO codeClassifyDTO){
+        if(codeClassifyDTO.getOrdernum()==null){
+            codeClassifyDTO.setOrdernum(0);
+        }
+         CodeClassifyVO codeClassifyVO = codeClassifyService.addSave(codeClassifyDTO);
+         return BaseResult.success(codeClassifyVO);
+    }
+
+    /**
+     * 淇敼 涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyVO> editSave(@RequestBody CodeClassifyDTO codeClassifyDTO){
+        return codeClassifyService.editSave(codeClassifyDTO);
+    }
+
+    /**
+    * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
+    * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+    */
+    @PostMapping( "/checkIsCanDelete")
+    public BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO)  {
+        return codeClassifyService.checkIsCanDelete(codeClassifyDTO);
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫�
+     * @param  codeClassifyDTO锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassify(CodeClassifyDTO codeClassifyDTO) {
+        return codeClassifyService.deleteCodeClassify(codeClassifyDTO);
+    }
+
+    /**
+     * 鍚敤
+     * @param codeClassifyDTO
+     * @return
+     */
+    @PostMapping( "/enableData")
+    public BaseResult enable(CodeClassifyDTO codeClassifyDTO) {
+        return codeClassifyService.updateLcStatus(codeClassifyDTO.getOid(),FRAMEWORK_DATA_ENABLED);
+    }
+
+    /**
+     * 鍋滅敤
+     * @param codeClassifyDTO
+     * @return
+     */
+    @PostMapping( "/disableData")
+    public BaseResult disable(CodeClassifyDTO codeClassifyDTO) {
+        return codeClassifyService.updateLcStatus(codeClassifyDTO.getOid(),FRAMEWORK_DATA_DISABLED);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫绘樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyVO> getObjectByOid(String oid){
+        CodeClassifyVO codeClassifyVO = codeClassifyService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫绘樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyVO> listCodeClassifyByOids(String oids){
+        Collection<CodeClassifyVO> voCollection =  codeClassifyService.listCodeClassifyByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+    /**
+    * 鍙傜収鏍� 涓婚搴撳垎绫�
+    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+    * @return 涓婚搴撳垎绫绘樉绀烘爲
+    */
+    @GetMapping("/referTree")
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
+        return codeClassifyService.referTree(treeQueryObject);
+    }
+
+    /**
+     * 瀵煎嚭鍒嗙被
+     * @param oid 鍒嗙被涓婚敭
+     */
+    @GetMapping("/exportClassify")
+    public void exportClassify(String oid, HttpServletResponse response) throws IOException {
+        String excelName = codeClassifyService.exportClassify(oid);
+        try {
+            ControllerUtil.writeFileToResponse(response,excelName);
+        } catch (Throwable e) {
+            //濡傛灉鍑洪敊,鎶婇敊璇俊鎭啓鍒皌ext
+            String msg = LangBaseUtil.getErrorMsg(e);
+            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒.txt";
+            LocalFileUtil.writeContentToFile(msg,errorFile);
+            ControllerUtil.writeFileToResponse(response,errorFile);
+        }
+    }
+
+    /**
+     * 涓嬭浇瀵煎叆鐨勬ā鏉�
+     * @param response 鍝嶅簲瀵硅薄
+     * @throws IOException 鎶涘嚭寮傚父
+     */
+    @GetMapping("/downloadImportExcel")
+    public void downloadImportExcel(HttpServletResponse response) throws IOException {
+        String excelName = codeClassifyService.createImportExcel();
+        try {
+            ControllerUtil.writeFileToResponse(response,excelName);
+        } catch (Throwable e) {
+            //濡傛灉鍑洪敊,鎶婇敊璇俊鎭啓鍒皌ext
+            String msg = LangBaseUtil.getErrorMsg(e);
+            if(StringUtils.isBlank(msg)){
+                msg = "鏈煡閿欒";
+            }
+            ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
+        }
+    }
+
+    /**
+     * 瀵煎叆鍒嗙被
+     * @param file excel鐨勫唴瀹�
+     * @return 鎵ц缁撴灉锛宱bj鏈夊�艰〃绀烘湁閿欒淇℃伅锛岄渶瑕佽闂甦ownloadErrorFile鏉ヤ笅杞�
+     */
+    @PostMapping("/importClassify")
+    public BaseResult importClassify(MultipartFile file) {
+        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
+        File file1 = new File(excelFileName);
+        try {
+            file.transferTo(new File(excelFileName));
+            codeClassifyService.importClassify(file1);
+            return BaseResult.success();
+        }catch (Throwable e) {
+            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.txt";
+            LocalFileUtil.writeContentToFile(LangBaseUtil.getErrorMsg(e),errorFile);
+            //鏀惧埌map閲�
+            BaseResult result = BaseResult.fail("瀵煎叆澶辫触");
+            result.setObj(ControllerUtil.putErrorFile(errorFile));
+            return result;
+        }finally {
+            file1.delete();
+        }
+    }
+
+    /**
+     * 涓嬭浇閿欒鐨勬枃浠朵俊鎭�
+     * @param uuid 鍞竴鏍囪瘑
+     * @param response 鍝嶅簲瀵硅薄
+     * @throws IOException 鎶涘嚭寮傚父
+     */
+    @GetMapping("/downloadErrorFile")
+    public void downloadErrorFile(String uuid, HttpServletResponse response) throws IOException {
+        ControllerUtil.downloadErrorFile(response,uuid);
+    }
+
+    /**
+     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢(涓嶆敮鎸佸垎椤�)
+     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
+     */
+    @GetMapping("/listClassifyLinkAttr")
+    public DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject){
+        return codeClassifyService.listClassifyLinkAttr(baseQueryObject);
+    }
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @GetMapping("/getObjectByIdPath")
+    public CodeClassifyVO getObjectByIdPath(String idPath){
+        return codeClassifyService.getObjectByIdPath(idPath);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java
new file mode 100644
index 0000000..98cf7d8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java
@@ -0,0 +1,129 @@
+package com.vci.ubcs.code.controller;
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.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;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClsProcessTempController")
+public class CodeClassifyProcessTempController {
+    /**
+    * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyProcessTempServiceI codeClassifyProcessTempService;
+
+    /**
+     * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyProcessTemp")
+    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyProcessTempService.gridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyProcessTempVO> addSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+         CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.addSave(codeClassifyProcessTempDTO);
+         return BaseResult.success(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyProcessTempVO> editSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.editSave(codeClassifyProcessTempDTO);
+        return BaseResult.success(codeClassifyProcessTempVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyProcessTemp( CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+        return codeClassifyProcessTempService.deleteCodeClassifyProcessTemp(codeClassifyProcessTempDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyProcessTempVO> getObjectByOid(String oid){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(String oids){
+        Collection<CodeClassifyProcessTempVO> voCollection =  codeClassifyProcessTempService.listCodeClassifyProcessTempByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyProcessTempService.refDataGridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 浣跨敤妯℃澘鑾峰彇浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 娴佺▼鐨勭敤閫�
+     * @return 娴佺▼妯℃澘鐨勪俊鎭�
+     */
+    @GetMapping("/listProcessTemplate")
+    public BaseResult<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid,String processUse){
+        List<CodeClassifyProcessTempVO> processTempVOList = codeClassifyProcessTempService.listProcessTemplate(codeTemplateOid,processUse);
+        BaseResult result = BaseResult.success();
+        result.setData(processTempVOList);
+        return result;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTempMapItemController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTempMapItemController.java
new file mode 100644
index 0000000..1d52df8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTempMapItemController.java
@@ -0,0 +1,116 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeClassifyTempMapItemDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTempMapItemVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+@RestController
+@RequestMapping("/codeClsTempMapItemController")
+public class CodeClassifyTempMapItemController {
+    /**
+    * 鏄犲皠瑙勫垯鐨勬槑缁� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTempMapItemServiceI codeClassifyTempMapItemService;
+
+    /**
+     * 鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTempMapItem")
+    public DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTempMapItemService.gridCodeClassifyTempMapItem(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTempMapItemVO> addSave(@RequestBody CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO){
+         CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.addSave(codeClassifyTempMapItemDTO);
+         return BaseResult.success(codeClassifyTempMapItemVO);
+    }
+
+    /**
+     * 淇敼 鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTempMapItemVO> editSave(@RequestBody CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO){
+        CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.editSave(codeClassifyTempMapItemDTO);
+        return BaseResult.success(codeClassifyTempMapItemVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTempMapItem( CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) {
+        return codeClassifyTempMapItemService.deleteCodeClassifyTempMapItem(codeClassifyTempMapItemDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+    * @param oid 涓婚敭
+    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTempMapItemVO> getObjectByOid(String oid){
+        CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTempMapItemVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(String oids){
+        Collection<CodeClassifyTempMapItemVO> voCollection =  codeClassifyTempMapItemService.listCodeClassifyTempMapItemByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTempMapItemService.refDataGridCodeClassifyTempMapItem(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java
new file mode 100644
index 0000000..a7e1e1e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java
@@ -0,0 +1,165 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeClassifyTemplateAttrDTO;
+import com.vci.ubcs.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;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyTempAttrController")
+public class CodeClassifyTemplateAttrController {
+    /**
+    * 涓婚搴撳垎绫荤殑妯℃澘灞炴�� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI codeClassifyTemplateAttrService;
+
+
+    /**
+     * 涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTemplateAttr")
+    public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateAttrService.gridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateAttrVO> addSave(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO){
+         CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = codeClassifyTemplateAttrService.addSave(codeClassifyTemplateAttrDTO);
+         return BaseResult.success(codeClassifyTemplateAttrVO);
+    }
+
+    /**
+     * 鎵归噺淇濆瓨鍒楄〃鏁版嵁
+     * @param list
+     * @return
+     */
+    @PostMapping( "/batchAddSave")
+    public BaseResult<List<CodeClassifyTemplateAttrVO>> batchAddSaves(@RequestBody List<CodeClassifyTemplateAttrDTO> list){
+        if(CollectionUtils.isEmpty(list)){
+            return BaseResult.fail("鍒楄〃涓嶈兘涓虹┖!");
+        }
+        List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOs = codeClassifyTemplateAttrService.batchAddSave(list);
+        return BaseResult.success(codeClassifyTemplateAttrVOs);
+    }
+
+
+    /**
+     * 淇敼 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateAttrVO> editSave(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO){
+        return codeClassifyTemplateAttrService.editSave(codeClassifyTemplateAttrDTO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplateAttr(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) {
+        return codeClassifyTemplateAttrService.deleteCodeClassifyTemplateAttr(codeClassifyTemplateAttrDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateAttrVO> getObjectByOid(String oid){
+        CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = codeClassifyTemplateAttrService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateAttrVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(String oids){
+        Collection<CodeClassifyTemplateAttrVO> voCollection =  codeClassifyTemplateAttrService.listCodeClassifyTemplateAttrByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateAttrService.refDataGridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�,鎺掗櫎鎺夎繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
+     * @param baseQueryObject
+     * @return
+     */
+    @GetMapping("/codeClassifyTemplateAttrByBtm")
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
+        return codeClassifyTemplateAttrService.codeClassifyTemplateAttrByBtm(baseQueryObject);
+    }
+
+    /**
+     * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬨�佽繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
+     * @param baseQueryObject
+     * @return
+     */
+    @GetMapping("/codeClassifyTemplateAttrByBtmHave")
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
+        return codeClassifyTemplateAttrService.codeClassifyTemplateAttrByBtmHave(baseQueryObject);
+    }
+
+    /**
+     * 鍚屾鍒板叾浠栨ā鏉�
+     * @param codeClassifyAttrDTO   id 鑻辨枃鍚嶇О
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping( "/copyto")
+    public BaseResult copyto(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyAttrDTO) {
+        return codeClassifyTemplateAttrService.copyto(codeClassifyAttrDTO);
+    }
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java
new file mode 100644
index 0000000..dc761b5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java
@@ -0,0 +1,114 @@
+package com.vci.ubcs.code.controller;
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClsTempButtonController")
+public class CodeClassifyTemplateButtonController {
+    /**
+    * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateButtonServiceI codeClassifyTemplateButtonService;
+
+    /**
+     * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTemplateButton")
+    public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateButtonService.gridCodeClassifyTemplateButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateButtonVO> addSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+         CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.addSave(codeClassifyTemplateButtonDTO);
+         return BaseResult.success(codeClassifyTemplateButtonVO);
+    }
+
+    /**
+     * 淇敼 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateButtonVO> editSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+        CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.editSave(codeClassifyTemplateButtonDTO);
+        return BaseResult.success(codeClassifyTemplateButtonVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplateButton( CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) {
+        return codeClassifyTemplateButtonService.deleteCodeClassifyTemplateButton(codeClassifyTemplateButtonDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateButtonVO> getObjectByOid(String oid){
+        CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateButtonVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(String oids){
+        Collection<CodeClassifyTemplateButtonVO> voCollection =  codeClassifyTemplateButtonService.listCodeClassifyTemplateButtonByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateButtonService.refDataGridCodeClassifyTemplateButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateController.java
new file mode 100644
index 0000000..8db523a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateController.java
@@ -0,0 +1,190 @@
+package com.vci.ubcs.code.controller;
+
+import com.vci.ubcs.code.lifecycle.CodeClassifyTemplateLC;
+import com.vci.ubcs.code.service.CodeClassifyTemplateServiceI;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateDTO;
+import com.vci.ubcs.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;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyTemplateController")
+public class CodeClassifyTemplateController {
+    /**
+    * 鍒嗙被妯℃澘瀵硅薄 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateServiceI codeClassifyTemplateService;
+
+    /**
+     * 鍒嗙被妯℃澘瀵硅薄鏍�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+     */
+    @GetMapping("/treeCodeClassifyTemplate")
+    public List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject)  {
+        return  codeClassifyTemplateService.treeCodeClassifyTemplate(treeQueryObject);
+    }
+
+    /**
+     * 鍒嗙被妯℃澘鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     */
+    @GetMapping("/gridCodeClassifyTemplate")
+    public DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(BaseQueryObject baseQueryObject){
+        return  codeClassifyTemplateService.gridCodeClassifyTemplate(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 澧炲姞 鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateVO> addSave(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO){
+         return codeClassifyTemplateService.addSave(codeClassifyTemplateDTO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateVO> editSave(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO){
+        return codeClassifyTemplateService.editSave(codeClassifyTemplateDTO);
+    }
+
+    /**
+    * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
+    * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
+    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+    */
+    @PostMapping( "/checkIsCanDelete")
+    public BaseResult checkIsCanDelete(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO)  {
+        return codeClassifyTemplateService.checkIsCanDelete(codeClassifyTemplateDTO);
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplate( CodeClassifyTemplateDTO codeClassifyTemplateDTO) {
+        return codeClassifyTemplateService.deleteCodeClassifyTemplate(codeClassifyTemplateDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
+    * @param oid 涓婚敭
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateVO> getObjectByOid(String oid){
+        CodeClassifyTemplateVO codeClassifyTemplateVO = codeClassifyTemplateService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(String oids){
+        Collection<CodeClassifyTemplateVO> voCollection =  codeClassifyTemplateService.listCodeClassifyTemplateByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+    * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
+    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+    */
+    @GetMapping("/referTree")
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
+        return codeClassifyTemplateService.referTree(treeQueryObject);
+    }
+
+    /**
+     * 鍚敤
+     * @param codeClassifyDTO oid
+     * @return
+     */
+    @PostMapping( "/enableData")
+    public BaseResult enable( CodeClassifyTemplateDTO codeClassifyDTO) {
+        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(), CodeClassifyTemplateLC.RELEASED.getValue());
+    }
+
+    /**
+     * 鍋滅敤
+     * @param codeClassifyDTO oid
+     * @return
+     */
+    @PostMapping( "/disableData")
+    public BaseResult disableData( CodeClassifyTemplateDTO codeClassifyDTO) {
+        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.DISABLED.getValue());
+    }
+
+    /**
+     * 鍐嶇紪杈�
+     * @param codeClassifyDTO oid
+     * @return
+     */
+    @PostMapping( "/editDate")
+    public BaseResult editDate( CodeClassifyTemplateDTO codeClassifyDTO) {
+        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.EDITING.getValue());
+    }
+
+    /**
+     * 鍗囩増
+     * @param codeClassifyDTO
+     * @return oid妯℃澘oid
+     */
+    @PostMapping( "/upgrade")
+    public BaseResult Upgrade(@RequestBody CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return codeClassifyTemplateService.Upgrade(codeClassifyDTO);
+    }
+
+    @GetMapping( "/upgrade1")
+    public BaseResult upgrade1( CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return Upgrade(codeClassifyDTO);
+    }
+
+    /**
+     * 鍏嬮殕
+     * @param codeClassifyDTO
+     * @return oid妯℃澘oid
+     */
+    @PostMapping( "/copy")
+    public BaseResult copyTemplate(@RequestBody CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return codeClassifyTemplateService.copyTemplate(codeClassifyDTO);
+    }
+
+    @GetMapping( "/copyTemplate1")
+    public BaseResult copyTemplate1( CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return copyTemplate(codeClassifyDTO);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateMapController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateMapController.java
new file mode 100644
index 0000000..4a9131d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateMapController.java
@@ -0,0 +1,116 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeClassifyTemplateMapDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateMapVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyTempMapController")
+public class CodeClassifyTemplateMapController {
+    /**
+    * 涓婚搴撴ā鏉挎槧灏勮鍒� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateMapServiceI codeClassifyTemplateMapService;
+
+    /**
+     * 涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTemplateMap")
+    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateMapService.gridCodeClassifyTemplateMap(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateMapVO> addSave(@RequestBody CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO){
+         CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.addSave(codeClassifyTemplateMapDTO);
+         return BaseResult.success(codeClassifyTemplateMapVO);
+    }
+
+    /**
+     * 淇敼 涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateMapVO> editSave(@RequestBody CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO){
+        CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.editSave(codeClassifyTemplateMapDTO);
+        return BaseResult.success(codeClassifyTemplateMapVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplateMap( CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) {
+        return codeClassifyTemplateMapService.deleteCodeClassifyTemplateMap(codeClassifyTemplateMapDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateMapVO> getObjectByOid(String oid){
+        CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateMapVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(String oids){
+        Collection<CodeClassifyTemplateMapVO> voCollection =  codeClassifyTemplateMapService.listCodeClassifyTemplateMapByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateMapService.refDataGridCodeClassifyTemplateMap(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
new file mode 100644
index 0000000..adaafe4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
@@ -0,0 +1,146 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeClassifyValueDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyValueController")
+public class CodeClassifyValueController {
+    /**
+    * 鍒嗙被鐮佹鐨勭爜鍊� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyValueServiceI codeClassifyValueService;
+
+    /**
+     * 鍒嗙被鐮佹鐨勭爜鍊兼爲
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+     */
+    @GetMapping("/treeCodeClassifyValue")
+    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject)  {
+        return  codeClassifyValueService.treeCodeClassifyValue(treeQueryObject);
+    }
+
+    /**
+     * 澧炲姞 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyValueVO> addSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
+         CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.addSave(codeClassifyValueDTO);
+         return BaseResult.success(codeClassifyValueVO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyValueVO> editSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
+        CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.editSave(codeClassifyValueDTO);
+        return BaseResult.success(codeClassifyValueVO);
+    }
+
+    /**
+    * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
+    * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+    */
+    @PostMapping( "/checkIsCanDelete")
+    public BaseResult checkIsCanDelete( CodeClassifyValueDTO codeClassifyValueDTO)  {
+        return codeClassifyValueService.checkIsCanDelete(codeClassifyValueDTO);
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyValue( CodeClassifyValueDTO codeClassifyValueDTO) {
+        return codeClassifyValueService.deleteCodeClassifyValue(codeClassifyValueDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyValueVO> getObjectByOid(String oid){
+        CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyValueVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyValueVO> listCodeClassifyValueByOids(String oids){
+        Collection<CodeClassifyValueVO> voCollection =  codeClassifyValueService.listCodeClassifyValueByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+    * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
+    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+    */
+    @GetMapping("/referTree")
+        public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
+        return codeClassifyValueService.referTree(treeQueryObject);
+    }
+
+    /**
+     * 淇濆瓨椤甸潰涓婄殑鍒嗙被鐮佹鐮佸�硷紝涓昏鏄繚瀛樺簭鍙风敤浜庢帓搴忋�傚鏋滄暟鎹簱涓瓨鍦ㄩ〉闈紶杈撳璞¢泦鍚堜腑涓嶅瓨鍦ㄧ殑鍊硷紝鍒欏垹闄ゃ��
+     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 鍜宑odeclassifysecoid 鍒嗙被鐮佹涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/saveOrder")
+    public BaseResult saveOrder(@RequestBody Map<String,Object> param){
+        JSONArray json = JSONArray.parseArray(String.valueOf(param.get("dtoList")));
+        List<CodeClassifyValueDTO> dtoList = new ArrayList<>();
+        for (int i = 0; i < json.size(); i++) {
+            CodeClassifyValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeClassifyValueDTO.class);
+            dtoList.add(codeFixedValueDTO);
+        }
+        String codeclassifysecoid = (String) param.get("codeclassifysecoid");
+        VciBaseUtil.alertNotNull(dtoList,"鐮佸�奸泦鍚�");
+        if (CollectionUtils.isEmpty(dtoList)){
+            return BaseResult.success();
+        }
+        return codeClassifyValueService.batchSave4Order(dtoList,codeclassifysecoid);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeDuckingController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeDuckingController.java
new file mode 100644
index 0000000..0c79c8c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeDuckingController.java
@@ -0,0 +1,293 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.ubcs.code.model.DockingDataDO;
+import com.vci.ubcs.code.model.DockingLogeDO;
+import com.vci.ubcs.code.model.DockingTaskDO;
+import com.vci.ubcs.code.model.SysIntHeaderDO;
+import com.vci.ubcs.code.service.CodeDuckingServiceI;
+import com.vci.ubcs.code.service.CodeDuckingSyncServiceI;
+import com.vci.ubcs.code.service.DockingPreApplyDataServiceI;
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.DockingPreApplyDataDTO;
+import com.vci.ubcs.code.dto.DockingPreAttrMappingDTO;
+import com.vci.ubcs.code.dto.PreApplyCodeOrderDTO;
+import com.vci.ubcs.code.vo.pagemodel.DockingPreApplyDataVO;
+import com.vci.ubcs.code.vo.pagemodel.DockingPreAttrMappingVO;
+import com.vci.ubcs.code.vo.pagemodel.DockingPreAttrRangeVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹紪鐮侀�氱敤闆嗘垚鎺у埗鍣�
+ *
+ * @author wangyi
+ * @date 2022-03-20
+ */
+@RestController
+@RequestMapping("/ducking")
+class CodeDuckingController {
+
+    /**
+     * 闆嗘垚鏈嶅姟
+     */
+    @Autowired
+    private CodeDuckingServiceI codeDuckingServiceI;
+
+    /**
+     * 闆嗘垚鏈嶅姟
+     */
+    @Autowired
+    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
+    /***
+     * 闆嗘垚灞炴�ф搷浣滃眰
+     */
+   @Autowired
+    private DockingPreAttrMappingSeviceI dockingPreAttrMappingSeviceI;
+
+   /**
+     * 棰勭敵璇锋帴鏀堕泦鎴愭暟鎹�
+     */
+    @Autowired
+    private DockingPreApplyDataServiceI dockingPreApplyDataServiceI;
+
+    public CodeDuckingController() {
+    }
+
+
+
+
+    /**
+     * 淇敼 涓婚搴撳垎绫�
+     * @param dockingPreApplyDataDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/setDataClassId")
+    public BaseResult<List<DockingPreApplyDataVO>> batchSetDataClassId(@RequestBody DockingPreApplyDataDTO dockingPreApplyDataDTO){
+        List<DockingPreApplyDataVO> dataDTOList=  dockingPreApplyDataServiceI.batchSetDataClassId(dockingPreApplyDataDTO);
+        return BaseResult.success(dataDTOList);
+    }
+
+    /***
+     * 鏍规嵁閫夋嫨棰濋鐢宠鐨勬暟鎹嬀閫夋暟鎹�
+     * @param codeClassifyOid
+     * @param templateOid
+     * @param btmType
+     * @param dataOids
+     * @return
+     */
+    @GetMapping("/gridApplyData")
+    public DataGrid<Map<String,String>> gridApplyData(String codeClassifyOid, String templateOid, String btmType, String dataOids){
+        return  dockingPreApplyDataServiceI.gridApplyData(codeClassifyOid,templateOid,btmType,dataOids);
+    }
+
+
+    /***
+     * 鏍规嵁閫夋嫨棰濋鐢宠鐨勬暟鎹嬀閫夋暟鎹�
+     *
+     * @return
+     */
+    @PutMapping("/batchApplyDatas")
+    public BaseResult batchApplyDatas(@RequestBody List<CodeOrderDTO> orderDTOs){
+        return dockingPreApplyDataServiceI.batchApplyDatas(orderDTOs);
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-宸插弽鐮�
+     * @param baseQueryObject
+     * ducking/gridPreDataFinish
+     * @return
+     */
+    @GetMapping("/gridPreDataFinishNum")
+    public DataGrid<DockingPreApplyDataVO> gridDockingPreApplyDataFinishNum(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        baseQueryObject.addCondition("num", QueryOptionConstant.ISNOTNULL);
+        DataGrid<DockingPreApplyDataVO> dockingPreApplyDataVODataGrid = dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+        return dockingPreApplyDataVODataGrid;
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-宸插鐞�
+     * @param baseQueryObject
+     * ducking/gridPreDataFinish
+     * @return
+     */
+    @GetMapping("/gridPreDataFinish")
+    public DataGrid<DockingPreApplyDataVO> gridDockingPreApplyDataFinish(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        baseQueryObject.addCondition("classifyoid", QueryOptionConstant.ISNOTNULL);
+        DataGrid<DockingPreApplyDataVO> dockingPreApplyDataVODataGrid = dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+        return dockingPreApplyDataVODataGrid;
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-鏈畬鎴�
+     * @param baseQueryObject
+     * ducking/gridPreDataUnFinish
+     * @return
+     */
+    @GetMapping("/gridPreDataUnFinish")
+    public DataGrid<DockingPreApplyDataVO> gridPreDataUnFinish(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        baseQueryObject.addCondition("num", "null");
+        return dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎵归噺澶勭悊棰勭敵璇风紪鐮�
+     * 蹇呴』瑕佹湁鍒嗙被oid鍜宒ataoid
+     * @return
+     */
+    @PostMapping("/applyData")
+    public BaseResult applyData(@RequestBody List<PreApplyCodeOrderDTO> preApplyCodeOrderDTOList){
+        return dockingPreApplyDataServiceI.applyData(preApplyCodeOrderDTOList);
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-鏌ヨ鏁版嵁璇︾粏淇℃伅
+     * @param dockingPreApplyDataDTO
+     * @return
+     */
+    @GetMapping("/datainfo")
+    @VciUnCheckRight
+    public BaseResult datainfo(DockingPreApplyDataDTO dockingPreApplyDataDTO){
+        return dockingPreApplyDataServiceI.getDataInfoMap(dockingPreApplyDataDTO);
+    }
+
+    /**
+     * data鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridData")
+    public DataGrid<DockingDataDO> gridData(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeDuckingServiceI.gridData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * data鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridTask")
+    public DataGrid<DockingTaskDO> gridTask(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeDuckingServiceI.gridTask(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎺ㄩ�佹暟鎹泦鎴愭棩蹇楀垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闆嗘垚鏃ュ織鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridLoge")
+    public DataGrid<DockingLogeDO> gridLoge(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+            Map<String, String> queryMap = baseQueryObject.getConditionMap();
+            queryMap.put("type", MdmDuckingConstant.DATA_LOGE_OUT);
+        }
+        return codeDuckingServiceI.gridLoge(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎺ュ彛param鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闆嗘垚鏃ュ織鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridHeader")
+    public DataGrid<SysIntHeaderDO> gridParam(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+            Map<String, String>  queryMap = baseQueryObject.getConditionMap();
+            queryMap.put("type", MdmDuckingConstant.DATA_LOGE_OUT);
+        }
+        return codeDuckingServiceI.gridHeader(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     *鎵归噺澶勭悊
+     * 蹇呴』瑕佹湁鍒嗙被oid鍜宒ataoid
+     * @return
+     */
+    @PostMapping("/sendData")
+    public  BaseResult sendData(String oid){
+
+        return codeDuckingSyncServiceI.sendData(oid);
+    }
+
+    /***
+     * 鍒濆鍖栧睘鎬ч厤缃粍浠�
+     * @param sourceClsfId 鍒嗙被oid
+     * @param type  //1锛氭棤浜烘満;2锛�420
+     * @param templateOid 妯℃澘oid锛屽涓互,鍒嗗紑鐨�
+     * @param baseQueryObject //鏌ヨ瀵硅薄
+     * @return
+     */
+    @GetMapping("/gridAttrMapping")
+    public DataGrid<DockingPreAttrMappingVO> gridAttrMappings(String sourceClsfId, String templateOid, int type, BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return dockingPreAttrMappingSeviceI.gridAttrMappings(sourceClsfId,type,baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /***
+     * 灞炴�у彇鍊艰寖鍥磋幏鍙�
+     * @param attrOid 灞炴�id
+     * @param type //1锛氭棤浜烘満;2锛�420
+     * @param baseQueryObject /鏌ヨ瀵硅薄
+     * @return
+     */
+    @GetMapping("/gridAttrRanges")
+    public DataGrid<DockingPreAttrRangeVO> gridAttrRanges(String attrOid, int type, BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+         return dockingPreAttrMappingSeviceI.gridAttrRanges(attrOid,type,baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 淇濆瓨灞炴�ф槧灏勯厤缃粍浠�
+     * @param dockingPreAttrMappingDTOS 灞炴�ф槧灏勯厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/batchAddSave")
+    public BaseResult<List<DockingPreAttrMappingVO>> batchSave(@RequestBody List<DockingPreAttrMappingDTO> dockingPreAttrMappingDTOS){
+       List<DockingPreAttrMappingVO> dockingPreAttrRangeVOS= dockingPreAttrMappingSeviceI.batchAddSave(dockingPreAttrMappingDTOS);
+        return BaseResult.success(dockingPreAttrRangeVOS);
+    }
+
+    /**
+     * 涓嬭浇閿欒鐨勬枃浠朵俊鎭�
+     * @param uuid 鍞竴鏍囪瘑
+     * @param response 鍝嶅簲瀵硅薄
+     * @throws IOException 鎶涘嚭寮傚父
+     */
+    @GetMapping("/downloadErrorFile")
+    public void downloadErrorFile(String uuid, HttpServletResponse response) throws IOException {
+        ControllerUtil.downloadErrorFile(response,uuid);
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java
new file mode 100644
index 0000000..afe623b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java
@@ -0,0 +1,142 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeFixedValueDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeFixedValueController")
+public class CodeFixedValueController {
+    /**
+    * 鍥哄畾鐮佹鐨勭爜鍊� 鏈嶅姟
+    */
+    @Autowired
+    private CodeFixedValueServiceI codeFixedValueService;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeFixedValue")
+    public DataGrid<CodeFixedValueVO> gridCodeFixedValue(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeFixedValueService.gridCodeFixedValue(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeFixedValueVO> addSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
+         CodeFixedValueVO codeFixedValueVO = codeFixedValueService.addSave(codeFixedValueDTO);
+         return BaseResult.success(codeFixedValueVO);
+    }
+
+    /**
+     * 淇敼 鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeFixedValueVO> editSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
+        CodeFixedValueVO codeFixedValueVO = codeFixedValueService.editSave(codeFixedValueDTO);
+        return BaseResult.success(codeFixedValueVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeFixedValue( CodeFixedValueDTO codeFixedValueDTO) {
+        return codeFixedValueService.deleteCodeFixedValue(codeFixedValueDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeFixedValueVO> getObjectByOid(String oid){
+        CodeFixedValueVO codeFixedValueVO = codeFixedValueService.getObjectByOid(oid);
+        return BaseResult.success(codeFixedValueVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeFixedValueVO> listCodeFixedValueByOids(String oids){
+        Collection<CodeFixedValueVO> voCollection =  codeFixedValueService.listCodeFixedValueByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeFixedValueService.refDataGridCodeFixedValue(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 codefixedsecoid 鍥哄畾鐮佹涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/saveOrder")
+    public BaseResult<CodeFixedValueVO> batchSave4Order(@RequestBody Map<String,Object> param){
+        JSONArray json = JSONArray.parseArray(String.valueOf(param.get("dtoList")));
+        List<CodeFixedValueDTO> dtoList = new ArrayList<>();
+        for (int i = 0; i < json.size(); i++) {
+            CodeFixedValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeFixedValueDTO.class);
+            dtoList.add(codeFixedValueDTO);
+        }
+        String codefixedsecoid = (String) param.get("codefixedsecoid");
+        VciBaseUtil.alertNotNull(dtoList,"鐮佸�煎璞¢泦鍚�",codefixedsecoid,"鍥哄畾鐮佹鐨勪富閿�");
+        if (CollectionUtils.isEmpty(dtoList)){
+            return codeFixedValueService.batchDeleteBySecOid(codefixedsecoid);
+        }
+        return codeFixedValueService.batchSave4Order(dtoList,codefixedsecoid);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatRuleController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatRuleController.java
new file mode 100644
index 0000000..8f03f37
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatRuleController.java
@@ -0,0 +1,115 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.service.CodeKeyAttrRepeatRuleServiceI;
+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.ubcs.code.dto.CodeKeyAttrRepeatRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeKeyAttrRepeatController")
+public class CodeKeyAttrRepeatRuleController {
+    /**
+    * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯 鏈嶅姟
+    */
+    @Autowired
+    private CodeKeyAttrRepeatRuleServiceI codeKeyAttrRepeatRuleService;
+
+    /**
+     * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeKeyAttrRepeatRule")
+    public DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeKeyAttrRepeatRuleService.gridCodeKeyAttrRepeatRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> addSave(@RequestBody CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO){
+         CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.addSave(codeKeyAttrRepeatRuleDTO);
+         return BaseResult.success(codeKeyAttrRepeatRuleVO);
+    }
+
+    /**
+     * 淇敼 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> editSave(@RequestBody CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO){
+        CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.editSave(codeKeyAttrRepeatRuleDTO);
+        return BaseResult.success(codeKeyAttrRepeatRuleVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeKeyAttrRepeatRule( CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) {
+        return codeKeyAttrRepeatRuleService.deleteCodeKeyAttrRepeatRule(codeKeyAttrRepeatRuleDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> getObjectByOid(String oid){
+        CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.getObjectByOid(oid);
+        return BaseResult.success(codeKeyAttrRepeatRuleVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(String oids){
+        Collection<CodeKeyAttrRepeatRuleVO> voCollection =  codeKeyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeKeyAttrRepeatRuleService.refDataGridCodeKeyAttrRepeatRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java
new file mode 100644
index 0000000..2aaebcd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java
@@ -0,0 +1,115 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodePhaseAttrDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+/**
+ * 闃舵鐨勫睘鎬ф帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codePhaseAttrController")
+public class CodePhaseAttrController {
+    /**
+    * 闃舵鐨勫睘鎬� 鏈嶅姟
+    */
+    @Autowired
+    private CodePhaseAttrServiceI codePhaseAttrService;
+
+    /**
+     * 闃舵鐨勫睘鎬у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodePhaseAttr")
+    public DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codePhaseAttrService.gridCodePhaseAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodePhaseAttrVO> addSave(@RequestBody CodePhaseAttrDTO codePhaseAttrDTO){
+         CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.addSave(codePhaseAttrDTO);
+         return BaseResult.success(codePhaseAttrVO);
+    }
+
+    /**
+     * 淇敼 闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodePhaseAttrVO> editSave(@RequestBody CodePhaseAttrDTO codePhaseAttrDTO){
+        CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.editSave(codePhaseAttrDTO);
+        return BaseResult.success(codePhaseAttrVO);
+    }
+
+
+    /**
+     * 鍒犻櫎闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodePhaseAttr( CodePhaseAttrDTO codePhaseAttrDTO) {
+        return codePhaseAttrService.deleteCodePhaseAttr(codePhaseAttrDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
+    * @param oid 涓婚敭
+    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodePhaseAttrVO> getObjectByOid(String oid){
+        CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.getObjectByOid(oid);
+        return BaseResult.success(codePhaseAttrVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodePhaseAttrVO> listCodePhaseAttrByOids(String oids){
+        Collection<CodePhaseAttrVO> voCollection =  codePhaseAttrService.listCodePhaseAttrByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codePhaseAttrService.refDataGridCodePhaseAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java
new file mode 100644
index 0000000..fb40034
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java
@@ -0,0 +1,115 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeResembleRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+@RestController
+@RequestMapping("/resembleRuleController")
+public class CodeResembleRuleController {
+    /**
+    * 鐩镐技鏌ヨ瑙勫垯 鏈嶅姟
+    */
+    @Autowired
+    private CodeResembleRuleServiceI codeResembleRuleService;
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeResembleRule")
+    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeResembleRuleService.gridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeResembleRuleVO> addSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
+         CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.addSave(codeResembleRuleDTO);
+         return BaseResult.success(codeResembleRuleVO);
+    }
+
+    /**
+     * 淇敼 鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeResembleRuleVO> editSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
+        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.editSave(codeResembleRuleDTO);
+        return BaseResult.success(codeResembleRuleVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeResembleRule( CodeResembleRuleDTO codeResembleRuleDTO) {
+        return codeResembleRuleService.deleteCodeResembleRule(codeResembleRuleDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeResembleRuleVO> getObjectByOid(String oid){
+        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.getObjectByOid(oid);
+        return BaseResult.success(codeResembleRuleVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeResembleRuleVO> listCodeResembleRuleByOids(String oids){
+        Collection<CodeResembleRuleVO> voCollection =  codeResembleRuleService.listCodeResembleRuleByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeResembleRuleService.refDataGridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
new file mode 100644
index 0000000..22f7d61
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
@@ -0,0 +1,167 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.Map;
+
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/mdmRuleController")
+public class CodeRuleController {
+    /**
+    * 涓绘暟鎹紪鐮佽鍒� 鏈嶅姟
+    */
+    @Autowired
+    private CodeRuleServiceI codeRuleService;
+
+    /**
+     * 涓绘暟鎹紪鐮佽鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeRule")
+    public DataGrid<CodeRuleVO> gridCodeRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        DataGrid<CodeRuleVO> result = codeRuleService.gridCodeRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+        return result;
+    }
+    /**
+     * 澧炲姞 涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeRuleVO> addSave(@RequestBody CodeRuleDTO codeRuleDTO){
+         CodeRuleVO codeRuleVO = codeRuleService.addSave(codeRuleDTO);
+         return BaseResult.success(codeRuleVO);
+    }
+
+    /**
+     * 淇敼 涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeRuleVO> editSave(@RequestBody CodeRuleDTO codeRuleDTO){
+        CodeRuleVO codeRuleVO = codeRuleService.editSave(codeRuleDTO);
+        return BaseResult.success(codeRuleVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeRule( CodeRuleDTO codeRuleDTO) {
+        return codeRuleService.deleteCodeRule(codeRuleDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeRuleVO> getObjectByOid(String oid){
+        CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(oid);
+        return BaseResult.success(codeRuleVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeRuleVO> listCodeRuleByOids(String oids){
+        Collection<CodeRuleVO> voCollection =  codeRuleService.listCodeRuleByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeRuleVO> refDataGridCodeRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeRuleService.refDataGridCodeRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
+     * @param oid 涓婚敭
+     * @return 浣跨敤鑼冨洿
+     */
+    @GetMapping("/listUseRange")
+    public BaseResult<CodeClassifyVO> listUseRange(String oid){
+        Collection<CodeClassifyVO> voList = codeRuleService.listUseRangeInCodeClassify(oid);
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voList);
+       return baseResult;
+    }
+
+    /**
+     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
+     * @param map 灏佽鍙傛暟锛屽寘鎷琽id 缂栫爜瑙勫垯涓婚敭 update 鏇存柊鐘舵�佺殑鎿嶄綔
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping ("/updateStatus")
+    public BaseResult updateStatus(@RequestBody Map<String,String> map){
+        if (CollectionUtils.isEmpty(map)){
+            return BaseResult.fail("鍙傛暟閿欒");
+        }
+        String oid = map.get("oid");
+        String update = map.get("update");
+        return codeRuleService.updateStatus(oid,update);
+    }
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    @PostMapping("/clone")
+    public BaseResult cloneCodeRule(@RequestBody CodeRuleDTO codeRuleDTO){
+        return codeRuleService.cloneCodeRule(codeRuleDTO);
+    }
+
+    /**
+     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @DeleteMapping("/clearAllCode")
+    public BaseResult clearAllCode(String oid){
+        return codeRuleService.clearAllCode(oid);
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java
new file mode 100644
index 0000000..17166e6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java
@@ -0,0 +1,35 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.service.CodeSerialAlgorithmServiceI;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.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;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 娴佹按绠楁硶鎺у埗鍣�
+ * @author weidy
+ * @date 2022-2-17
+ */
+@RestController
+@RequestMapping("/codeSerialAlgorithmController")
+public class CodeSerialAlgorithmController {
+
+    /**
+     * 绠楁硶鏈嶅姟
+     */
+    @Autowired
+    private CodeSerialAlgorithmServiceI algorithmService;
+
+    /**
+     * 绠楁硶鐨勫垪琛�
+     * @return 绠楁硶鐨勪俊鎭�
+     */
+    @GetMapping("/gridCodeSerialAlgorithm")
+    public DataGrid<CodeSerialAlgorithmVO> gridCodeSerialAlgorithm(){
+        return algorithmService.gridSerialAlgorithm();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java
new file mode 100644
index 0000000..bd6e209
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java
@@ -0,0 +1,116 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeSynonymDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeSynonymVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 鍚屼箟璇嶉厤缃帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+@RestController
+@RequestMapping("/codeSynonymController")
+public class CodeSynonymController {
+    /**
+    * 鍚屼箟璇嶉厤缃� 鏈嶅姟
+    */
+    @Autowired
+    private CodeSynonymServiceI codeSynonymService;
+
+    /**
+     * 鍚屼箟璇嶉厤缃垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeSynonym")
+    public DataGrid<CodeSynonymVO> gridCodeSynonym(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeSynonymService.gridCodeSynonym(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeSynonymVO> addSave(@RequestBody CodeSynonymDTO codeSynonymDTO){
+         CodeSynonymVO codeSynonymVO = codeSynonymService.addSave(codeSynonymDTO);
+         return BaseResult.success(codeSynonymVO);
+    }
+
+    /**
+     * 淇敼 鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeSynonymVO> editSave(@RequestBody CodeSynonymDTO codeSynonymDTO){
+        CodeSynonymVO codeSynonymVO = codeSynonymService.editSave(codeSynonymDTO);
+        return BaseResult.success(codeSynonymVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeSynonym( CodeSynonymDTO codeSynonymDTO) {
+        return codeSynonymService.deleteCodeSynonym(codeSynonymDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
+    * @param oid 涓婚敭
+    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeSynonymVO> getObjectByOid(String oid){
+        CodeSynonymVO codeSynonymVO = codeSynonymService.getObjectByOid(oid);
+        return BaseResult.success(codeSynonymVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeSynonymVO> listCodeSynonymByOids(String oids){
+        Collection<CodeSynonymVO> voCollection =  codeSynonymService.listCodeSynonymByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeSynonymVO> refDataGridCodeSynonym(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeSynonymService.refDataGridCodeSynonym(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java
new file mode 100644
index 0000000..c1225f7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java
@@ -0,0 +1,138 @@
+package com.vci.ubcs.code.controller;
+
+
+import com.vci.ubcs.code.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 com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 妯℃澘闃舵鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeTempPhaseController")
+public class CodeTemplatePhaseController {
+    /**
+    * 妯℃澘闃舵 鏈嶅姟
+    */
+    @Autowired
+    private CodeTemplatePhaseServiceI codeTemplatePhaseService;
+
+    /**
+     * 妯℃澘闃舵鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeTemplatePhase")
+    public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeTemplatePhaseService.gridCodeTemplatePhase(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeTemplatePhaseVO> addSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+         CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.addSave(codeTemplatePhaseDTO);
+         return BaseResult.success(codeTemplatePhaseVO);
+    }
+
+    /**
+     * 淇敼 妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeTemplatePhaseVO> editSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+        CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.editSave(codeTemplatePhaseDTO);
+        return BaseResult.success(codeTemplatePhaseVO);
+    }
+
+
+    /**
+     * 鍒犻櫎妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeTemplatePhase( CodeTemplatePhaseDTO codeTemplatePhaseDTO) {
+        return codeTemplatePhaseService.deleteCodeTemplatePhase(codeTemplatePhaseDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇妯℃澘闃舵
+    * @param oid 涓婚敭
+    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeTemplatePhaseVO> getObjectByOid(String oid){
+        CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.getObjectByOid(oid);
+        return BaseResult.success(codeTemplatePhaseVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(String oids){
+        Collection<CodeTemplatePhaseVO> voCollection =  codeTemplatePhaseService.listCodeTemplatePhaseByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収妯℃澘闃舵鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeTemplatePhaseService.refDataGridCodeTemplatePhase(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鑾峰彇闃舵涓病鏈変娇鐢ㄧ殑妯℃澘灞炴��
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+     * @return 灞炴�х殑淇℃伅
+     */
+    @GetMapping("/gridUnUsedAttribute")
+    public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(BaseQueryObject baseQueryObject){
+        return codeTemplatePhaseService.gridUnUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鑾峰彇闃舵涓娇鐢ㄧ殑妯℃澘灞炴��
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+     * @return 灞炴�х殑淇℃伅
+     */
+    @GetMapping("/gridUsedAttribute")
+    public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(BaseQueryObject baseQueryObject){
+        return codeTemplatePhaseService.gridUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeAllCodeDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeAllCodeDaoI.java
new file mode 100644
index 0000000..e68becc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeAllCodeDaoI.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.ubcs.code.model.CodeAllCodeDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鎵�鏈夌殑鐮佸�兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+public interface  CodeAllCodeDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeAllCodeDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeAllCodeDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeAllCodeDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeAllCodeDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeAllCodeDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeAllCodeDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeAllCodeDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeAllCodeDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeAllCodeDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeAllCodeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeBasicSecDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeBasicSecDaoI.java
new file mode 100644
index 0000000..00c969d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeBasicSecDaoI.java
@@ -0,0 +1,148 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.ubcs.code.model.CodeBasicSecDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeBasicSecDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeBasicSecDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeBasicSecDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeBasicSecDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeBasicSecDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeBasicSecDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeBasicSecDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeBasicSecDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeBasicSecDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeBasicSecDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeBasicSecDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 灏咲O瀵硅薄杞崲涓築atchCBO锛屾柟渚夸笌Cbo瀵硅薄涓�璧锋搷浣�
+	 * @param codeBasicSec 鐮佹鍩烘湰淇℃伅DO瀵硅薄
+	 * @param operationType 鎿嶄綔鏂瑰紡 - add 娣诲姞 edit 缂栬緫 delete 鍒犻櫎
+	 * @return 鎵ц缁撴灉琛屾暟
+	 */
+	BatchCBO trans2BatchCBO(CodeBasicSecDO codeBasicSec,String operationType);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeButtonDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeButtonDaoI.java
new file mode 100644
index 0000000..b74049f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeButtonDaoI.java
@@ -0,0 +1,142 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.ubcs.code.model.CodeButtonDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeButtonDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeButtonDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeButtonDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeButtonDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeButtonDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeButtonDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeButtonDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeButtonDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeButtonDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeButtonDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyDaoI.java
new file mode 100644
index 0000000..a9f722e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyDaoI.java
@@ -0,0 +1,232 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.ubcs.code.model.CodeClassifyDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫绘暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public interface  CodeClassifyDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ煡璇㈡�绘暟
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鎬绘暟
+	 */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉 key鏄富閿紝value鏄湰娆℃煡璇㈢殑灞傜骇
+	*/
+	Map<String,String> selectAllLevelChildOid(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	List<CodeClassifyDO> selectAllLevelParents(String oid);
+
+	/**
+	 * 鑾峰彇褰撳墠鍒嗙被鐨勬墍鏈変笂绾у垎绫伙紙鍚湰娆℃煡璇㈠眰绾у彿锛�
+	 * @param oid 涓婚敭
+	 * @return 鎵�鏈夌殑涓婄骇
+	 */
+	List<CodeClassifyDO> selectAllLevelParentByOid(String oid);
+
+	/**
+	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	CodeClassifyDO selectBtmOrParentBtm(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<CodeClassifyDO> selectAllLevelChild(String oid);
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓嬬骇锛屽苟鍖呭惈灞傜骇鐨勮矾寰�
+	 * @param oid 涓婄骇鐨勪富閿�
+	 * @param fieldInPath 瀛楁鍦ㄨ矾寰勪腑鐨勫唴瀹�
+	 * @param enable 鏄惁鍙煡璇㈠惎鐢�
+	 * @return 鍒嗙被鐨勬暟鎹唴瀹�
+	 */
+    List<CodeClassifyDO> selectAllLevelChildHasPath(String oid, String fieldInPath,boolean enable);
+
+    /**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	long countAllLevelChildOid(String oid);
+
+	/**
+	 * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return 鍒嗙被鐨勬樉绀哄璞�
+	 */
+	List<CodeClassifyDO> listParentClassify(String codeClassifyOid);
+
+	/**
+	 * 鏌ヨ杩欎釜鍒嗙被鐨剅oot鑺傜偣oid
+	 */
+	CodeClassifyDO getRootClassify(String codeClassifyOid);
+
+	/**
+	 * 鍒ゆ柇杩欎釜鍒嗙被鏄惁灞炰簬wupin鍒嗙被鏍�
+	 * @param oid
+	 * @return
+	 */
+	boolean isWupin(String oid);
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 鏍¢獙鏄惁鍖呭惈瀛愯妭鐐�
+	 * @param oid 鍒嗙被鐨勪富閿�
+	 * @return true 琛ㄧず鍖呭惈
+	 */
+    boolean checkHasChild(String oid);
+
+	/**
+	 * 浣跨敤瀛楁鐨勮矾寰勶紝鏌ヨ瀵硅薄
+	 * @param fieldPath 瀛楁鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮� xxx/yyy/zz鐨勬牸寮�
+	 * @param field 瀛楁鐨勮嫳鏂囧悕绉�
+	 * @return 鍒嗙被鐨勫璞�
+	 */
+	CodeClassifyDO selectByFieldPath(String fieldPath, String field);
+
+	/***
+	 * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
+	 * @param classifyId
+	 * @param enable
+	 * @return
+	 */
+	public List<CodeClassifyDO>getIdPathToNamePathByParentId(String classifyId,boolean enable);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyProcessTempDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyProcessTempDaoI.java
new file mode 100644
index 0000000..fcc58b6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyProcessTempDaoI.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeClassifyProcessTempDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyProcessTempDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyProcessTempDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyProcessTempDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyProcessTempDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyProcessTempDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyProcessTempDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyProcessTempDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyProcessTempDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyProcessTempDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyProcessTempDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyProcessTempDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTempMapItemDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTempMapItemDaoI.java
new file mode 100644
index 0000000..e69e7c4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTempMapItemDaoI.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeClassifyTempMapItemDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public interface  CodeClassifyTempMapItemDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTempMapItemDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTempMapItemDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTempMapItemDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTempMapItemDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTempMapItemDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTempMapItemDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTempMapItemDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTempMapItemDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTempMapItemDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTempMapItemDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateAttrDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateAttrDaoI.java
new file mode 100644
index 0000000..1789a0a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateAttrDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeClassifyTemplateAttrDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateAttrDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateAttrDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateAttrDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateAttrDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateAttrDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateAttrDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateAttrDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateAttrDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateAttrDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateAttrDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateButtonDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateButtonDaoI.java
new file mode 100644
index 0000000..e41a53b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateButtonDaoI.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeClassifyTemplateButtonDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateButtonDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateButtonDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateButtonDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateButtonDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateButtonDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateButtonDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateButtonDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateButtonDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateButtonDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateButtonDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateDaoI.java
new file mode 100644
index 0000000..43db3ef
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateDaoI.java
@@ -0,0 +1,170 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeClassifyTemplateDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateDO selectByPrimaryKey(String oid);
+
+
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	List<String> selectAllLevelChildOid(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<CodeClassifyTemplateDO> selectAllLevelChild(String oid);
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	long countAllLevelChildOid(String oid);
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 鏌ヨ鍒嗙被鐨勫瓙鍒嗙被鍖呭惈鐨勬ā鏉跨殑鍐呭
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return key鏄ā鏉跨殑涓婚敭锛寁alue鏄ā鏉挎墍灞炵殑鍒嗙被涓婚敭
+	 */
+    Map<String/**妯℃澘鐨勪富閿�**/, String/**妯℃澘鐨勫垎绫�**/> selectChildHasReleaseTemplate(String codeClassifyOid);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateMapDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateMapDaoI.java
new file mode 100644
index 0000000..020d4c2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateMapDaoI.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeClassifyTemplateMapDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateMapDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateMapDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateMapDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateMapDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateMapDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateMapDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateMapDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateMapDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateMapDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateMapDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateMapDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyValueDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyValueDaoI.java
new file mode 100644
index 0000000..7489f56
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyValueDaoI.java
@@ -0,0 +1,147 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeClassifyValueDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyValueDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyValueDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyValueDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyValueDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyValueDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyValueDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyValueDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyValueDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	List<String> selectAllLevelChildOid(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<CodeClassifyValueDO> selectAllLevelChild(String oid);
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	long countAllLevelChildOid(String oid);
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeFixedValueDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeFixedValueDaoI.java
new file mode 100644
index 0000000..4e4f1ed
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeFixedValueDaoI.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeFixedValueDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeFixedValueDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeFixedValueDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeFixedValueDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeFixedValueDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeFixedValueDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeFixedValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeFixedValueDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeFixedValueDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeFixedValueDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeFixedValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeFixedValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeKeyAttrRepeatRuleDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeKeyAttrRepeatRuleDaoI.java
new file mode 100644
index 0000000..f33c9a3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeKeyAttrRepeatRuleDaoI.java
@@ -0,0 +1,148 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeKeyAttrRepeatRuleDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeKeyAttrRepeatRuleDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeKeyAttrRepeatRuleDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeKeyAttrRepeatRuleDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeKeyAttrRepeatRuleDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+	 * 鏍规嵁缂栧彿鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	List<CodeKeyAttrRepeatRuleDO> selectByIdCollection(Collection<String> ids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeKeyAttrRepeatRuleDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeKeyAttrRepeatRuleDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodePhaseAttrDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodePhaseAttrDaoI.java
new file mode 100644
index 0000000..0df1d3e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodePhaseAttrDaoI.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodePhaseAttrDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 闃舵鐨勫睘鎬ф暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodePhaseAttrDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodePhaseAttrDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodePhaseAttrDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodePhaseAttrDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodePhaseAttrDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodePhaseAttrDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodePhaseAttrDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodePhaseAttrDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodePhaseAttrDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodePhaseAttrDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodePhaseAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeResembleRuleDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeResembleRuleDaoI.java
new file mode 100644
index 0000000..21e4f56
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeResembleRuleDaoI.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeResembleRuleDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public interface  CodeResembleRuleDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeResembleRuleDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeResembleRuleDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeResembleRuleDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeResembleRuleDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeResembleRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeResembleRuleDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeResembleRuleDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeResembleRuleDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeResembleRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeResembleRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeRuleDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeRuleDaoI.java
new file mode 100644
index 0000000..f3b108d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeRuleDaoI.java
@@ -0,0 +1,155 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeRuleDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeRuleDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeRuleDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeRuleDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeRuleDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeRuleDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+	 * 浣跨敤缂栧彿闆嗗悎鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	List<CodeRuleDO> selectByIdCollection(Collection<String> ids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeRuleDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeRuleDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeRuleDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 鍒犻櫎鏁版嵁涓嶈繘琛屾寔涔呭寲锛岃浆鍖栦负batchCBO
+	 * @param codeRule 缂栫爜瑙勫垯瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	BatchCBO delete4BatchCBO (CodeRuleDO codeRule);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSerialValueDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSerialValueDaoI.java
new file mode 100644
index 0000000..4fa1333
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSerialValueDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeSerialValueDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 娴佹按鐨勫�兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+public interface  CodeSerialValueDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeSerialValueDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeSerialValueDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeSerialValueDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSerialValueDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeSerialValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeSerialValueDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeSerialValueDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeSerialValueDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSerialValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSerialValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSynonymDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSynonymDaoI.java
new file mode 100644
index 0000000..2766a1f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSynonymDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeSynonymDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍚屼箟璇嶉厤缃暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public interface  CodeSynonymDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeSynonymDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeSynonymDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeSynonymDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSynonymDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeSynonymDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeSynonymDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeSynonymDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeSynonymDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSynonymDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSynonymDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeTemplatePhaseDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeTemplatePhaseDaoI.java
new file mode 100644
index 0000000..71b7584
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeTemplatePhaseDaoI.java
@@ -0,0 +1,142 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.CodeTemplatePhaseDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妯℃澘闃舵鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeTemplatePhaseDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeTemplatePhaseDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeTemplatePhaseDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeTemplatePhaseDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeTemplatePhaseDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeTemplatePhaseDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeTemplatePhaseDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeTemplatePhaseDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeTemplatePhaseDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeTemplatePhaseDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeTemplatePhaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingDataDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingDataDaoI.java
new file mode 100644
index 0000000..5f2b1dd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingDataDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.DockingDataDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingLogeDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingLogeDaoI.java
new file mode 100644
index 0000000..483e7eb
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingLogeDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.DockingLogeDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataDaoI.java
new file mode 100644
index 0000000..e1ca103
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataDaoI.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.DockingPreApplyDataDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataInfoDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataInfoDaoI.java
new file mode 100644
index 0000000..a69cf67
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataInfoDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.DockingPreApplyDataInfoDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrMappingDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrMappingDaoI.java
new file mode 100644
index 0000000..4be3f38
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrMappingDaoI.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.DockingPreAttrMappingDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrRangeDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrRangeDaoI.java
new file mode 100644
index 0000000..9b812c9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrRangeDaoI.java
@@ -0,0 +1,126 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.DockingPreAttrRangeDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingTaskDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingTaskDaoI.java
new file mode 100644
index 0000000..7e929d5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingTaskDaoI.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.DockingTaskDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntAuthorityDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntAuthorityDaoI.java
new file mode 100644
index 0000000..f4bfb62
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntAuthorityDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.SysIntAuthorityDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntBaseDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntBaseDaoI.java
new file mode 100644
index 0000000..a756c95
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntBaseDaoI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.dao;
+
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.SysIntBaseDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntHeaderDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntHeaderDaoI.java
new file mode 100644
index 0000000..e9284cf
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntHeaderDaoI.java
@@ -0,0 +1,143 @@
+package com.vci.ubcs.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.ubcs.code.model.SysIntHeaderDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntInfoDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntInfoDaoI.java
new file mode 100644
index 0000000..5d486be
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntInfoDaoI.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.SysIntInfoDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntParamDaoI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntParamDaoI.java
new file mode 100644
index 0000000..5acd1a3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntParamDaoI.java
@@ -0,0 +1,144 @@
+package com.vci.ubcs.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.ubcs.code.model.SysIntParamDO;
+import com.vci.web.pageModel.BatchCBO;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeAllCodeDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeAllCodeDaoImpl.java
new file mode 100644
index 0000000..36b0728
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeAllCodeDaoImpl.java
@@ -0,0 +1,247 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeAllCodeDaoI;
+import com.vci.ubcs.code.model.CodeAllCodeDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鎵�鏈夌殑鐮佸�兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+@Repository
+public class  CodeAllCodeDaoImpl implements CodeAllCodeDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeAllCodeDO codeAllCodeDO = selectByPrimaryKey(oid);
+		return boService.delete(codeAllCodeDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeAllCodeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeAllCodeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeAllCodeDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeAllCodeDO record = boService.selectByOid(oid, CodeAllCodeDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeAllCodeDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeAllCodeDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeAllCodeDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeAllCodeDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeAllCodeDO> selectAll(){
+		return boService.queryObject(CodeAllCodeDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeAllCodeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeAllCodeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeAllCodeDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeAllCodeDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeAllCodeDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeAllCodeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeAllCodeDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeAllCodeDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeallcode");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeallcode");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeAllCodeDO> dos = boService.selectByOidCollection(oids, CodeAllCodeDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeBasicSecDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeBasicSecDaoImpl.java
new file mode 100644
index 0000000..d5fbca3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeBasicSecDaoImpl.java
@@ -0,0 +1,271 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeBasicSecDaoI;
+import com.vci.ubcs.code.model.CodeBasicSecDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeBasicSecDaoImpl implements CodeBasicSecDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeBasicSecDO codeBasicSecDO = selectByPrimaryKey(oid);
+		return boService.delete(codeBasicSecDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeBasicSecDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeBasicSecDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeBasicSecDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeBasicSecDO record = boService.selectByOid(oid, CodeBasicSecDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeBasicSecDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeBasicSecDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeBasicSecDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeBasicSecDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeBasicSecDO> selectAll(){
+		return boService.queryObject(CodeBasicSecDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeBasicSecDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeBasicSecDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeBasicSecDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeBasicSecDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeBasicSecDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeBasicSecDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeBasicSecDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeBasicSecDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codebasicsec");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codebasicsec");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeBasicSecDO> dos = boService.selectByOidCollection(oids, CodeBasicSecDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+
+	/**
+	 * 涓嶈缃寔涔呭寲锛岃浆鍖朌O涓築atchCBO
+	 * @param codeBasicSec 鐮佹鍩虹淇℃伅瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public BatchCBO trans2BatchCBO(CodeBasicSecDO codeBasicSec,String operationType) {
+		VciBaseUtil.alertNotNull(codeBasicSec,"鐮佹鍩虹淇℃伅");
+		WebUtil.setPersistence(false);
+		BatchCBO batchCBO = null;
+		if ("add".equals(operationType)) {
+			batchCBO= boService.addSave(codeBasicSec);
+		}else if ("edit".equals(operationType)){
+			batchCBO = boService.editSave(codeBasicSec);
+		}else if ("delete".equals(operationType)){
+			batchCBO = boService.delete(codeBasicSec);
+		}else{
+			batchCBO = new BatchCBO();
+		}
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeButtonDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeButtonDaoImpl.java
new file mode 100644
index 0000000..b4c14e4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeButtonDaoImpl.java
@@ -0,0 +1,247 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeButtonDaoI;
+import com.vci.ubcs.code.model.CodeButtonDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeButtonDaoImpl implements CodeButtonDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeButtonDO codeButtonDO = selectByPrimaryKey(oid);
+		return boService.delete(codeButtonDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeButtonDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeButtonDO record = boService.selectByOid(oid, CodeButtonDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeButtonDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeButtonDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeButtonDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeButtonDO> selectAll(){
+		return boService.queryObject(CodeButtonDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeButtonDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeButtonDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeButtonDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeButtonDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codebutton");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codebutton");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeButtonDO> dos = boService.selectByOidCollection(oids, CodeButtonDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyDaoImpl.java
new file mode 100644
index 0000000..ea58eb0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyDaoImpl.java
@@ -0,0 +1,520 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.CodeClassifyDaoI;
+import com.vci.ubcs.code.model.CodeClassifyDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撳垎绫绘暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+@Repository
+public class  CodeClassifyDaoImpl implements CodeClassifyDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+	 * 骞冲彴鐨勫鎴风
+	 */
+	@Autowired
+	private PlatformClientUtil platformClientUtil;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyDO codeClassifyDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyDO record = boService.selectByOid(oid, CodeClassifyDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyDO> selectAll(){
+		return boService.queryObject(CodeClassifyDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyDO.class,conditionMap)));
+	}
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 *
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	@Override
+	public List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyDO.class);
+	}
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ煡璇㈡�绘暟
+	 *
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鎬绘暟
+	 */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉锛宬ey鏄富閿紝value鏄湰娆℃煡璇㈢殑灞傜骇
+	*/
+	@Override
+	public Map<String,String> selectAllLevelChildOid(String oid){
+		String sql = "select oid,level from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " START WITH parentCodeClassifyOid = :oid CONNECT BY PRIOR OID = parentCodeClassifyOid";
+	    Map< String,String> conditionMap = new HashMap< String,String>();
+	    conditionMap.put("oid",oid);
+	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		Map<String,String> oidLevelMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				oidLevelMap.put(VciBaseUtil.getStringValueFromObject(data.get("oid")),VciBaseUtil.getStringValueFromObject(data.get("level")));
+			}
+		}
+		return oidLevelMap;
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	@Override
+	public List<CodeClassifyDO> selectAllLevelParents(String oid){
+		String sql = "select oid,id,name,btmtypeid,btmtypename from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where btmtypeid is not null start with oid= :oid connect by prior PARENTCODECLASSIFYOID=oid ";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		List<CodeClassifyDO> oidList = new ArrayList<CodeClassifyDO>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				CodeClassifyDO codeClassifyDO = new CodeClassifyDO();
+				codeClassifyDO.setOid(VciBaseUtil.getStringValueFromObject(data.get("oid")));
+				codeClassifyDO.setId(VciBaseUtil.getStringValueFromObject(data.get("id")));
+				codeClassifyDO.setName(VciBaseUtil.getStringValueFromObject(data.get("name")));
+				codeClassifyDO.setBtmTypeId(VciBaseUtil.getStringValueFromObject(data.get("btmtypeid")));
+				codeClassifyDO.setBtmTypeName(VciBaseUtil.getStringValueFromObject(data.get("btmtypename")));
+				oidList.add(codeClassifyDO);
+			}
+		}
+		return oidList;
+	}
+
+	/**
+	 * 鑾峰彇褰撳墠鍒嗙被鐨勬墍鏈変笂绾у垎绫伙紙鍚湰娆℃煡璇㈠眰绾у彿锛�
+	 * @param oid 涓婚敭
+	 * @return 鎵�鏈夌殑涓婄骇
+	 */
+	@Override
+	public List<CodeClassifyDO> selectAllLevelParentByOid(String oid){
+		String sql = "select oid,level from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " start with oid= :oid connect by prior PARENTCODECLASSIFYOID = oid ";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<ClientBusinessObject> cbos = boService.queryBySql(sql, conditionMap);
+		Map<String,String> oidLevelMap = new HashMap<>();
+		Optional.ofNullable(cbos).orElseGet(()->new ArrayList<>()).stream().forEach(cbo->{
+			oidLevelMap.put(cbo.getOid(),cbo.getAttributeValue("level"));
+		});
+		if(CollectionUtils.isEmpty(oidLevelMap)){
+			return new ArrayList<>();
+		}
+		//浣跨敤涓婚敭鏌ヨ涓�涓�
+		List<CodeClassifyDO> classifyDOS = selectByPrimaryKeyCollection(oidLevelMap.keySet());
+		if(!CollectionUtils.isEmpty(classifyDOS)){
+			classifyDOS.stream().forEach(classifyDO->{
+				classifyDO.setDataLevel(VciBaseUtil.getInt(oidLevelMap.getOrDefault(classifyDO.getOid(),"0")));
+			});
+		}
+		return classifyDOS;
+	}
+
+	/**
+	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename锛屾病鏈夊氨杩斿洖null
+	 */
+	@Override
+	public CodeClassifyDO selectBtmOrParentBtm(String oid){
+		List<CodeClassifyDO> oidList = selectAllLevelParents(oid);
+		return oidList.size()==0?null:oidList.get(0);
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<CodeClassifyDO> selectAllLevelChild(String oid){
+		Map<String, String> oidLevelMap = selectAllLevelChildOid(oid);
+		if(CollectionUtils.isEmpty(oidLevelMap)){
+			return new ArrayList<>();
+		}
+		List<CodeClassifyDO> classifyDOS = boService.selectByOidCollection(oidLevelMap.keySet(), CodeClassifyDO.class);
+		if(!CollectionUtils.isEmpty(classifyDOS)){
+			classifyDOS.stream().forEach(classifyDO->{
+				classifyDO.setDataLevel(VciBaseUtil.getInt(oidLevelMap.getOrDefault(classifyDO.getOid(),"0")));
+			});
+		}
+		return classifyDOS;
+	}
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓嬬骇锛屽苟鍖呭惈灞傜骇鐨勮矾寰�
+	 * @param oid 涓婄骇鐨勪富閿�
+	 * @param fieldInPath 瀛楁鍦ㄨ矾寰勪腑鐨勫唴瀹�
+	 * @param enable 鏄惁鍙煡璇㈠惎鐢ㄧ殑
+	 * @return 鍒嗙被鐨勬暟鎹唴瀹�
+	 */
+	@Override
+	public List<CodeClassifyDO> selectAllLevelChildHasPath(String oid, String fieldInPath, boolean enable){
+		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(),CodeClassifyDO.class);
+		if(StringUtils.isBlank(fieldInPath)){
+			fieldInPath = VciQueryWrapperForDO.ID_FIELD;
+		}
+		//coderuleoid.name as codeRuleOidName
+		String selectField = queryWrapperForDO.getSelectFieldSql().replace(", path","").replace(", dataLevel","")
+				+ ",level as datalevel ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + "." + fieldInPath + ", '#') as path ";
+		String sql = selectField + " from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " " + queryWrapperForDO.getTableNick() +
+				queryWrapperForDO.getLinkTableSql() +
+				(enable?" where " +  queryWrapperForDO.getTableNick() + ".lcstatus ='Enabled' " :"")
+				+ " START WITH " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid " + (StringUtils.isBlank(oid)?" is null " : " = '" + oid + "' " )
+				+ " CONNECT BY PRIOR " +  queryWrapperForDO.getTableNick() + ".OID = " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+		return dataList;
+	}
+
+	/**
+	 *
+	 * @param classifyId
+	 * @param enable
+	 * @return
+	 */
+	@Override
+	public List<CodeClassifyDO> getIdPathToNamePathByParentId(String classifyId,boolean enable) {
+		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(), CodeClassifyDO.class);
+		//coderuleoid.name as codeRuleOidName
+		String selectField = queryWrapperForDO.getSelectFieldSql().replace(", path","").replace(", dataLevel","")
+		+",level as datalevel ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".name, '#') as namePath,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".id, '#') as idPath ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".id, '#') as path ";
+		String sql = selectField + " from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " " + queryWrapperForDO.getTableNick() +
+				queryWrapperForDO.getLinkTableSql() +
+				(enable?" where " +  queryWrapperForDO.getTableNick() + ".lcstatus ='Enabled' " :"")
+				+ " START WITH " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid " + (StringUtils.isBlank(classifyId)?" is null " : " = '" + classifyId + "' " )
+				+ " CONNECT BY PRIOR " +  queryWrapperForDO.getTableNick() + ".OID = " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+
+		return dataList;
+	}
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	@Override
+	public long countAllLevelChildOid(String oid){
+		String sql = "select count(OID) as countsize from platformbtm_codeclassify START WITH parentCodeClassifyOid = :oid CONNECT BY PRIOR OID= parentCodeClassifyOid";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
+	}
+
+	/**
+	 * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return 鍒嗙被鐨勬樉绀哄璞�
+	 */
+	@Override
+	public List<CodeClassifyDO> listParentClassify(String codeClassifyOid){
+		String sql = "select\n" +
+				"*\n" +
+				"from\n" +
+				"PLATFORMBTM_CODECLASSIFY\n" +
+				"where lcstatus='Enabled'" +
+				"start with \n" +
+				"oid='"+codeClassifyOid+"'\n" +
+				"connect by \n" +
+				"prior parentcodeclassifyoid=oid";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+		return dataList;
+	}
+
+	/**
+	 * 鏌ヨ杩欎釜鍒嗙被鐨剅oot鑺傜偣oid
+	 */
+	@Override
+	public CodeClassifyDO getRootClassify(String codeClassifyOid){
+		List<CodeClassifyDO> dataList = listParentClassify(codeClassifyOid);
+		return dataList.size()>0?dataList.get(dataList.size()-1):null;
+	}
+
+	/**
+	 * 鍒ゆ柇杩欎釜鍒嗙被鏄惁灞炰簬wupin鍒嗙被鏍�
+	 * @param oid
+	 * @return
+	 */
+	@Override
+	public boolean isWupin(String oid){
+		boolean u = false;
+		String sql = "  select count(1) iswupin from \n" +
+				"  (\n" +
+				"  select\n" +
+				"  oid\n" +
+				"  from\n" +
+				"  PLATFORMBTM_CODECLASSIFY\n" +
+				"  where lcstatus='Enabled'\n" +
+				"  start with\n" +
+				"  oid=\n" +
+				"  (\n" +
+				"  select oid from PLATFORMBTM_CODECLASSIFY where id='wupin'\n" +
+				"  )\n" +
+				"  connect by\n" +
+				"  parentcodeclassifyoid=prior oid\n" +
+				"  ) t\n" +
+				"  where oid = '"+oid+"'";
+		try {
+			List<Map> dataList = boService.queryByOnlySqlForMap(sql);
+			String iswupin = dataList.get(0).getOrDefault("ISWUPIN","0").toString();
+			int count = Integer.parseInt(iswupin);
+			u=count>0?true:false;
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		return u;
+	}
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclassify");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclassify");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyDO> dos = boService.selectByOidCollection(oids, CodeClassifyDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍖呭惈瀛愯妭鐐�
+	 *
+	 * @param oid 鍒嗙被鐨勪富閿�
+	 * @return true 琛ㄧず鍖呭惈
+	 */
+	@Override
+	public boolean checkHasChild(String oid) {
+		if(StringUtils.isBlank(oid)){
+			return false;
+		}
+		Map<String ,String > conditionMap = new HashMap<>();
+		conditionMap.put("parentCodeClassifyOid",oid);
+		return boService.queryCount(CodeClassifyDO.class,conditionMap) > 0;
+	}
+
+	/**
+	 * 浣跨敤瀛楁鐨勮矾寰勶紝鏌ヨ瀵硅薄
+	 *
+	 * @param fieldPath 瀛楁鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮� xxx/yyy/zz鐨勬牸寮�
+	 * @param field     瀛楁鐨勮嫳鏂囧悕绉�
+	 * @return 鍒嗙被鐨勫璞�
+	 */
+	@Override
+	public CodeClassifyDO selectByFieldPath(String fieldPath, String field) {
+		if(StringUtils.isBlank(field)){
+			field = VciQueryWrapperForDO.ID_FIELD;
+		}
+		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(),CodeClassifyDO.class);
+		String sql = "select * from (select oid , SYS_CONNECT_BY_PATH(" + field + ",'/') as paths from " + queryWrapperForDO.getTableName() +
+				" START WITH parentCodeClassifyOid is null CONNECT BY PRIOR OID= parentCodeClassifyOid ) a where a.paths = '/" + fieldPath + "' ";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+		return (!CollectionUtils.isEmpty(dataList))?selectByPrimaryKey(dataList.get(0).getOid()):null;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyProcessTempDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyProcessTempDaoImpl.java
new file mode 100644
index 0000000..7a96b90
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyProcessTempDaoImpl.java
@@ -0,0 +1,247 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeClassifyProcessTempDaoI;
+import com.vci.ubcs.code.model.CodeClassifyProcessTempDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyProcessTempDaoImpl implements CodeClassifyProcessTempDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyProcessTempDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyProcessTempDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyProcessTempDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyProcessTempDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyProcessTempDO record = boService.selectByOid(oid, CodeClassifyProcessTempDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyProcessTempDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyProcessTempDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectAll(){
+		return boService.queryObject(CodeClassifyProcessTempDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyProcessTempDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyProcessTempDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyProcessTempDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyProcessTempDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyProcessTempDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyProcessTempDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclsflowtemp");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclsflowtemp");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyProcessTempDO> dos = boService.selectByOidCollection(oids, CodeClassifyProcessTempDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java
new file mode 100644
index 0000000..517c338
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeClassifyTempMapItemDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTempMapItemDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+@Repository
+public class  CodeClassifyTempMapItemDaoImpl implements CodeClassifyTempMapItemDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTempMapItemDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTempMapItemDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTempMapItemDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTempMapItemDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTempMapItemDO record = boService.selectByOid(oid, CodeClassifyTempMapItemDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTempMapItemDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTempMapItemDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectAll(){
+		return boService.queryObject(CodeClassifyTempMapItemDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTempMapItemDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTempMapItemDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTempMapItemDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTempMapItemDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTempMapItemDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTempMapItemDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTempMapItemDO> dos = boService.selectByOidCollection(oids, CodeClassifyTempMapItemDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java
new file mode 100644
index 0000000..53ba6b3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java
@@ -0,0 +1,214 @@
+package com.vci.ubcs.code.dao.impl;
+
+import com.vci.ubcs.code.dao.CodeClassifyTemplateAttrDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTemplateAttrDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateAttrDaoImpl implements CodeClassifyTemplateAttrDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateAttrDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateAttrDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateAttrDO record = boService.selectByOid(oid, CodeClassifyTemplateAttrDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateAttrDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateAttrDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateAttrDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateAttrDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateAttrDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateAttrDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateAttrDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos,false);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java
new file mode 100644
index 0000000..abee77a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeClassifyTemplateButtonDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTemplateButtonDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateButtonDaoImpl implements CodeClassifyTemplateButtonDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateButtonDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateButtonDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateButtonDO record = boService.selectByOid(oid, CodeClassifyTemplateButtonDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateButtonDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateButtonDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateButtonDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateButtonDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateButtonDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateButtonDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateButtonDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateDaoImpl.java
new file mode 100644
index 0000000..00b27bf
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateDaoImpl.java
@@ -0,0 +1,321 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.CodeClassifyTemplateDaoI;
+import com.vci.ubcs.code.lifecycle.CodeClassifyTemplateLC;
+import com.vci.ubcs.code.model.CodeClassifyTemplateDO;
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateDaoImpl implements CodeClassifyTemplateDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateDO,false);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateDO record = boService.selectByOid(oid, CodeClassifyTemplateDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	@Override
+	public List<String> selectAllLevelChildOid(String oid){
+		String sql = "select oid from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid= OID";
+	    Map< String,String> conditionMap = new HashMap< String,String>();
+	    conditionMap.put("oid",oid);
+	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		List<String> oidList = new ArrayList<String>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				oidList.add(VciBaseUtil.getStringValueFromObject(data.get("oid")));
+			}
+		}
+		return oidList;
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<CodeClassifyTemplateDO> selectAllLevelChild(String oid){
+		return boService.selectByOidCollection(selectAllLevelChildOid(oid),CodeClassifyTemplateDO.class);
+	}
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	@Override
+	public long countAllLevelChildOid(String oid){
+		String sql = "select count(OID) countsize from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid = OID";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
+	}
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclstemplate");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclstemplate");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	/**
+	 * 鏌ヨ鍒嗙被鐨勫瓙鍒嗙被鍖呭惈鐨勬ā鏉跨殑鍐呭
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return key鏄ā鏉跨殑涓婚敭锛寁alue鏄ā鏉挎墍灞炵殑鍒嗙被涓婚敭
+	 */
+	@Override
+	public Map<String, String> selectChildHasReleaseTemplate(String codeClassifyOid) {
+		Map<String, String> tempClsMap = new HashMap<>();
+		if(StringUtils.isNotBlank(codeClassifyOid)) {
+			String sql = "select t.oid as oid,cls.oid as clsoid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE) +
+					" t left join (select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where lcstatus = :lcstatus " +
+					" start with oid = :classifyoid \n" +
+					"connect by prior oid=parentcodeclassifyoid) cls  on t.codeclassifyoid = cls.oid where t.lcstatus =:templatelcstatus and cls.oid is not null\n";
+			Map<String, String> conditionMap = new HashMap<>();
+			conditionMap.put("lcstatus", FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED);
+			conditionMap.put("classifyoid", codeClassifyOid.trim());
+			conditionMap.put("templatelcstatus", CodeClassifyTemplateLC.RELEASED.getValue());
+			List<ClientBusinessObject> cbos = boService.queryBySql(sql, conditionMap);
+
+			if(!CollectionUtils.isEmpty(cbos)){
+				cbos.stream().forEach(cbo->{
+					tempClsMap.put(cbo.getOid(),cbo.getAttributeValue("clsoid"));
+				});
+			}else{
+
+			}
+		}
+		return tempClsMap;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java
new file mode 100644
index 0000000..4193ff2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java
@@ -0,0 +1,247 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeClassifyTemplateMapDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTemplateMapDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateMapDaoImpl implements CodeClassifyTemplateMapDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateMapDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateMapDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateMapDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateMapDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateMapDO record = boService.selectByOid(oid, CodeClassifyTemplateMapDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateMapDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateMapDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateMapDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateMapDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateMapDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateMapDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateMapDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateMapDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateMapDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codetempmap");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codetempmap");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateMapDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateMapDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyValueDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyValueDaoImpl.java
new file mode 100644
index 0000000..9a38d58
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyValueDaoImpl.java
@@ -0,0 +1,257 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeClassifyValueDaoI;
+import com.vci.ubcs.code.model.CodeClassifyValueDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyValueDaoImpl implements CodeClassifyValueDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyValueDO codeClassifyValueDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyValueDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyValueDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyValueDO record = boService.selectByOid(oid, CodeClassifyValueDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyValueDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectAll(){
+		return boService.queryObject(CodeClassifyValueDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyValueDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyValueDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyValueDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	@Override
+	public List<String> selectAllLevelChildOid(String oid){
+		String sql = "select oid FROM platformbtm_codeclassifyvalue START WITH parentClassifyValueOid = :oid CONNECT BY PRIOR parentClassifyValueOid= OID";
+	    Map< String,String> conditionMap = new HashMap< String,String>();
+	    conditionMap.put("oid",oid);
+	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		List<String> oidList = new ArrayList<String>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				oidList.add(VciBaseUtil.getStringValueFromObject(data.get("oid")));
+			}
+		}
+		return oidList;
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<CodeClassifyValueDO> selectAllLevelChild(String oid){
+		return boService.selectByOidCollection(selectAllLevelChildOid(oid),CodeClassifyValueDO.class);
+	}
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	@Override
+	public long countAllLevelChildOid(String oid){
+		String sql = "select count(OID) countsize FROM platformbtm_codeclassifyvalue START WITH parentClassifyValueOid = :oid CONNECT BY PRIOR parentClassifyValueOid = OID";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
+	}
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyValueDO> dos = boService.selectByOidCollection(oids, CodeClassifyValueDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeFixedValueDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeFixedValueDaoImpl.java
new file mode 100644
index 0000000..25b4647
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeFixedValueDaoImpl.java
@@ -0,0 +1,222 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeFixedValueDaoI;
+import com.vci.ubcs.code.model.CodeFixedValueDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+import plm.bs.bom.common.AttributeValue;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeFixedValueDaoImpl implements CodeFixedValueDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeFixedValueDO codeFixedValueDO = selectByPrimaryKey(oid);
+		return boService.delete(codeFixedValueDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeFixedValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeFixedValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeFixedValueDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeFixedValueDO record = boService.selectByOid(oid, CodeFixedValueDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeFixedValueDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeFixedValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeFixedValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeFixedValueDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeFixedValueDO> selectAll(){
+		return boService.queryObject(CodeFixedValueDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeFixedValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeFixedValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeFixedValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeFixedValueDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeFixedValueDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeFixedValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeFixedValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeFixedValueDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeFixedValueDO> dos = boService.selectByOidCollection(oids, CodeFixedValueDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		Set<ClientBusinessObject> deleteCbos = batchCBO.getDeleteCbos();
+		deleteCbos.forEach(cbo -> {
+			cbo.getBusinessObject().newAttrValList = new AttributeValue[0];
+		});
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java
new file mode 100644
index 0000000..3c755dc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java
@@ -0,0 +1,264 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeKeyAttrRepeatRuleDaoI;
+import com.vci.ubcs.code.model.CodeKeyAttrRepeatRuleDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeKeyAttrRepeatRuleDaoImpl implements CodeKeyAttrRepeatRuleDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByPrimaryKey(oid);
+		return boService.delete(codeKeyAttrRepeatRuleDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeKeyAttrRepeatRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeKeyAttrRepeatRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeKeyAttrRepeatRuleDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeKeyAttrRepeatRuleDO record = boService.selectByOid(oid, CodeKeyAttrRepeatRuleDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+	 * 鏍规嵁缂栧彿鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByIdCollection(Collection<String> ids) {
+		VciBaseUtil.alertNotNull(ids,"缂栧彿闆嗗悎");
+		Map<String,String> conditionMap = new HashMap<>();
+		conditionMap.put("id", QueryOptionConstant.IN +VciBaseUtil.toInSql(ids.toArray(new String[0])));
+		VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeKeyAttrRepeatRuleDO.class);
+		return boService.selectByQueryWrapper(wrapper,CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectAll(){
+		return boService.queryObject(CodeKeyAttrRepeatRuleDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeKeyAttrRepeatRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeKeyAttrRepeatRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeKeyAttrRepeatRuleDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeKeyAttrRepeatRuleDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeKeyAttrRepeatRuleDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codekeyattrrepeat");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codekeyattrrepeat");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeKeyAttrRepeatRuleDO> dos = boService.selectByOidCollection(oids, CodeKeyAttrRepeatRuleDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodePhaseAttrDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodePhaseAttrDaoImpl.java
new file mode 100644
index 0000000..85d50ae
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodePhaseAttrDaoImpl.java
@@ -0,0 +1,246 @@
+package com.vci.ubcs.code.dao.impl;
+
+import com.vci.ubcs.code.dao.CodePhaseAttrDaoI;
+import com.vci.ubcs.code.model.CodePhaseAttrDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 闃舵鐨勫睘鎬ф暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodePhaseAttrDaoImpl implements CodePhaseAttrDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodePhaseAttrDO codePhaseAttrDO = selectByPrimaryKey(oid);
+		return boService.delete(codePhaseAttrDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodePhaseAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodePhaseAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodePhaseAttrDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodePhaseAttrDO record = boService.selectByOid(oid, CodePhaseAttrDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodePhaseAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodePhaseAttrDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectAll(){
+		return boService.queryObject(CodePhaseAttrDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodePhaseAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodePhaseAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodePhaseAttrDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodePhaseAttrDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodePhaseAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodePhaseAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodePhaseAttrDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codephaseattr");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codephaseattr");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodePhaseAttrDO> dos = boService.selectByOidCollection(oids, CodePhaseAttrDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeResembleRuleDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeResembleRuleDaoImpl.java
new file mode 100644
index 0000000..899453d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeResembleRuleDaoImpl.java
@@ -0,0 +1,247 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeResembleRuleDaoI;
+import com.vci.ubcs.code.model.CodeResembleRuleDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+@Repository
+public class  CodeResembleRuleDaoImpl implements CodeResembleRuleDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeResembleRuleDO codeResembleRuleDO = selectByPrimaryKey(oid);
+		return boService.delete(codeResembleRuleDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeResembleRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeResembleRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeResembleRuleDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeResembleRuleDO record = boService.selectByOid(oid, CodeResembleRuleDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeResembleRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeResembleRuleDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectAll(){
+		return boService.queryObject(CodeResembleRuleDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeResembleRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeResembleRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeResembleRuleDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeResembleRuleDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeResembleRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeResembleRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeResembleRuleDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "coderesemblerule");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "coderesemblerule");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeResembleRuleDO> dos = boService.selectByOidCollection(oids, CodeResembleRuleDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeRuleDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeRuleDaoImpl.java
new file mode 100644
index 0000000..b8794f5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeRuleDaoImpl.java
@@ -0,0 +1,276 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeRuleDaoI;
+import com.vci.ubcs.code.model.CodeRuleDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeRuleDaoImpl implements CodeRuleDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeRuleDO codeRuleDO = selectByPrimaryKey(oid);
+		return boService.delete(codeRuleDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeRuleDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeRuleDO record = boService.selectByOid(oid, CodeRuleDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeRuleDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeRuleDO.class);
+	}
+
+	/**
+	 * 浣跨敤缂栧彿闆嗗悎鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public List<CodeRuleDO> selectByIdCollection(Collection<String> ids) {
+		VciBaseUtil.alertNotNull(ids,"缂栧彿闆嗗悎");
+		Map<String,String> conditionMap = new HashMap<>();
+		conditionMap.put("id", QueryOptionConstant.IN + VciBaseUtil.toInSql(ids.toArray(new String[0])) );
+		VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeRuleDO.class);
+		return boService.selectByQueryWrapper(wrapper,CodeRuleDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeRuleDO> selectAll(){
+		return boService.queryObject(CodeRuleDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeRuleDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeRuleDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeRuleDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "coderule");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "coderule");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeRuleDO> dos = boService.selectByOidCollection(oids, CodeRuleDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	/**
+	 * 鍒犻櫎鏁版嵁涓嶈繘琛屾寔涔呭寲锛岃浆鍖栦负batchCBO
+	 * @param codeRule 缂栫爜瑙勫垯瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public BatchCBO delete4BatchCBO(CodeRuleDO codeRule) {
+		VciBaseUtil.alertNotNull(codeRule,"缂栫爜瑙勫垯");
+		WebUtil.setPersistence(false);
+		return boService.delete(codeRule);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSerialValueDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSerialValueDaoImpl.java
new file mode 100644
index 0000000..4913b0e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSerialValueDaoImpl.java
@@ -0,0 +1,214 @@
+package com.vci.ubcs.code.dao.impl;
+
+import com.vci.ubcs.code.dao.CodeSerialValueDaoI;
+import com.vci.ubcs.code.model.CodeSerialValueDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 娴佹按鐨勫�兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+@Repository
+public class  CodeSerialValueDaoImpl implements CodeSerialValueDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeSerialValueDO codeSerialValueDO = selectByPrimaryKey(oid);
+		return boService.delete(codeSerialValueDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeSerialValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeSerialValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeSerialValueDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeSerialValueDO record = boService.selectByOid(oid, CodeSerialValueDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSerialValueDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeSerialValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeSerialValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeSerialValueDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeSerialValueDO> selectAll(){
+		return boService.queryObject(CodeSerialValueDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeSerialValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeSerialValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSerialValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeSerialValueDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeSerialValueDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeSerialValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeSerialValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeSerialValueDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeSerialValueDO> dos = boService.selectByOidCollection(oids, CodeSerialValueDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSynonymDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSynonymDaoImpl.java
new file mode 100644
index 0000000..7688a39
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSynonymDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeSynonymDaoI;
+import com.vci.ubcs.code.model.CodeSynonymDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍚屼箟璇嶉厤缃暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+@Repository
+public class  CodeSynonymDaoImpl implements CodeSynonymDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeSynonymDO codeSynonymDO = selectByPrimaryKey(oid);
+		return boService.delete(codeSynonymDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeSynonymDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeSynonymDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeSynonymDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeSynonymDO record = boService.selectByOid(oid, CodeSynonymDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSynonymDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeSynonymDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeSynonymDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeSynonymDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeSynonymDO> selectAll(){
+		return boService.queryObject(CodeSynonymDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeSynonymDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeSynonymDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSynonymDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeSynonymDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeSynonymDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeSynonymDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeSynonymDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeSynonymDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeSynonymDO> dos = boService.selectByOidCollection(oids, CodeSynonymDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeTemplatePhaseDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeTemplatePhaseDaoImpl.java
new file mode 100644
index 0000000..927308b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeTemplatePhaseDaoImpl.java
@@ -0,0 +1,247 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.CodeTemplatePhaseDaoI;
+import com.vci.ubcs.code.model.CodeTemplatePhaseDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 妯℃澘闃舵鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeTemplatePhaseDaoImpl implements CodeTemplatePhaseDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeTemplatePhaseDO codeTemplatePhaseDO = selectByPrimaryKey(oid);
+		return boService.delete(codeTemplatePhaseDO,false);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeTemplatePhaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeTemplatePhaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeTemplatePhaseDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeTemplatePhaseDO record = boService.selectByOid(oid, CodeTemplatePhaseDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeTemplatePhaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeTemplatePhaseDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectAll(){
+		return boService.queryObject(CodeTemplatePhaseDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeTemplatePhaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeTemplatePhaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeTemplatePhaseDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeTemplatePhaseDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeTemplatePhaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeTemplatePhaseDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codetempphase");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codetempphase");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeTemplatePhaseDO> dos = boService.selectByOidCollection(oids, CodeTemplatePhaseDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos,false);//涓嶅垽鏂弬鐓�
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingDataDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingDataDaoImpl.java
new file mode 100644
index 0000000..fe585cd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingDataDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.DockingDataDaoI;
+import com.vci.ubcs.code.model.DockingDataDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+@Repository
+public class DockingDataDaoImpl implements DockingDataDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingDataDO DockingDataDO = selectByPrimaryKey(oid);
+		return boService.delete(DockingDataDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingDataDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingDataDO record = boService.selectByOid(oid, DockingDataDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingDataDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingDataDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingDataDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingDataDO> selectAll(){
+		return boService.queryObject(DockingDataDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingDataDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingDataDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingDataDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingDataDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingDataDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingDataDO> dos = boService.selectByOidCollection(oids, DockingDataDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingLogeDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingLogeDaoImpl.java
new file mode 100644
index 0000000..724af81
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingLogeDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.DockingLogeDaoI;
+import com.vci.ubcs.code.model.DockingLogeDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+@Repository
+public class DockingLogeDaoImpl implements DockingLogeDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingLogeDO dockingLogDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingLogDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingLogeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingLogeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingLogeDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingLogeDO record = boService.selectByOid(oid, DockingLogeDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingLogeDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingLogeDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingLogeDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingLogeDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingLogeDO> selectAll(){
+		return boService.queryObject(DockingLogeDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingLogeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingLogeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingLogeDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingLogeDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingLogeDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingLogeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingLogeDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingLogeDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingLogeDO> dos = boService.selectByOidCollection(oids, DockingLogeDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataDaoImpl.java
new file mode 100644
index 0000000..9947029
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataDaoImpl.java
@@ -0,0 +1,214 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.DockingPreApplyDataDaoI;
+import com.vci.ubcs.code.model.DockingPreApplyDataDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+@Repository
+public class  DockingPreApplyDataDaoImpl implements DockingPreApplyDataDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreApplyDataDO dockingPreApplyDataDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingPreApplyDataDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingPreApplyDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingPreApplyDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingPreApplyDataDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingPreApplyDataDO record = boService.selectByOid(oid, DockingPreApplyDataDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreApplyDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingPreApplyDataDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectAll(){
+		return boService.queryObject(DockingPreApplyDataDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingPreApplyDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingPreApplyDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingPreApplyDataDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreApplyDataDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingPreApplyDataDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingPreApplyDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreApplyDataDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingPreApplyDataDO> dos = boService.selectByOidCollection(oids, DockingPreApplyDataDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java
new file mode 100644
index 0000000..1b64884
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.DockingPreApplyDataInfoDaoI;
+import com.vci.ubcs.code.model.DockingPreApplyDataInfoDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+@Repository
+public class  DockingPreApplyDataInfoDaoImpl implements DockingPreApplyDataInfoDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingPreApplyDataInfoDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingPreApplyDataInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingPreApplyDataInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingPreApplyDataInfoDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingPreApplyDataInfoDO record = boService.selectByOid(oid, DockingPreApplyDataInfoDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreApplyDataInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingPreApplyDataInfoDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectAll(){
+		return boService.queryObject(DockingPreApplyDataInfoDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingPreApplyDataInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingPreApplyDataInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingPreApplyDataInfoDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreApplyDataInfoDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingPreApplyDataInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreApplyDataInfoDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingPreApplyDataInfoDO> dos = boService.selectByOidCollection(oids, DockingPreApplyDataInfoDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrMappingDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrMappingDaoImpl.java
new file mode 100644
index 0000000..0fbca7e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrMappingDaoImpl.java
@@ -0,0 +1,205 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.DockingPreAttrMappingDaoI;
+import com.vci.ubcs.code.model.DockingPreAttrMappingDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+@Repository
+public class DockingPreAttrMappingDaoImpl implements DockingPreAttrMappingDaoI {
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+     */
+    @Autowired
+    private OsLifeCycleServiceI lifeCycleService;
+    /**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO deleteByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrMappingDO dockingPreAttrMappingDO = selectByPrimaryKey(oid);
+        return boService.delete(dockingPreAttrMappingDO);
+    }
+    /**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO insert(DockingPreAttrMappingDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+        return boService.addSave(record);
+    }
+    /**
+     * 鎵归噺娣诲姞鏁版嵁
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉鏁�
+     */
+    @Override
+    public BatchCBO batchInsert(List<DockingPreAttrMappingDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+        BatchCBO batchCBO = boService.batchAddSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+    @Override
+    public DockingPreAttrMappingDO selectByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrMappingDO record = boService.selectByOid(oid, DockingPreAttrMappingDO.class);
+        if(record == null || StringUtils.isBlank(record.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return record;
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByPrimaryKeys(String oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreAttrMappingDO.class);
+
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByPrimaryKeyCollection(Collection<String> oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(oids, DockingPreAttrMappingDO.class);
+    }
+    /**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectAll() {
+        return boService.queryObject(DockingPreAttrMappingDO.class,null);
+    }
+    /**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO updateByPrimaryKey(DockingPreAttrMappingDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+        return boService.editSave(record);
+    }
+    /**
+     * 鎵归噺鏇存柊
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉琛屾暟
+     */
+    @Override
+    public BatchCBO batchUpdate(List<DockingPreAttrMappingDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+        BatchCBO batchCBO = boService.batchEditSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByCondition(Map<String, String> conditionMap, PageHelper pageHelper) {
+        return boService.queryObject(DockingPreAttrMappingDO.class,conditionMap,pageHelper);
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByCondition(Map<String, String> conditionMap) {
+        return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreAttrMappingDO.class,conditionMap)));
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return boService.selectByQueryWrapper(queryWrapper,DockingPreAttrMappingDO.class);
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreAttrMappingDO.class)));
+    }
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+    @Override
+    public String selectNameByOid(String oid) {
+        return selectByPrimaryKey(oid).getName();
+    }
+    /**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+    @Override
+    public BatchCBO batchDeleteByOids(Collection<String> oids) {
+        List<DockingPreAttrMappingDO> dos = boService.selectByOidCollection(oids, DockingPreAttrMappingDO.class);
+        BatchCBO batchCBO = boService.batchDelete(dos);
+        return batchCBO;
+    }
+
+    /***
+     * 鏍规嵁灞炴�т富閿壒閲忚幏鍙栧璞�
+     * @param oids 涓婚敭
+     * @return
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByOid(String oids){
+        VciBaseUtil.alertNotNull(oids,"涓婚敭");
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingPreAttrMappingDO.class);
+        queryWrapper.addQueryMap("oid", QueryOptionConstant.IN  + VciBaseUtil.toInSql(oids));
+        return selectByWrapper(queryWrapper);
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrRangeDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrRangeDaoImpl.java
new file mode 100644
index 0000000..75020cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrRangeDaoImpl.java
@@ -0,0 +1,204 @@
+package com.vci.ubcs.code.dao.impl;
+
+import com.vci.ubcs.code.dao.DockingPreAttrRangeDaoI;
+import com.vci.ubcs.code.model.DockingPreAttrRangeDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+@Repository
+public class DockingPreAttrRangeDaoImpl implements DockingPreAttrRangeDaoI {
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+     */
+    @Autowired
+    private OsLifeCycleServiceI lifeCycleService;
+    /**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO deleteByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrRangeDO dockingPreAttrRangeDO = selectByPrimaryKey(oid);
+        return boService.delete(dockingPreAttrRangeDO);
+    }
+    /**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO insert(DockingPreAttrRangeDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+        return boService.addSave(record);
+    }
+    /**
+     * 鎵归噺娣诲姞鏁版嵁
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉鏁�
+     */
+    @Override
+    public BatchCBO batchInsert(List<DockingPreAttrRangeDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+        BatchCBO batchCBO = boService.batchAddSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+    @Override
+    public DockingPreAttrRangeDO selectByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrRangeDO record = boService.selectByOid(oid, DockingPreAttrRangeDO.class);
+        if(record == null || StringUtils.isBlank(record.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return record;
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByPrimaryKeys(String oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreAttrRangeDO.class);
+
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByPrimaryKeyCollection(Collection<String> oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(oids, DockingPreAttrRangeDO.class);
+    }
+    /**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectAll() {
+        return boService.queryObject(DockingPreAttrRangeDO.class,null);
+    }
+    /**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO updateByPrimaryKey(DockingPreAttrRangeDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+        return boService.editSave(record);
+    }
+    /**
+     * 鎵归噺鏇存柊
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉琛屾暟
+     */
+    @Override
+    public BatchCBO batchUpdate(List<DockingPreAttrRangeDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+        BatchCBO batchCBO = boService.batchEditSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByCondition(Map<String, String> conditionMap, PageHelper pageHelper) {
+        return boService.queryObject(DockingPreAttrRangeDO.class,conditionMap,pageHelper);
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByCondition(Map<String, String> conditionMap) {
+        return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreAttrRangeDO.class,conditionMap)));
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return boService.selectByQueryWrapper(queryWrapper,DockingPreAttrRangeDO.class);
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreAttrRangeDO.class)));
+    }
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+    @Override
+    public String selectNameByOid(String oid) {
+        return selectByPrimaryKey(oid).getName();
+    }
+    /**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+    @Override
+    public BatchCBO batchDeleteByOids(Collection<String> oids) {
+        List<DockingPreAttrRangeDO> dos = boService.selectByOidCollection(oids, DockingPreAttrRangeDO.class);
+        BatchCBO batchCBO = boService.batchDelete(dos);
+        return batchCBO;
+    }
+
+    /***
+     * 鏍规嵁灞炴�т富閿壒閲忚幏鍙栧璞�
+     * @param attrOid 涓婚敭
+     * @return
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByAttrOid(String attrOid){
+        VciBaseUtil.alertNotNull(attrOid,"灞炴�т富閿�");
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingPreAttrRangeDO.class);
+        queryWrapper.addQueryMap("jmetaListId", QueryOptionConstant.IN  + VciBaseUtil.toInSql(attrOid));
+        return selectByWrapper(queryWrapper);
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingTaskDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingTaskDaoImpl.java
new file mode 100644
index 0000000..2d5544b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingTaskDaoImpl.java
@@ -0,0 +1,214 @@
+package com.vci.ubcs.code.dao.impl;
+
+import com.vci.ubcs.code.dao.DockingTaskDaoI;
+import com.vci.ubcs.code.model.DockingTaskDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+@Repository
+public class  DockingTaskDaoImpl implements DockingTaskDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingTaskDO dockingTaskDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingTaskDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingTaskDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingTaskDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingTaskDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingTaskDO record = boService.selectByOid(oid, DockingTaskDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingTaskDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingTaskDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingTaskDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingTaskDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingTaskDO> selectAll(){
+		return boService.queryObject(DockingTaskDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingTaskDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingTaskDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingTaskDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingTaskDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingTaskDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingTaskDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingTaskDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingTaskDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingTaskDO> dos = boService.selectByOidCollection(oids, DockingTaskDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntAuthorityDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntAuthorityDaoImpl.java
new file mode 100644
index 0000000..8a2b550
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntAuthorityDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.SysIntAuthorityDaoI;
+import com.vci.ubcs.code.model.SysIntAuthorityDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+@Repository
+public class  SysIntAuthorityDaoImpl implements SysIntAuthorityDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntAuthorityDO sysIntAuthorityDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntAuthorityDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntAuthorityDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntAuthorityDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntAuthorityDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntAuthorityDO record = boService.selectByOid(oid, SysIntAuthorityDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntAuthorityDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntAuthorityDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectAll(){
+		return boService.queryObject(SysIntAuthorityDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntAuthorityDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntAuthorityDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntAuthorityDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntAuthorityDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntAuthorityDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntAuthorityDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntAuthorityDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntAuthorityDO> dos = boService.selectByOidCollection(oids, SysIntAuthorityDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntBaseDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntBaseDaoImpl.java
new file mode 100644
index 0000000..01e2d7b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntBaseDaoImpl.java
@@ -0,0 +1,215 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.dao.SysIntBaseDaoI;
+import com.vci.ubcs.code.model.SysIntBaseDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+@Repository
+public class  SysIntBaseDaoImpl implements SysIntBaseDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntBaseDO sysIntBaseDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntBaseDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntBaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntBaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntBaseDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntBaseDO record = boService.selectByOid(oid, SysIntBaseDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntBaseDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntBaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntBaseDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntBaseDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntBaseDO> selectAll(){
+		return boService.queryObject(SysIntBaseDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntBaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntBaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntBaseDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntBaseDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntBaseDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntBaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntBaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntBaseDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntBaseDO> dos = boService.selectByOidCollection(oids, SysIntBaseDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntHeaderDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntHeaderDaoImpl.java
new file mode 100644
index 0000000..4830b5d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntHeaderDaoImpl.java
@@ -0,0 +1,262 @@
+package com.vci.ubcs.code.dao.impl;
+
+
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.ubcs.code.dao.SysIntHeaderDaoI;
+import com.vci.ubcs.code.model.SysIntHeaderDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+@Repository
+public class  SysIntHeaderDaoImpl implements SysIntHeaderDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntHeaderDO sysIntHeaderDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntHeaderDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntHeaderDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntHeaderDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntHeaderDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntHeaderDO record = boService.selectByOid(oid, SysIntHeaderDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntHeaderDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntHeaderDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntHeaderDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntHeaderDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntHeaderDO> selectAll(){
+		return boService.queryObject(SysIntHeaderDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntHeaderDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntHeaderDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntHeaderDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntHeaderDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntHeaderDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntHeaderDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntHeaderDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntHeaderDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntHeaderDO> dos = boService.selectByOidCollection(oids, SysIntHeaderDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	//==
+
+	/**
+	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
+	 * @param sysinfoOid 涓婚敭
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntHeaderDO> selectBySysinfoOid(String sysinfoOid){
+		VciBaseUtil.alertNotNull(sysinfoOid,"sysinfo涓婚敭");
+		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntHeaderDO.class);
+		queryWrapper.addQueryMap("infoOid",sysinfoOid);
+		return selectByWrapper(queryWrapper);
+	}
+
+	/**
+	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
+	 * @param records
+	 */
+	@Override
+	public BaseResult updateSysinfoHeader(List<SysIntHeaderDO> records){
+
+		if(records.size()<1){
+			return BaseResult.fail("sysinfoOid涓嶈兘涓虹┖!");
+		}
+		String sysinfoOid = records.get(0).getInfoOid();
+
+		List<SysIntHeaderDO> sysIntHeaderDOList = selectBySysinfoOid(sysinfoOid);
+		for (SysIntHeaderDO sysIntHeaderDO:sysIntHeaderDOList){
+				sysIntHeaderDO.setUsedflag(MdmDuckingConstant.FLAG_FAIL);
+		}
+
+		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+		//鍏堜綔搴熶互鍓嶇殑
+		BatchCBO batchCBO_batchUpdate = batchUpdate(sysIntHeaderDOList);
+		//鍐嶆柊澧�
+		BatchCBO batchCBO_batchInsert = batchInsert(records);
+		batchCBO_batchUpdate.copyFromOther(batchCBO_batchInsert);
+
+		WebUtil.setPersistence(true);//鎵ц淇濆瓨
+		boService.persistenceBatch(batchCBO_batchUpdate);//涓�璧锋墽琛屼繚瀛�
+		return BaseResult.success("鎵归噺鎵ц鎴愬姛");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntInfoDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntInfoDaoImpl.java
new file mode 100644
index 0000000..bb00549
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntInfoDaoImpl.java
@@ -0,0 +1,214 @@
+package com.vci.ubcs.code.dao.impl;
+
+import com.vci.ubcs.code.dao.SysIntInfoDaoI;
+import com.vci.ubcs.code.model.SysIntInfoDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+@Repository
+public class  SysIntInfoDaoImpl implements SysIntInfoDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntInfoDO sysIntInfoDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntInfoDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntInfoDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntInfoDO record = boService.selectByOid(oid, SysIntInfoDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntInfoDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntInfoDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntInfoDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntInfoDO> selectAll(Map conditonMap){
+		return boService.queryObject(SysIntInfoDO.class,conditonMap);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntInfoDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntInfoDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntInfoDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntInfoDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntInfoDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntInfoDO> dos = boService.selectByOidCollection(oids, SysIntInfoDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntParamDaoImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntParamDaoImpl.java
new file mode 100644
index 0000000..6dff1a9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntParamDaoImpl.java
@@ -0,0 +1,258 @@
+package com.vci.ubcs.code.dao.impl;
+
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.ubcs.code.dao.SysIntParamDaoI;
+import com.vci.ubcs.code.model.SysIntParamDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+@Repository
+public class  SysIntParamDaoImpl implements SysIntParamDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntParamDO sysIntParamDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntParamDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntParamDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntParamDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntParamDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntParamDO record = boService.selectByOid(oid, SysIntParamDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntParamDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntParamDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntParamDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntParamDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntParamDO> selectAll(){
+		return boService.queryObject(SysIntParamDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntParamDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntParamDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntParamDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntParamDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntParamDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntParamDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntParamDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntParamDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntParamDO> dos = boService.selectByOidCollection(oids, SysIntParamDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	//==
+
+	/**
+	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
+	 * @param sysinfoOid 涓婚敭
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	public List<SysIntParamDO> selectBySysinfoOid(String sysinfoOid){
+		VciBaseUtil.alertNotNull(sysinfoOid,"sysinfo涓婚敭");
+		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntParamDO.class);
+		queryWrapper.addQueryMap("infoOid",sysinfoOid);
+		return selectByWrapper(queryWrapper);
+	}
+
+	/**
+	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
+	 * @param records
+	 */
+	public BaseResult updateSysinfoParam(List<SysIntParamDO> records){
+
+		if(records.size()<1){
+			return BaseResult.fail("sysinfoOid涓嶈兘涓虹┖!");
+		}
+		String sysinfoOid = records.get(0).getInfoOid();
+
+		List<SysIntParamDO> sysIntParamDOList = selectBySysinfoOid(sysinfoOid);
+		for (SysIntParamDO sysIntParamDO:sysIntParamDOList){
+			sysIntParamDO.setUsedflag(MdmDuckingConstant.FLAG_FAIL);
+		}
+
+		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+		//鍏堜綔搴熶互鍓嶇殑
+		BatchCBO batchCBO_batchUpdate = batchUpdate(sysIntParamDOList);
+		//鍐嶆柊澧�
+		BatchCBO batchCBO_batchInsert = batchInsert(records);
+		batchCBO_batchUpdate.copyFromOther(batchCBO_batchInsert);
+
+		WebUtil.setPersistence(true);//鎵ц淇濆瓨
+		boService.persistenceBatch(batchCBO_batchUpdate);//涓�璧锋墽琛屼繚瀛�
+		return BaseResult.success("鎵归噺鎵ц鎴愬姛");
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java
new file mode 100644
index 0000000..f357f42
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java
@@ -0,0 +1,140 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 妯℃澘鐨勬寜閽敤閫�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_TEMPLATE_BUTTON_USE,text = "妯℃澘鐨勬寜閽敤閫�",description = "")
+public enum CodeButtonUseEnum implements BaseEnum {
+
+    /**
+     * 缂栫爜鐢宠
+     */
+    ORDER("code_temp_button_use_order","缂栫爜鐢宠"),
+
+    /**
+     * 缂栫爜淇敼
+     */
+    MODIFY("code_temp_button_use_modify","缂栫爜淇敼"),
+
+    /**
+     * 缂栫爜鍥炴敹
+     */
+    DELETE("code_temp_button_use_delete","缂栫爜鍥炴敹"),
+
+    /**
+     * 鏌ヨ
+     */
+    QUERY("code_temp_button_use_query","鏌ヨ");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeButtonUseEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeButtonUseEnum forValue(String value) {
+        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java
new file mode 100644
index 0000000..bb42e1e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java
@@ -0,0 +1,150 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍒嗙被鐨勬祦绋嬬殑鐢ㄩ��
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,text = "鍒嗙被涓殑娴佺▼妯℃澘鐢ㄩ��",description = "")
+public enum CodeClassifyProcessUseEnum implements BaseEnum {
+
+    /**
+     * 鐢宠
+     */
+    ORDER("code_cls_flow_use_order","鐢宠"),
+
+    /**
+     * 淇敼
+     */
+    MODIFY("code_cls_flow_use_modify","淇敼"),
+
+    /**
+     * 鍥炴敹
+     */
+    DELETE("code_cls_flow_use_delete","鍥炴敹"),
+
+    /**
+     * 鍐荤粨
+     */
+    FREEZE("code_cls_flow_use_freeze","鍐荤粨"),
+
+    /**
+     * 瑙e喕
+     */
+    UNFREEZE("code_cls_flow_use_unfreeze","瑙e喕");
+
+//    /**
+//     * 鍏朵粬
+//     */
+//    OTHER("code_cls_flow_use_other","鍏朵粬");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeClassifyProcessUseEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeClassifyProcessUseEnum forValue(String value) {
+        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java
new file mode 100644
index 0000000..0fb8b5b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java
@@ -0,0 +1,135 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鎴彇绫诲瀷
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_CUT_TYPE,text = "鍊兼埅鍙栫被鍨�",description = "")
+public enum CodeCutTypeEnum implements BaseEnum {
+
+    /**
+     * 涓嶆埅鍙�
+     */
+    NONE("code_cut_none","涓嶆埅鍙�"),
+
+    /**
+     * 宸︽埅鍙�
+     */
+    LEFT("code_cut_left","宸︽埅鍙�"),
+
+    /**
+     * 鍙虫埅鍙�
+     */
+    RIGHT("code_level_right","鍙虫埅鍙�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeCutTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeCutTypeEnum forValue(String value) {
+        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java
new file mode 100644
index 0000000..62689ff
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java
@@ -0,0 +1,130 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍙栧�肩被鍨�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_GET_VALUE_TYPE,text = "涓绘暟鎹腑鍙栧�肩被鍨�",description = "")
+public enum CodeGetValueTypeEnum implements BaseEnum {
+
+    /**
+     * 褰撳墠鍒嗙被浠e彿鍊�
+     */
+    CURRENT("code_get_value_current","褰撳墠鍒嗙被浠e彿鍊�"),
+
+    /**
+     * 鍚戜笂閬嶅巻鍏ㄩ儴鐖朵唬鍙风殑鍚堝苟鍊�
+     */
+    TOP("code_get_value_all_up","鍚戜笂閬嶅巻鍏ㄩ儴鐖朵唬鍙风殑鍚堝苟鍊�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeGetValueTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeGetValueTypeEnum forValue(String value) {
+        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java
new file mode 100644
index 0000000..17ad387
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java
@@ -0,0 +1,135 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 灞傜骇鐮佹鐨勫眰绾х被鍨�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_LEVEL_TYPE,text = "灞傜骇鐮佹鐨勫眰绾х被鍨�",description = "")
+public enum CodeLevelTypeEnum implements BaseEnum {
+
+    /**
+     * 鎸囧畾灞傜骇
+     */
+    SPECIAL("code_level_special","鎸囧畾灞傜骇"),
+
+//    /**
+//     * 浠绘剰灞傜骇
+//     */
+//    ANY("code_level_any","浠绘剰灞傜骇"),
+
+    /**
+     * 鏈�灏忓眰绾�
+     */
+    MIN("code_level_min","鏈�灏忓眰绾�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeLevelTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeLevelTypeEnum forValue(String value) {
+        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java
new file mode 100644
index 0000000..f1b3399
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java
@@ -0,0 +1,145 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鏄犲皠瑙勫垯绫诲瀷
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_MAP_RULE_TYPE,text = "鏄犲皠瑙勫垯绫诲瀷",description = "")
+public enum CodeMapRuleTypeEnum implements BaseEnum {
+
+    /**
+     * 闆嗗洟鐮佸鍑�
+     */
+    GROUP_EXPORT("code_map_group_export","闆嗗洟鐮佸鍑�"),
+
+    /**
+     * 闆嗗洟鐮佸鍏�
+     */
+    GROUP_IMPORT("code_map_group_import","闆嗗洟鐮佸鍏�"),
+
+    /**
+     * 鎵归噺鐢宠
+     */
+    BATCH_ORDER("code_map_batch_order","鎵归噺鐢宠"),
+
+    /**
+     * 鍏朵粬
+     */
+    OTHER("code_map_other","鍏朵粬"),
+
+    /**
+     * 鍘嗗彶鏁版嵁瀵煎叆
+     */
+    HISTORY_DATA_IMPORT("code_map_history_import","鍘嗗彶鏁版嵁瀵煎叆");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeMapRuleTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeMapRuleTypeEnum forValue(String value) {
+        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java
new file mode 100644
index 0000000..8678584
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java
@@ -0,0 +1,130 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鐮佹闀垮害鎺у埗绫诲瀷
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_SEC_LENGTH,text = "鐮佹闀垮害绫诲瀷",description = "")
+public enum CodeSecLengthTypeEnum implements BaseEnum {
+
+    /**
+     * 鍥哄畾闀垮害
+     */
+    STATIC("code_sec_length_static","鍥哄畾闀垮害"),
+
+    /**
+     * 鍙彉闀垮害
+     */
+    TOOLBAR("code_sec_length_variable","鍙彉闀垮害");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeSecLengthTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeSecLengthTypeEnum forValue(String value) {
+        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java
new file mode 100644
index 0000000..e202eac
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java
@@ -0,0 +1,157 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鐮佹鐨勭被鍨�
+ * @author weidy
+ * @date 2022-1-20
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_SEC_TYPE,text = "鐮佹鐨勭被鍨�",description = "")
+public enum CodeSecTypeEnum implements BaseEnum {
+
+    /**
+     * 鍥哄畾鐮佹
+     */
+    CODE_FIXED_SEC("codefixedsec","鍥哄畾鐮佹"),
+
+    /**
+     * 鍙彉鐮佹
+     */
+    CODE_VARIABLE_SEC("codevariablesec","鍙彉鐮佹"),
+    /**
+     * 鏃ユ湡鐮佹
+     */
+    CODE_DATE_SEC("codedatasec","鏃ユ湡鐮佹"),
+    /**
+     * 鍒嗙被鐮佹
+     */
+    CODE_CLASSIFY_SEC("codeclassifysec","鍒嗙被鐮佹"),
+    /**
+     * 灞炴�х爜娈�
+     */
+    CODE_ATTR_SEC("codeattrsec","灞炴�х爜娈�"),
+    /**
+     * 娴佹按鐮佹
+     */
+    CODE_SERIAL_SEC("codeserialsec","娴佹按鐮佹"),
+
+    /**
+     * 灞傜骇鐮佹
+     */
+    CODE_LEVEL_SEC("codelevelsec","灞傜骇鐮佹"),
+
+    /**
+     * 寮曠敤鐮佹
+     */
+    CODE_REFER_SEC("coderefersec","寮曠敤鐮佹")
+    ;
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeSecTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeSecTypeEnum forValue(String value) {
+        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java
new file mode 100644
index 0000000..27a026b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java
@@ -0,0 +1,130 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鎸夐挳浣跨敤浣嶇疆
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_BUTTON_POSITION,text = "鎸夐挳鐨勪娇鐢ㄤ綅缃�",description = "")
+public enum CodeUseButtonPositionTypeEnum implements BaseEnum {
+
+    /**
+     * 鍦ㄨ〃鏍间腑浣跨敤
+     */
+    TABLE("code_button_table","鍦ㄨ〃鏍间腑浣跨敤"),
+
+    /**
+     * 宸ュ叿鏍�
+     */
+    TOOLBAR("code_button_toolbar","宸ュ叿鏍�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeUseButtonPositionTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeUseButtonPositionTypeEnum forValue(String value) {
+        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java
new file mode 100644
index 0000000..5e4309c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.enumpack;
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java
new file mode 100644
index 0000000..54abf18
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java
@@ -0,0 +1,124 @@
+package com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
new file mode 100644
index 0000000..6aede7d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.enumpack;
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java
new file mode 100644
index 0000000..7a5623e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java
@@ -0,0 +1,136 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java
new file mode 100644
index 0000000..eb7bb78
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java
@@ -0,0 +1,135 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java
new file mode 100644
index 0000000..6aaa998
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java
@@ -0,0 +1,122 @@
+package com.vci.ubcs.code.enumpack;
+
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+@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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeAllCodeLC.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeAllCodeLC.java
new file mode 100644
index 0000000..bcb1756
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeAllCodeLC.java
@@ -0,0 +1,165 @@
+package com.vci.ubcs.code.lifecycle;
+
+
+import com.vci.ubcs.code.constant.MdmLifeCycleConstant;
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡
+ * @author weidy
+ * @date 2022-3-1
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_ALL_CODE_LC,text = "鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_OBSOLETED,name = "鐮佸�煎洖鏀跺垹闄ゆ暟鎹�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,name = "鎻愪氦瀹℃壒"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,name = "瀹℃壒涓嶉�氳繃鎴栬�呯粓姝�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "瀹℃壒閫氳繃"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍥炴敹"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鎵ц鍋滅敤"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍋滅敤鍚庡洖鏀�")
+        }
+)
+public enum CodeAllCodeLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 瀹℃壒涓�
+     */
+    AUDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,"瀹℃壒涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鐮佸�煎洖鏀�
+     */
+    TASK_BACK(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,"鐮佸�煎洖鏀�"),
+
+    /**
+     * 鐮佸�兼暟鎹攢姣�
+     */
+    OBSOLETED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_OBSOLETED,"鐮佸�兼暟鎹攢姣�"),
+
+    /**
+     * 鍋滅敤
+     */
+    DISABLE(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeAllCodeLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeAllCodeLC forValue(String value) {
+        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeClassifyTemplateLC.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeClassifyTemplateLC.java
new file mode 100644
index 0000000..eb3f7a9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeClassifyTemplateLC.java
@@ -0,0 +1,144 @@
+package com.vci.ubcs.code.lifecycle;
+
+
+import com.vci.ubcs.code.constant.MdmLifeCycleConstant;
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍒嗙被妯℃澘鐨勭敓鍛藉懆鏈�
+ * @author weidy
+ * @date 2022-2-11
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_CLASSIFY_TEMPLATE_LC,text = "鍒嗙被涓殑娴佺▼妯℃澘鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "浣滃簾"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�")
+        }
+)
+public enum CodeClassifyTemplateLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鍋滅敤
+     */
+    DISABLED(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeClassifyTemplateLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeClassifyTemplateLC forValue(String value) {
+        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeDefaultLC.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeDefaultLC.java
new file mode 100644
index 0000000..3f097b4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeDefaultLC.java
@@ -0,0 +1,159 @@
+package com.vci.ubcs.code.lifecycle;
+
+
+import com.vci.ubcs.code.constant.MdmLifeCycleConstant;
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 涓婚搴撴暟鎹殑榛樿鐢熷懡鍛ㄦ湡
+ * @author weidy
+ * @date 2022-3-2
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_DEFAULT_LC,text = "涓婚搴撴暟鎹殑榛樿鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,name = "鎻愪氦瀹℃壒"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,name = "瀹℃壒涓嶉�氳繃鎴栬�呯粓姝�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "瀹℃壒閫氳繃"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍥炴敹"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鎵ц鍋滅敤"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍋滅敤鍚庡洖鏀�")
+        }
+)
+public enum CodeDefaultLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 瀹℃壒涓�
+     */
+    AUDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,"瀹℃壒涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鐮佸�煎洖鏀�
+     */
+    TASK_BACK(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,"鐮佸�煎洖鏀�"),
+    /**
+     * 鍋滅敤
+     */
+    DISABLE(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeDefaultLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeDefaultLC forValue(String value) {
+        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java
new file mode 100644
index 0000000..76fc837
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java
@@ -0,0 +1,144 @@
+package com.vci.ubcs.code.lifecycle;
+
+
+import com.vci.ubcs.code.constant.MdmLifeCycleConstant;
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
+ * @author weidy
+ * @date 2022-2-23
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_RULE_LC,text = "缂栫爜瑙勫垯鏉跨敓鍛藉懆鏈�",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "浣滃簾"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�")
+        }
+)
+public enum CodeRuleLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鍋滅敤
+     */
+    DISABLED(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param value 鍊�
+     * @param text  鏄剧ず鏂囨湰
+     */
+    private CodeRuleLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeRuleLC wenum : CodeRuleLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeRuleLC wenum : CodeRuleLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeRuleLC forValue(String value) {
+        for (CodeRuleLC wenum : CodeRuleLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeALlCodeMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeALlCodeMapper.xml
new file mode 100644
index 0000000..6db3079
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeALlCodeMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.springblade.code.mapper.CodeAllCodeMapper">
+
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeAllCodeMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeAllCodeMapper.java
new file mode 100644
index 0000000..f990f5a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeAllCodeMapper.java
@@ -0,0 +1,12 @@
+package com.vci.ubcs.code.mapper;
+
+/**
+ * 鎵�鏈夌殑鐮佸�兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+public interface CodeAllCodeMapper {
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeAllCodeDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeAllCodeDO.java
new file mode 100644
index 0000000..6f02d47
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeAllCodeDO.java
@@ -0,0 +1,170 @@
+package com.vci.ubcs.code.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmLifeCycleConstant;
+
+/**
+ * 鍏ㄩ儴鐨勭爜鍊�
+ * @author weidy
+ * @date 2022-3-1
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_ALL_CODE,text = "鎵�鏈夌殑鐮佸��",lifeCycle = MdmLifeCycleConstant.CODE_ALL_CODE_LC,
+        startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED)
+@TableName("PL_CODE_CODEALLCODE")
+public class CodeAllCodeDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+    /**
+     * 鍒嗙被鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勪富閿�")
+    private String codeClassifyOid;
+
+    /**
+     * 瑙勫垯鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "瑙勫垯鐨勪富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
+    private String codeRuleOid;
+
+    /**
+     * 瑙勫垯鐨勫悕绉�
+     */
+    @Transient
+    private String codeRuleOidName;
+
+    /**
+     * 瀛樺偍鏁版嵁鐨勬ā鏉�
+     */
+    @Column(columnDefinition = "鏁版嵁妯℃澘")
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 鐮佸�肩殑鍊�
+     */
+    @Column(columnDefinition = "鐮佸�肩殑鍊�")
+    private String id;
+
+    /**
+     * 鍒涘缓缂栫爜鐨勪笟鍔$被鍨�
+     */
+    @Column(columnDefinition = "鍒涘缓缂栫爜鐨勪笟鍔$被鍨�")
+    private String createCodeBtm;
+
+    /**
+     * 鍒涘缓缂栫爜鐨勪笟鍔℃暟鎹富閿�
+     */
+    @Column(columnDefinition = "鍒涘缓缂栫爜鐨勬暟鎹富閿�")
+    private String createCodeOid;
+
+    /***
+     * 娴佹按渚濊禆
+     */
+    @Column(length = 4000,columnDefinition = "娴佹按渚濊禆")
+    private String serialUnit;
+
+    /**
+     * 娌℃湁濉厖鍓嶇殑娴佹按鍙�
+     */
+    @Column(columnDefinition = "娌℃湁濉厖鍓嶇殑娴佹按鍙�",length = 4000)
+    private String unFillSerial;
+
+    public String getSerialUnit() {
+        return serialUnit;
+    }
+
+    public void setSerialUnit(String serialUnit) {
+        this.serialUnit = serialUnit;
+    }
+
+    public String getUnFillSerial() {
+        return unFillSerial;
+    }
+
+    public void setUnFillSerial(String unFillSerial) {
+        this.unFillSerial = unFillSerial;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCreateCodeBtm() {
+        return createCodeBtm;
+    }
+
+    public void setCreateCodeBtm(String createCodeBtm) {
+        this.createCodeBtm = createCodeBtm;
+    }
+
+    public String getCreateCodeOid() {
+        return createCodeOid;
+    }
+
+    public void setCreateCodeOid(String createCodeOid) {
+        this.createCodeOid = createCodeOid;
+    }
+
+    public String getCodeRuleOidName() {
+        return codeRuleOidName;
+    }
+
+    public void setCodeRuleOidName(String codeRuleOidName) {
+        this.codeRuleOidName = codeRuleOidName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeAllCodeDO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", codeRuleOidName='" + codeRuleOidName + '\'' +
+                ", codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", createCodeBtm='" + createCodeBtm + '\'' +
+                ", createCodeOid='" + createCodeOid + '\'' +
+                ", serialUnit='" + serialUnit + '\'' +
+                ", unFillSerial='" + unFillSerial + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeBasicSecDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeBasicSecDO.java
new file mode 100644
index 0000000..fff2e32
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeBasicSecDO.java
@@ -0,0 +1,728 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.web.constant.EnumIdConstant;
+
+/**
+ * 鍩虹鐮佹鐨勪俊鎭�
+ * 鏂逛究鍦ㄥ悓涓�涓〉闈㈤噷鏄剧ず鎵�鏈夌殑鐮佹
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_BASIC_SEC,text = "鐮佹鍩虹淇℃伅",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeBasicSecDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1803476098497357359L;
+    /**
+     * 鐮佹淇℃伅
+     */
+    @Column(columnDefinition = "鐮佹淇℃伅",nullable = false)
+    private String id;
+
+    /**
+     * 鐮佹鍚嶇О
+     */
+    @Column(columnDefinition = "鐮佹鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 鐮佹绫诲瀷
+     */
+    @Column(columnDefinition = "鐮佹绫诲瀷",nullable = false)
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_SEC_TYPE,showTextField = "secTypeText")
+    private String secType;
+
+    /**
+     * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient()
+    private String secTypeText;
+
+    /**
+     * 鎵�灞炵紪鐮佽鍒�
+     */
+    @Column(columnDefinition = "鎵�灞炵紪鐮佽鍒�",nullable = false)
+    private String pkCodeRule;
+
+    /**
+     * 鐮佹鎺掑簭鍙�
+     */
+    @Column(columnDefinition = "orderNum",nullable = false)
+    private Integer orderNum;
+
+    /**
+     * 寮曠敤鐨勫睘鎬х殑鏂囨湰
+     */
+    @Column(columnDefinition = "寮曠敤鐨勫睘鎬у悕绉�")
+    private String referAttributeName;
+
+    /**
+     * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
+     */
+    @Column(columnDefinition = "寮曠敤鐨勫睘鎬ц嫳鏂�")
+    private String referAttributeId;
+
+    /**
+     * 鍙栧�艰鍒�
+     */
+    @Column(columnDefinition = "鍙栧�艰鍒�",length = 4000)
+    private String getValueClass ;
+
+    //鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
+    /**
+     * 鏃ユ湡鏍煎紡
+     */
+    @Column(columnDefinition = "鏃ユ湡鏍煎紡")
+    private String codeDateFormatStr;
+
+    /**
+     * 鐮佹闀垮害绫诲瀷
+     */
+    @Column(columnDefinition = "鐮佹闀垮害绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_SEC_LENGTH,showTextField = "secLengthTypeText")
+    private String codeSecLengthType;
+
+    /**
+     * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient(referColumn = MdmEnumIdConstant.CODE_SEC_LENGTH + "_secLengthType")
+    private String codeSecLengthTypeText;
+
+    /**
+     * 鐮佹鐨勯暱搴�
+     */
+    @Column(columnDefinition = "鐮佹鐨勯暱搴�")
+    private String codeSecLength;
+
+    /**
+     * 灞傜骇绫诲瀷
+     */
+    @Column(columnDefinition = "灞傜骇绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_LEVEL_TYPE,showTextField = "codeLevelTypeText")
+    private String codeLevelType;
+
+    /**
+     * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient(referColumn = MdmEnumIdConstant.CODE_LEVEL_TYPE + "_codeLevelType")
+    private String codeLevelTypeText;
+
+    /**
+     * 灞傜骇鐨勫��
+     */
+    @Column(columnDefinition = "灞傜骇鐨勫��")
+    private Integer codeLevelValue;
+
+    /**
+     * 鍊兼埅鍙栭暱搴�
+     */
+    @Column(columnDefinition = "鍊兼埅鍙栭暱搴�")
+    private Integer valueCutLength;
+
+    /**
+     * 瀛楃鎴彇绫诲瀷
+     */
+    @Column(columnDefinition = "瀛楃鎴彇绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_CUT_TYPE,showTextField = "valueCutTypeText")
+    private String valueCutType;
+
+    /**
+     * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
+     */
+    @Transient
+    private String valueCutTypeText;
+
+    /**
+     * 鍙栧�肩被鍨�
+     */
+    @Column(columnDefinition = "鍙栧�肩被鍨�")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_GET_VALUE_TYPE,showTextField = "codeGetValueTypeText")
+    private String codeGetValueType;
+
+    /**
+     * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
+     */
+    @Transient
+    private String codeGetValueTypeText;
+
+    /**
+     * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
+     */
+    @Column(columnDefinition = "寮曠敤灞炴�ф墍灞炵殑搴撳垎绫�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
+    private String referCodeClassifyOid;
+
+    /**
+     * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鐨勫悕绉�
+     */
+    @Transient(referColumn = "referCodeClassifyOid.name")
+    private String referCodeClassifyOidName;
+
+    /**
+     * 寮曠敤鐨勪笟鍔$被鍨�
+     */
+    @Column(columnDefinition = "寮曠敤鐨勪笟鍔$被鍨�")
+    private String referBtmId;
+
+    /**
+     * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
+     */
+    @Column(columnDefinition = "寮曠敤鐨勪笟鍔$被鍨嬪悕绉�")
+    private String referBtmName;
+
+    /**
+     * 鍙傜収鐨勭獥鍙i厤缃�
+     */
+    @Column(columnDefinition = "鍙傜収绐楀彛閰嶇疆",length = 4000)
+    private String referConfig;
+
+    /**
+     * 鏄剧ず淇℃伅
+     */
+    @Column(columnDefinition = "鏄剧ず淇℃伅",length = 4000)
+    private String referValueInfo;
+
+    /**
+     * 杩囨护鐨剆ql鍐呭
+     */
+    @Column(columnDefinition = "杩囨护鐨剆ql鍐呭",length = 4000)
+    private String filterSql ;
+
+
+    /**
+     * 娴佹按鍙疯捣濮嬪��
+     */
+    @Column(columnDefinition = "娴佹按鍙疯捣濮嬪��")
+    private String serialStart;
+
+    /**
+     * 娴佹按鐨勬闀�
+     */
+    @Column(columnDefinition = "娴佹按鐨勬闀�")
+    private Integer serialStep;
+
+
+    /**
+     * 缂栫爜琛ヤ綅鏂瑰紡
+     */
+    @VciUseEnum(value = EnumIdConstant.CODE_FILL_TYPE,showTextField = "codeFillTypeText")
+    @Column(columnDefinition = "缂栫爜琛ヤ綅鏂瑰紡")
+    private String codeFillType;
+
+    /**
+     * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
+     */
+    @Column(columnDefinition = "缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰")
+    private String codeFillTypeText;
+
+    /**
+     * 琛ヤ綅鏃剁殑瀛楃
+     */
+    @Column(columnDefinition = "琛ヤ綅鏃剁殑瀛楃",defaultValue = "0")
+    private String codeFillSeparator;
+
+    /**
+     * 濉厖闀垮害
+     */
+    @Column(columnDefinition = "濉厖闀垮害")
+    private String codeFillLength;
+
+    /**
+     * 涓婇檺
+     */
+    @Column(columnDefinition = "娴佹按涓婇檺")
+    private Integer codeFillLimit;
+
+    /**
+     * 娴佹按鏄惁琛ョ爜
+     */
+    @Column(columnDefinition = "娴佹按鏄惁琛ョ爜",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String codeFillFlag;
+
+    /**
+     * 鑷畾涔夌殑娴佹按绠楁硶绫�
+     */
+    @Column(columnDefinition = "鑷畾涔夌殑娴佹按绠楁硶")
+    private String customCodeSerialClass;
+
+    /**
+     * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
+     */
+    @Column(columnDefinition = "鏄惁鑷姩鍖归厤鍒嗙被鍊�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String matchClassifyValueFlag;
+
+    /**
+     * 鐖跺垎绫荤爜娈典富閿�
+     */
+    @Column(columnDefinition = "鐖跺垎绫荤爜娈典富閿�")
+    @VciUseRefer(value = MdmBtmTypeConstant.CODE_BASIC_SEC,showTextField = "parentClassifySecText")
+    private String parentClassifySecOid;
+
+    /**
+     * 鐖跺垎绫荤爜娈靛悕绉�
+     */
+    @Transient(referColumn = "parentClassifySecOid.name")
+    private String parentClassifySecText;
+
+
+    /**
+     * 鏄惁鍙互涓虹┖
+     */
+    @Column(columnDefinition = "鏄惁鍙互涓虹┖",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String nullableFlag;
+
+    /**
+     * 鏄惁鍙備笌缂栫爜
+     */
+    @Column(columnDefinition = "鏄惁鍙備笌缂栫爜",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String componentCodeFlag;
+
+    /**
+     * 鏄惁娴佹按渚濊禆
+     */
+    @Column(columnDefinition = "鏄惁娴佹按渚濊禆",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String serialDependFlag;
+
+    /**
+     * 鏄惁鏄剧ず
+     */
+    @Column(columnDefinition = "鏄惁鏄剧ず",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String displayFlag;
+
+    /**
+     * 娴佹按渚濊禆椤哄簭
+     */
+    @Column(columnDefinition = "娴佹按渚濊禆椤哄簭")
+    private Integer serialDependOrder;
+
+    public String getReferCodeClassifyOidName() {
+        return referCodeClassifyOidName;
+    }
+
+    public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
+        this.referCodeClassifyOidName = referCodeClassifyOidName;
+    }
+
+    public String getReferBtmId() {
+        return referBtmId;
+    }
+
+    public void setReferBtmId(String referBtmId) {
+        this.referBtmId = referBtmId;
+    }
+
+    public String getReferBtmName() {
+        return referBtmName;
+    }
+
+    public void setReferBtmName(String referBtmName) {
+        this.referBtmName = referBtmName;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSecType() {
+        return secType;
+    }
+
+    public void setSecType(String secType) {
+        this.secType = secType;
+    }
+
+    public String getSecTypeText() {
+        return secTypeText;
+    }
+
+    public void setSecTypeText(String secTypeText) {
+        this.secTypeText = secTypeText;
+    }
+
+    public String getPkCodeRule() {
+        return pkCodeRule;
+    }
+
+    public void setPkCodeRule(String pkCodeRule) {
+        this.pkCodeRule = pkCodeRule;
+    }
+
+    public String getGetValueClass() {
+        return getValueClass;
+    }
+
+    public void setGetValueClass(String getValueClass) {
+        this.getValueClass = getValueClass;
+    }
+
+    public String getCodeDateFormatStr() {
+        return codeDateFormatStr;
+    }
+
+    public void setCodeDateFormatStr(String codeDateFormatStr) {
+        this.codeDateFormatStr = codeDateFormatStr;
+    }
+
+
+    public String getCodeSecLength() {
+        return codeSecLength;
+    }
+
+    public void setCodeSecLength(String codeSecLength) {
+        this.codeSecLength = codeSecLength;
+    }
+
+    public String getCodeLevelType() {
+        return codeLevelType;
+    }
+
+    public void setCodeLevelType(String codeLevelType) {
+        this.codeLevelType = codeLevelType;
+    }
+
+    public String getCodeLevelTypeText() {
+        return codeLevelTypeText;
+    }
+
+    public void setCodeLevelTypeText(String codeLevelTypeText) {
+        this.codeLevelTypeText = codeLevelTypeText;
+    }
+
+    public Integer getCodeLevelValue() {
+        return codeLevelValue;
+    }
+
+    public void setCodeLevelValue(Integer codeLevelValue) {
+        this.codeLevelValue = codeLevelValue;
+    }
+
+    public Integer getValueCutLength() {
+        return valueCutLength;
+    }
+
+    public void setValueCutLength(Integer valueCutLength) {
+        this.valueCutLength = valueCutLength;
+    }
+
+    public String getValueCutType() {
+        return valueCutType;
+    }
+
+    public void setValueCutType(String valueCutType) {
+        this.valueCutType = valueCutType;
+    }
+
+    public String getValueCutTypeText() {
+        return valueCutTypeText;
+    }
+
+    public void setValueCutTypeText(String valueCutTypeText) {
+        this.valueCutTypeText = valueCutTypeText;
+    }
+
+    public String getCodeGetValueType() {
+        return codeGetValueType;
+    }
+
+    public void setCodeGetValueType(String codeGetValueType) {
+        this.codeGetValueType = codeGetValueType;
+    }
+
+    public String getCodeGetValueTypeText() {
+        return codeGetValueTypeText;
+    }
+
+    public void setCodeGetValueTypeText(String codeGetValueTypeText) {
+        this.codeGetValueTypeText = codeGetValueTypeText;
+    }
+
+    public String getReferCodeClassifyOid() {
+        return referCodeClassifyOid;
+    }
+
+    public void setReferCodeClassifyOid(String referCodeClassifyOid) {
+        this.referCodeClassifyOid = referCodeClassifyOid;
+    }
+
+    public String getReferConfig() {
+        return referConfig;
+    }
+
+    public void setReferConfig(String referConfig) {
+        this.referConfig = referConfig;
+    }
+
+    public String getReferValueInfo() {
+        return referValueInfo;
+    }
+
+    public void setReferValueInfo(String referValueInfo) {
+        this.referValueInfo = referValueInfo;
+    }
+
+    public String getFilterSql() {
+        return filterSql;
+    }
+
+    public void setFilterSql(String filterSql) {
+        this.filterSql = filterSql;
+    }
+
+    public String getSerialStart() {
+        return serialStart;
+    }
+
+    public void setSerialStart(String serialStart) {
+        this.serialStart = serialStart;
+    }
+
+    public Integer getSerialStep() {
+        return serialStep;
+    }
+
+    public void setSerialStep(Integer serialStep) {
+        this.serialStep = serialStep;
+    }
+
+    public String getCodeFillType() {
+        return codeFillType;
+    }
+
+    public void setCodeFillType(String codeFillType) {
+        this.codeFillType = codeFillType;
+    }
+
+    public String getCodeFillTypeText() {
+        return codeFillTypeText;
+    }
+
+    public void setCodeFillTypeText(String codeFillTypeText) {
+        this.codeFillTypeText = codeFillTypeText;
+    }
+
+    public String getCodeFillSeparator() {
+        return codeFillSeparator;
+    }
+
+    public void setCodeFillSeparator(String codeFillSeparator) {
+        this.codeFillSeparator = codeFillSeparator;
+    }
+
+    public String getCodeFillLength() {
+        return codeFillLength;
+    }
+
+    public void setCodeFillLength(String codeFillLength) {
+        this.codeFillLength = codeFillLength;
+    }
+
+    public Integer getCodeFillLimit() {
+        return codeFillLimit;
+    }
+
+    public void setCodeFillLimit(Integer codeFillLimit) {
+        this.codeFillLimit = codeFillLimit;
+    }
+
+    public String getCodeFillFlag() {
+        return codeFillFlag;
+    }
+
+    public void setCodeFillFlag(String codeFillFlag) {
+        this.codeFillFlag = codeFillFlag;
+    }
+
+    public String getCustomCodeSerialClass() {
+        return customCodeSerialClass;
+    }
+
+    public void setCustomCodeSerialClass(String customCodeSerialClass) {
+        this.customCodeSerialClass = customCodeSerialClass;
+    }
+
+    public String getMatchClassifyValueFlag() {
+        return matchClassifyValueFlag;
+    }
+
+    public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
+        this.matchClassifyValueFlag = matchClassifyValueFlag;
+    }
+
+    public String getParentClassifySecOid() {
+        return parentClassifySecOid;
+    }
+
+    public void setParentClassifySecOid(String parentClassifySecOid) {
+        this.parentClassifySecOid = parentClassifySecOid;
+    }
+
+    public String getParentClassifySecText() {
+        return parentClassifySecText;
+    }
+
+    public void setParentClassifySecText(String parentClassifySecText) {
+        this.parentClassifySecText = parentClassifySecText;
+    }
+
+
+    public String getCodeSecLengthType() {
+        return codeSecLengthType;
+    }
+
+    public void setCodeSecLengthType(String codeSecLengthType) {
+        this.codeSecLengthType = codeSecLengthType;
+    }
+
+    public String getCodeSecLengthTypeText() {
+        return codeSecLengthTypeText;
+    }
+
+    public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
+        this.codeSecLengthTypeText = codeSecLengthTypeText;
+    }
+
+    public String getNullableFlag() {
+        return nullableFlag;
+    }
+
+    public void setNullableFlag(String nullableFlag) {
+        this.nullableFlag = nullableFlag;
+    }
+
+    public String getComponentCodeFlag() {
+        return componentCodeFlag;
+    }
+
+    public void setComponentCodeFlag(String componentCodeFlag) {
+        this.componentCodeFlag = componentCodeFlag;
+    }
+
+    public String getSerialDependFlag() {
+        return serialDependFlag;
+    }
+
+    public void setSerialDependFlag(String serialDependFlag) {
+        this.serialDependFlag = serialDependFlag;
+    }
+
+    public String getDisplayFlag() {
+        return displayFlag;
+    }
+
+    public void setDisplayFlag(String displayFlag) {
+        this.displayFlag = displayFlag;
+    }
+
+    public Integer getSerialDependOrder() {
+        return serialDependOrder;
+    }
+
+    public void setSerialDependOrder(Integer serialDependOrder) {
+        this.serialDependOrder = serialDependOrder;
+    }
+
+    public String getReferAttributeId() {
+        return referAttributeId;
+    }
+
+    public void setReferAttributeId(String referAttributeId) {
+        this.referAttributeId = referAttributeId;
+    }
+
+    public String getReferAttributeName() {
+        return referAttributeName;
+    }
+
+    public void setReferAttributeName(String referAttributeName) {
+        this.referAttributeName = referAttributeName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeBasicSecDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", secType='" + secType + '\'' +
+                ", secTypeText='" + secTypeText + '\'' +
+                ", pkCodeRule='" + pkCodeRule + '\'' +
+                ", orderNum=" + orderNum +
+                ", referAttributeName='" + referAttributeName + '\'' +
+                ", referAttributeId='" + referAttributeId + '\'' +
+                ", getValueClass='" + getValueClass + '\'' +
+                ", codeDateFormatStr='" + codeDateFormatStr + '\'' +
+                ", codeSecLengthType='" + codeSecLengthType + '\'' +
+                ", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
+                ", codeSecLength='" + codeSecLength + '\'' +
+                ", codeLevelType='" + codeLevelType + '\'' +
+                ", codeLevelTypeText='" + codeLevelTypeText + '\'' +
+                ", codeLevelValue=" + codeLevelValue +
+                ", valueCutLength=" + valueCutLength +
+                ", valueCutType='" + valueCutType + '\'' +
+                ", valueCutTypeText='" + valueCutTypeText + '\'' +
+                ", codeGetValueType='" + codeGetValueType + '\'' +
+                ", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
+                ", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
+                ", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
+                ", referBtmId='" + referBtmId + '\'' +
+                ", referBtmName='" + referBtmName + '\'' +
+                ", referConfig='" + referConfig + '\'' +
+                ", referValueInfo='" + referValueInfo + '\'' +
+                ", filterSql='" + filterSql + '\'' +
+                ", serialStart='" + serialStart + '\'' +
+                ", serialStep=" + serialStep +
+                ", codeFillType='" + codeFillType + '\'' +
+                ", codeFillTypeText='" + codeFillTypeText + '\'' +
+                ", codeFillSeparator='" + codeFillSeparator + '\'' +
+                ", codeFillLength='" + codeFillLength + '\'' +
+                ", codeFillLimit=" + codeFillLimit +
+                ", codeFillFlag='" + codeFillFlag + '\'' +
+                ", customCodeSerialClass='" + customCodeSerialClass + '\'' +
+                ", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
+                ", parentClassifySecOid='" + parentClassifySecOid + '\'' +
+                ", parentClassifySecText='" + parentClassifySecText + '\'' +
+                ", nullableFlag='" + nullableFlag + '\'' +
+                ", componentCodeFlag='" + componentCodeFlag + '\'' +
+                ", serialDependFlag='" + serialDependFlag + '\'' +
+                ", displayFlag='" + displayFlag + '\'' +
+                ", serialDependOrder=" + serialDependOrder +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeButtonDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeButtonDO.java
new file mode 100644
index 0000000..69b5204
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeButtonDO.java
@@ -0,0 +1,125 @@
+package com.vci.ubcs.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 com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+
+/**
+ * 缂栫爜閲岀殑鎸夐挳鎵╁睍
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_BUTTON,text = "涓绘暟鎹腑鐨勬寜閽墿灞�",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeButtonDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -2281543776769670606L;
+
+    /**
+     * 鎸夐挳鐨勮嫳鏂囩紪鍙�
+     */
+    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勮嫳鏂囩紪鍙�")
+    private String id;
+
+    /**
+     * 鎸夐挳鐨勪腑鏂囧悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勪腑鏂囧悕绉�")
+    private String name;
+
+    /**
+     * 鎸夐挳鐨勫浘鏍囨牱寮�
+     */
+    @Column(columnDefinition = "鎸夐挳鐨勫浘鏍囨牱寮�")
+    private String iconCls;
+
+    /**
+     * 鎵ц鐨刯s鍐呭
+     */
+    @Column(columnDefinition = "鎵ц鐨刯s鍐呭")
+    private String executeJs;
+
+    /**
+     * 浣跨敤鎸夐挳鐨勪綅缃�
+     */
+    @Column(columnDefinition = "鎸夐挳鐨勪綅缃�")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_BUTTON_POSITION,showTextField = "usedPositionTypeText")
+    private String usedPositionType;
+
+    /**
+     * 浣跨敤鎸夐挳鐨勪綅缃殑鏄剧ず鏂囨湰
+     */
+    @Transient(referColumn = MdmEnumIdConstant.CODE_BUTTON_POSITION +"_usedPositionType")
+    private String usedPositionTypeText;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIconCls() {
+        return iconCls;
+    }
+
+    public void setIconCls(String iconCls) {
+        this.iconCls = iconCls;
+    }
+
+    public String getExecuteJs() {
+        return executeJs;
+    }
+
+    public void setExecuteJs(String executeJs) {
+        this.executeJs = executeJs;
+    }
+
+    public String getUsedPositionType() {
+        return usedPositionType;
+    }
+
+    public void setUsedPositionType(String usedPositionType) {
+        this.usedPositionType = usedPositionType;
+    }
+
+    public String getUsedPositionTypeText() {
+        return usedPositionTypeText;
+    }
+
+    public void setUsedPositionTypeText(String usedPositionTypeText) {
+        this.usedPositionTypeText = usedPositionTypeText;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeButtonDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", iconCls='" + iconCls + '\'' +
+                ", executeJs='" + executeJs + '\'' +
+                ", usedPositionType='" + usedPositionType + '\'' +
+                ", usedPositionTypeText='" + usedPositionTypeText + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyDO.java
new file mode 100644
index 0000000..92aa3de
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyDO.java
@@ -0,0 +1,276 @@
+package com.vci.ubcs.code.model;
+
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 涓婚搴撶殑鍒嗙被
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY,text = "涓婚搴撳垎绫�",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeClassifyDO extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 2217599544701726951L;
+
+    /**
+     * 鍒嗙被鐨勭紪鍙�
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勭紪鍙�")
+    private String id;
+
+    /**
+     * 鍒嗙被鐨勫悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勫悕绉�")
+    private String name;
+
+    /**
+     * 涓婄骇鐨勪富閿�
+     */
+    @Column(columnDefinition = "涓婄骇鏁版嵁鐨勪富閿�")
+    private String parentCodeClassifyOid;
+
+    /**
+     * 鎺掑簭鍙�
+     */
+    @Column(columnDefinition = "鎺掑簭鍙�",nullable = false)
+    private Integer orderNum;
+
+    /**
+     * 瀛樺偍鐨勪笟鍔$被鍨�
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勭紪鍙�")
+    private String btmTypeId;
+
+    /**
+     * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勫悕绉�")
+    private String btmTypeName;
+
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    @Column(columnDefinition = "缂栫爜瑙勫垯鐨勪富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
+    private String codeRuleOid;
+
+    /**
+     * 缂栫爜瑙勫垯鐨勫悕绉�
+     */
+    @Transient(referColumn = "codeRuleOid.name")
+    private String codeRuleOidName;
+
+    /**
+     * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+     */
+    @Column(columnDefinition = "鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_KEY_ATTR_REPEAT_RULE)
+    private String codeKeyAttrRepeatOid;
+
+    /**
+     * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鍚嶇О
+     */
+    @Transient(referColumn = "codeKeyAttrRepeatOid.name")
+    private String codeKeyAttrRepeatOidName;
+
+    /**
+     * 鐩镐技椤规煡璇㈢殑瑙勫垯涓婚敭
+     */
+    @Column(columnDefinition = "鐩镐技椤规煡璇㈢殑瑙勫垯")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RESEMBLE_RULE)
+    private String codeResembleRuleOid;
+
+    /**
+     * 鐩镐技椤规煡璇㈣鍒欏悕绉�
+     */
+    @Transient(referColumn = "codeResembleRuleOid.name")
+    private String codeResembleRuleOidName;
+
+    /**
+     * 鏁版嵁鎵�鍦ㄧ殑灞傜骇
+     */
+    @Transient
+    private Integer dataLevel;
+
+    /**
+     * 璺緞
+     */
+    @Transient
+    private String path;
+    /***
+     * 鍚嶇О璺緞
+     */
+    @Transient
+    private String namePath;
+    /***
+     * 浠g爜璺緞
+     */
+    @Transient
+    private String idPath;
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getParentCodeClassifyOid() {
+        return parentCodeClassifyOid;
+    }
+
+    public void setParentCodeClassifyOid(String parentCodeClassifyOid) {
+        this.parentCodeClassifyOid = parentCodeClassifyOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getBtmTypeId() {
+        return btmTypeId;
+    }
+
+    public void setBtmTypeId(String btmTypeId) {
+        this.btmTypeId = btmTypeId;
+    }
+
+    public String getBtmTypeName() {
+        return btmTypeName;
+    }
+
+    public void setBtmTypeName(String btmTypeName) {
+        this.btmTypeName = btmTypeName;
+    }
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+
+    public String getCodeKeyAttrRepeatOid() {
+        return codeKeyAttrRepeatOid;
+    }
+
+    public void setCodeKeyAttrRepeatOid(String codeKeyAttrRepeatOid) {
+        this.codeKeyAttrRepeatOid = codeKeyAttrRepeatOid;
+    }
+
+    public String getCodeRuleOidName() {
+        return codeRuleOidName;
+    }
+
+    public void setCodeRuleOidName(String codeRuleOidName) {
+        this.codeRuleOidName = codeRuleOidName;
+    }
+
+    public String getCodeKeyAttrRepeatOidName() {
+        return codeKeyAttrRepeatOidName;
+    }
+
+    public void setCodeKeyAttrRepeatOidName(String codeKeyAttrRepeatOidName) {
+        this.codeKeyAttrRepeatOidName = codeKeyAttrRepeatOidName;
+    }
+
+    public Integer getDataLevel() {
+        return dataLevel;
+    }
+
+    public void setDataLevel(Integer dataLevel) {
+        this.dataLevel = dataLevel;
+    }
+
+    public String getCodeResembleRuleOid() {
+        return codeResembleRuleOid;
+    }
+
+    public void setCodeResembleRuleOid(String codeResembleRuleOid) {
+        this.codeResembleRuleOid = codeResembleRuleOid;
+    }
+
+    public String getCodeResembleRuleOidName() {
+        return codeResembleRuleOidName;
+    }
+
+    public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
+        this.codeResembleRuleOidName = codeResembleRuleOidName;
+    }
+
+    public String getNamePath() {
+        return namePath;
+    }
+
+    public void setNamePath(String namePath) {
+        this.namePath = namePath;
+    }
+
+    public String getIdPath() {
+        return idPath;
+    }
+
+    public void setIdPath(String idPath) {
+        this.idPath = idPath;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", parentCodeClassifyOid='" + parentCodeClassifyOid + '\'' +
+                ", orderNum=" + orderNum +
+                ", btmTypeId='" + btmTypeId + '\'' +
+                ", btmTypeName='" + btmTypeName + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", codeRuleOidName='" + codeRuleOidName + '\'' +
+                ", codeKeyAttrRepeatOid='" + codeKeyAttrRepeatOid + '\'' +
+                ", codeKeyAttrRepeatOidName='" + codeKeyAttrRepeatOidName + '\'' +
+                ", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
+                ", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
+                ", dataLevel=" + dataLevel +
+                ", path='" + path + '\'' +
+                ", namePath='" + namePath + '\'' +
+                ", idPath='" + idPath + '\'' +
+                '}';
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessPhaseDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessPhaseDO.java
new file mode 100644
index 0000000..c16cf32
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessPhaseDO.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.code.model;
+
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 娴佺▼妯℃澘鍜岄樁娈电殑鍐呭
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_PROCESS_PHASE,text = "娴佺▼妯℃澘鍜岄樁娈电殑鍐呭",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyProcessPhaseDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 3814649551140170874L;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    @Column(nullable = false,columnDefinition = "涓婚搴撳垎绫讳富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
+    private String codeClassifyOid;
+
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎵�灞為樁娈电殑淇℃伅
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉块樁娈�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE)
+    private String codePhaseOid;
+
+    /**
+     * 娴佺▼妯℃澘缂栧彿
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘缂栧彿")
+    private String id;
+
+    /**
+     * 娴佺▼妯℃澘鐨勫悕绉�
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 娴佺▼涓殑浠诲姟鑺傜偣鐨勫悕绉�
+     */
+    @Column(columnDefinition = "娴佺▼涓殑浠诲姟鑺傜偣鍚嶇О",nullable = false)
+    private String processNodeName;
+
+
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    public String getCodePhaseOid() {
+        return codePhaseOid;
+    }
+
+    public void setCodePhaseOid(String codePhaseOid) {
+        this.codePhaseOid = codePhaseOid;
+    }
+
+    public String getProcessNodeName() {
+        return processNodeName;
+    }
+
+    public void setProcessNodeName(String processNodeName) {
+        this.processNodeName = processNodeName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyProcessPhaseDO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", codePhaseOid='" + codePhaseOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", processNodeName='" + processNodeName + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessTempDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessTempDO.java
new file mode 100644
index 0000000..9106c71
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessTempDO.java
@@ -0,0 +1,169 @@
+package com.vci.ubcs.code.model;
+
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_PROCESS_TEMPLATE,text = "鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyProcessTempDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6606901931032525995L;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    @Column(nullable = false,columnDefinition = "涓婚搴撳垎绫讳富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
+    private String codeClassifyOid;
+
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 娴佺▼妯℃澘缂栧彿
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘缂栧彿")
+    private String id;
+
+    /**
+     * 娴佺▼妯℃澘鐨勫悕绉�
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 娴佺▼妯℃澘鐢ㄩ��
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘鐢ㄩ��",nullable = false)
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,showTextField = "codeProcessUseText")
+    private String codeProcessUse;
+
+    /**
+     * 娴佺▼妯℃澘鐢ㄩ�旀樉绀哄悕绉�
+     */
+    @Transient
+    private String codeProcessUseText;
+
+    /**
+     * 娴佺▼妯℃澘鐨勭増鏈�
+     */
+    @Column(nullable = false)
+    private String processVersion;
+
+    /**
+     * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬х紪鍙�
+     */
+    @Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬�")
+    private String codeTempAttrOidArr;
+
+    /**
+     * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
+     */
+    @Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬у悕绉�")
+    private String codeTempAttrOidArrName;
+
+    public String getProcessVersion() {
+        return processVersion;
+    }
+
+    public void setProcessVersion(String processVersion) {
+        this.processVersion = processVersion;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeProcessUse() {
+        return codeProcessUse;
+    }
+
+    public void setCodeProcessUse(String codeProcessUse) {
+        this.codeProcessUse = codeProcessUse;
+    }
+
+    public String getCodeProcessUseText() {
+        return codeProcessUseText;
+    }
+
+    public void setCodeProcessUseText(String codeProcessUseText) {
+        this.codeProcessUseText = codeProcessUseText;
+    }
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    public String getCodeTempAttrOidArr() {
+        return codeTempAttrOidArr;
+    }
+
+    public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
+        this.codeTempAttrOidArr = codeTempAttrOidArr;
+    }
+
+    public String getCodeTempAttrOidArrName() {
+        return codeTempAttrOidArrName;
+    }
+
+    public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
+        this.codeTempAttrOidArrName = codeTempAttrOidArrName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyProcessTempDO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", codeProcessUse='" + codeProcessUse + '\'' +
+                ", codeProcessUseText='" + codeProcessUseText + '\'' +
+                ", processVersion='" + processVersion + '\'' +
+                ", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
+                ", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTempMapItemDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTempMapItemDO.java
new file mode 100644
index 0000000..9666532
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTempMapItemDO.java
@@ -0,0 +1,181 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_MAP_ITEM,text = "鏄犲皠瑙勫垯鐨勬槑缁�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTempMapItemDO extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -415692697543751712L;
+
+    /**
+     * 鏄犲皠瑙勫垯涓婚敭
+     */
+    @Column(nullable = false,columnDefinition = "鏄犲皠瑙勫垯涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_MAP)
+    private String classifyTemplateMapOid;
+
+    /**
+     * 鏄犲皠鍚嶇О
+     */
+    @Column(columnDefinition = "鏄犲皠鍚嶇О")
+    private String name;
+
+    /**
+     * 闆嗗洟鐮佸睘鎬ey
+     */
+    @Column(columnDefinition = "闆嗗洟鐮佸睘鎬ey")
+    private String groupCodeAttrId;
+
+    /**
+     * 闆嗗洟鐮佸睘鎬у悕绉�
+     */
+    @Column(columnDefinition = "闆嗗洟鐮佸睘鎬у悕绉�")
+    private String groupCodeAttrName;
+
+    /**
+     * 鍒嗙被妯℃澘灞炴�т富閿�
+     */
+    @Column(columnDefinition = "鍒嗙被妯℃澘灞炴�т富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR)
+    private String classifyTemplateAttrOid;
+    /**
+     * 妯℃澘灞炴�ey
+     */
+    @Transient(referColumn = "classifyTemplateAttrOid.id")
+    private String classifyAttrId;
+
+    /**
+     * 妯℃澘灞炴�у悕绉�
+     */
+    @Transient(referColumn = "classifyTemplateAttrOid.name")
+    private String classifyAttrName;
+
+    /**
+     * 鐩爣绔殑鏃堕棿鏍煎紡
+     */
+    @Column(columnDefinition = "鐩爣绔殑鏃堕棿鏍煎紡")
+    private String targetDateFormat;
+
+    /**
+     * 杞崲鍏紡
+     */
+    @Column(columnDefinition = "杞崲鍏紡",length = 4000)
+    private String switchEval;
+
+    /**
+     * 杞崲鐨勮嚜瀹氫箟绫�
+     */
+    @Column(columnDefinition = "杞崲鐨勮嚜瀹氫箟绫�",length = 200)
+    private String switchClassName;
+
+    public String getClassifyTemplateMapOid() {
+        return classifyTemplateMapOid;
+    }
+
+    public void setClassifyTemplateMapOid(String classifyTemplateMapOid) {
+        this.classifyTemplateMapOid = classifyTemplateMapOid;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getGroupCodeAttrId() {
+        return groupCodeAttrId;
+    }
+
+    public void setGroupCodeAttrId(String groupCodeAttrId) {
+        this.groupCodeAttrId = groupCodeAttrId;
+    }
+
+    public String getGroupCodeAttrName() {
+        return groupCodeAttrName;
+    }
+
+    public void setGroupCodeAttrName(String groupCodeAttrName) {
+        this.groupCodeAttrName = groupCodeAttrName;
+    }
+
+    public String getClassifyTemplateAttrOid() {
+        return classifyTemplateAttrOid;
+    }
+
+    public void setClassifyTemplateAttrOid(String classifyTemplateAttrOid) {
+        this.classifyTemplateAttrOid = classifyTemplateAttrOid;
+    }
+
+    public String getClassifyAttrId() {
+        return classifyAttrId;
+    }
+
+    public void setClassifyAttrId(String classifyAttrId) {
+        this.classifyAttrId = classifyAttrId;
+    }
+
+    public String getClassifyAttrName() {
+        return classifyAttrName;
+    }
+
+    public void setClassifyAttrName(String classifyAttrName) {
+        this.classifyAttrName = classifyAttrName;
+    }
+
+    public String getTargetDateFormat() {
+        return targetDateFormat;
+    }
+
+    public void setTargetDateFormat(String targetDateFormat) {
+        this.targetDateFormat = targetDateFormat;
+    }
+
+    public String getSwitchEval() {
+        return switchEval;
+    }
+
+    public void setSwitchEval(String switchEval) {
+        this.switchEval = switchEval;
+    }
+
+    public String getSwitchClassName() {
+        return switchClassName;
+    }
+
+    public void setSwitchClassName(String switchClassName) {
+        this.switchClassName = switchClassName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTempMapItemDO{" +
+                "classifyTemplateMapOid='" + classifyTemplateMapOid + '\'' +
+                ", name='" + name + '\'' +
+                ", groupCodeAttrId='" + groupCodeAttrId + '\'' +
+                ", groupCodeAttrName='" + groupCodeAttrName + '\'' +
+                ", classifyTemplateAttrOid='" + classifyTemplateAttrOid + '\'' +
+                ", classifyAttrId='" + classifyAttrId + '\'' +
+                ", classifyAttrName='" + classifyAttrName + '\'' +
+                ", targetDateFormat='" + targetDateFormat + '\'' +
+                ", switchEval='" + switchEval + '\'' +
+                ", switchClassName='" + switchClassName + '\'' +
+                '}' + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateAttrDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateAttrDO.java
new file mode 100644
index 0000000..c76f89c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateAttrDO.java
@@ -0,0 +1,858 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,text = "涓婚搴撳垎绫荤殑妯℃澘灞炴��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTemplateAttrDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -8685210169495428202L;
+
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎵�灞炴ā鏉垮悕绉�
+     */
+    @Transient(referColumn = "classifyTemplateOid.name")
+    private String classifyTemplateOidName;
+
+    /**
+     * 灞炴�ц嫳鏂囧悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�ц嫳鏂囧悕绉�")
+    private String id;
+
+    /**
+     * 灞炴�т腑鏂囧悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�т腑鏂囧悕绉�")
+    private String name;
+
+    /**
+     * 灞炴�х殑绫诲瀷
+     */
+    @Column(columnDefinition = "灞炴�х殑绫诲瀷",nullable = false)
+    private String attributeDataType;
+
+    /**
+     * 鏄惁鍏抽敭灞炴��
+     */
+    @Column(columnDefinition = "鏄惁鍏抽敭灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String keyAttrFlag;
+
+    /**
+     * 鏄惁蹇�熸煡璇㈠睘鎬�
+     */
+    @Column(columnDefinition = "鏄惁蹇�熸煡璇㈠睘鎬�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String queryAttrFlag;
+
+    /**
+     * 鏄惁楂樼骇鏌ヨ灞炴��
+     */
+    @Column(columnDefinition = "鏄惁楂樼骇鏌ヨ灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String seniorQueryAttrFlag;
+
+    /**
+     * 鐩镐技鏌ラ噸灞炴��
+     */
+    @Column(columnDefinition = "鐩镐技鏌ラ噸灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String sameRepeatAttrFlag;
+
+    /**
+     * 鏄惁鎺掑簭
+     */
+    @Column(columnDefinition = "鏄惁鎺掑簭",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String sortAttrFlag;
+
+    /**
+     * 鏄惁鐢熸垚浜岀淮鐮�
+     */
+    @Column(columnDefinition = "鏄惁鐢熸垚浜岀淮鐮�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String qrcodeFlag;
+
+    /**
+     * 鏄惁鐢熸垚鏉″舰鐮�
+     */
+    @Column(columnDefinition = "鏄惁鐢熸垚涓�缁寸爜",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String barcodeFlag;
+
+
+    /**
+     * 缁勫悎瑙勫垯
+     */
+    @Column(columnDefinition = "缁勫悎瑙勫垯",length = 4000)
+    private String componentRule;
+
+    /**
+     * 楠岃瘉瑙勫垯
+     */
+    @Column(columnDefinition = "楠岃瘉瑙勫垯",length = 4000)
+    private String verifyRule;
+
+    /**
+     * 鍒嗙被娉ㄥ叆灞傜骇
+     */
+    @Column(columnDefinition = "鍒嗙被娉ㄥ叆灞傜骇",defaultValue = "none")
+    private String classifyInvokeLevel;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫睘鎬�
+     */
+    @Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�",length = 32)
+    private String classifyInvokeAttr;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+     */
+    @Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�",length = 200)
+    private String classifyInvokeAttrName;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+     */
+    @Column(columnDefinition = "鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String classifyInvokeEditFlag;
+
+    /**
+     * 灞炴�ф帓搴忓彿
+     */
+    @Column(columnDefinition = "灞炴�ф帓搴忓彿")
+    private Integer orderNum;
+
+    /**
+     * 琛ㄥ崟閲屾槸鍚︽樉绀�
+     */
+    @Column(columnDefinition = "琛ㄥ崟閲屾槸鍚︽樉绀�",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String formDisplayFlag;
+
+    /**
+     * 鍒楄〃閲屾槸鍚︽樉绀�
+     */
+    @Column(columnDefinition = "鍒楄〃閲屾槸鍚︽樉绀�",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String tableDisplayFlag;
+
+    /**
+     * 鎵�灞炲睘鎬у垎缁�
+     */
+    @Column(columnDefinition = "鎵�灞炲睘鎬у垎缁�")
+    private String attributeGroup;
+
+    /**
+     * 浣跨敤鏋氫妇鑻辨枃缂栧彿
+     */
+    @Column(columnDefinition = "浣跨敤鏋氫妇鑻辨枃缂栧彿")
+    private String enumId;
+
+    /**
+     * 浣跨敤鏋氫妇涓枃鍚嶇О
+     */
+    @Column(columnDefinition = "浣跨敤鏋氫妇涓枃鍚嶇О")
+    private String enumName;
+
+    /**
+     * 鏋氫妇鏄惁鍙互缂栬緫
+     */
+    @Column(columnDefinition = "鏋氫妇鏄惁鍙互缂栬緫")
+    private String enumEditFlag;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    @Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�")
+    private String referBtmId;
+
+    /**
+     * 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+     */
+    @Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�")
+    private String referBtmName;
+
+    /**
+     * 鍙傜収鐨勭獥鍙i厤缃�
+     */
+    @Column(columnDefinition = "鍙傜収绐楀彛閰嶇疆",length = 4000)
+    private String referConfig;
+
+    /**
+     * 鏄惁蹇呰緭
+     */
+    @Column(columnDefinition = "鏄惁蹇呰緭",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String requireFlag;
+
+    /**
+     * 鏄惁鍙
+     */
+    @Column(columnDefinition = "鏄惁鍙",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String readOnlyFlag;
+
+    /**
+     * 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+     */
+    @Column(columnDefinition = "灞炴�ф帶鍒惰緭鍏ョ殑闀垮害",defaultValue = "254")
+    private Integer controlLength = 254;
+
+    /**
+     * 琛ㄥ崟涓婃樉绀虹殑鏍峰紡
+     */
+    @Column(length = 1000,columnDefinition = "琛ㄥ崟閲屾樉绀虹殑鏍峰紡")
+    private String formDisplayStyle;
+
+    /**
+     * 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+     */
+    @Column(length = 1000,columnDefinition = "琛ㄦ牸閲屾樉绀虹殑鏍峰紡")
+    private String tableDisplayStyle;
+
+    /**
+     * 琛ㄥ崟涓秴閾炬帴
+     */
+    @Column(columnDefinition = "琛ㄥ崟涓秴閾炬帴鍐呭",length = 1000)
+    private String formHref;
+
+    /**
+     * 琛ㄦ牸涓秴閾炬帴
+     */
+    @Column(columnDefinition = "琛ㄦ牸涓秴閾炬帴鍐呭",length = 1000)
+    private String tableHref;
+
+    /**
+     * 灏忔暟绮惧害
+     */
+    @Column(columnDefinition = "灏忔暟绮惧害")
+    private Integer precisionLength;
+
+    /**
+     * 灏忔暟鍒诲害
+     */
+    @Column(columnDefinition = "灏忔暟鍒诲害")
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    @Column(columnDefinition = "鍙栧�艰寖鍥�",length = 1000)
+    private String valueArea;
+
+    /**
+     * 鏃堕棿鏍煎紡
+     */
+    @Column(columnDefinition = "鏃堕棿鏍煎紡")
+    private String codeDateFormat;
+
+    /**
+     * 琛ㄦ牸涓樉绀虹殑js
+     */
+    @Column(columnDefinition = "琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js",length = 254)
+    private String tableDisplayJs;
+
+    /**
+     * 鏄惁鏄剧ず澶氳鏂囨湰
+     */
+    @Column(columnDefinition = "鏄惁鏄剧ず澶氳鏂囨湰",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String textAreaFlag;
+
+    /**
+     * 鏄惁涓哄浘鐗囩瓑鍏冪礌
+     */
+    @Column(columnDefinition = "棰勮鍥�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String imageFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    @Column(columnDefinition = "榛樿鍊�")
+    private String defaultValue;
+
+    /**
+     * 鍓嶇紑
+     */
+    @Column(columnDefinition = "鍓嶇紑")
+    private String prefixValue;
+
+    /**
+     * 鍚庣紑
+     */
+    @Column(columnDefinition = "鍚庣紑")
+    private String suffixValue;
+
+    /**
+     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+     */
+    @Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��")
+    private String filterSourceAttr;
+
+    /**
+     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+     */
+    @Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�")
+    private String filterSourceAttrName;
+
+    /**
+     * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
+     */
+    @Column(length = 4000,columnDefinition = "鏋氫妇娉ㄥ叆鐨勫唴瀹�")
+    private String enumString;
+
+    /**
+     * 灞炴�х殑瀹藉害
+     */
+    @Column(columnDefinition = "灞炴�у垪琛ㄤ腑瀹藉害")
+    private Integer attrTableWidth;
+    /**
+     * 璇存槑
+     */
+    @Column(columnDefinition = "璇存槑")
+    private String explain;
+
+    /**
+     * 閫夋嫨搴撴爣璇�
+     */
+    @Column(columnDefinition = "閫夋嫨搴撴爣璇�")
+    private String libraryIdentification;
+
+    /**
+     * 绾ц仈灞炴�х紪鍙�
+     */
+    @Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
+    private String parentCode;
+
+    /**
+     * 绾ц仈灞炴�у悕绉�
+     */
+    @Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
+    private String parentName;
+
+    /**
+     * 绾ц仈鏌ヨ灞炴��
+     */
+    @Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
+    private String parentQueryAttr;
+
+
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAttributeDataType() {
+        return attributeDataType;
+    }
+
+    public void setAttributeDataType(String attributeDataType) {
+        this.attributeDataType = attributeDataType;
+    }
+
+    public String getKeyAttrFlag() {
+        return keyAttrFlag;
+    }
+
+    public void setKeyAttrFlag(String keyAttrFlag) {
+        this.keyAttrFlag = keyAttrFlag;
+    }
+
+    public String getQueryAttrFlag() {
+        return queryAttrFlag;
+    }
+
+    public void setQueryAttrFlag(String queryAttrFlag) {
+        this.queryAttrFlag = queryAttrFlag;
+    }
+
+    public String getSeniorQueryAttrFlag() {
+        return seniorQueryAttrFlag;
+    }
+
+    public void setSeniorQueryAttrFlag(String seniorQueryAttrFlag) {
+        this.seniorQueryAttrFlag = seniorQueryAttrFlag;
+    }
+
+    public String getSameRepeatAttrFlag() {
+        return sameRepeatAttrFlag;
+    }
+
+    public void setSameRepeatAttrFlag(String sameRepeatAttrFlag) {
+        this.sameRepeatAttrFlag = sameRepeatAttrFlag;
+    }
+
+    public String getSortAttrFlag() {
+        return sortAttrFlag;
+    }
+
+    public void setSortAttrFlag(String sortAttrFlag) {
+        this.sortAttrFlag = sortAttrFlag;
+    }
+
+    public String getQrcodeFlag() {
+        return qrcodeFlag;
+    }
+
+    public void setQrcodeFlag(String qrcodeFlag) {
+        this.qrcodeFlag = qrcodeFlag;
+    }
+
+    public String getBarcodeFlag() {
+        return barcodeFlag;
+    }
+
+    public void setBarcodeFlag(String barcodeFlag) {
+        this.barcodeFlag = barcodeFlag;
+    }
+
+    public String getComponentRule() {
+        return componentRule;
+    }
+
+    public void setComponentRule(String componentRule) {
+        this.componentRule = componentRule;
+    }
+
+    public String getVerifyRule() {
+        return verifyRule;
+    }
+
+    public void setVerifyRule(String verifyRule) {
+        this.verifyRule = verifyRule;
+    }
+
+    public String getClassifyInvokeLevel() {
+        return classifyInvokeLevel;
+    }
+
+    public void setClassifyInvokeLevel(String classifyInvokeLevel) {
+        this.classifyInvokeLevel = classifyInvokeLevel;
+    }
+
+    public String getClassifyInvokeAttr() {
+        return classifyInvokeAttr;
+    }
+
+    public void setClassifyInvokeAttr(String classifyInvokeAttr) {
+        this.classifyInvokeAttr = classifyInvokeAttr;
+    }
+
+    public String getClassifyInvokeAttrName() {
+        return classifyInvokeAttrName;
+    }
+
+    public void setClassifyInvokeAttrName(String classifyInvokeAttrName) {
+        this.classifyInvokeAttrName = classifyInvokeAttrName;
+    }
+
+    public String getClassifyInvokeEditFlag() {
+        return classifyInvokeEditFlag;
+    }
+
+    public void setClassifyInvokeEditFlag(String classifyInvokeEditFlag) {
+        this.classifyInvokeEditFlag = classifyInvokeEditFlag;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getFormDisplayFlag() {
+        return formDisplayFlag;
+    }
+
+    public void setFormDisplayFlag(String formDisplayFlag) {
+        this.formDisplayFlag = formDisplayFlag;
+    }
+
+    public String getTableDisplayFlag() {
+        return tableDisplayFlag;
+    }
+
+    public void setTableDisplayFlag(String tableDisplayFlag) {
+        this.tableDisplayFlag = tableDisplayFlag;
+    }
+
+    public String getAttributeGroup() {
+        return attributeGroup;
+    }
+
+    public void setAttributeGroup(String attributeGroup) {
+        this.attributeGroup = attributeGroup;
+    }
+
+    public String getEnumId() {
+        return enumId;
+    }
+
+    public void setEnumId(String enumId) {
+        this.enumId = enumId;
+    }
+
+    public String getEnumName() {
+        return enumName;
+    }
+
+    public void setEnumName(String enumName) {
+        this.enumName = enumName;
+    }
+
+    public String getEnumEditFlag() {
+        return enumEditFlag;
+    }
+
+    public void setEnumEditFlag(String enumEditFlag) {
+        this.enumEditFlag = enumEditFlag;
+    }
+
+    public String getReferBtmId() {
+        return referBtmId;
+    }
+
+    public void setReferBtmId(String referBtmId) {
+        this.referBtmId = referBtmId;
+    }
+
+    public String getReferBtmName() {
+        return referBtmName;
+    }
+
+    public void setReferBtmName(String referBtmName) {
+        this.referBtmName = referBtmName;
+    }
+
+    public String getReferConfig() {
+        return referConfig;
+    }
+
+    public void setReferConfig(String referConfig) {
+        this.referConfig = referConfig;
+    }
+
+    public String getRequireFlag() {
+        return requireFlag;
+    }
+
+    public void setRequireFlag(String requireFlag) {
+        this.requireFlag = requireFlag;
+    }
+
+    public String getReadOnlyFlag() {
+        return readOnlyFlag;
+    }
+
+    public void setReadOnlyFlag(String readOnlyFlag) {
+        this.readOnlyFlag = readOnlyFlag;
+    }
+
+    public Integer getControlLength() {
+        return controlLength;
+    }
+
+    public void setControlLength(Integer controlLength) {
+        this.controlLength = controlLength;
+    }
+
+    public String getFormDisplayStyle() {
+        return formDisplayStyle;
+    }
+
+    public void setFormDisplayStyle(String formDisplayStyle) {
+        this.formDisplayStyle = formDisplayStyle;
+    }
+
+    public String getTableDisplayStyle() {
+        return tableDisplayStyle;
+    }
+
+    public void setTableDisplayStyle(String tableDisplayStyle) {
+        this.tableDisplayStyle = tableDisplayStyle;
+    }
+
+    public String getFormHref() {
+        return formHref;
+    }
+
+    public void setFormHref(String formHref) {
+        this.formHref = formHref;
+    }
+
+    public String getTableHref() {
+        return tableHref;
+    }
+
+    public void setTableHref(String tableHref) {
+        this.tableHref = tableHref;
+    }
+
+    public Integer getPrecisionLength() {
+        return precisionLength;
+    }
+
+    public void setPrecisionLength(Integer precisionLength) {
+        this.precisionLength = precisionLength;
+    }
+
+    public Integer getScaleLength() {
+        return scaleLength;
+    }
+
+    public void setScaleLength(Integer scaleLength) {
+        this.scaleLength = scaleLength;
+    }
+
+    public String getValueArea() {
+        return valueArea;
+    }
+
+    public void setValueArea(String valueArea) {
+        this.valueArea = valueArea;
+    }
+
+    public String getCodeDateFormat() {
+        return codeDateFormat;
+    }
+
+    public void setCodeDateFormat(String codeDateFormat) {
+        this.codeDateFormat = codeDateFormat;
+    }
+
+    public String getTableDisplayJs() {
+        return tableDisplayJs;
+    }
+
+    public void setTableDisplayJs(String tableDisplayJs) {
+        this.tableDisplayJs = tableDisplayJs;
+    }
+
+    public String getTextAreaFlag() {
+        return textAreaFlag;
+    }
+
+    public void setTextAreaFlag(String textAreaFlag) {
+        this.textAreaFlag = textAreaFlag;
+    }
+
+    public String getImageFlag() {
+        return imageFlag;
+    }
+
+    public void setImageFlag(String imageFlag) {
+        this.imageFlag = imageFlag;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    public String getPrefixValue() {
+        return prefixValue;
+    }
+
+    public void setPrefixValue(String prefixValue) {
+        this.prefixValue = prefixValue;
+    }
+
+    public String getSuffixValue() {
+        return suffixValue;
+    }
+
+    public void setSuffixValue(String suffixValue) {
+        this.suffixValue = suffixValue;
+    }
+
+    public String getFilterSourceAttr() {
+        return filterSourceAttr;
+    }
+
+    public void setFilterSourceAttr(String filterSourceAttr) {
+        this.filterSourceAttr = filterSourceAttr;
+    }
+
+    public String getFilterSourceAttrName() {
+        return filterSourceAttrName;
+    }
+
+    public void setFilterSourceAttrName(String filterSourceAttrName) {
+        this.filterSourceAttrName = filterSourceAttrName;
+    }
+
+    public String getEnumString() {
+        return enumString;
+    }
+
+    public void setEnumString(String enumString) {
+        this.enumString = enumString;
+    }
+
+    public Integer getAttrTableWidth() {
+        return attrTableWidth;
+    }
+
+    public void setAttrTableWidth(Integer attrTableWidth) {
+        this.attrTableWidth = attrTableWidth;
+    }
+
+    public String getExplain() {
+        return explain;
+    }
+
+    public void setExplain(String explain) {
+        this.explain = explain;
+    }
+
+    public String getLibraryIdentification() {
+        return libraryIdentification;
+    }
+
+    public void setLibraryIdentification(String libraryIdentification) {
+        this.libraryIdentification = libraryIdentification;
+    }
+
+    public String getParentCode() {
+        return parentCode;
+    }
+
+    public void setParentCode(String parentCode) {
+        this.parentCode = parentCode;
+    }
+
+    public String getParentName() {
+        return parentName;
+    }
+
+    public void setParentName(String parentName) {
+        this.parentName = parentName;
+    }
+
+    public String getParentQueryAttr() {
+        return parentQueryAttr;
+    }
+
+    public void setParentQueryAttr(String parentQueryAttr) {
+        this.parentQueryAttr = parentQueryAttr;
+    }
+
+    public String getClassifyTemplateOidName() {
+        return classifyTemplateOidName;
+    }
+
+    public void setClassifyTemplateOidName(String classifyTemplateOidName) {
+        this.classifyTemplateOidName = classifyTemplateOidName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTemplateAttrDO{" +
+                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", classifyTemplateOidName='" + classifyTemplateOidName + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", attributeDataType='" + attributeDataType + '\'' +
+                ", keyAttrFlag='" + keyAttrFlag + '\'' +
+                ", queryAttrFlag='" + queryAttrFlag + '\'' +
+                ", seniorQueryAttrFlag='" + seniorQueryAttrFlag + '\'' +
+                ", sameRepeatAttrFlag='" + sameRepeatAttrFlag + '\'' +
+                ", sortAttrFlag='" + sortAttrFlag + '\'' +
+                ", qrcodeFlag='" + qrcodeFlag + '\'' +
+                ", barcodeFlag='" + barcodeFlag + '\'' +
+                ", componentRule='" + componentRule + '\'' +
+                ", verifyRule='" + verifyRule + '\'' +
+                ", classifyInvokeLevel='" + classifyInvokeLevel + '\'' +
+                ", classifyInvokeAttr='" + classifyInvokeAttr + '\'' +
+                ", classifyInvokeAttrName='" + classifyInvokeAttrName + '\'' +
+                ", classifyInvokeEditFlag='" + classifyInvokeEditFlag + '\'' +
+                ", orderNum=" + orderNum +
+                ", formDisplayFlag='" + formDisplayFlag + '\'' +
+                ", tableDisplayFlag='" + tableDisplayFlag + '\'' +
+                ", attributeGroup='" + attributeGroup + '\'' +
+                ", enumId='" + enumId + '\'' +
+                ", enumName='" + enumName + '\'' +
+                ", enumEditFlag='" + enumEditFlag + '\'' +
+                ", referBtmId='" + referBtmId + '\'' +
+                ", referBtmName='" + referBtmName + '\'' +
+                ", referConfig='" + referConfig + '\'' +
+                ", requireFlag='" + requireFlag + '\'' +
+                ", readOnlyFlag='" + readOnlyFlag + '\'' +
+                ", controlLength=" + controlLength +
+                ", formDisplayStyle='" + formDisplayStyle + '\'' +
+                ", tableDisplayStyle='" + tableDisplayStyle + '\'' +
+                ", formHref='" + formHref + '\'' +
+                ", tableHref='" + tableHref + '\'' +
+                ", precisionLength=" + precisionLength +
+                ", scaleLength=" + scaleLength +
+                ", valueArea='" + valueArea + '\'' +
+                ", codeDateFormat='" + codeDateFormat + '\'' +
+                ", tableDisplayJs='" + tableDisplayJs + '\'' +
+                ", textAreaFlag='" + textAreaFlag + '\'' +
+                ", imageFlag='" + imageFlag + '\'' +
+                ", defaultValue='" + defaultValue + '\'' +
+                ", prefixValue='" + prefixValue + '\'' +
+                ", suffixValue='" + suffixValue + '\'' +
+                ", filterSourceAttr='" + filterSourceAttr + '\'' +
+                ", filterSourceAttrName='" + filterSourceAttrName + '\'' +
+                ", enumString='" + enumString + '\'' +
+                ", attrTableWidth=" + attrTableWidth +
+                ", explain='" + explain + '\'' +
+                ", libraryIdentification='" + libraryIdentification + '\'' +
+                ", parentCode='" + parentCode + '\'' +
+                ", parentName='" + parentName + '\'' +
+                ", parentQueryAttr='" + parentQueryAttr + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateButtonDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateButtonDO.java
new file mode 100644
index 0000000..250990c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateButtonDO.java
@@ -0,0 +1,135 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+
+/**
+ * 妯℃澘灞炴�т笅鐨勬寜閽�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_BUTTON,text = "涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTemplateButtonDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -5004852745300082871L;
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎸夐挳鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勪富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_BUTTON)
+    private String classifyButtonOid;
+
+    /**
+     * 鎸夐挳鐨勫悕绉�
+     */
+    @Transient(referColumn = "classifyButtonOid.name")
+    private String classifyButtonOidName;
+
+    /**
+     * 鎸夐挳鐢ㄩ��
+     */
+    @Column(columnDefinition = "鎸夐挳鐢ㄩ��")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_TEMPLATE_BUTTON_USE,showTextField = "buttonUseText")
+    private String buttonUse;
+
+    /**
+     * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
+     */
+    @Transient()
+    private String buttonUseText;
+
+    /**
+     * 鎸夐挳鏍囪瘑
+     */
+    @Transient(referColumn = "classifyButtonOid.id")
+    private String id;
+
+    /**
+     * 鎺掑簭鍙�
+     */
+    @Column(columnDefinition = "鎺掑簭鍙�")
+    private Integer orderNum;
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    public String getClassifyButtonOid() {
+        return classifyButtonOid;
+    }
+
+    public void setClassifyButtonOid(String classifyButtonOid) {
+        this.classifyButtonOid = classifyButtonOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getButtonUse() {
+        return buttonUse;
+    }
+
+    public void setButtonUse(String buttonUse) {
+        this.buttonUse = buttonUse;
+    }
+
+    public String getButtonUseText() {
+        return buttonUseText;
+    }
+
+    public void setButtonUseText(String buttonUseText) {
+        this.buttonUseText = buttonUseText;
+    }
+
+    public String getClassifyButtonOidName() {
+        return classifyButtonOidName;
+    }
+
+    public void setClassifyButtonOidName(String classifyButtonOidName) {
+        this.classifyButtonOidName = classifyButtonOidName;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTemplateButtonDO{" +
+                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", classifyButtonOid='" + classifyButtonOid + '\'' +
+                ", classifyButtonOidName='" + classifyButtonOidName + '\'' +
+                ", buttonUse='" + buttonUse + '\'' +
+                ", buttonUseText='" + buttonUseText + '\'' +
+                ", orderNum=" + orderNum +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateDO.java
new file mode 100644
index 0000000..833b789
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateDO.java
@@ -0,0 +1,93 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmLifeCycleConstant;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE,text = "鍒嗙被妯℃澘瀵硅薄",lifeCycle = MdmLifeCycleConstant.CODE_CLASSIFY_TEMPLATE_LC,
+		revisionRule = FrameWorkDefaultValueConstant.NUMBER_REVISION,startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING)
+public class CodeClassifyTemplateDO extends BaseModel {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117801077811L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	@Column(columnDefinition = "涓婚搴撳垎绫讳富閿�"    ,showTextField = "codeClassifyOidName"  )
+    @VciUseRefer(value = MdmBtmTypeConstant.CODE_CLASSIFY,showTextField = "codeClassifyOidName" )
+    private String codeClassifyOid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	@Transient(referColumn = "codeClassifyOid.name")
+	private String codeClassifyOidName;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨�
+	 */
+	@Column(columnDefinition = "涓氬姟绫诲瀷鐨勭紪鍙�")
+	private String btmTypeId;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+	 */
+	@Column(columnDefinition = "涓氬姟绫诲瀷鐨勫悕绉�")
+	private String btmTypeName;
+
+	public String getCodeClassifyOid() {
+		return codeClassifyOid;
+	}
+
+	public void setCodeClassifyOid(String codeClassifyOid) {
+		this.codeClassifyOid = codeClassifyOid;
+	}
+
+	public String getCodeClassifyOidName() {
+		return codeClassifyOidName;
+	}
+
+	public void setCodeClassifyOidName(String codeClassifyOidName) {
+		this.codeClassifyOidName = codeClassifyOidName;
+	}
+
+	public String getBtmTypeId() {
+		return btmTypeId;
+	}
+
+	public void setBtmTypeId(String btmTypeId) {
+		this.btmTypeId = btmTypeId;
+	}
+
+	public String getBtmTypeName() {
+		return btmTypeName;
+	}
+
+	public void setBtmTypeName(String btmTypeName) {
+		this.btmTypeName = btmTypeName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateDO{" +
+				"codeClassifyOid='" + codeClassifyOid + '\'' +
+				", codeClassifyOidName='" + codeClassifyOidName + '\'' +
+				", btmTypeId='" + btmTypeId + '\'' +
+				", btmTypeName='" + btmTypeName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateMapDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateMapDO.java
new file mode 100644
index 0000000..3b8020f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateMapDO.java
@@ -0,0 +1,114 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmEnumIdConstant;
+
+/**
+ * 妯℃澘鏄犲皠瑙勫垯
+ * 闆嗗洟鐮佸鍏ュ拰瀵煎嚭
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_MAP,text = "涓婚搴撴ā鏉挎槧灏勮鍒�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTemplateMapDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -7507653171857583003L;
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎵�灞炴ā鏉垮悕绉�
+     */
+    @Transient(referColumn = "classifyTemplateOid.name")
+    private String classifyTemplateName;
+
+    /**
+     * 鏄犲皠瑙勫垯缂栧彿
+     */
+    @Column(columnDefinition = "鏄犲皠瑙勫垯缂栧彿")
+    private String id;
+
+    /**
+     * 鏄犲皠瑙勫垯鍚嶇О
+     */
+    @Column(columnDefinition = "鏄犲皠瑙勫垯鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 鏄犲皠瑙勫垯绫诲瀷
+     */
+    @Column(columnDefinition = "鏄犲皠瑙勫垯绫诲瀷",nullable = false)
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_MAP_RULE_TYPE,showTextField = "codeMapRuleTypeText")
+    private String codeMapRuleType;
+
+    /**
+     * 鏄犲皠瑙勫垯绫诲瀷鐨勫悕绉�
+     */
+    @Transient
+    private String codeMapRuleTypeText;
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeMapRuleType() {
+        return codeMapRuleType;
+    }
+
+    public void setCodeMapRuleType(String codeMapRuleType) {
+        this.codeMapRuleType = codeMapRuleType;
+    }
+
+    public String getCodeMapRuleTypeText() {
+        return codeMapRuleTypeText;
+    }
+
+    public void setCodeMapRuleTypeText(String codeMapRuleTypeText) {
+        this.codeMapRuleTypeText = codeMapRuleTypeText;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTemplateMapDO{" +
+                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", codeMapRuleType='" + codeMapRuleType + '\'' +
+                ", codeMapRuleTypeText='" + codeMapRuleTypeText + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyValueDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyValueDO.java
new file mode 100644
index 0000000..df65b80
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyValueDO.java
@@ -0,0 +1,108 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊�
+ * 鐩稿綋浜庣骇鑱旂殑涓嬫媺妗�
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_VALUE,text = "鍒嗙被鐮佹鐨勭爜鍊�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyValueDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5238387322464830032L;
+    /**
+     * 鍒嗙被鐮佹涓婚敭
+     */
+    @Column(columnDefinition = "鍒嗙被鐮佹涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_BASIC_SEC)
+    private String codeClassifySecOid;
+
+    /**
+     * 鍒嗙被鐮佸��
+     */
+    @Column(columnDefinition = "鍒嗙被鐮佸��")
+    private String id;
+
+    /**
+     * 鍒嗙被鍚嶇О
+     */
+    @Column(columnDefinition = "鍒嗙被鍚嶇О")
+    private String name;
+
+    /**
+     * 鐮佸�煎簭鍙�
+     */
+    @Column(columnDefinition = "鐮佸�煎簭鍙�")
+    private Integer orderNum;
+
+    /**
+     * 涓婄骇鍒嗙被鐮佸�间富閿�
+     */
+    @Column(columnDefinition = "涓婄骇鍒嗙被鐮佸�间富閿�")
+    private String parentClassifyValueOid;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeClassifySecOid() {
+        return codeClassifySecOid;
+    }
+
+    public void setCodeClassifySecOid(String codeClassifySecOid) {
+        this.codeClassifySecOid = codeClassifySecOid;
+    }
+
+    public String getParentClassifyValueOid() {
+        return parentClassifyValueOid;
+    }
+
+    public void setParentClassifyValueOid(String parentClassifyValueOid) {
+        this.parentClassifyValueOid = parentClassifyValueOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyValueDO{" +
+                "codeClassifySecOid='" + codeClassifySecOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", orderNum=" + orderNum +
+                ", parentClassifyValueOid='" + parentClassifyValueOid + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeFixedValueDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeFixedValueDO.java
new file mode 100644
index 0000000..bec52f5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeFixedValueDO.java
@@ -0,0 +1,93 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊�
+ * 鐩稿綋浜庡湪鏋氫妇鐨勪綔鐢紝浼氭湁澶氫釜
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_FIXED_VALUE,text = "鍥哄畾鐮佹鐨勭爜鍊�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeFixedValueDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 3392365440606832597L;
+    /**
+     * 鍥哄畾鐮佹涓婚敭
+     */
+    @Column(columnDefinition = "鍥哄畾鐮佹涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_BASIC_SEC)
+    private String codeFixedSecOid;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊�
+     */
+    @Column(columnDefinition = "鍥哄畾鐮佹鐨勭爜鍊�")
+    private String id;
+
+    /**
+     * 鍥哄畾鐮佹鐮佸�肩殑鎻忚堪
+     */
+    @Column(columnDefinition = "鍥哄畾鐮佹鐮佸�肩殑鎻忚堪")
+    private String name;
+
+    /**
+     * 灞炴�ф帓搴忓彿
+     */
+    @Column(columnDefinition = "灞炴�ф帓搴忓彿")
+    private Integer orderNum;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeFixedSecOid() {
+        return codeFixedSecOid;
+    }
+
+    public void setCodeFixedSecOid(String codeFixedSecOid) {
+        this.codeFixedSecOid = codeFixedSecOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeFixedValueDO{" +
+                "codeFixedSecOid='" + codeFixedSecOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", orderNum=" + orderNum +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeImprotDataGridVO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeImprotDataGridVO.java
new file mode 100644
index 0000000..c604143
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeImprotDataGridVO.java
@@ -0,0 +1,4 @@
+package com.vci.ubcs.code.model;
+
+public class CodeImprotDataGridVO {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeKeyAttrRepeatRuleDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeKeyAttrRepeatRuleDO.java
new file mode 100644
index 0000000..a731ca2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeKeyAttrRepeatRuleDO.java
@@ -0,0 +1,120 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_KEY_ATTR_REPEAT_RULE,text = "鍏抽敭鏁版嵁鏌ラ噸瑙勫垯",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeKeyAttrRepeatRuleDO extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6696611801656232742L;
+
+    /**
+     * 鏌ラ噸瑙勫垯鑻辨枃缂栧彿
+     */
+    @Column(columnDefinition = "鏌ラ噸瑙勫垯鑻辨枃缂栧彿")
+    private String id;
+
+    /**
+     * 鏌ラ噸瑙勫垯涓枃鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "鏌ラ噸瑙勫垯涓枃鍚嶇О")
+    private String name;
+
+    /**
+     * 鏄惁蹇界暐澶у皬鍐�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐澶у皬鍐�")
+    private String ignoreCaseFlag;
+
+    /**
+     * 鏄惁蹇界暐绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐绌烘牸")
+    private String ignoreSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄩ儴绌烘牸")
+    private String ignoreAllSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄥ崐瑙�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄥ崐瑙�")
+    private String ignoreWidthFlag;
+
+    public String getIgnoreWidthFlag() {
+        return ignoreWidthFlag;
+    }
+
+    public void setIgnoreWidthFlag(String ignoreWidthFlag) {
+        this.ignoreWidthFlag = ignoreWidthFlag;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIgnoreCaseFlag() {
+        return ignoreCaseFlag;
+    }
+
+    public void setIgnoreCaseFlag(String ignoreCaseFlag) {
+        this.ignoreCaseFlag = ignoreCaseFlag;
+    }
+
+    public String getIgnoreSpaceFlag() {
+        return ignoreSpaceFlag;
+    }
+
+    public void setIgnoreSpaceFlag(String ignoreSpaceFlag) {
+        this.ignoreSpaceFlag = ignoreSpaceFlag;
+    }
+
+    public String getIgnoreAllSpaceFlag() {
+        return ignoreAllSpaceFlag;
+    }
+
+    public void setIgnoreAllSpaceFlag(String ignoreAllSpaceFlag) {
+        this.ignoreAllSpaceFlag = ignoreAllSpaceFlag;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeKeyAttrRepeatRuleDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", ignoreCaseFlag='" + ignoreCaseFlag + '\'' +
+                ", ignoreSpaceFlag='" + ignoreSpaceFlag + '\'' +
+                ", ignoreAllSpaceFlag='" + ignoreAllSpaceFlag + '\'' +
+                ", ignoreWidthFlag='" + ignoreWidthFlag + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodePhaseAttrDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodePhaseAttrDO.java
new file mode 100644
index 0000000..7cb8954
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodePhaseAttrDO.java
@@ -0,0 +1,93 @@
+package com.vci.ubcs.code.model;
+
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 闃舵鐨勫睘鎬�
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_PHASE_ATTR,text = "闃舵鐨勫睘鎬�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodePhaseAttrDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1316335276045033657L;
+    /**
+     * 鎵�灞為樁娈电殑淇℃伅
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉块樁娈�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE)
+    private String codePhaseOid;
+
+    /**
+     * 灞炴�х紪鍙�
+     */
+    @Column(columnDefinition = "灞炴�х紪鍙�",nullable = false)
+    private String id;
+
+    /**
+     * 灞炴�у悕绉�
+     */
+    @Column(columnDefinition = "灞炴�у悕绉�")
+    private String name;
+
+    /**
+     * 鎵�灞炲睘鎬у垎缁�
+     */
+    @Column(columnDefinition = "鎵�灞炲睘鎬у垎缁�")
+    private String attributeGroup;
+
+    public String getAttributeGroup() {
+        return attributeGroup;
+    }
+
+    public void setAttributeGroup(String attributeGroup) {
+        this.attributeGroup = attributeGroup;
+    }
+
+    public String getCodePhaseOid() {
+        return codePhaseOid;
+    }
+
+    public void setCodePhaseOid(String codePhaseOid) {
+        this.codePhaseOid = codePhaseOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return "CodePhaseAttrDO{" +
+                "codePhaseOid='" + codePhaseOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", attributeGroup='" + attributeGroup + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeResembleRuleDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeResembleRuleDO.java
new file mode 100644
index 0000000..d61b8ff
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeResembleRuleDO.java
@@ -0,0 +1,137 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯
+ * @author weidy
+ * @date 2022-4-10
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_RESEMBLE_RULE,text = "鐩镐技鏌ヨ瑙勫垯",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeResembleRuleDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 7375719926432663351L;
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯缂栧彿
+     */
+    @Column(columnDefinition = "鐩镐技鏌ヨ瑙勫垯缂栧彿")
+    private String id;
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯缂栧彿
+     */
+    @Column(nullable = false,columnDefinition = "鐩镐技鏌ヨ瑙勫垯缂栧彿")
+    private String name;
+
+    /**
+     * 鏄惁蹇界暐澶у皬鍐�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐澶у皬鍐�")
+    private String ignoreCaseFlag;
+
+    /**
+     * 鏄惁蹇界暐绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐绌烘牸")
+    private String ignoreSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄩ儴绌烘牸")
+    private String ignoreAllSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄥ崐瑙�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄥ崐瑙�")
+    private String ignoreWidthFlag;
+
+    /**
+     * 杩炴帴绗�
+     */
+    @Column(columnDefinition = "杩炴帴绗�",length = 200)
+    private String linkCharacter;
+
+    public String getIgnoreWidthFlag() {
+        return ignoreWidthFlag;
+    }
+
+    public void setIgnoreWidthFlag(String ignoreWidthFlag) {
+        this.ignoreWidthFlag = ignoreWidthFlag;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIgnoreCaseFlag() {
+        return ignoreCaseFlag;
+    }
+
+    public void setIgnoreCaseFlag(String ignoreCaseFlag) {
+        this.ignoreCaseFlag = ignoreCaseFlag;
+    }
+
+    public String getIgnoreSpaceFlag() {
+        return ignoreSpaceFlag;
+    }
+
+    public void setIgnoreSpaceFlag(String ignoreSpaceFlag) {
+        this.ignoreSpaceFlag = ignoreSpaceFlag;
+    }
+
+    public String getIgnoreAllSpaceFlag() {
+        return ignoreAllSpaceFlag;
+    }
+
+    public void setIgnoreAllSpaceFlag(String ignoreAllSpaceFlag) {
+        this.ignoreAllSpaceFlag = ignoreAllSpaceFlag;
+    }
+
+
+    public String getLinkCharacter() {
+        return linkCharacter;
+    }
+
+    public void setLinkCharacter(String linkCharacter) {
+        this.linkCharacter = linkCharacter;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeResembleRuleDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", ignoreCaseFlag='" + ignoreCaseFlag + '\'' +
+                ", ignoreSpaceFlag='" + ignoreSpaceFlag + '\'' +
+                ", ignoreAllSpaceFlag='" + ignoreAllSpaceFlag + '\'' +
+                ", ignoreWidthFlag='" + ignoreWidthFlag + '\'' +
+                ", linkCharacter='" + linkCharacter + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeRuleDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeRuleDO.java
new file mode 100644
index 0000000..2b23e6f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeRuleDO.java
@@ -0,0 +1,79 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmLifeCycleConstant;
+
+/**
+ * 缂栫爜瑙勫垯
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_RULE,text = "涓绘暟鎹紪鐮佽鍒�",lifeCycle = MdmLifeCycleConstant.CODE_RULE_LC,startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING)
+public class CodeRuleDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -7142347409110551299L;
+    /**
+     * 瑙勫垯缂栧彿
+     */
+    @Column(columnDefinition = "瑙勫垯缂栧彿")
+    private String id;
+
+    /**
+     * 瑙勫垯鐨勫悕绉�
+     */
+    @Column(columnDefinition = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 瑙勫垯鐨勬弿杩�
+     */
+    @Column(columnDefinition = "瑙勫垯鐨勬弿杩�")
+    private String description;
+
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeRuleDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSerialValueDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSerialValueDO.java
new file mode 100644
index 0000000..8d114ea
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSerialValueDO.java
@@ -0,0 +1,88 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 缂栫爜瑙勫垯鐨勬祦姘村��
+ * @author weidy
+ * @date 2022-3-1
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_SERIAL_VALUE,text = "娴佹按鐨勫��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeSerialValueDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 4585738864706015777L;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "缂栫爜瑙勫垯涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
+    private String codeRuleOid;
+
+    /***
+     * 娴佹按渚濊禆
+     */
+    @Column(length = 4000,columnDefinition = "娴佹按渚濊禆")
+    private String serialUnit;
+
+    /**
+     * 鐮佹鐨勪富閿�
+     */
+    @Column(columnDefinition = "鐮佹鐨勪富閿�")
+    private String codeSecOid;
+
+    /**
+     * 鏈�澶ф祦姘村彿
+     */
+    @Column(columnDefinition = "鏈�澶ф祦姘村彿")
+    private String maxSerial;
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public String getSerialUnit() {
+        return serialUnit;
+    }
+
+    public void setSerialUnit(String serialUnit) {
+        this.serialUnit = serialUnit;
+    }
+
+    public String getCodeSecOid() {
+        return codeSecOid;
+    }
+
+    public void setCodeSecOid(String codeSecOid) {
+        this.codeSecOid = codeSecOid;
+    }
+
+    public String getMaxSerial() {
+        return maxSerial;
+    }
+
+    public void setMaxSerial(String maxSerial) {
+        this.maxSerial = maxSerial;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeSerialValueDO{" +
+                "codeRuleOid='" + codeRuleOid + '\'' +
+                ", serialUnit='" + serialUnit + '\'' +
+                ", codeSecOid='" + codeSecOid + '\'' +
+                ", maxSerial='" + maxSerial + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSynonymDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSynonymDO.java
new file mode 100644
index 0000000..03468a9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSynonymDO.java
@@ -0,0 +1,121 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鍚屼箟璇�
+ * @author weidy
+ * @date 2022-2-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_SYNONYM,text = "鍚屼箟璇嶉厤缃�",description = "鍚屼箟璇嶉厤缃�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeSynonymDO extends BaseModel {
+
+    /**
+     * 妯℃澘涓婚敭
+     */
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    @Column(nullable = false,columnDefinition = "妯℃澘涓婚敭")
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 妯℃澘鐨勫悕绉�
+     */
+    @Transient(referColumn = "codeClassifyTemplateOid.name")
+    private String codeClassifyTemplateOidName;
+
+
+    /**
+     * 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�ц嫳鏂囧悕绉�")
+    private String id;
+
+    /**
+     * 灞炴�х殑涓枃鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�т腑鏂囧悕绉�")
+    private String name;
+
+    /**
+     * 婧愬��
+     */
+    @Column(nullable = false,length = 200,columnDefinition = "婧愬��")
+    private String sourceValue;
+
+    /**
+     * 鍚屼箟璇�
+     */
+    @Column(nullable = false,length = 200,columnDefinition = "鍚屼箟璇�")
+    private String synonymValue;
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+    public String getCodeClassifyTemplateOidName() {
+        return codeClassifyTemplateOidName;
+    }
+
+    public void setCodeClassifyTemplateOidName(String codeClassifyTemplateOidName) {
+        this.codeClassifyTemplateOidName = codeClassifyTemplateOidName;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSourceValue() {
+        return sourceValue;
+    }
+
+    public void setSourceValue(String sourceValue) {
+        this.sourceValue = sourceValue;
+    }
+
+    public String getSynonymValue() {
+        return synonymValue;
+    }
+
+    public void setSynonymValue(String synonymValue) {
+        this.synonymValue = synonymValue;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeSynonymDO{" +
+                "codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
+                ", codeClassifyTemplateOidName='" + codeClassifyTemplateOidName + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", sourceValue='" + sourceValue + '\'' +
+                ", synonymValue='" + synonymValue + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeTemplatePhaseDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeTemplatePhaseDO.java
new file mode 100644
index 0000000..c8e73e5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeTemplatePhaseDO.java
@@ -0,0 +1,81 @@
+package com.vci.ubcs.code.model;
+
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 妯℃澘闃舵
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_PHASE,text = "妯℃澘闃舵",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeTemplatePhaseDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 3526024656097456437L;
+    /**
+     * 鎵�灞炵紪鐮佹ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炵紪鐮佹ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 闃舵缂栧彿
+     */
+    @Column(columnDefinition = "闃舵缂栧彿")
+    private String id;
+
+    /**
+     * 闃舵鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "闃舵鍚嶇О")
+    private String name;
+
+
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeTemplatePhaseDO{" +
+                "codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingDataDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingDataDO.java
new file mode 100644
index 0000000..76e7313
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingDataDO.java
@@ -0,0 +1,148 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingLogeDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingLogeDO.java
new file mode 100644
index 0000000..fd71e8f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingLogeDO.java
@@ -0,0 +1,228 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataDO.java
new file mode 100644
index 0000000..4e14ee1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataDO.java
@@ -0,0 +1,266 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataInfoDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataInfoDO.java
new file mode 100644
index 0000000..4d90faa
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataInfoDO.java
@@ -0,0 +1,103 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrMappingDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrMappingDO.java
new file mode 100644
index 0000000..c640b05
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrMappingDO.java
@@ -0,0 +1,207 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrRangeDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrRangeDO.java
new file mode 100644
index 0000000..cf35960
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrRangeDO.java
@@ -0,0 +1,95 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingTaskDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingTaskDO.java
new file mode 100644
index 0000000..d082e03
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingTaskDO.java
@@ -0,0 +1,224 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntAuthorityDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntAuthorityDO.java
new file mode 100644
index 0000000..8f905d1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntAuthorityDO.java
@@ -0,0 +1,159 @@
+package com.vci.ubcs.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 com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntBaseDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntBaseDO.java
new file mode 100644
index 0000000..ecfab07
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntBaseDO.java
@@ -0,0 +1,78 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntHeaderDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntHeaderDO.java
new file mode 100644
index 0000000..00b68ad
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntHeaderDO.java
@@ -0,0 +1,90 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntInfoDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntInfoDO.java
new file mode 100644
index 0000000..ec6305b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntInfoDO.java
@@ -0,0 +1,656 @@
+package com.vci.ubcs.code.model;
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntParamDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntParamDO.java
new file mode 100644
index 0000000..834eaad
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntParamDO.java
@@ -0,0 +1,89 @@
+package com.vci.ubcs.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 com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/TaskDuckingDO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/TaskDuckingDO.java
new file mode 100644
index 0000000..cc25b94
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/TaskDuckingDO.java
@@ -0,0 +1,236 @@
+package com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeBasicSecServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeBasicSecServiceI.java
new file mode 100644
index 0000000..56bf538
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeBasicSecServiceI.java
@@ -0,0 +1,182 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeBasicSecDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.ubcs.code.dto.CodeBasicSecDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeBasicSecServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐮佹鍩虹淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeBasicSecVO> gridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO>  codeBasicSecDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasFixedValue 鏄惁鏈夊浐瀹氬��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs, boolean hasFixedValue) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeBasicSecDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSecDO codeBasicSecDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeBasicSecVO addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeBasicSecVO editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
+    * @param oid 涓婚敭
+    * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeBasicSecVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeBasicSecVO> listCodeBasicSecByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 涓婚敭鍒犻櫎鐮佹鍩虹淇℃伅
+     * @param oid 鐮佹鍩虹淇℃伅涓婚敭
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeBasicSecByPrimaryKey(String oid) throws VciBaseException;
+
+    /**
+     * 鍏嬮殕鐮佹淇℃伅
+     * @param oidList 婧愮爜娈典俊鎭富閿泦鍚�
+     * @param pkCodeRule 鐩爣缂栫爜瑙勫垯
+     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    BaseResult cloneCodeBasicSec(List<String> oidList, String pkCodeRule);
+
+    /**
+     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
+     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
+     * @return 鍒嗙被鐮佹鏍戠粨鏋�
+     */
+    List<Tree> gridCodeClassifySecTree(String oid);
+
+    /**
+     * 鏍规嵁鐮佹鍒嗙被鐨勭被鍨嬪垽鏂睘鎬ф槸鍚︽槸绌虹殑
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鏈夌┖鐨勫垯浼爇ey-灞炴�у悕 value-瀛楁鍚箟锛屾病鏈夌┖鐨勫垯浼� key-success value-true
+     */
+    KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO);
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鍐呭
+     * @param ruleOid 瑙勫垯鐨勫唴瀹�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    List<CodeBasicSecVO> listCodeBasicSecByRuleOid(String ruleOid);
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鐨勫唴瀹�
+     * @param ruleCollection 瑙勫垯涓婚敭闆嗗悎
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    List<CodeBasicSecVO> listCodeBasicSecByRuleOids(Collection<String> ruleCollection);
+
+    /**
+     * 鍙傜収鍒嗙被鐨勭爜娈�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鐨勫璞�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    DataGrid<CodeBasicSecVO> refDataGridClassifySec(Map<String, String> conditionMap, PageHelper pageHelper);
+
+    /**
+     * 鏍规嵁缂栫爜瑙勫垯鎵归噺鍒犻櫎鐮佹鍩烘湰淇℃伅
+     * @param codeRuleOid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    BatchCBO batchDeleteSecByCodeRuleOid(String codeRuleOid);
+
+    /**
+     * 涓婄Щ
+     * @param oid 涓婚敭
+     */
+    void upOrderNum(String oid);
+
+    /**
+     * 涓嬬Щ
+     * @param oid 涓婚敭
+     */
+    void downOrderNum(String oid);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeButtonServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeButtonServiceI.java
new file mode 100644
index 0000000..4341567
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeButtonServiceI.java
@@ -0,0 +1,115 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeButtonDO;
+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.ubcs.code.dto.CodeButtonDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeButtonServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeButtonVO> gridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButtonDO>  codeButtonDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeButtonDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeButtonVO codeButtonDO2VO(CodeButtonDO codeButtonDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeButtonVO addSave(CodeButtonDTO codeButtonDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeButtonVO editSave(CodeButtonDTO codeButtonDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeButton(CodeButtonDTO codeButtonDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeButtonVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeButtonVO> refDataGridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鍚敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult enableCodeButton(CodeButtonDTO buttonDTO);
+
+    /**
+     * 鍋滅敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult disableCodeButton(CodeButtonDTO buttonDTO);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyProcessTempServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyProcessTempServiceI.java
new file mode 100644
index 0000000..2ef38e0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyProcessTempServiceI.java
@@ -0,0 +1,124 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeClassifyProcessTempDO;
+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 com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyProcessTempServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTempDO codeClassifyProcessTempDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鍐呭
+     */
+    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) ;
+
+    /**
+     * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 鐢ㄩ��
+     * @return 妯℃澘鐨勪俊鎭�
+     */
+    List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse);
+
+    /**
+     * 浣跨敤妯℃澘鍚嶇О鏌ヨ
+     * @param codeTemplateOid 鍒嗙被妯℃澘涓婚敭
+     * @param processName 妯℃澘鍚嶇О
+     */
+    CodeClassifyProcessTempVO getProcessTempVOByName(String codeTemplateOid,String processName);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyServiceI.java
new file mode 100644
index 0000000..643cb25
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyServiceI.java
@@ -0,0 +1,240 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeClassifyDO;
+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 com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeClassifyDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 涓婚搴撳垎绫绘湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public interface CodeClassifyServiceI {
+    /**
+     * 鏌ヨ涓婚搴撳垎绫� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 涓婚搴撳垎绫� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws VciBaseException;
+
+    /**
+     * 涓婚搴撶殑鏍�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撴樉绀烘爲
+     */
+    List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+     *
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+     */
+    List<CodeClassifyDO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO>  codeClassifyDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyVO codeClassifyDO2VO(CodeClassifyDO codeClassifyDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyVO addSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult editSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+
+    /**
+     * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+     *
+     * @param oid 涓婚敭
+     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    boolean checkChildIsLinked(String oid) throws VciBaseException;
+
+    /**
+     * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+     *
+     * @param oid 涓婚敭
+     * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+     * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    boolean checkHasChild(String oid) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassify(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫绘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫绘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyVO> listCodeClassifyByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 鍙傜収鏍� 涓婚搴撳垎绫�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撳垎绫绘樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid 涓婚敭
+     * @param lcStatus 鐘舵��
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult updateLcStatus( String oid, String lcStatus);
+
+    /**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄
+     */
+    List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鍒嗙被鐩稿叧鐨勬墍鏈変俊鎭�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被涓婄骇锛屼笅绾х殑淇℃伅
+     */
+    CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid);
+
+    /**
+     * 鑾峰彇褰撳墠鍒嗙被鐨勯《灞傚垎绫�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 椤跺眰鍒嗙被鐨勪俊鎭�
+     */
+    CodeClassifyVO getTopClassifyVO(String codeClassifyOid);
+
+    /**
+     * 缁熻瀛愯妭鐐圭殑涓暟
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 涓暟
+     */
+    int countChildrenByClassifyOid(String codeClassifyOid);
+    /**
+     * 鑾峰彇瀛愮骇鐨勪富棰樺簱鍒嗙被
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param allLevel        鏄惁鎵�鏈夌殑灞傜骇
+     * @param fieldInPath 鍦ㄨ矾寰勪腑鐨勫瓧娈�
+     * @param enable 鏄惁鍙樉绀哄惎鐢�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    List<CodeClassifyVO> listChildrenClassify(String codeClassifyOid, boolean allLevel, String fieldInPath, boolean enable);
+
+    /**
+     * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    List<CodeClassifyVO> listParentClassify(String codeClassifyOid);
+
+    /**
+     * 瀵煎嚭鍒嗙被
+     * @param oid 鍒嗙被涓婚敭
+     * @return excel鏂囦欢璺緞
+     */
+    String exportClassify(String oid);
+
+    /**
+     * 鍒涘缓瀵煎叆妯℃澘
+     * @return excel鏂囦欢璺緞
+     */
+    String createImportExcel();
+
+    /**
+     * 瀵煎叆鍒嗙被
+     * @param file1 鏂囦欢鐨勪俊鎭�
+     */
+    void importClassify(File file1);
+
+    /**
+     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢
+     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
+     */
+    DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject);
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    CodeClassifyVO getObjectByIdPath(String idPath);
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     * @param clsfNamePath 鍒嗙被鍚嶇О鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    CodeClassifyVO getObjectByClsfNamePath(String clsfNamePath);
+
+    /***
+     * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
+     * @param classifyId
+     * @param enable
+     * @return
+     */
+    public List<CodeClassifyVO> getIdPathToNamePathByParentId(String classifyId,boolean enable);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTempMapItemServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTempMapItemServiceI.java
new file mode 100644
index 0000000..412a5e3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTempMapItemServiceI.java
@@ -0,0 +1,101 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeClassifyTempMapItemDO;
+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.ubcs.code.dto.CodeClassifyTempMapItemDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTempMapItemVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public interface CodeClassifyTempMapItemServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTempMapItemDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTempMapItemDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTempMapItemVO codeClassifyTempMapItemDO2VO(CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTempMapItemVO addSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTempMapItemVO editSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTempMapItem(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+    * @param oid 涓婚敭
+    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTempMapItemVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateAttrServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateAttrServiceI.java
new file mode 100644
index 0000000..ab3566c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateAttrServiceI.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeClassifyTemplateAttrDO;
+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 com.vci.ubcs.code.dto.CodeClassifyTemplateAttrDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateAttrServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttrDO>  codeClassifyTemplateAttrDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateAttrVO addSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+    List<CodeClassifyTemplateAttrVO> batchAddSave(List<CodeClassifyTemplateAttrDTO> codeClassifyTemplateAttrDTOs) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult editSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTemplateAttr(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTemplateAttrVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject);
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject);
+
+    /**
+     * 鍚屾鍒板叾浠栨ā鏉�
+     * @param codeClassifyTemplateAttrDTO oid
+     * @return
+     */
+    BaseResult copyto(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
+     * @param templateOidCollection 妯℃澘鐨勪富閿�
+     * @return 灞炴�х殑淇℃伅
+     */
+    List<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection);
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateButtonServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateButtonServiceI.java
new file mode 100644
index 0000000..89cb39a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateButtonServiceI.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeClassifyTemplateButtonDO;
+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 com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateButtonServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO>  codeClassifyTemplateButtonDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateButtonVO addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateButtonVO editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid);
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid);
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勬樉绀轰俊鎭�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid,boolean hasButtonVO);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateMapServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateMapServiceI.java
new file mode 100644
index 0000000..ebf50b1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateMapServiceI.java
@@ -0,0 +1,100 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeClassifyTemplateMapDO;
+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.ubcs.code.dto.CodeClassifyTemplateMapDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateMapVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateMapServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateMapDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateMapDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateMapVO codeClassifyTemplateMapDO2VO(CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateMapVO addSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateMapVO editSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTemplateMap(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTemplateMapVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateServiceI.java
new file mode 100644
index 0000000..15ecf35
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateServiceI.java
@@ -0,0 +1,199 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.ubcs.code.model.CodeClassifyTemplateDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateServiceI {
+    /**
+     * 鏌ヨ鍒嗙被妯℃澘瀵硅薄 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject) throws VciBaseException;
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    List<CodeClassifyTemplateDO> selectCodeClassifyTemplateDOByTree(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO> codeClassifyTemplateDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasAttr 鏄惁鍖呭惈灞炴��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO> codeClassifyTemplateDOs, boolean hasAttr) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateVO codeClassifyTemplateDO2VO(CodeClassifyTemplateDO codeClassifyTemplateDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult<CodeClassifyTemplateVO> addSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult editSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult checkIsCanDelete(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+     *
+     * @param oid 涓婚敭
+     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+     boolean checkChildIsLinked(String oid) throws VciBaseException;
+
+    /**
+      * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+      *
+      * @param oid 涓婚敭
+      * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+      * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    boolean checkHasChild(String oid) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTemplate(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
+    * @param oid 涓婚敭
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTemplateVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄(鍖呭惈灞炴�э級
+     * @param oid 涓婚敭
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateVO getObjectHasAttrByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
+
+    /**
+     * 鍒嗙被妯℃澘鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid
+     * @param lcStatus
+     * @return
+     */
+    BaseResult updateLcStatus( String oid, String lcStatus);
+
+    /**
+     * 鍗囩増
+     */
+    BaseResult Upgrade(CodeClassifyTemplateDTO codeClassifyDTO);
+
+    /**
+     * 妯℃澘鍏嬮殕
+     */
+    BaseResult copyTemplate(CodeClassifyTemplateDTO codeClassifyDTO);
+
+    /**
+     * 浣跨敤涓婚搴撶殑鍒嗙被涓婚敭锛岃幏鍙栫敓鏁堢殑妯℃澘
+     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
+     * @param hasAttribute 鏄惁鍖呭惈灞炴��
+     * @return 妯℃澘鐨勪俊鎭�
+     */
+    List<CodeClassifyTemplateVO> listReleaseTemplateByClassifyOid(String codeClassifyOid,boolean hasAttribute);
+
+    /**
+     * 鐢ㄦā鏉跨殑鐗堟湰鏉ユ帓搴�
+     * @param templateVOList 妯℃澘鐨勬樉绀哄璞�
+     * @return 鎺掑簭鍚庣殑鍒楄〃
+     */
+    List<CodeClassifyTemplateVO> sortTemplateByRevision(List<CodeClassifyTemplateVO> templateVOList);
+
+    /**
+     * 鏍¢獙瀛愬垎绫绘槸鍚︾浉鍚岀殑妯℃澘
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return true琛ㄧず鐩稿悓
+     */
+    boolean checkChildHasSameTemplate(String codeClassifyOid);
+    /**
+     * 鑾峰彇鎵�鏈夊瓙鍒嗙被妯℃澘
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return true琛ㄧず鐩稿悓
+     */
+    List<CodeClassifyTemplateVO> childTemplates(String codeClassifyOid);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyValueServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyValueServiceI.java
new file mode 100644
index 0000000..126c9cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyValueServiceI.java
@@ -0,0 +1,152 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeClassifyValueDO;
+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 com.vci.ubcs.code.dto.CodeClassifyValueDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyValueServiceI {
+    /**
+     * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException;
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    List<CodeClassifyValueDO> selectCodeClassifyValueDOByTree(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyValueVO> codeClassifyValueDO2VOs(Collection<CodeClassifyValueDO>  codeClassifyValueDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyValueVO codeClassifyValueDO2VO(CodeClassifyValueDO codeClassifyValueDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyValueVO addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyValueVO editSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult checkIsCanDelete(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+     *
+     * @param oid 涓婚敭
+     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+     boolean checkChildIsLinked(String oid) throws VciBaseException;
+
+    /**
+      * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+      *
+      * @param oid 涓婚敭
+      * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+      * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    boolean checkHasChild(String oid) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyValue(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyValueVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyValueVO> listCodeClassifyValueByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
+     * @param classifySecOid 鐮佹鐨勪富閿�
+     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐮佸�肩殑鍐呭
+     */
+    List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid);
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult batchDeleteBySecOid(String codeclassifysecoid);
+
+    /**
+     * 鎵归噺娣诲姞鍒嗙被鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍒嗙被鐮佹鐨勭爜鍊煎垪琛�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult batchSave4Order(List<CodeClassifyValueDTO> dtoList, String codeclassifysecoid);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingServiceI.java
new file mode 100644
index 0000000..1a96edf
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingServiceI.java
@@ -0,0 +1,92 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.DockingDataDO;
+import com.vci.ubcs.code.model.DockingLogeDO;
+import com.vci.ubcs.code.model.DockingTaskDO;
+import com.vci.ubcs.code.model.SysIntHeaderDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Map;
+
+/**
+ * 涓�銆侀厤缃垎绫汇�佺郴缁熴�佹帴鍙f暟鎹�
+ * 1銆侀厤缃郴缁烻ysIntBaseDO
+ * 2銆侀厤缃郴缁熴�佹帴鍙c�佸垎绫籗ysIntInfoDO
+ *
+ * 浜屻�佸鐞嗛鐢宠鏁版嵁
+ * 1銆佹帴鏀秞mlData
+ * 2銆佸伐鑹虹郴缁熺壒娈婂鐞嗭紝鏍规嵁unique鏌ヨ缂栫爜锛屾湁宸茬粡鍙戝竷鐨勬暟鎹紝鐩存帴杩斿洖缂栫爜銆傛病鏈夋煡璇㈠埌宸茬粡鍙戝竷鐨勭紪鐮侊紙缂栬緫涓�佹彁浜や腑銆佸鏍镐腑銆佸仠鐢ㄧ瓑锛夊拰涓�鑸郴缁熶竴鏍锋寜鐓х3姝ュ鐞�
+ * 3銆佽В鏋恱mlData閲屾瘡涓�涓猟ata鑺傜偣锛屽瓨鍌ㄥ叆DockingPreApplyDataDO锛宒ata鑺傜偣涓媝ros鑺傜偣瀛樺偍鍏ockingPreApplyDataInfoDO
+ * 4銆佽繑鍥瀤mlData锛岄噷杈规爣璇嗕簡姣忎竴涓猟ata鐨勫鐞嗙粨鏋�
+ *
+ * 涓夈�佹牴鎹鐢宠鏁版嵁锛屾彃鍏ヤ富鏁版嵁
+ * 1銆佸叧鑱斿垎绫�
+ * 2銆佹煡璇㈠嚭DockingPreApplyDataInfoDO瀛樺偍鐨勬暟鎹紝鎸夌収鏁版嵁鏄犲皠xml锛岃浆鎹负鎴戜滑鐨刱ey锛岃繑缁欏墠绔嚜鍔ㄥ~鍏呭埌鏂板鏁版嵁鐨勯〉闈�
+ * 3銆佽皟鐢ㄩ�氱敤鐨勬暟鎹柊澧炴帴鍙d繚瀛樻暟鎹紝杩欎竴姝ュ拰涓绘暟鎹鐞嗘ā鍧楀姛鑳戒竴鏍�
+ *
+ * 鍥涖�佹帹閫佹暟鎹�
+ * 1銆佸垎绫绘暟鎹拰涓绘暟鎹湁鍙樺寲鐨勬椂鍊欙紝鏁版嵁搴撹Е鍙戝櫒(TIG_CODEALLCODE_FORDOCKINGDATA,TIG_codeclsify_FORDOCKINGDATA)鑷姩鎻掑叆dockingdata
+ * 2銆丏ockingScheduling鎵ц鏃讹紝鏌ヨdockingdatasendflag=false鐨勬暟鎹紝缁撳悎鏌ヨsysintinfo鏁版嵁锛屾煡璇ockingtask
+ * 3銆乨ockingtask涓彇鍑烘潵鏁版嵁锛屾牴鎹産tmname鍜屾暟鎹畂id鏌ヨ鍑烘潵瑕佹帹閫佺殑鏁版嵁锛屾煡璇ysIntInfoDO锛屾牴鎹竴銆�2銆佷腑閰嶇疆鐨勪俊鎭紝鎵ц鎺ㄩ��
+ *
+ * @author wangyi
+ * @date 2022-03-20
+ */
+public interface CodeDuckingServiceI {
+
+    /**
+     * 浜屻��1銆�2銆�3銆�4銆�
+     * 澶勭悊棰勭敵璇锋暟鎹�
+     * @param xmlDatas
+     * @return 鎺ユ敹鐨剎mlDate
+     */
+    String applicateCode(String xmlDatas);
+
+    /**
+     * 鍥涖��2銆�
+     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
+     */
+    void insertCache2();
+
+    /**
+     * 鍥涖��1銆�2銆�3銆�
+     */
+    void sendData3();
+
+    /**
+     * 瀹氭椂浠诲姟璋冪敤
+     */
+    void DockingScheduing();
+
+    /**
+     * 鏁版嵁鍒犻櫎鐨勬椂鍊欙紝缂撳瓨鍒皉edis
+     * @param oid
+     */
+    void cacheDeleteData(String oid,Object obj);
+
+    /**
+     * 鏌ヨdata鍒楄〃
+     */
+    DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鏌ヨtask鍒楄〃
+     */
+    DataGrid<DockingTaskDO> gridTask(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ヨ闆嗘垚log鍒楄〃
+     */
+    DataGrid<DockingLogeDO> gridLoge(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ヨ闆嗘垚鎺ュ彛param鍒楄〃
+     */
+    DataGrid<SysIntHeaderDO> gridHeader(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingSyncServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingSyncServiceI.java
new file mode 100644
index 0000000..2d5e4a9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingSyncServiceI.java
@@ -0,0 +1,48 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.starter.web.pagemodel.BaseResult;
+
+/**
+ * 涓�銆侀厤缃垎绫汇�佺郴缁熴�佹帴鍙f暟鎹�
+ * 1銆侀厤缃郴缁烻ysIntBaseDO
+ * 2銆侀厤缃郴缁熴�佹帴鍙c�佸垎绫籗ysIntInfoDO
+ *
+ * 浜屻�佸鐞嗛鐢宠鏁版嵁
+ * 1銆佹帴鏀秞mlData
+ * 2銆佸伐鑹虹郴缁熺壒娈婂鐞嗭紝鏍规嵁unique鏌ヨ缂栫爜锛屾湁宸茬粡鍙戝竷鐨勬暟鎹紝鐩存帴杩斿洖缂栫爜銆傛病鏈夋煡璇㈠埌宸茬粡鍙戝竷鐨勭紪鐮侊紙缂栬緫涓�佹彁浜や腑銆佸鏍镐腑銆佸仠鐢ㄧ瓑锛夊拰涓�鑸郴缁熶竴鏍锋寜鐓х3姝ュ鐞�
+ * 3銆佽В鏋恱mlData閲屾瘡涓�涓猟ata鑺傜偣锛屽瓨鍌ㄥ叆DockingPreApplyDataDO锛宒ata鑺傜偣涓媝ros鑺傜偣瀛樺偍鍏ockingPreApplyDataInfoDO
+ * 4銆佽繑鍥瀤mlData锛岄噷杈规爣璇嗕簡姣忎竴涓猟ata鐨勫鐞嗙粨鏋�
+ *
+ * 涓夈�佹牴鎹鐢宠鏁版嵁锛屾彃鍏ヤ富鏁版嵁
+ * 1銆佸叧鑱斿垎绫�
+ * 2銆佹煡璇㈠嚭DockingPreApplyDataInfoDO瀛樺偍鐨勬暟鎹紝鎸夌収鏁版嵁鏄犲皠xml锛岃浆鎹负鎴戜滑鐨刱ey锛岃繑缁欏墠绔嚜鍔ㄥ~鍏呭埌鏂板鏁版嵁鐨勯〉闈�
+ * 3銆佽皟鐢ㄩ�氱敤鐨勬暟鎹柊澧炴帴鍙d繚瀛樻暟鎹紝杩欎竴姝ュ拰涓绘暟鎹鐞嗘ā鍧楀姛鑳戒竴鏍�
+ *
+ * 鍥涖�佹帹閫佹暟鎹�
+ * 1銆佸垎绫绘暟鎹拰涓绘暟鎹湁鍙樺寲鐨勬椂鍊欙紝鏁版嵁搴撹Е鍙戝櫒(TIG_CODEALLCODE_FORDOCKINGDATA,TIG_codeclsify_FORDOCKINGDATA)鑷姩鎻掑叆dockingdata
+ * 2銆丏ockingScheduling鎵ц鏃讹紝鏌ヨdockingdatasendflag=false鐨勬暟鎹紝缁撳悎鏌ヨsysintinfo鏁版嵁锛屾煡璇ockingtask
+ * 3銆乨ockingtask涓彇鍑烘潵鏁版嵁锛屾牴鎹産tmname鍜屾暟鎹畂id鏌ヨ鍑烘潵瑕佹帹閫佺殑鏁版嵁锛屾煡璇ysIntInfoDO锛屾牴鎹竴銆�2銆佷腑閰嶇疆鐨勪俊鎭紝鎵ц鎺ㄩ��
+ *
+ * @author wangyi
+ * @date 2022-03-20
+ */
+public interface CodeDuckingSyncServiceI {
+
+    /**
+     * 鏁版嵁瀹氭椂浠诲姟璋冪敤
+     */
+    void DockingDataSyncScheduing();
+
+    /**
+     * 鏁版嵁瀹氭椂浠诲姟璋冪敤
+     */
+    void DockingClassSyncScheduing();
+
+    /**
+     * 鎺ㄩ�佹湭瀹屾垚鐨勯泦鎴愭暟鎹�
+     * @return
+     */
+    BaseResult sendData(String oids);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeFixedValueServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeFixedValueServiceI.java
new file mode 100644
index 0000000..e0474db
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeFixedValueServiceI.java
@@ -0,0 +1,124 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeFixedValueDO;
+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.ubcs.code.dto.CodeFixedValueDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeFixedValueServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeFixedValueVO> gridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeFixedValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeFixedValueVO> codeFixedValueDO2VOs(Collection<CodeFixedValueDO>  codeFixedValueDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeFixedValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeFixedValueVO codeFixedValueDO2VO(CodeFixedValueDO codeFixedValueDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeFixedValueVO addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeFixedValueVO editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeFixedValue(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeFixedValueVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeFixedValueVO> listCodeFixedValueByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
+     * @param secOidCollection 鐮佹鐨勪富閿�
+     * @return 鐮佸�兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭鐜颁簡閿欒浼氭姏鍑哄紓甯�
+     */
+    Map<String,List<CodeFixedValueVO>> listCodeFixedValueBySecOids(Collection<String> secOidCollection) throws VciBaseException;
+
+    /**
+     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid);
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult<CodeFixedValueVO> batchDeleteBySecOid(String codefixedsecoid);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeKeyAttrRepeatRuleServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeKeyAttrRepeatRuleServiceI.java
new file mode 100644
index 0000000..4bfe145
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeKeyAttrRepeatRuleServiceI.java
@@ -0,0 +1,115 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeKeyAttrRepeatRuleDO;
+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.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeKeyAttrRepeatRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeKeyAttrRepeatRuleServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeKeyAttrRepeatRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeKeyAttrRepeatRuleVO> codeKeyAttrRepeatRuleDO2VOs(Collection<CodeKeyAttrRepeatRuleDO>  codeKeyAttrRepeatRuleDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeKeyAttrRepeatRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleDO2VO(CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeKeyAttrRepeatRuleVO addSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeKeyAttrRepeatRuleVO editSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeKeyAttrRepeatRule(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeKeyAttrRepeatRuleVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 缂栧彿鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param idCollections 缂栧彿闆嗗悎
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     */
+    Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByIds(List<String> idCollections);
+
+    /**
+     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭潵鑾峰彇鍏抽敭灞炴�у垽鏂鍒欑殑鍐呭
+     * @param classifyFullInfo 涓婚搴撳垎绫荤殑鍏ㄩ儴淇℃伅
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    CodeKeyAttrRepeatRuleVO getRuleByClassifyFullInfo(CodeClassifyFullInfoBO classifyFullInfo);
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodePhaseAttrServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodePhaseAttrServiceI.java
new file mode 100644
index 0000000..a73a44a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodePhaseAttrServiceI.java
@@ -0,0 +1,107 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodePhaseAttrDO;
+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.ubcs.code.dto.CodePhaseAttrDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 闃舵鐨勫睘鎬ф湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodePhaseAttrServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑闃舵鐨勫睘鎬�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codePhaseAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO> codePhaseAttrDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codePhaseAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodePhaseAttrVO codePhaseAttrDO2VO(CodePhaseAttrDO codePhaseAttrDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodePhaseAttrVO addSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
+
+    /**
+     * 淇敼闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodePhaseAttrVO editSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodePhaseAttr(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
+    * @param oid 涓婚敭
+    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodePhaseAttrVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodePhaseAttrVO> listCodePhaseAttrByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鍜岄樁娈电紪鍙疯幏鍙栧寘鍚殑灞炴��
+     * @param templateOid 妯℃澘鐨勭紪鍙�
+     * @param phaseId 闃舵鐨勭紪鍙�
+     * @return 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    List<String> listAttrByTemplateOidAndPhaseId(String templateOid, String phaseId);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeResembleRuleServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeResembleRuleServiceI.java
new file mode 100644
index 0000000..bb24062
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeResembleRuleServiceI.java
@@ -0,0 +1,100 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.ubcs.code.model.CodeResembleRuleDO;
+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.ubcs.code.dto.CodeResembleRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public interface CodeResembleRuleServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐩镐技鏌ヨ瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeResembleRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO> codeResembleRuleDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRuleDO codeResembleRuleDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeResembleRuleVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeRuleServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeRuleServiceI.java
new file mode 100644
index 0000000..7d3cc14
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeRuleServiceI.java
@@ -0,0 +1,175 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeRuleDO;
+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.ubcs.code.dto.CodeRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeRuleServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹紪鐮佽鍒�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeRuleVO> gridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO>  codeRuleDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasSec 鏄惁鍖呭惈鐮佹
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs, boolean hasSec) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeRuleVO addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeRuleVO editSave(CodeRuleDTO codeRuleDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException;
+
+    /**
+     * 鏍¢獙缂栫爜瑙勫垯鐨勭姸鎬佹槸鍚﹀彲浠ョ紪杈戞垨鍒犻櫎
+     * @param lcStatus 缂栫爜瑙勫垯
+     * @return true琛ㄧず鍙互缂栬緫鎴栧垹闄わ紝false琛ㄧず涓嶅彲浠�
+     */
+    boolean checkEditDelStatus(String lcStatus);
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeRuleVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @param hasSec 鏄惁鍖呭惈鐮佹
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections,boolean hasSec) throws VciBaseException;
+
+    /**
+     * 浣跨敤缂栧彿鐨勯泦鍚堣幏鍙栬鍒欑殑鍐呭
+     * @param idCollection 缂栧彿鐨勯泦鍚�
+     * @return 瑙勫垯鐨勫唴瀹�
+     */
+    List<CodeRuleVO> listCodeRuleByIds(Collection<String> idCollection);
+
+    /**
+     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeRuleVO> refDataGridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 涓婚搴撳垎绫讳娇鐢ㄥ埌璇ョ紪鐮佽鍒欑殑鎵�鏈夐泦鍚�
+     */
+    Collection<CodeClassifyVO> listUseRangeInCodeClassify(String oid);
+
+    /**
+     * 妫�楠岀紪鐮佽鍒欐槸鍚﹀凡缁忚浣跨敤
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return true琛ㄧず宸茬粡浣跨敤锛宖alse琛ㄧず鏈浣跨敤
+     */
+    boolean isAlreadyInUse(String oid);
+
+    /**
+     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @param update enable:鍚敤 disable:鍋滅敤 release:鍙戝竷
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult updateStatus(String oid, String update);
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    BaseResult cloneCodeRule(CodeRuleDTO codeRuleDTO);
+
+    /**
+     * 浣跨敤涓婚敭鑾峰彇缂栫爜瑙勫垯鐨勫唴瀹�
+     * @param oid 涓婚敭
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    CodeRuleVO getObjectHasSecByOid(String oid);
+
+    /**
+     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult clearAllCode(String oid);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSerialAlgorithmServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSerialAlgorithmServiceI.java
new file mode 100644
index 0000000..2191718
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSerialAlgorithmServiceI.java
@@ -0,0 +1,18 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
+
+/**
+ * 娴佹按绠楁硶绫�
+ * @author weidy
+ * @date 2022-2-17
+ */
+public interface CodeSerialAlgorithmServiceI {
+
+    /**
+     * 鑾峰彇娴佹按绠楁硶鐨勫垪琛�
+     * @return 娴佹按绠楁硶鐨勪俊鎭�
+     */
+    DataGrid<CodeSerialAlgorithmVO> gridSerialAlgorithm();
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSynonymServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSynonymServiceI.java
new file mode 100644
index 0000000..3695252
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSynonymServiceI.java
@@ -0,0 +1,101 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.CodeSynonymDO;
+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.ubcs.code.dto.CodeSynonymDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeSynonymVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍚屼箟璇嶉厤缃湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public interface CodeSynonymServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍚屼箟璇嶉厤缃�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeSynonymDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO>  codeSynonymDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeSynonymDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeSynonymVO codeSynonymDO2VO(CodeSynonymDO codeSynonymDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeSynonymVO addSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeSynonymVO editSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeSynonym(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
+    * @param oid 涓婚敭
+    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeSynonymVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeSynonymVO> listCodeSynonymByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeSynonymVO> refDataGridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeTemplatePhaseServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeTemplatePhaseServiceI.java
new file mode 100644
index 0000000..1f78233
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeTemplatePhaseServiceI.java
@@ -0,0 +1,137 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.ubcs.code.model.CodeClassifyTemplateAttrDO;
+import com.vci.ubcs.code.model.CodeTemplatePhaseDO;
+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 com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妯℃澘闃舵鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeTemplatePhaseServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO> codeTemplatePhaseDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhaseDO codeTemplatePhaseDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+    /**
+     * 淇敼妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+    /**
+     * 妯℃澘淇敼瑙﹀彂鍔熻兘
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateAttrModifyTrigger(List<CodeClassifyTemplateAttrDO> attrDOList);
+
+    /**
+     * 妯℃澘灞炴�у垹闄ょ殑鏃跺�欒Е鍙�
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateAttrDeleteTrigger(List<CodeClassifyTemplateAttrDO> attrDOList);
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid);
+
+    /**
+    * 涓婚敭鑾峰彇妯℃澘闃舵
+    * @param oid 涓婚敭
+    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 鍙傜収妯℃澘闃舵鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 闃舵涓嶅寘鍚殑灞炴��
+     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+     * @param pageHelper 鍒嗛〉瀵硅薄
+     * @return 灞炴�х殑淇℃伅
+     */
+    DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper);
+
+    /**
+     * 闃舵鍖呭惈鐨勫睘鎬�
+     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+     * @param pageHelper 鍒嗛〉瀵硅薄
+     * @return 灞炴�х殑淇℃伅
+     */
+    DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper);
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataInfoServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataInfoServiceI.java
new file mode 100644
index 0000000..e25310c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataInfoServiceI.java
@@ -0,0 +1,100 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.ubcs.code.model.DockingPreApplyDataInfoDO;
+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.ubcs.code.dto.DockingPreApplyDataInfoDTO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataServiceI.java
new file mode 100644
index 0000000..29261f9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataServiceI.java
@@ -0,0 +1,152 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.DockingPreApplyDataDO;
+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.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.DockingPreApplyDataDTO;
+import com.vci.ubcs.code.dto.DockingPreApplyDataInfoDTO;
+import com.vci.ubcs.code.dto.PreApplyCodeOrderDTO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreAttrMappingSeviceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreAttrMappingSeviceI.java
new file mode 100644
index 0000000..e642b89
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreAttrMappingSeviceI.java
@@ -0,0 +1,48 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.code.dto.DockingPreAttrMappingDTO;
+import com.vci.ubcs.code.vo.pagemodel.DockingPreAttrMappingVO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineServiceI.java
new file mode 100644
index 0000000..8f6fa21
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineServiceI.java
@@ -0,0 +1,362 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.starter.web.pagemodel.*;
+import com.vci.ubcs.code.vo.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 com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
+import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOServiceI.java
new file mode 100644
index 0000000..4c5f349
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOServiceI.java
@@ -0,0 +1,128 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.code.vo.universalInter.attrmap.DataObjectVO;
+import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultDataObjectDetailDO;
+import com.vci.starter.poi.bo.SheetDataSet;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.code.dto.CodeExportAttrDTO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import org.springblade.code.vo.pagemodel.*;
+
+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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeServiceI.java
new file mode 100644
index 0000000..e8eac6b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeServiceI.java
@@ -0,0 +1,38 @@
+package com.vci.ubcs.code.service;
+
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeOrderSecDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntAuthorityServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntAuthorityServiceI.java
new file mode 100644
index 0000000..a742647
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntAuthorityServiceI.java
@@ -0,0 +1,101 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.SysIntAuthorityDO;
+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.ubcs.code.dto.SysIntAuthorityDTO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntBaseServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntBaseServiceI.java
new file mode 100644
index 0000000..fae18b0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntBaseServiceI.java
@@ -0,0 +1,101 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.SysIntBaseDO;
+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.ubcs.code.dto.SysIntBaseDTO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntInfoServiceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntInfoServiceI.java
new file mode 100644
index 0000000..6c35a8b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntInfoServiceI.java
@@ -0,0 +1,159 @@
+package com.vci.ubcs.code.service;
+
+
+import com.vci.ubcs.code.model.SysIntHeaderDO;
+import com.vci.ubcs.code.model.SysIntInfoDO;
+import com.vci.ubcs.code.model.SysIntParamDO;
+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.ubcs.code.dto.SysIntInfoDTO;
+import com.vci.ubcs.code.dto.UpdateSysInfoStatusDTO;
+import com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java
new file mode 100644
index 0000000..18dedfd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java
@@ -0,0 +1,47 @@
+package com.vci.ubcs.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
new file mode 100644
index 0000000..0b47f4a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -0,0 +1,836 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.CodeBasicSecDaoI;
+import com.vci.ubcs.code.dao.CodeClassifyValueDaoI;
+import com.vci.ubcs.code.dao.CodeFixedValueDaoI;
+import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
+import com.vci.ubcs.code.lifecycle.CodeRuleLC;
+import com.vci.ubcs.code.model.CodeBasicSecDO;
+import com.vci.ubcs.code.model.CodeClassifyValueDO;
+import com.vci.ubcs.code.model.CodeFixedValueDO;
+import com.vci.ubcs.code.service.CodeBasicSecServiceI;
+import com.vci.ubcs.code.service.CodeClassifyValueServiceI;
+import com.vci.ubcs.code.service.CodeFixedValueServiceI;
+import com.vci.ubcs.code.service.CodeRuleServiceI;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.enumpck.OsCodeFillTypeEnum;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.UIFormReferVO;
+import com.vci.web.service.BdSelectInputCharServiceI;
+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 com.vci.ubcs.code.dto.CodeBasicSecDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏈嶅姟
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeBasicSecServiceImpl implements CodeBasicSecServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeBasicSecDaoI codeBasicSecMapper;
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+	@Lazy
+private WebBoServiceI boService;
+
+    /**
+     * 瀵硅薄鐨勬搷浣�
+     */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 涓绘暟鎹紪鐮佽鍒欐湇鍔�
+     */
+    @Autowired
+    private CodeRuleServiceI codeRuleService;
+
+    /**
+     * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔�
+     */
+    @Autowired
+    private CodeClassifyValueServiceI codeClassifyValueService;
+
+    /**
+     * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+     */
+    @Autowired
+    private CodeClassifyValueDaoI codeClassifyValueMapper;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊肩殑鏈嶅姟
+     */
+    @Autowired
+    private CodeFixedValueServiceI fixedValueService;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+     */
+    @Autowired
+    private CodeFixedValueDaoI fixedValueMapper;
+    /**
+     * 涓婂眰鍒嗙被鐮佹鐨勫睘鎬у悕绉�
+     */
+    private static  final String PARENT_FIELD_NAME = "parentclassifysecoid";
+
+    /**
+     * 涓婄骇鍒嗙被鐮佸�肩殑灞炴�у悕绉�
+     */
+    private static final String PARENT_CLASSIFY_VALUE_FIELD_NAME = "parentClassifyValueOid";
+
+    /**
+     * 鍙�夊彲杈撴湇鍔�
+     */
+    @Autowired
+    private BdSelectInputCharServiceI charService;
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐮佹鍩虹淇℃伅
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeBasicSecVO> gridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultAsc("ordernum");
+        if(!conditionMap.containsKey("pkCodeRule") || StringUtils.isBlank(conditionMap.get("pkCodeRule"))){
+            return new DataGrid<>();
+        }
+        List<CodeBasicSecDO> doList = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
+        DataGrid<CodeBasicSecVO> dataGrid = new DataGrid<CodeBasicSecVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeBasicSecDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeBasicSecMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs) throws VciBaseException {
+        List<CodeBasicSecVO> voList = new ArrayList<CodeBasicSecVO>();
+        if (!CollectionUtils.isEmpty(codeBasicSecDOs)) {
+            for (CodeBasicSecDO s : codeBasicSecDOs) {
+                CodeBasicSecVO vo = codeBasicSecDO2VO(s);
+                if (vo != null) {
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasFixedValue 鏄惁鏈夊浐瀹氬��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs, boolean hasFixedValue) throws VciBaseException {
+        List<CodeBasicSecVO> voList = new ArrayList<CodeBasicSecVO>();
+        if (!CollectionUtils.isEmpty(codeBasicSecDOs)) {
+            for (CodeBasicSecDO s : codeBasicSecDOs) {
+                CodeBasicSecVO vo = codeBasicSecDO2VO(s);
+                if (vo != null) {
+                    voList.add(vo);
+                }
+            }
+        }
+        if(hasFixedValue && !CollectionUtils.isEmpty(voList)){
+            List<CodeBasicSecVO> fixedSecVOList = voList.stream().filter(s -> CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equalsIgnoreCase(s.getSectype())).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(fixedSecVOList)){
+                //鏌ヨ鍥哄畾鐮佺殑鐮佸��
+                Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(fixedSecVOList.stream().map(CodeBasicSecVO::getOid).collect(Collectors.toList()));
+                voList.stream().forEach(vo->{
+                    vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null));
+                });
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSecDO codeBasicSecDO) throws VciBaseException {
+        CodeBasicSecVO vo = new CodeBasicSecVO();
+        if (codeBasicSecDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            if (true) {
+                //vo.setLcStatusText({lcStatusFullClassName}.getTextByValue(vo.getLcStatus()));
+            }
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鐮佹鍩虹淇℃伅
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeBasicSecDTO.getPkCodeRule(),"缂栫爜瑙勫垯鐨勪富閿�");
+        CodeRuleVO ruleVO = codeRuleService.getObjectByOid(codeBasicSecDTO.getPkCodeRule());
+        if(!CodeRuleLC.EDITING.getValue().equalsIgnoreCase(ruleVO.getLcStatus())){
+            throw new VciBaseException("缂栫爜瑙勫垯鐨勭姸鎬佷笉鏄��" + CodeRuleLC.EDITING.getText() + "銆戯紒涓嶅厑璁镐慨鏀�");
+        }
+        KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
+        if (! "success".equals(attrKv.getKey())){
+            throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
+        }
+
+
+
+        //灏咲TO杞崲涓篋O
+        CodeBasicSecDO codeBasicSecDO = new CodeBasicSecDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
+        //鎺掑簭鍙凤紝榛樿绛変簬褰撳墠宸叉湁鐨勬暟閲忓姞1
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule",ruleVO.getOid());
+        Long total = codeBasicSecMapper.countByCondition(conditionMap);
+        if(total == null){
+            total = 0L;
+        }
+        codeBasicSecDO.setOrderNum(total.intValue() + 1);
+
+        //琛ヤ綅鐨勬椂鍊欙紝瑕佹帶鍒惰ˉ浣嶅瓧绗�
+        if((OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType())
+         || OsCodeFillTypeEnum.RIGHT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType()))
+                && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
+            throw new VciBaseException("褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖");
+        }
+        //寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
+        if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
+            if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
+                throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐� 鍙傜収閰嶇疆 鐨勫唴瀹�");
+            }
+            try{
+                JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
+            }catch (Throwable e){
+                throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝鍙傜収閰嶇疆鐨勫唴瀹圭殑鏍煎紡涓嶆纭�,",new String[0],e);
+            }
+        }
+        codeBasicSecMapper.insert(codeBasicSecDO);
+        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+        if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
+            charService.save(MdmBtmTypeConstant.CODE_BASIC_SEC,"codefileseparator",codeBasicSecDO.getCodeFillSeparator(),sessionInfo);
+        }
+        return codeBasicSecDO2VO(codeBasicSecDO);
+    }
+
+    /**
+     * 淇敼鐮佹鍩虹淇℃伅
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
+        if (! "success".equals(attrKv.getKey())){
+            throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
+        }
+        //灏咲TO杞崲涓篋O
+        CodeBasicSecDO codeBasicSecDO = selectByOid(codeBasicSecDTO.getOid());
+        boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
+        if (!status){
+            //杩斿洖閿欒淇℃伅
+            throw new VciBaseException("缂栫爜瑙勫垯涓嶅厑璁哥紪杈戞垨鍒犻櫎锛�");
+        } else {
+            //琛ヤ綅鐨勬椂鍊欙紝瑕佹帶鍒惰ˉ浣嶅瓧绗�
+            if((OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType())
+                    || OsCodeFillTypeEnum.RIGHT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType()))
+                    && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
+                throw new VciBaseException("褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖");
+            }
+            //寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
+            if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
+                if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
+                    throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐� 鍙傜収閰嶇疆 鐨勫唴瀹�");
+                }
+                try{
+                    JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
+                }catch (Throwable e){
+                    throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝鍙傜収閰嶇疆鐨勫唴瀹圭殑鏍煎紡涓嶆纭�,",new String[0],e);
+                }
+            }
+            revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);
+            codeBasicSecMapper.updateByPrimaryKey(codeBasicSecDO);
+            SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+            if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
+                charService.save(MdmBtmTypeConstant.CODE_BASIC_SEC,"codefileseparator",codeBasicSecDO.getCodeFillSeparator(),sessionInfo);
+            }
+        }
+        return codeBasicSecDO2VO(codeBasicSecDO);
+    }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     *
+     * @param codeBasicSecDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeBasicSecDO  鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeBasicSecDTO codeBasicSecDTO, CodeBasicSecDO codeBasicSecDO) {
+        boService.checkTs(codeBasicSecDTO);
+        if (!checkIsLinked(null, codeBasicSecDO.getOid())) {
+            return BaseResult.success();
+        } else {
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE, new String[]{""});
+        }
+    }
+
+    /**
+     * 鏍¢獙鏄惁琚紩鐢�
+     *
+     * @param codeRuleOid     缂栫爜瑙勫垯涓婚敭
+     * @param codeBasicSecOid 缂栫爜鍩虹淇℃伅涓婚敭
+     * @return true琛ㄧず宸茶寮曠敤锛宖alse琛ㄧず鏈寮曠敤
+     * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    private boolean checkIsLinked(String codeRuleOid, String codeBasicSecOid) throws VciBaseException {
+        boolean flag = true;
+        if (StringUtils.isNotBlank(codeRuleOid)) {
+            boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeRuleOid).getLcStatus());
+            if (!status){
+                return true;
+            }
+            boolean alreadyInUse = codeRuleService.isAlreadyInUse(codeRuleOid);
+            if (!alreadyInUse){
+               flag = false;
+            }
+        } else {
+            boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecMapper.selectByPrimaryKey(codeBasicSecOid).getPkCodeRule()).getLcStatus());
+            if (!status){
+                return true;
+            }
+            boolean alreadyInUse = codeRuleService.isAlreadyInUse(codeBasicSecMapper.selectByPrimaryKey(codeBasicSecOid).getPkCodeRule());
+            if (!alreadyInUse){
+                flag = false;
+            }
+        }
+        return flag;
+    }
+
+    /**
+     * 鍒犻櫎鐮佹鍩虹淇℃伅
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeBasicSecDTO, "鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄", codeBasicSecDTO.getOid(), "鐮佹鍩虹淇℃伅鐨勪富閿�");
+        return deleteCodeBasicSecByPrimaryKey(codeBasicSecDTO.getOid());
+    }
+
+    /**
+     * 涓婚敭鍒犻櫎鐮佹鍩虹淇℃伅
+     *
+     * @param oid 鐮佹鍩虹淇℃伅涓婚敭
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeBasicSecByPrimaryKey(String oid) throws VciBaseException {
+        CodeBasicSecDO codeBasicSecDO = selectByOid(oid);
+        boolean isLinked = checkIsLinked(codeBasicSecDO.getPkCodeRule(), oid);
+        if (isLinked) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�");
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        //鎵ц鍒犻櫎鎿嶄綔
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeBasicSecMapper.deleteByPrimaryKey(oid);
+        Set<ClientBusinessObject> deleteSet = new HashSet<>();
+        deleteSet.addAll(batchCBO.getDeleteCbos());
+        if (CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(codeBasicSecDO.getSecType())){
+            conditionMap.put("codefixedsecoid",codeBasicSecDO.getOid());
+            VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeFixedValueDO.class);
+            List<CodeFixedValueDO> fixedValueDOS = fixedValueMapper.selectByWrapper(wrapper);
+            BatchCBO valueCBO = fixedValueMapper.batchDeleteByOids(fixedValueDOS.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toSet()));
+            deleteSet.addAll(valueCBO.getDeleteCbos());
+        }
+        if (CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equals(codeBasicSecDO.getSecType())){
+            conditionMap.put("codeclassifysecoid",codeBasicSecDO.getOid());
+            VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyValueDO.class);
+            List<CodeClassifyValueDO> classifyValueDOS = codeClassifyValueMapper.selectByWrapper(wrapper);
+            if(!CollectionUtils.isEmpty(classifyValueDOS)) {
+                BatchCBO valueCBO = codeClassifyValueMapper.batchDeleteByOids(classifyValueDOS.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toSet()));
+                deleteSet.addAll(valueCBO.getDeleteCbos());
+            }
+        }
+        batchCBO.setDeleteCbos(deleteSet);
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return (batchCBO != null && batchCBO.getDeleteCbos() != null && batchCBO.getDeleteCbos().size() > 0) ? BaseResult.successMsg(DELETE_SUCCESS) : BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+     * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
+     *
+     * @param oid 涓婚敭
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO getObjectByOid(String oid) throws VciBaseException {
+        return codeBasicSecDO2VO(selectByOid(oid));
+    }
+
+    /**
+     * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oid 涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    private CodeBasicSecDO selectByOid(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid, "涓婚敭");
+        CodeBasicSecDO codeBasicSecDO = codeBasicSecMapper.selectByPrimaryKey(oid.trim());
+        if (codeBasicSecDO == null || StringUtils.isBlank(codeBasicSecDO.getOid())) {
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeBasicSecDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
+     *
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeBasicSecVO> listCodeBasicSecByOids(Collection<String> oidCollections) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeBasicSecDO> codeBasicSecDOList = listCodeBasicSecDOByOidCollections(oidCollections);
+        return codeBasicSecDO2VOs(codeBasicSecDOList);
+    }
+
+    /**
+     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oidCollections 涓婚敭鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeBasicSecDO> listCodeBasicSecDOByOidCollections(Collection<String> oidCollections) {
+        List<CodeBasicSecDO> codeBasicSecDOList = new ArrayList<CodeBasicSecDO>();
+        if (!CollectionUtils.isEmpty(oidCollections)) {
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for (Collection<String> oids : oidCollectionsList) {
+                List<CodeBasicSecDO> tempDOList = codeBasicSecMapper.selectByPrimaryKeyCollection(oids);
+                if (!CollectionUtils.isEmpty(tempDOList)) {
+                    codeBasicSecDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return codeBasicSecDOList;
+    }
+
+
+    /**
+     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (conditionMap == null) {
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeBasicSec(conditionMap, pageHelper);
+    }
+
+    /**
+     * 鍏嬮殕鐮佹淇℃伅
+     *
+     * @param oidList 婧愮爜娈典俊鎭富閿泦鍚�
+     * @param pkCodeRule 鐩爣缂栫爜瑙勫垯
+     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @Override
+    public BaseResult cloneCodeBasicSec(List<String> oidList, String pkCodeRule) {
+        boolean isLinked = checkIsLinked(pkCodeRule,null);
+        if (isLinked) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�");
+        }
+        List<CodeBasicSecDO> createList = new ArrayList<>();
+        List<CodeBasicSecDO> basicSecDOS = codeBasicSecMapper.selectByPrimaryKeyCollection(oidList);
+        basicSecDOS.forEach(sec -> {
+            CodeBasicSecDO newSecDO = new CodeBasicSecDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sec,newSecDO);
+            newSecDO.setOid("");
+            newSecDO.setNameOid("");
+            newSecDO.setRevisionOid("");
+            newSecDO.setId(newSecDO.getId() + "_copy");
+            newSecDO.setName(newSecDO.getName() + "_copy");
+            newSecDO.setPkCodeRule(pkCodeRule);
+            createList.add(newSecDO);
+        });
+        codeBasicSecMapper.batchInsert(createList);
+        return BaseResult.success();
+    }
+
+    /**
+     * 鏍规嵁鐮佹鍒嗙被鐨勭被鍨嬪垽鏂睘鎬ф槸鍚︽槸绌虹殑
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鏈夌┖鐨勫垯浼爇ey-灞炴�у悕 value-瀛楁鍚箟锛屾病鏈夌┖鐨勫垯浼� key-success value-true
+     */
+    @Override
+    public KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO) {
+        VciBaseUtil.alertNotNull(codeBasicSecDTO.getSectype(), "鐮佹鍒嗙被");
+        String secType = codeBasicSecDTO.getSectype();
+        HashMap<String, String> attrMap = JSONObject.parseObject(JSONObject.toJSONString(codeBasicSecDTO), HashMap.class);
+        Map<String, String> notNullableAttr = getNotNullableAttr(secType);
+        if (notNullableAttr == null) {
+            throw new VciBaseException("鐮佹鍒嗙被濉啓鍑洪敊锛岃鏌ラ獙鍚庨噸璇�");
+        }
+        for (String key : notNullableAttr.keySet()) {
+            if (StringUtils.isBlank(WebUtil.getStringValueFromObject(attrMap.get(key)))) {
+                KeyValue kv = new KeyValue();
+                kv.setKey(key);
+                kv.setValue(notNullableAttr.get(key));
+                return kv;
+            }
+        }
+        KeyValue kv = new KeyValue();
+        kv.setKey("success");
+        kv.setValue("true");
+        return kv;
+    }
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鍐呭
+     *
+     * @param ruleOid 瑙勫垯鐨勫唴瀹�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    @Override
+    public List<CodeBasicSecVO> listCodeBasicSecByRuleOid(String ruleOid) {
+        if(StringUtils.isBlank(ruleOid)){
+            return new ArrayList<>();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule",ruleOid);
+        PageHelper pageHelper = new PageHelper(-1);
+        pageHelper.addDefaultAsc("ordernum");
+        List<CodeBasicSecDO> secDOList = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
+        return codeBasicSecDO2VOs(secDOList,true);
+    }
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鐨勫唴瀹�
+     *
+     * @param ruleCollection 瑙勫垯涓婚敭闆嗗悎
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    @Override
+    public List<CodeBasicSecVO> listCodeBasicSecByRuleOids(Collection<String> ruleCollection) {
+        if(CollectionUtils.isEmpty(ruleCollection)){
+            return new ArrayList<>();
+        }
+        List<CodeBasicSecDO> secDOList = new CopyOnWriteArrayList<>();
+        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+        VciBaseUtil.switchCollectionForOracleIn(ruleCollection).parallelStream().forEach(ruleOids->{
+            WebUtil.setCurrentUserSessionInfo(sessionInfo);
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("pkcoderule", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(ruleOids.toArray(new String[0])) + ")");
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("ordernum");
+            List<CodeBasicSecDO> tempSecDOs = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
+            if(!CollectionUtils.isEmpty(tempSecDOs)){
+                secDOList.addAll(tempSecDOs);
+            }
+        });
+        return codeBasicSecDO2VOs(secDOList);
+    }
+
+    /**
+     * 鍙傜収鍒嗙被鐨勭爜娈�
+     *
+     * @param conditionMap 鏌ヨ鏉′欢锛屽繀椤昏鏈塸kCodeRule
+     * @param pageHelper   鍒嗛〉鐨勫璞�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    @Override
+    public DataGrid<CodeBasicSecVO> refDataGridClassifySec(Map<String, String> conditionMap, PageHelper pageHelper) {
+        if(CollectionUtils.isEmpty(conditionMap) || !conditionMap.containsKey("pkCodeRule")){
+            return new DataGrid<>();
+        }
+        conditionMap.put("secType",CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue());
+        return refDataGridCodeBasicSec(conditionMap,pageHelper);
+    }
+
+    /**
+     * 鏍规嵁鐮佹绫诲瀷鑾峰彇涓嶅彲涓虹┖鐨勫瓧娈�
+     *
+     * @param secType 鐮佹绫诲瀷
+     * @return 涓嶅彲涓虹┖鐨勫瓧娈甸泦鍚�
+     */
+    private Map<String, String> getNotNullableAttr(String secType) {
+        Map<String, String> attrMap = new HashMap<>();
+        if (CodeSecTypeEnum.CODE_ATTR_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "灞炴�х爜娈靛悕绉�");
+        } else if (CodeSecTypeEnum.CODE_DATE_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鏃ユ湡鐮佹鍚嶇О");
+            attrMap.put("codeDateFormatStr", "鏃ユ湡鏍煎紡");
+        } else if (CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鍥哄畾鐮佹鍚嶇О");
+            attrMap.put("codeSecLengthType", "鐮佹闀垮害绫诲瀷");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+        } else if (CodeSecTypeEnum.CODE_LEVEL_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "灞傜骇鐮佹鍚嶇О");
+            attrMap.put("codeLevelType", "灞傜骇绫诲瀷");
+            attrMap.put("valueCutType", "瀛楃鎴彇绫诲瀷");
+        } else if (CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "寮曠敤鐮佹鍚嶇О");
+        } else if (CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "娴佹按鐮佹鍚嶇О");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+            attrMap.put("codeFillType", "缂栫爜琛ヤ綅鏂瑰紡");
+            attrMap.put("codeFillLength", "濉厖闀垮害");
+            attrMap.put("codeFillLimit", "娴佹按涓婇檺");
+            attrMap.put("codeFillFlag", "娴佹按鏄惁琛ョ爜");
+        } else if (CodeSecTypeEnum.CODE_VARIABLE_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鍙彉鐮佹鍚嶇О");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+            attrMap.put("codeFillType", "缂栫爜琛ヤ綅鏂瑰紡");
+        } else if (CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鍒嗙被鐮佹鍚嶇О");
+            attrMap.put("codeSecLengthType", "鐮佹闀垮害绫诲瀷");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+        } else {
+            attrMap = null;
+        }
+        return attrMap;
+    }
+
+    /**
+     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
+     *
+     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
+     * @return 鍒嗙被鐮佹鏍戠粨鏋�
+     */
+    @Override
+    public List<Tree> gridCodeClassifySecTree(String oid) {
+        VciParentQueryOption queryOption = new VciParentQueryOption(PARENT_FIELD_NAME);
+        queryOption.setfOid(oid);
+        queryOption.setLinkTypeFlag(false);
+        queryOption.setHasSelf(true);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(CodeBasicSecDO.class);
+        wrapper.childQueryParent(queryOption);
+        List<CodeBasicSecDO> doList = codeBasicSecMapper.selectByWrapper(wrapper);
+        List<String> secOid = new ArrayList<>();
+        doList.forEach(o -> secOid.add(o.getOid()));
+        List<CodeClassifyValueVO> valueVOs = (List<CodeClassifyValueVO>) codeClassifyValueService.listCodeClassifyValueByOids(secOid);
+        TreeQueryObject treeQueryObject = new TreeQueryObject();
+        treeQueryObject.setMultipleSelect(false);
+        treeQueryObject.setShowCheckBox(false);
+        treeQueryObject.setQueryAllLevel(false);
+        treeQueryObject.setValueField("oid");
+        treeQueryObject.setTextField("name");
+        treeQueryObject.setQueryAllRev(false);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_CLASSIFY_VALUE_FIELD_NAME);
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        return revisionModelUtil.doList2Trees(valueVOs,treeWrapperOptions,(CodeClassifyValueVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+    }
+
+    /**
+     * 鏍规嵁缂栫爜瑙勫垯鎵归噺鍒犻櫎鐮佹鍩烘湰淇℃伅
+     * @param codeRuleOid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO batchDeleteSecByCodeRuleOid(String codeRuleOid) {
+        VciBaseUtil.alertNotNull(codeRuleOid,"缂栫爜瑙勫垯涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkcoderule",codeRuleOid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeBasicSecDO.class);
+        List<CodeBasicSecDO> deleteList = codeBasicSecMapper.selectByWrapper(wrapper);
+        if (CollectionUtils.isEmpty(deleteList)){
+            return new BatchCBO();
+        }
+        BatchCBO batchCBO = codeBasicSecMapper.batchDeleteByOids(deleteList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet()));
+        Set<ClientBusinessObject> deleteSet = new HashSet<>();
+        deleteSet.addAll(batchCBO.getDeleteCbos());
+        List<CodeBasicSecDO> fixedSecList = deleteList.stream().filter(sec -> {
+            return CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(sec.getSecType());
+        }).collect(Collectors.toList());
+        List<CodeBasicSecDO> classifySecList = deleteList.stream().filter(sec -> {
+            return CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equals(sec.getSecType());
+        }).collect(Collectors.toList());
+        Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet());
+        Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet());
+        if (!CollectionUtils.isEmpty(fixedSecOidSet)){
+            StringBuilder sb = new StringBuilder();
+            fixedSecOidSet.stream().forEach(oid -> {
+                sb.append("'").append(oid).append("',");
+            });
+            String inSql = sb.toString().substring(0,sb.toString().length()-1);
+            VciQueryWrapperForDO wrapperForValue = new VciQueryWrapperForDO(null,CodeFixedValueDO.class);
+            PageHelper ph = new PageHelper();
+            ph.setLimit(-1);
+            wrapperForValue.in("codefixedsecoid",inSql);
+            List<CodeFixedValueDO> fixedValueDOS = fixedValueMapper.selectByWrapper(wrapperForValue);
+            BatchCBO fixedCBO = fixedValueMapper.batchDeleteByOids(fixedValueDOS.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toSet()));
+            deleteSet.addAll(fixedCBO.getDeleteCbos());
+        }
+        if (!CollectionUtils.isEmpty(classifySecOidSet)){
+            StringBuilder sb = new StringBuilder();
+            classifySecOidSet.stream().forEach(oid -> {
+                sb.append("'").append(oid).append("',");
+            });
+            String inSql = sb.toString().substring(0,sb.toString().length()-1);
+            VciQueryWrapperForDO wrapperForValue = new VciQueryWrapperForDO(null,CodeClassifyValueDO.class);
+            PageHelper ph = new PageHelper();
+            ph.setLimit(-1);
+            wrapperForValue.in("codeclassifysecoid",inSql);
+            List<CodeClassifyValueDO> classifyValueDOS = codeClassifyValueMapper.selectByWrapper(wrapperForValue);
+            BatchCBO fixedCBO = codeClassifyValueMapper.batchDeleteByOids(classifyValueDOS.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toSet()));
+            deleteSet.addAll(fixedCBO.getDeleteCbos());
+        }
+        batchCBO.setDeleteCbos(deleteSet);
+        return batchCBO;
+    }
+
+    /**
+     * 涓婄Щ
+     *
+     * @param oid 涓婚敭
+     */
+    @Override
+    public void upOrderNum(String oid) {
+        CodeBasicSecDO secDO = selectByOid(oid);
+        BatchCBO batchCBO = new BatchCBO();
+        WebUtil.setPersistence(false);
+        if(secDO.getOrderNum() >1){
+            //绛変簬1鐨勬椂鍊欎笉鑳戒笂绉讳簡
+            //鎵炬瘮鑷繁灏忕殑
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("pkCodeRule",secDO.getPkCodeRule());
+            conditionMap.put("ordernum",String.valueOf(secDO.getOrderNum()-1));
+            List<CodeBasicSecDO> lastSecDOs = codeBasicSecMapper.selectByCondition(conditionMap,new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(lastSecDOs)){
+                CodeBasicSecDO lastSec = lastSecDOs.get(0);
+                lastSec.setOrderNum(lastSec.getOrderNum()+1);
+                batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(lastSec));
+            }
+            secDO.setOrderNum(secDO.getOrderNum()-1);
+            batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(secDO));
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+    }
+
+    /**
+     * 涓嬬Щ
+     *
+     * @param oid 涓婚敭
+     */
+    @Override
+    public void downOrderNum(String oid) {
+        CodeBasicSecDO secDO = selectByOid(oid);
+        BatchCBO batchCBO = new BatchCBO();
+        WebUtil.setPersistence(false);
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule",secDO.getPkCodeRule());
+        Long total = codeBasicSecMapper.countByCondition(conditionMap);
+        if(secDO.getOrderNum()  < total){
+            //灏忎簬鎬绘暟鐨勬椂鍊欐墠涓嬬Щ
+            conditionMap.put("ordernum",String.valueOf(secDO.getOrderNum()+1));
+            List<CodeBasicSecDO> lastSecDOs = codeBasicSecMapper.selectByCondition(conditionMap,new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(lastSecDOs)){
+                CodeBasicSecDO lastSec = lastSecDOs.get(0);
+                lastSec.setOrderNum(lastSec.getOrderNum()-1);
+                batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(lastSec));
+            }
+            secDO.setOrderNum(secDO.getOrderNum()+1);
+            batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(secDO));
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
new file mode 100644
index 0000000..941b9dc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
@@ -0,0 +1,324 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeButtonDaoI;
+import com.vci.ubcs.code.model.CodeButtonDO;
+import com.vci.ubcs.code.service.CodeButtonServiceI;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeButtonDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeButtonServiceImpl implements CodeButtonServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeButtonDaoI codeButtonMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeButtonVO> gridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeButtonDO> doList = codeButtonMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeButtonVO> dataGrid=new DataGrid<CodeButtonVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeButtonDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeButtonMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButtonDO>  codeButtonDOs) throws VciBaseException{
+        List<CodeButtonVO> voList = new ArrayList<CodeButtonVO>();
+        if(!CollectionUtils.isEmpty(codeButtonDOs)){
+           for(CodeButtonDO s: codeButtonDOs){
+                CodeButtonVO vo =  codeButtonDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeButtonDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeButtonVO codeButtonDO2VO(CodeButtonDO codeButtonDO) throws VciBaseException{
+              CodeButtonVO vo = new CodeButtonVO();
+        if(codeButtonDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeButtonVO addSave(CodeButtonDTO codeButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeButtonDO codeButtonDO = new CodeButtonDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDTO,codeButtonDO);
+        codeButtonMapper.insert(codeButtonDO);
+        return codeButtonDO2VO(codeButtonDO);
+    }
+
+    /**
+     * 淇敼涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeButtonVO editSave(CodeButtonDTO codeButtonDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeButtonDTO,"鏁版嵁瀵硅薄",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曚富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeButtonDO codeButtonDO = selectByOid(codeButtonDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeButtonDTO,codeButtonDO);
+         codeButtonMapper.updateByPrimaryKey(codeButtonDO);
+         return codeButtonDO2VO(codeButtonDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeButtonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeButtonDTO codeButtonDTO, CodeButtonDO codeButtonDO) {
+        CodeButtonDO buttonDO = new CodeButtonDO();
+        BeanUtil.convert(codeButtonDTO,buttonDO);
+        boService.checkTs(buttonDO);
+        if(!checkIsLinked(codeButtonDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeButton(CodeButtonDTO codeButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeButtonDTO,"涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曠殑涓婚敭");
+        CodeButtonDO codeButtonDO = selectByOid(codeButtonDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeButtonDTO,codeButtonDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeButtonMapper.deleteByPrimaryKey(codeButtonDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeButtonVO getObjectByOid(String oid) throws VciBaseException{
+        return codeButtonDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeButtonDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeButtonDO codeButtonDO = codeButtonMapper.selectByPrimaryKey(oid.trim());
+        if(codeButtonDO == null || StringUtils.isBlank(codeButtonDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeButtonDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeButtonDO> codeButtonDOList = listCodeButtonDOByOidCollections(oidCollections);
+        return codeButtonDO2VOs(codeButtonDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeButtonDO> listCodeButtonDOByOidCollections(Collection<String> oidCollections){
+        List<CodeButtonDO> codeButtonDOList = new ArrayList<CodeButtonDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeButtonDO> tempDOList =  codeButtonMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeButtonDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeButtonDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeButtonVO> refDataGridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeButton(conditionMap,pageHelper);
+    }
+
+    /**
+     * 鍚敤
+     *
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult enableCodeButton(CodeButtonDTO buttonDTO) {
+        return changeLcStatus(buttonDTO,false);
+    }
+
+    /**
+     * 鍋滅敤
+     *
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult disableCodeButton(CodeButtonDTO buttonDTO) {
+        return changeLcStatus(buttonDTO,true);
+    }
+
+    /**
+     * 淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬侊紝濡傚仠鐢ㄥ拰鍚敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s
+     * @param disable 鏄惁涓哄仠鐢�
+     * @return 鎵ц鐨勭粨鏋�
+     */
+    private BaseResult changeLcStatus(CodeButtonDTO buttonDTO, boolean disable){
+        VciBaseUtil.alertNotNull(buttonDTO,"鏁版嵁瀵硅薄",buttonDTO.getOid(),"涓婚敭");
+        CodeButtonDO buttonDO = selectByOid(buttonDTO.getOid());
+        CodeButtonDO outButtonDO = new CodeButtonDO();
+        BeanUtil.convert(buttonDTO,outButtonDO);
+        boService.checkTs(outButtonDO);
+        if(disable){
+            buttonDO.setLcStatus(FrameworkDataLCStatus.DISABLED.getValue());
+        }else{
+            buttonDO.setLcStatus(FrameworkDataLCStatus.ENABLED.getValue());
+        }
+        return (codeButtonMapper.updateLcStatus(buttonDO.getOid(),buttonDO.getLcStatus()) >0 )?(BaseResult.successMsg((disable?DISABLE_SUCCESS:ENABLE_SUCCESS))):(BaseResult.fail((disable?DISABLE_FAIL:ENABLE_FAIL)));
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
new file mode 100644
index 0000000..148bf9f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
@@ -0,0 +1,359 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.dao.CodeClassifyProcessTempDaoI;
+import com.vci.ubcs.code.model.CodeClassifyProcessTempDO;
+import com.vci.ubcs.code.service.CodeClassifyProcessTempServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyProcessTempServiceImpl implements CodeClassifyProcessTempServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyProcessTempDaoI codeClassifyProcessTempMapper;
+
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeClassifyProcessTempDO> doList = codeClassifyProcessTempMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyProcessTempVO> dataGrid=new DataGrid<CodeClassifyProcessTempVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyProcessTempDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyProcessTempMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO> codeClassifyProcessTempDOs) throws VciBaseException{
+        List<CodeClassifyProcessTempVO> voList = new ArrayList<CodeClassifyProcessTempVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOs)){
+            codeClassifyProcessTempDOs.forEach(temp -> {
+                CodeClassifyProcessTempVO tempVO = codeClassifyProcessTempDO2VO(temp);
+                BeanUtilForVCI.copyPropertiesIgnoreCase(temp,tempVO);
+                voList.add(tempVO);
+            });
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTempDO codeClassifyProcessTempDO) throws VciBaseException{
+              CodeClassifyProcessTempVO vo = new CodeClassifyProcessTempVO();
+        if(codeClassifyProcessTempDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            //澶勭悊鍏宠仈鐨勬ā鏉垮睘鎬�
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getCodeprocessuse(),"妯℃澘娴佺▼鐨勭敤閫�");
+        if (StringUtils.isBlank(codeClassifyProcessTempDTO.getCodeprocessuse())){
+            throw new VciBaseException("妯℃澘娴佺▼鐢ㄩ�斾笉鑳戒负绌�");
+        }
+        Long count = countProcessTemplate(codeClassifyProcessTempDTO);
+        if(count > 0){
+            throw new VciBaseException("宸插瓨鍦ㄧ浉鍚岀殑娴佺▼妯℃澘");
+        }
+        //灏咲TO杞崲涓篋O
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = new CodeClassifyProcessTempDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+        codeClassifyProcessTempMapper.insert(codeClassifyProcessTempDO);
+        //鍥犱负涓氬姟绫诲瀷鏈韩娌℃湁鎺у埗鐗堟湰锛屾墍鏈夊己鍒剁粰鐗堟湰revisionValue璁剧疆鍊硷紝骞冲彴涔熶細鍙樻垚绌恒�傘�傘�傘��
+        //鐗堟湰鍙蜂笉鑳戒娇鐢ㄩ粯璁ょ殑灞炴��
+        return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+    }
+
+    /**
+     * 鑾峰彇娴佺▼妯℃澘鏄惁宸茬粡瀛樺湪浜�
+     * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 涓暟
+     */
+    private Long countProcessTemplate(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+        String templateName = codeClassifyProcessTempDTO.getName();
+        if (StringUtils.isBlank(templateName)){
+            throw new VciBaseException("妯℃澘娴佺▼鍚嶇О涓嶈兘涓虹┖");
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeProcessUse",codeClassifyProcessTempDTO.getCodeprocessuse());
+        conditionMap.put("id",codeClassifyProcessTempDTO.getId());
+        conditionMap.put("classifyTemplateOid", codeClassifyProcessTempDTO.getClassifyTemplateOid());
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyProcessTempDO.class);
+        Long count = codeClassifyProcessTempMapper.countByWrapper(wrapper);
+        return count;
+    }
+
+    /**
+     * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉夸富閿�",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getName(),"娴佺▼妯℃澘鐨勫悕绉�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+         codeClassifyProcessTempMapper.updateByPrimaryKey(codeClassifyProcessTempDO);
+         return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyProcessTempDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO, CodeClassifyProcessTempDO codeClassifyProcessTempDO) {
+        CodeClassifyProcessTempDO tempDO = new CodeClassifyProcessTempDO();
+        BeanUtil.convert(codeClassifyProcessTempDTO,tempDO);
+        boService.checkTs(tempDO);
+        if(!checkIsLinked(codeClassifyProcessTempDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉跨殑涓婚敭");
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyProcessTempMapper.deleteByPrimaryKey(codeClassifyProcessTempDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyProcessTempDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyProcessTempDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = codeClassifyProcessTempMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyProcessTempDO == null || StringUtils.isBlank(codeClassifyProcessTempDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyProcessTempDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = listCodeClassifyProcessTempDOByOidCollections(oidCollections);
+        return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyProcessTempDO> listCodeClassifyProcessTempDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = new ArrayList<CodeClassifyProcessTempDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyProcessTempDO> tempDOList =  codeClassifyProcessTempMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyProcessTempDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyProcessTempDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyProcessTemp(conditionMap,pageHelper);
+    }
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     *
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鍐呭
+     */
+    @Override
+    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
+        BatchCBO batchCBO = new BatchCBO();
+        if(StringUtils.isBlank(classifyTemplateOid)){
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifyTemplateOid",classifyTemplateOid);
+            List<CodeClassifyProcessTempDO> processTempDOS = codeClassifyProcessTempMapper.selectByCondition(conditionMap, new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(processTempDOS)){
+                batchCBO.copyFromOther(codeClassifyProcessTempMapper.batchDeleteByOids(processTempDOS.stream().map(CodeClassifyProcessTempDO::getOid).collect(Collectors.toList())));
+            }
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+     *
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse      鐢ㄩ��
+     * @return 妯℃澘鐨勪俊鎭�
+     */
+    @Override
+    public List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse) {
+        if(StringUtils.isBlank(codeTemplateOid) || StringUtils.isBlank(processUse)){
+            return new ArrayList<>();
+        }
+        Map<String,String> conditionMap =new HashMap<>();
+        conditionMap.put("classifyTemplateOid",codeTemplateOid);
+        conditionMap.put("codeprocessuse",processUse);
+        return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempMapper.selectByCondition(conditionMap,null));
+    }
+
+    @Override
+    public CodeClassifyProcessTempVO getProcessTempVOByName(String codeTemplateOid,String processName) {
+        if (StringUtils.isBlank(processName)){
+            return new CodeClassifyProcessTempVO();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("classifyTemplateOid",codeTemplateOid);
+        conditionMap.put("name",processName);
+        return codeClassifyProcessTempDO2VO(codeClassifyProcessTempMapper.selectByCondition(conditionMap,null).get(0));
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
new file mode 100644
index 0000000..d67c98a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -0,0 +1,1024 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeClassifyDaoI;
+import com.vci.ubcs.code.dao.CodeClassifyTemplateDaoI;
+import com.vci.ubcs.code.model.CodeClassifyDO;
+import com.vci.ubcs.code.model.CodeClassifyTemplateDO;
+import com.vci.ubcs.code.service.CodeClassifyServiceI;
+import com.vci.ubcs.code.service.CodeDuckingServiceI;
+import com.vci.ubcs.code.service.CodeKeyAttrRepeatRuleServiceI;
+import com.vci.ubcs.code.service.CodeRuleServiceI;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.poi.bo.ReadExcelOption;
+import com.vci.starter.poi.bo.WriteExcelData;
+import com.vci.starter.poi.bo.WriteExcelOption;
+import com.vci.starter.poi.constant.ExcelLangCodeConstant;
+import com.vci.starter.poi.util.ExcelUtil;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.*;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.OsAttributeVO;
+import com.vci.web.pageModel.OsBtmTypeAttributeVO;
+import com.vci.web.pageModel.OsBtmTypeVO;
+import com.vci.web.service.OsAttributeServiceI;
+import com.vci.web.service.OsBtmServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang.StringUtils;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeClassifyDTO;
+import com.vci.ubcs.code.po.CodeClassifyPO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
+
+/**
+ * 涓婚搴撳垎绫绘湇鍔�
+ * @author weidy
+ * @date 2022-01-20
+ */
+@Service
+public class CodeClassifyServiceImpl implements CodeClassifyServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyDaoI codeClassifyMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 瑙勫垯鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeRuleServiceI codeRuleService;
+
+    /**
+     * 鍏抽敭灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private CodeKeyAttrRepeatRuleServiceI keyAttrRepeatRuleService;
+
+    /**
+     * 鏁版嵁闆嗘垚
+     */
+    @Autowired
+    private CodeDuckingServiceI codeDuckingServiceI;
+
+    /**
+     * 涓氬姟绫诲瀷鐨勬湇鍔�
+     */
+    @Autowired
+    private OsBtmServiceI btmService;
+
+    /**
+     * 灞炴�ф湇鍔�
+     */
+    @Autowired
+    private OsAttributeServiceI attributeService;
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
+
+    /**
+    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
+    */
+    public static  final String PARENT_FIELD_NAME = "parentCodeClassifyOid";
+    /**
+     * 鏌ヨ涓婚搴撳垎绫� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 涓婚搴撳垎绫� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws VciBaseException {
+        List<CodeClassifyDO> doList =selectCodeClassifyDOByTree(treeQueryObject);
+        List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME.toLowerCase(Locale.ROOT));
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        List<Tree> tree= revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+        Iterator var6 =  tree.listIterator();
+        while(var6.hasNext()){
+            Tree trees = (Tree) var6.next();
+            boolean checkHasChild=codeClassifyMapper.checkHasChild(trees.getOid());
+            if(checkHasChild){
+                trees.setLeaf(false);
+            }else{
+                trees.setLeaf(true);
+            }
+        }
+        return tree;
+    }
+
+    /**
+     * 涓婚搴撶殑鏍�
+     *
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撴樉绀烘爲
+     */
+    @Override
+    public List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject) {
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        treeQueryObject.getConditionMap().put(PARENT_FIELD_NAME, QueryOptionConstant.ISNULL);
+        return treeCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+     *
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+     */
+    @Override
+    public List<CodeClassifyDO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject) {
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null,CodeClassifyDO.class);
+        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
+        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
+        queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
+        if(StringUtils.isBlank(treeQueryObject.getSort())) {
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("id");
+            queryWrapperForDO.setPageHelper(pageHelper);
+        }
+        return codeClassifyMapper.selectByWrapper(queryWrapperForDO);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO> codeClassifyDOs) throws VciBaseException{
+        List<CodeClassifyVO> voList = new ArrayList<CodeClassifyVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyDOs)){
+           for(CodeClassifyDO s: codeClassifyDOs){
+                CodeClassifyVO vo =  codeClassifyDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyVO codeClassifyDO2VO(CodeClassifyDO codeClassifyDO) throws VciBaseException{
+              CodeClassifyVO vo = new CodeClassifyVO();
+        if(codeClassifyDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyVO addSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyDO codeClassifyDO = new CodeClassifyDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyDO);
+        if(StringUtils.isNotBlank(codeClassifyDO.getParentCodeClassifyOid()) && StringUtils.isNotBlank(codeClassifyDO.getBtmTypeId())){
+            throw new VciBaseException("鍙湁鍦ㄩ《灞傜殑涓婚搴撳垎绫绘墠鑳借缃笟鍔$被鍨�");
+        }
+        BatchCBO cbo_insert = codeClassifyMapper.insert(codeClassifyDO);
+
+//        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊
+//        ClientBusinessObject[] clientBusinessObjects = cbo_insert.getCreateCboArray();
+//        if(clientBusinessObjects.length!=0);
+//        {
+//            codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_ADD,FRAMEWORK_DATA_ENABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO.getOid(), DateUtils.addHours(new Date(),1));
+//        }
+
+        return codeClassifyDO2VO(codeClassifyDO);
+    }
+
+    /**
+     * 淇敼涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public BaseResult editSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyDTO,"鏁版嵁瀵硅薄",codeClassifyDTO.getOid(),"涓婚搴撳垎绫讳富閿�");
+
+         //妫�鏌s
+         CodeClassifyDO codeClassifyDOCopyFromDTO = new CodeClassifyDO();
+         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyDOCopyFromDTO);
+         boolean tsBoolean = boService.checkTs(codeClassifyDOCopyFromDTO);
+         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+         }
+
+         //灏咲TO杞崲涓篋O
+         CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyDTO,codeClassifyDO);
+         if(StringUtils.isNotBlank(codeClassifyDO.getParentCodeClassifyOid()) && StringUtils.isNotBlank(codeClassifyDO.getBtmTypeId())){
+             throw new VciBaseException("鍙湁鍦ㄩ《灞傜殑涓婚搴撳垎绫绘墠鑳借缃笟鍔$被鍨�");
+         }
+         codeClassifyMapper.updateByPrimaryKey(codeClassifyDO);
+
+//         //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆傚彧鏈夊惎鐢ㄧ姸鎬佺殑鍒嗙被鎵嶆帹閫�
+//         if(FRAMEWORK_DATA_ENABLED.equals(codeClassifyDO.getLcStatus()));
+//         {
+//             codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_EDIT,FRAMEWORK_DATA_ENABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO.getOid(), codeClassifyDTO.getTs());
+//         }
+
+         return BaseResult.success(codeClassifyDO2VO(codeClassifyDO));
+     }
+
+/**
+ * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
+ * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+ * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+ * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+ */
+@Override
+public BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+    VciBaseUtil.alertNotNull(codeClassifyDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyDTO.getOid(),"涓婚敭");
+    CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
+    return checkIsCanDeleteForDO(codeClassifyDTO,codeClassifyDO);
+}
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyDTO codeClassifyDTO, CodeClassifyDO codeClassifyDO) {
+        CodeClassifyDO tsDO = new CodeClassifyDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,tsDO);
+        boService.checkTs(tsDO);
+        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
+        if(checkChildIsLinked(codeClassifyDO.getOid())){
+            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
+        }
+        return BaseResult.success(checkHasChild(codeClassifyDO.getOid()));
+    }
+    /**
+      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+      *
+      * @param oid 涓婚敭
+      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    @Override
+    public boolean checkChildIsLinked(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        Map<String,String> childOids = codeClassifyMapper.selectAllLevelChildOid(oid.trim());
+        if(!CollectionUtils.isEmpty(childOids)){
+             for(String childOid: childOids.keySet()){
+                 if(!checkIsLinked(childOid)){
+                     return false;
+                 }
+             }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+    *
+    * @param oid 涓婚敭
+    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    @Override
+    public boolean checkHasChild(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        return codeClassifyMapper.checkHasChild(oid.trim());
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassify(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyDTO,"涓婚搴撳垎绫绘暟鎹璞�",codeClassifyDTO.getOid(),"涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyDTO,codeClassifyDO);
+
+        //鍏堢畝绉版槸鍚︽湁鍏宠仈妯℃澘锛屾湁妯℃澘瑕佸厛鍒犻櫎
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateDO.class);
+        queryWrapper.addQueryMap("codeClassifyOid",codeClassifyDTO.getOid());
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOListHaveTemplate =  codeClassifyTemplateMapper.selectByWrapper(queryWrapper);
+        if(codeClassifyTemplateDOListHaveTemplate.size()>0){
+            return BaseResult.fail("鍒嗙被鍏宠仈妯℃澘锛岃鍏堝垹闄�!");
+        }
+
+        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
+        //1銆佹煡璇㈣鍒犻櫎鐨勭埗绫绘暟鎹�
+        List<CodeClassifyDO> deletes = new ArrayList<CodeClassifyDO>();
+        deletes.add(codeClassifyDO);
+
+        if(baseResult.isSuccess()) {
+                        //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
+            Map<String,String> childrenOids = codeClassifyMapper.selectAllLevelChildOid(codeClassifyDO.getOid().trim());
+            if (!CollectionUtils.isEmpty(childrenOids)) {
+                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids.keySet());
+                for(Collection<String> s : childrenCollections){
+
+                    //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
+                    //2銆佹煡璇㈣鍒犻櫎鐨勫瓙绫绘暟鎹�
+                    List<CodeClassifyDO>  codeClassifyDOList = codeClassifyMapper.selectByPrimaryKeyCollection(s);
+                    deletes.addAll(codeClassifyDOList);
+
+                    codeClassifyMapper.batchDeleteByOids(s);
+                }
+
+            }
+                    }else{
+            return baseResult;
+        }
+
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyMapper.deleteByPrimaryKey(codeClassifyDO.getOid());
+
+        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�
+        for (CodeClassifyDO codeClassifyDO1:deletes){
+            //codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_DELETE,FRAMEWORK_DATA_DISABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO1.getOid(), DateUtils.addHours(new Date(),1));//杩欓噷鏄綋鍓嶆椂闂�
+
+            //瀛樺偍瑕佸垹闄ょ殑鏁版嵁
+            codeDuckingServiceI.cacheDeleteData(codeClassifyDO1.getOid(), codeClassifyDO1);
+        }
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫绘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyDO codeClassifyDO = codeClassifyMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyDO == null || StringUtils.isBlank(codeClassifyDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫绘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyVO> listCodeClassifyByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyDO> codeClassifyDOList = listCodeClassifyDOByOidCollections(oidCollections);
+        return codeClassifyDO2VOs(codeClassifyDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyDO> listCodeClassifyDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyDO> codeClassifyDOList = new ArrayList<CodeClassifyDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyDO> tempDOList =  codeClassifyMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏍� 涓婚搴撳垎绫�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撳垎绫绘樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
+            treeQueryObject.getConditionMap().remove(LC_STATUS);
+        }
+        if(treeQueryObject.getExtandParamsMap() ==null || !treeQueryObject.getExtandParamsMap().containsKey(REFER_SHOW_DISABLED_QUERY_KEY)) {
+        }
+        treeQueryObject.getConditionMap().put(LC_STATUS, FRAMEWORK_DATA_ENABLED);
+        return treeCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid 涓婚敭
+     * @param lcStatus 鐘舵��
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult updateLcStatus(String oid, String lcStatus){
+
+        //鏌ヨ淇敼鍓峵s
+        CodeClassifyDO codeClassifyDO_old = selectByOid(oid);//涓昏鏄负浜嗘煡璇s
+
+        //鍚敤銆佸仠鐢�
+        int u = codeClassifyMapper.updateLcStatus(oid,lcStatus);
+
+//        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
+//        if(u!=0) {
+//            codeDuckingServiceI.insertCache1(lcStatus,lcStatus,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, oid, codeClassifyDO_old.getTs());
+//        }
+        BaseResult baseResult = u==0?BaseResult.error("淇敼澶辫触锛�"):BaseResult.success("淇敼鎴愬姛");
+        return baseResult;
+    }
+
+    /**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄
+     */
+    @Override
+    public List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return codeClassifyMapper.selectByWrapper(queryWrapper);
+    }
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鍒嗙被鐩稿叧鐨勬墍鏈変俊鎭�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被涓婄骇锛屼笅绾х殑淇℃伅
+     */
+    @Override
+    public CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+        CodeClassifyFullInfoBO fullInfo = new CodeClassifyFullInfoBO();
+        CodeClassifyDO classifyDO = selectByOid(codeClassifyOid);
+        //鏌ヨ涓婄骇
+        fullInfo.setCurrentClassifyVO(codeClassifyDO2VO(classifyDO));
+        fullInfo.setParentClassifyVOs(codeClassifyDO2VOs(codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid)));
+        if(!CollectionUtils.isEmpty(fullInfo.getParentClassifyVOs())){
+            fullInfo.setTopClassifyVO(fullInfo.getParentClassifyVOs().stream().filter(s->StringUtils.isBlank(s.getParentcodeclassifyoid())).findFirst().orElseGet(()->null));
+        }
+        return fullInfo;
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鍒嗙被鐨勯《灞傚垎绫�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 椤跺眰鍒嗙被鐨勪俊鎭�
+     */
+    @Override
+    public CodeClassifyVO getTopClassifyVO(String codeClassifyOid) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+        List<CodeClassifyDO> classifyDOS = codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid);
+        if(!CollectionUtils.isEmpty(classifyDOS)){
+            CodeClassifyDO classifyDO = classifyDOS.stream().filter(s -> StringUtils.isBlank(s.getParentCodeClassifyOid())).findFirst().orElseGet(() -> null);
+            if(classifyDO!=null){
+                return codeClassifyDO2VO(classifyDO);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 缁熻瀛愯妭鐐圭殑涓暟
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 涓暟
+     */
+    @Override
+    public int countChildrenByClassifyOid(String codeClassifyOid) {
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("parentCodeClassifyOid",codeClassifyOid);
+        return codeClassifyMapper.countByCondition(conditionMap).intValue();
+    }
+
+    /**
+     * 鑾峰彇瀛愮骇鐨勪富棰樺簱鍒嗙被
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param allLevel        鏄惁鎵�鏈夌殑灞傜骇
+     * @param fieldInPath 鍦ㄨ矾寰勪腑鐨勫瓧娈�
+     * @param enable 鏄惁鍙樉绀哄惎鐢�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public List<CodeClassifyVO> listChildrenClassify(String codeClassifyOid, boolean allLevel, String fieldInPath, boolean enable) {
+        if(allLevel){
+            List<CodeClassifyDO> classifyDOS = codeClassifyMapper.selectAllLevelChildHasPath(codeClassifyOid,fieldInPath,enable);
+            if(!CollectionUtils.isEmpty(classifyDOS)){
+                classifyDOS = classifyDOS.stream().filter(s->FRAMEWORK_DATA_ENABLED.equalsIgnoreCase(s.getLcStatus())).collect(Collectors.toList());
+            }
+            return codeClassifyDO2VOs(classifyDOS);
+        }else{
+            //鍙煡璇竴鏉★紝閭ath灏辨病蹇呰鏌ヨ浜�
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("parentcodeclassifyoid",codeClassifyOid);
+            if (enable){
+                conditionMap.put(VciQueryWrapperForDO.LC_STATUS_FIELD,FRAMEWORK_DATA_ENABLED);
+            }
+            return codeClassifyDO2VOs(codeClassifyMapper.selectByCondition(conditionMap,new PageHelper(-1)));
+        }
+    }
+
+    /**
+     * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public List<CodeClassifyVO> listParentClassify(String codeClassifyOid){
+        List<CodeClassifyDO> classifyDOS = codeClassifyMapper.listParentClassify(codeClassifyOid);
+        return codeClassifyDO2VOs(classifyDOS);
+    }
+
+    /**
+     * 瀵煎嚭鍒嗙被
+     *
+     * @param oid 鍒嗙被涓婚敭
+     * @return excel鏂囦欢璺緞
+     */
+    @Override
+    public String exportClassify(String oid) {
+        VciBaseUtil.alertNotNull(oid,"鍒嗙被鐨勪富閿�");
+        CodeClassifyVO classifyVO = getObjectByOid(oid);
+        classifyVO.setDataLevel(0);
+        classifyVO.setPath(classifyVO.getId());
+        List<CodeClassifyVO> codeClassifyVOS = listChildrenClassify(oid, true, "id", false);
+        if(codeClassifyVOS ==null){
+            codeClassifyVOS = new ArrayList<>();
+        }
+        codeClassifyVOS.add(classifyVO);
+
+        //鏌ヨ涓�涓嬭鍒欑殑缂栧彿锛屽拰鍏抽敭灞炴�ч噸澶嶈鍒�
+        List<String> codeRuleOids = codeClassifyVOS.stream().filter(s -> StringUtils.isNotBlank(s.getCoderuleoid())).map(CodeClassifyVO::getCoderuleoid).collect(Collectors.toList());
+        Map<String, CodeRuleVO> ruleVOMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(codeRuleOids)){
+            VciBaseUtil.switchCollectionForOracleIn(codeRuleOids).stream().forEach(ruleOids->{
+                Collection<CodeRuleVO> ruleVOS = codeRuleService.listCodeRuleByOids(ruleOids);
+                ruleVOMap.putAll( Optional.ofNullable(ruleVOS).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)));
+            });
+        }
+        //鎵惧叧閿睘鎬ц鍒�
+        List<String> keyRuleOids = codeClassifyVOS.stream().filter(s -> StringUtils.isNotBlank(s.getCodekeyattrrepeatoid())).map(CodeClassifyVO::getCodekeyattrrepeatoid).collect(Collectors.toList());
+        Map<String, CodeKeyAttrRepeatRuleVO> keyRuleVOMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(keyRuleOids)){
+            VciBaseUtil.switchCollectionForOracleIn(keyRuleOids).stream().forEach(ruleOids->{
+                Collection<CodeKeyAttrRepeatRuleVO> ruleVOS = keyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByOids(ruleOids);
+                keyRuleVOMap.putAll( Optional.ofNullable(ruleVOS).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)));
+            });
+        }
+        //ok,鍐檈xcel
+        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + "瀵煎嚭鍒嗙被.xls";
+        try {
+            new File(excelName).createNewFile();
+        } catch (Throwable e) {
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
+        }
+        List<WriteExcelData> excelDataList = new ArrayList<>();
+        excelDataList.add(new WriteExcelData(0,0,"鍒嗙被缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,1,"鍒嗙被鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,2,"涓氬姟绫诲瀷缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,3,"涓氬姟绫诲瀷鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,4,"缂栫爜瑙勫垯缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,5,"缂栫爜瑙勫垯鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,6,"鏌ラ噸瑙勫垯缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,7,"鏌ラ噸瑙勫垯鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,8,"鍒嗙被璺緞"));
+        excelDataList.add(new WriteExcelData(0,9,"鐘舵��"));
+        excelDataList.add(new WriteExcelData(0,10,"鍒嗙被灞傜骇"));
+        excelDataList.add(new WriteExcelData(0,11,"鎻忚堪"));
+        for (int i = 0; i < codeClassifyVOS.size(); i++) {
+            CodeClassifyVO vo = codeClassifyVOS.get(i);
+            excelDataList.add(new WriteExcelData(i+1,0,vo.getId()));
+            excelDataList.add(new WriteExcelData(i+1,1,vo.getName()));
+            excelDataList.add(new WriteExcelData(i+1,2,vo.getBtmtypeid()));
+            excelDataList.add(new WriteExcelData(i+1,3,vo.getBtmtypename()));
+            excelDataList.add(new WriteExcelData(i+1,4,StringUtils.isNotBlank(vo.getCoderuleoid())?ruleVOMap.getOrDefault(vo.getCoderuleoid(),new CodeRuleVO()).getId():""));
+            excelDataList.add(new WriteExcelData(i+1,5,StringUtils.isNotBlank(vo.getCoderuleoid())?ruleVOMap.getOrDefault(vo.getCoderuleoid(),new CodeRuleVO()).getName():""));
+            excelDataList.add(new WriteExcelData(i+1,6,StringUtils.isNotBlank(vo.getCodekeyattrrepeatoid())?keyRuleVOMap.getOrDefault(vo.getCodekeyattrrepeatoid(),new CodeKeyAttrRepeatRuleVO()).getId():""));
+            excelDataList.add(new WriteExcelData(i+1,7,StringUtils.isNotBlank(vo.getCodekeyattrrepeatoid())?keyRuleVOMap.getOrDefault(vo.getCodekeyattrrepeatoid(),new CodeKeyAttrRepeatRuleVO()).getName():""));
+            excelDataList.add(new WriteExcelData(i+1,8,vo.getOid().equalsIgnoreCase(classifyVO.getOid())?vo.getPath():classifyVO.getPath() + vo.getPath()));
+            excelDataList.add(new WriteExcelData(i+1,9,FrameworkDataLCStatus.getTextByValue(vo.getLcStatus())));
+            excelDataList.add(new WriteExcelData(i+1,10,vo.getDataLevel()));
+            excelDataList.add(new WriteExcelData(i+1,11,vo.getDescription()));
+        }
+        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+        ExcelUtil.writeDataToFile(excelName, excelOption);
+        return excelName;
+    }
+
+    /**
+     * 鍒涘缓瀵煎叆妯℃澘
+     *
+     * @return excel鏂囦欢璺緞
+     */
+    @Override
+    public String createImportExcel() {
+        //ok,鍐檈xcel
+        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + "鍒嗙被瀵煎叆妯℃澘.xls";
+        try {
+            new File(excelName).createNewFile();
+        } catch (Throwable e) {
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
+        }
+        List<WriteExcelData> excelDataList = new ArrayList<>();
+        WriteExcelData excelData = new WriteExcelData(0, 0, "鍒嗙被缂栧彿");
+        excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+        excelDataList.add(excelData);
+        WriteExcelData excelData1 = new WriteExcelData(0, 1, "鍒嗙被鍚嶇О");
+        excelData1.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+        excelDataList.add(excelData1);
+        excelDataList.add(new WriteExcelData(0,2,"涓氬姟绫诲瀷缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,3,"缂栫爜瑙勫垯缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,4,"鏌ラ噸瑙勫垯缂栧彿"));
+        WriteExcelData excelData2 = new WriteExcelData(0, 5, "鍒嗙被璺緞");
+        excelData2.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+        excelDataList.add(excelData2);
+        excelDataList.add(new WriteExcelData(0,6,"鐘舵��"));
+        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+        ExcelUtil.writeDataToFile(excelName, excelOption);
+        return excelName;
+    }
+
+    /**
+     * 瀵煎叆鍒嗙被
+     *
+     * @param file1 鏂囦欢鐨勪俊鎭�
+     * @return 閿欒鏂囦欢鐨勫湴鍧�
+     */
+    @Override
+    public void importClassify(File file1) {
+        VciBaseUtil.alertNotNull(file1,"excel鏂囦欢");
+        if(!file1.exists()){
+            throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file1.getPath()});
+        }
+        ReadExcelOption excelOption = new ReadExcelOption();
+        List<CodeClassifyPO> poList = null;
+        try{
+            poList = ExcelUtil.readDataObjectFromExcel(file1,CodeClassifyPO.class,excelOption,(value,po,fieldName)->{
+                po.setLcStatus(FrameworkDataLCStatus.getValueByText(po.getLcStatusText()));
+                if(StringUtils.isBlank(po.getLcStatusText())){
+                    po.setLcStatus(FrameworkDataLCStatus.ENABLED.getValue());
+                }
+            });
+        }catch (Exception e){
+            if(logger.isErrorEnabled()){
+                logger.error("璇诲彇excel鍐呭鐨勬椂鍊欏嚭鐜颁簡閿欒",e);
+            }
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[]{},e);
+        }
+        //鍘婚櫎鏁磋閮芥槸绌虹殑鎯呭喌
+
+        if(CollectionUtils.isEmpty(poList)){
+            throw new VciBaseException(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
+        }
+
+        poList = poList.stream().filter(s->!(StringUtils.isBlank(s.getId()) && StringUtils.isBlank(s.getName()) && StringUtils.isBlank(s.getPath()))).collect(Collectors.toList());
+
+        List<CodeClassifyDO> classifyDOList = new ArrayList<>();
+        //鐪嬬湅璺緞鏄惁鏈夐噸澶�
+        Map<String/**璺緞**/, Long/**涓暟**/> pathCountMap = poList.stream().filter(s->StringUtils.isNotBlank(s.getPath())).collect(Collectors.groupingBy(s -> s.getPath(), Collectors.counting()));
+        List<String> repeatPaths = Optional.ofNullable(pathCountMap).orElse(new HashMap<>()).entrySet().stream().filter(entry -> entry.getValue() > 1).map(entry -> entry.getKey()).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatPaths)){
+            //鏈夐噸澶嶇殑鍐呭
+            List<String> rowIndexList = new ArrayList<>();
+            poList.stream().forEach(po->{
+                if(repeatPaths.contains(po.getPath())){
+                    rowIndexList.add(po.getRowIndex());
+                }
+            });
+            throw new VciBaseException("璺緞鏈夐噸澶�,{0}",new String[]{rowIndexList.stream().collect(Collectors.joining(","))});
+        }
+
+        Map<String, CodeRuleVO> ruleVOMap = Optional.ofNullable(codeRuleService.listCodeRuleByIds(
+                poList.stream().filter(s->StringUtils.isNotBlank(s.getCodeRuleId())).map(CodeClassifyPO::getCodeRuleId).collect(Collectors.toList()))
+        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
+
+        Map<String,CodeKeyAttrRepeatRuleVO> keyRuleVOMap =Optional.ofNullable(keyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByIds(
+                poList.stream().filter(s->StringUtils.isNotBlank(s.getKeyRepeatRuleId())).map(CodeClassifyPO::getKeyRepeatRuleId).collect(Collectors.toList()))
+        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
+
+        Map<String, OsBtmTypeVO> btmVOMap = Optional.ofNullable(btmService.listBtmByIds(
+                poList.stream().filter(s -> StringUtils.isNotBlank(s.getBtmTypeId())).map(CodeClassifyPO::getBtmTypeId).collect(Collectors.toList()))
+        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
+
+        Map<String/**璺緞**/,String/**涓婚敭**/> oidPathMap = new HashMap<>();
+
+        //鎴戜滑闇�瑕佹煡璇㈡墍鏈夊凡缁忓瓨鍦ㄧ殑鍒嗙被锛屼富瑕佹槸璺緞锛岀敤鏉ュ垽鏂垎绫荤殑鏁版嵁
+        List<CodeClassifyDO> existClassifyDOs = codeClassifyMapper.selectAllLevelChildHasPath("", "id", false);
+        Map<String/**璺緞**/, CodeClassifyDO/**宸茬粡瀛樺湪鐨勬暟鎹�**/> pathDOMap = Optional.ofNullable(existClassifyDOs).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> {
+            String path = s.getPath();
+            if(StringUtils.isNotBlank(path) && path.startsWith("#")){
+                return path.substring(1);
+            }
+            return path;
+        }, t -> t));
+        poList.stream().forEach(po->{
+            CodeClassifyDO classifyDO = new CodeClassifyDO();
+            VciBaseUtil.alertNotNull(po.getId(),"鍒嗙被缂栧彿",po.getName(),"鍒嗙被鍚嶇О",po.getPath(),"鍒嗙被璺緞");
+            if(StringUtils.isNotBlank(po.getBtmTypeId()) && !btmVOMap.containsKey(po.getBtmTypeId().toLowerCase(Locale.ROOT))){
+                throw new VciBaseException("绗瑊0}琛岀殑涓氬姟绫诲瀷{1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(VciBaseUtil.getInt(po.getRowIndex())+1),po.getBtmTypeId()});
+            }
+            if(StringUtils.isNotBlank(po.getCodeRuleId()) && !ruleVOMap.containsKey(po.getCodeRuleId().toLowerCase(Locale.ROOT))){
+                throw new VciBaseException("绗瑊0}琛岀殑缂栫爜瑙勫垯{1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(po.getRowIndex()+1),po.getCodeRuleId()});
+            }
+            if(StringUtils.isNotBlank(po.getKeyRepeatRuleId()) && !keyRuleVOMap.containsKey(po.getKeyRepeatRuleId().toLowerCase(Locale.ROOT))){
+                throw new VciBaseException("绗瑊0}琛岀殑鍏抽敭灞炴�ф煡閲嶈鍒檣1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(po.getRowIndex()+1),po.getKeyRepeatRuleId()});
+            }
+            classifyDO.setOid(VciBaseUtil.getPk());
+            classifyDO.setId(po.getId());
+            classifyDO.setName(po.getName());
+            classifyDO.setDescription(po.getDescription());
+            oidPathMap.put(po.getPath(),classifyDO.getOid());
+            if(StringUtils.isNotBlank(po.getBtmTypeId())){
+                OsBtmTypeVO typeVO = btmVOMap.get(po.getBtmTypeId().toLowerCase(Locale.ROOT));
+                classifyDO.setBtmTypeId(typeVO.getId());
+                classifyDO.setBtmTypeName(typeVO.getName());
+            }
+            if(StringUtils.isNotBlank(po.getCodeRuleId())){
+                CodeRuleVO codeRuleVO = ruleVOMap.get(po.getCodeRuleId().toLowerCase(Locale.ROOT));
+                classifyDO.setCodeRuleOid(codeRuleVO.getOid());
+            }
+            if(StringUtils.isNotBlank(po.getKeyRepeatRuleId())){
+                CodeKeyAttrRepeatRuleVO repeatRuleVO = keyRuleVOMap.get(po.getKeyRepeatRuleId());
+                classifyDO.setCodeKeyAttrRepeatOid(repeatRuleVO.getOid());
+            }
+            classifyDO.setLcStatus(po.getLcStatus());
+            classifyDO.setPath(po.getPath());
+            classifyDOList.add(classifyDO);
+        });
+        //瑕佺湅瀛樺湪鐨勶紝淇敼璺緞瀵瑰簲鐨勪富閿�
+        Map<String/**璺緞**/,String/**涓婚敭**/> catchedOidPathMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(oidPathMap)){
+            oidPathMap.forEach((path,oid)->{
+                if(pathDOMap.containsKey(path)){
+                    //璇存槑瀛樺湪
+                    catchedOidPathMap.put(path,pathDOMap.get(path).getOid());
+                }else{
+                    catchedOidPathMap.put(path,oid);
+                }
+            });
+        }
+        List<CodeClassifyDO> addClassifyDOList = new ArrayList<>();
+        List<CodeClassifyDO> editClassifyDOList = new ArrayList<>();
+        classifyDOList.stream().forEach(classifyDO->{
+
+            //瑕佺湅涓婄骇鏄笉鏄瓨鍦ㄥ摝
+            String parentPath = classifyDO.getPath();
+            if(parentPath.contains("#")) {
+                parentPath = parentPath.substring(0, parentPath.lastIndexOf("#"));
+            }
+            if((!catchedOidPathMap.containsKey(parentPath) && !pathDOMap.containsKey(parentPath) )&& !classifyDO.getPath().equalsIgnoreCase(classifyDO.getId())){
+                throw new VciBaseException("鍒嗙被缂栧彿[{0}],鍒嗙被鍚嶇О[{1}]锛岃矾寰勪负[{2}]鐨勪笂绾у垎绫诲湪绯荤粺涓紝鍦ㄦ湰娆″鍏ョ殑鏁版嵁鍜岀郴缁熶腑鍧囨病鏈夋壘鍒�",new String[]{classifyDO.getId(),classifyDO.getName(),classifyDO.getPath()});
+            }
+            if (!classifyDO.getPath().equalsIgnoreCase(classifyDO.getId())){
+                //涓嶆槸椤剁骇鐨勬椂鍊欙紝瑕佽缃笂绾х殑涓婚敭
+
+                classifyDO.setParentCodeClassifyOid(catchedOidPathMap.containsKey(parentPath)?catchedOidPathMap.get(parentPath):pathDOMap.get(parentPath).getOid());
+            }
+            if(classifyDO.getPath().equalsIgnoreCase(classifyDO.getId()) && StringUtils.isBlank(classifyDO.getBtmTypeId())){
+                throw new VciBaseException("鍒嗙被缂栧彿[{0}],鍒嗙被鍚嶇О[{1}]锛屾槸椤跺眰鍒嗙被锛岄渶瑕佽缃笟鍔$被鍨嬬紪鍙�",new String[]{classifyDO.getId(),classifyDO.getName()});
+            }
+            if(pathDOMap.containsKey(classifyDO.getPath())){
+                //瀛樺湪锛岄渶瑕佷慨鏀瑰璞�
+                classifyDO.setOid(catchedOidPathMap.get(classifyDO.getPath()));
+                CodeClassifyDO classifyDOInDB = pathDOMap.get(classifyDO.getPath());
+                classifyDOInDB.setId(classifyDO.getId());
+                classifyDOInDB.setName(classifyDO.getName());
+                classifyDOInDB.setDescription(classifyDO.getDescription());
+                classifyDOInDB.setBtmTypeId(classifyDO.getBtmTypeId());
+                classifyDOInDB.setBtmTypeName(classifyDO.getBtmTypeName());
+                classifyDOInDB.setCodeRuleOid(classifyDO.getCodeRuleOid());
+                classifyDOInDB.setCodeRuleOidName(classifyDO.getCodeRuleOidName());
+                classifyDOInDB.setParentCodeClassifyOid(classifyDO.getParentCodeClassifyOid());
+                classifyDOInDB.setCodeKeyAttrRepeatOid(classifyDO.getCodeKeyAttrRepeatOid());
+                classifyDOInDB.setCodeKeyAttrRepeatOidName(classifyDO.getCodeKeyAttrRepeatOidName());
+                if(classifyDOInDB.getOrderNum() == null){
+                    classifyDOInDB.setOrderNum(0);
+                }
+                editClassifyDOList.add(classifyDOInDB);
+            }else{
+                //鏄柊鐨勶紝鐩存帴娣诲姞灏辫浜�
+                //鍒ゆ柇鍙锋�庝箞澶勭悊?
+                classifyDO.setOrderNum(0);
+                addClassifyDOList.add(classifyDO);
+            }
+        });
+        if(!CollectionUtils.isEmpty(editClassifyDOList)){
+            VciBaseUtil.switchCollectionForOracleIn(editClassifyDOList).stream().forEach(classifyDOs->{
+                codeClassifyMapper.batchUpdate(classifyDOs.stream().collect(Collectors.toList()));
+            });
+        }
+        if(!CollectionUtils.isEmpty(addClassifyDOList)){
+            revisionModelUtil.wrapperForBatchAdd(addClassifyDOList);
+            VciBaseUtil.switchCollectionForOracleIn(addClassifyDOList).stream().forEach(classifyDOs->{
+                codeClassifyMapper.batchInsert(classifyDOs.stream().collect(Collectors.toList()));
+            });
+        }
+
+    }
+
+    /**
+     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
+     *
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢
+     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
+     */
+    @Override
+    public DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject) {
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        if(baseQueryObject.getConditionMap() == null){
+            baseQueryObject.setConditionMap(new HashMap<>());
+        }
+        String classifyOid = baseQueryObject.getConditionMap().getOrDefault("codeClassifyOid","");
+        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
+        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
+        if(StringUtils.isBlank(classifyOid)){
+            return new DataGrid<>();
+        }
+        CodeClassifyVO topClassifyVO = getTopClassifyVO(classifyOid);
+        if(topClassifyVO == null || StringUtils.isBlank(topClassifyVO.getBtmtypeid())){
+            return new DataGrid<>();
+        }
+        List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService.listAttributeByBtmId(topClassifyVO.getBtmtypeid());
+        List<OsAttributeVO> attributeVOS = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(unDefaultAttributes)){
+            unDefaultAttributes.stream().forEach(attr->{
+                OsAttributeVO attributeVO = new OsAttributeVO();
+                BeanUtil.convert(attr,attributeVO);
+                attributeVO.setAttributeDataType(attr.getAttrDataType());
+                attributeVO.setAttrLength(attr.getAttributeLength());
+                attributeVO.setBtmTypeId(attr.getReferBtmTypeId());
+                attributeVO.setBtmTypeName(attr.getReferBtmTypeName());
+                boolean add = true;
+                if(StringUtils.isNotBlank(id) && !attributeVO.getId().contains(id.replace("*",""))){
+                    add = false;
+                }
+                if(StringUtils.isNotBlank(name) && !attributeVO.getId().contains(name.replace("*",""))){
+                    add = false;
+                }
+                if(add){
+                    attributeVOS.add(attributeVO);
+                }
+            });
+        }
+        if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){
+            attributeService.getDefaultAttributeVOs().stream().forEach(attr->{
+                boolean add = true;
+                if(StringUtils.isNotBlank(id) && !attr.getId().contains(id.replace("*",""))){
+                    add = false;
+                }
+                if(StringUtils.isNotBlank(name) && !attr.getId().contains(name.replace("*",""))){
+                    add = false;
+                }
+                if(add){
+                    attributeVOS.add(attr);
+                }
+            });
+        }
+        DataGrid<OsAttributeVO> dataGrid = new DataGrid<>();
+        dataGrid.setData(attributeVOS);
+        dataGrid.setTotal(attributeVOS.size());
+        return dataGrid;
+    }
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     *
+     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeClassifyVO getObjectByIdPath(String idPath) {
+        CodeClassifyDO classifyDO = codeClassifyMapper.selectByFieldPath(idPath, VciQueryWrapperForDO.ID_FIELD);
+        return codeClassifyDO2VO(classifyDO);
+    }
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     *
+     * @param clsfNamePath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeClassifyVO getObjectByClsfNamePath(String clsfNamePath){
+        CodeClassifyDO classifyDO = codeClassifyMapper.selectByFieldPath(clsfNamePath, "name");
+        return codeClassifyDO2VO(classifyDO);
+    }
+
+    /***
+     * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
+     * @param codeClassifyId
+     * @param enable
+     * @return
+     */
+    @Override
+   public  List<CodeClassifyVO> getIdPathToNamePathByParentId(String codeClassifyId,boolean enable){
+
+        List<CodeClassifyDO> classifyDOs= codeClassifyMapper.getIdPathToNamePathByParentId(codeClassifyId,enable);
+        return codeClassifyDO2VOs(classifyDOs);
+
+   }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTempMapItemServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTempMapItemServiceImpl.java
new file mode 100644
index 0000000..0c7fcfe
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTempMapItemServiceImpl.java
@@ -0,0 +1,297 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeClassifyTempMapItemDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTempMapItemDO;
+import com.vci.ubcs.code.service.CodeClassifyTempMapItemServiceI;
+import com.vci.ubcs.code.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeClassifyTempMapItemDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTempMapItemVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘湇鍔�
+ * @author weidy
+ * @date 2022-03-10
+ */
+@Service
+public class CodeClassifyTempMapItemServiceImpl implements CodeClassifyTempMapItemServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTempMapItemDaoI codeClassifyTempMapItemMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 鍒嗙被妯℃澘灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI attrService;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeClassifyTempMapItemDO> doList = codeClassifyTempMapItemMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyTempMapItemVO> dataGrid=new DataGrid<CodeClassifyTempMapItemVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            //濉厖鏄犲皠鏄庣粏涓垎绫绘ā鏉垮睘鎬х殑鍊�
+            List<String> attrOidList = doList.stream().map(CodeClassifyTempMapItemDO::getClassifyTemplateAttrOid).collect(Collectors.toList());
+            List<CodeClassifyTemplateAttrVO> attrVOS = (List<CodeClassifyTemplateAttrVO>) attrService.listCodeClassifyTemplateAttrByOids(attrOidList);
+            attrVOS.forEach(attr -> {
+                doList.stream().filter(item -> {
+                    return item.getClassifyTemplateAttrOid().equals(attr.getOid());
+                }).forEach(item -> {
+                    item.setClassifyAttrId(attr.getId());
+                    item.setClassifyAttrName(attr.getName());
+                });
+            });
+            dataGrid.setData(codeClassifyTempMapItemDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTempMapItemMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTempMapItemDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO>  codeClassifyTempMapItemDOs) throws VciBaseException{
+        List<CodeClassifyTempMapItemVO> voList = new ArrayList<CodeClassifyTempMapItemVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTempMapItemDOs)){
+           for(CodeClassifyTempMapItemDO s: codeClassifyTempMapItemDOs){
+                CodeClassifyTempMapItemVO vo =  codeClassifyTempMapItemDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTempMapItemDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTempMapItemVO codeClassifyTempMapItemDO2VO(CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) throws VciBaseException{
+              CodeClassifyTempMapItemVO vo = new CodeClassifyTempMapItemVO();
+        if(codeClassifyTempMapItemDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTempMapItemVO addSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = new CodeClassifyTempMapItemDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
+        codeClassifyTempMapItemMapper.insert(codeClassifyTempMapItemDO);
+        return codeClassifyTempMapItemDO2VO(codeClassifyTempMapItemDO);
+    }
+
+    /**
+     * 淇敼鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyTempMapItemVO editSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"鏁版嵁瀵硅薄",codeClassifyTempMapItemDTO.getOid(),"鏄犲皠瑙勫垯鐨勬槑缁嗕富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByOid(codeClassifyTempMapItemDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
+         codeClassifyTempMapItemMapper.updateByPrimaryKey(codeClassifyTempMapItemDO);
+         return codeClassifyTempMapItemDO2VO(codeClassifyTempMapItemDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTempMapItemDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTempMapItemDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO, CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) {
+            CodeClassifyTempMapItemDO tsDO = new CodeClassifyTempMapItemDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeClassifyTempMapItemDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTempMapItem(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�",codeClassifyTempMapItemDTO.getOid(),"鏄犲皠瑙勫垯鐨勬槑缁嗙殑涓婚敭");
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByOid(codeClassifyTempMapItemDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTempMapItemMapper.deleteByPrimaryKey(codeClassifyTempMapItemDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+    * @param oid 涓婚敭
+    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTempMapItemVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTempMapItemDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTempMapItemDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = codeClassifyTempMapItemMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTempMapItemDO == null || StringUtils.isBlank(codeClassifyTempMapItemDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTempMapItemDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOList = listCodeClassifyTempMapItemDOByOidCollections(oidCollections);
+        return codeClassifyTempMapItemDO2VOs(codeClassifyTempMapItemDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTempMapItemDO> listCodeClassifyTempMapItemDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOList = new ArrayList<CodeClassifyTempMapItemDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTempMapItemDO> tempDOList =  codeClassifyTempMapItemMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTempMapItemDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTempMapItemDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyTempMapItem(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
new file mode 100644
index 0000000..f2dd153
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -0,0 +1,728 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.CodeClassifyTemplateAttrDaoI;
+import com.vci.ubcs.code.dao.CodeClassifyTemplateDaoI;
+import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
+import com.vci.ubcs.code.model.CodeClassifyTemplateAttrDO;
+import com.vci.ubcs.code.model.CodeClassifyTemplateDO;
+import com.vci.ubcs.code.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.ubcs.code.service.CodeTemplatePhaseServiceI;
+import com.vci.ubcs.code.utils.PatternUtil;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.util.VciDateUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.OsBtmTypeAttributeVO;
+import com.vci.web.pageModel.UIFormReferVO;
+import com.vci.web.service.BdSelectInputCharServiceI;
+import com.vci.web.service.OsAttributeServiceI;
+import com.vci.web.service.OsBtmServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateAttrDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateAttrServiceImpl implements CodeClassifyTemplateAttrServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateAttrDaoI codeClassifyTemplateAttrMapper;
+
+    /**
+     * 妯℃澘鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
+
+    /**
+     * 妯℃澘鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeTemplatePhaseServiceI codeTemplatePhaseServiceI;
+
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+	@Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 鏌ヨ杩欎釜涓氬姟绫诲瀷鐨勬墍鏈夊睘鎬�
+     */
+    @Autowired
+    private OsBtmServiceI btmService;
+
+    /**
+     * 鍙�夊彲杈撴湇鍔�
+     */
+    @Autowired
+    private BdSelectInputCharServiceI charService;
+
+    /**
+     * 灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private OsAttributeServiceI attributeService;
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        DataGrid<CodeClassifyTemplateAttrVO> dataGrid=new DataGrid<CodeClassifyTemplateAttrVO>();
+        //娌℃湁浼犻�掑弬鏁帮紝灏变笉鎵ц鏌ヨ閫昏緫
+        if(conditionMap.size()==0){
+            dataGrid.setData(new ArrayList<>());
+            dataGrid.setTotal(0);
+            return dataGrid;
+        }
+
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultAsc("ordernum");
+        List<CodeClassifyTemplateAttrDO> doList = codeClassifyTemplateAttrMapper.selectByCondition(conditionMap,pageHelper);
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateAttrMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttrDO>  codeClassifyTemplateAttrDOs) throws VciBaseException{
+        List<CodeClassifyTemplateAttrVO> voList = new ArrayList<CodeClassifyTemplateAttrVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOs)){
+           for(CodeClassifyTemplateAttrDO s: codeClassifyTemplateAttrDOs){
+                CodeClassifyTemplateAttrVO vo =  codeClassifyTemplateAttrDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) throws VciBaseException{
+              CodeClassifyTemplateAttrVO vo = new CodeClassifyTemplateAttrVO();
+        if(codeClassifyTemplateAttrDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributedatatype()));
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateAttrVO addSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttrDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+        codeClassifyTemplateAttrMapper.insert(codeClassifyTemplateAttrDO);
+        return codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO);
+    }
+
+    /**
+     * 鎵归噺娣诲姞
+     * @param codeClassifyTemplateAttrDTOs 鏁版嵁浼犺緭瀵硅薄
+     * @return 淇濆瓨鍚庣殑鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateAttrVO> batchAddSave(List<CodeClassifyTemplateAttrDTO> codeClassifyTemplateAttrDTOs) throws VciBaseException{
+        if(CollectionUtils.isEmpty(codeClassifyTemplateAttrDTOs)){
+            return new ArrayList<>();
+        }
+
+        //鍙栨墍鏈夊睘鎬х殑鑻辨枃鍚嶇О锛岀涓変釜楠岃瘉闇�瑕佺敤鍒�
+        Map<String,CodeClassifyTemplateAttrDTO> attrDTOMap =codeClassifyTemplateAttrDTOs.stream().collect(Collectors.toMap(s->s.getId().toLowerCase(Locale.ROOT), t->t));
+
+        //鎵惧睘鎬т腑鏂囧悕瀛楅噸澶�
+        Map<String, Long> nameCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getName(), Collectors.counting()));
+        List<String> repeatNameList = nameCountMap.keySet().stream().filter(s -> nameCountMap.get(s) > 1).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatNameList)){
+            throw new VciBaseException("妯℃澘灞炴�т腑鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatNameList.stream().collect(Collectors.joining(","))});
+        }
+        //鎵惧睘鎬ц嫳鏂囧悕瀛楅噸澶�
+        Map<String, Long> idCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getId().toLowerCase(Locale.ROOT), Collectors.counting()));
+        List<String> repeatIdList = idCountMap.keySet().stream().filter(s -> idCountMap.get(s) > 1).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatIdList)){
+            throw new VciBaseException("妯℃澘灞炴�ц嫳鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatIdList.stream().collect(Collectors.joining(","))});
+        }
+
+        //妯℃澘oid
+        String CLASSIFYTEMPLATEOID = null;
+        //杞崲
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOInsert = new ArrayList<CodeClassifyTemplateAttrDO>();
+        List<String> prefix = new ArrayList<>();
+        List<String> suffix = new ArrayList<>();
+        List<String> dateFormates = new ArrayList<>();
+        for (CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO:codeClassifyTemplateAttrDTOs){
+            VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+            //灏咲TO杞崲涓篋O
+            CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttrDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+            codeClassifyTemplateAttrDOInsert.add(codeClassifyTemplateAttrDO);
+
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getPrefixValue())){
+                prefix.add(codeClassifyTemplateAttrDO.getPrefixValue());
+            }
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getSuffixValue())){
+                suffix.add(codeClassifyTemplateAttrDO.getSuffixValue());
+            }
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat())){
+                dateFormates.add(codeClassifyTemplateAttrDO.getCodeDateFormat());
+            }
+            //鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDO.getEnumString())){
+                throw new VciBaseException("{0}{1}灞炴�х殑鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+            //鍒嗙被娉ㄥ叆
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getClassifyInvokeAttr())
+             && !CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(codeClassifyTemplateAttrDO.getClassifyInvokeLevel())
+            && VciBaseUtil.getInt(codeClassifyTemplateAttrDO.getClassifyInvokeLevel()) < 0){
+                throw new VciBaseException("{0}{1}灞炴�х殑鏄垎绫绘敞鍏ワ紝浣嗘槸娉ㄥ叆灞傜骇涓嶈兘灏忎簬0!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+
+            //鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getReferConfig())&&!checkKVObj(codeClassifyTemplateAttrDO.getReferConfig())){
+                throw new VciBaseException("{0}{1}灞炴�х殑鍙傜収閰嶇疆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat()) && !checkDateFormat(codeClassifyTemplateAttrDO.getCodeDateFormat())){
+                throw new VciBaseException("{0}{1}灞炴�х殑鏃堕棿鏍煎紡涓嶇鍚堣姹�",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+            //濡傛灉鏄粍鍚堣鍒欙紝閲岄潰浣跨敤鐨勫睘鎬т笉鑳界己澶憋紝涔熼兘寰楁樉绀�
+            String componentrule = codeClassifyTemplateAttrDTO.getComponentrule();
+            boolean isContainsDynamicParameter = PatternUtil.isContainsDynamicParameter(componentrule);
+            if(isContainsDynamicParameter){
+                List<String> userdAttrList =  PatternUtil.getKeyListByContent(componentrule);//鍖呭惈鐨勬墍鏈�${xxx}涓殑xxx
+                if(!CollectionUtils.isEmpty(userdAttrList)){
+                    String unExistAttr = userdAttrList.stream().filter(s -> !attrDTOMap.containsKey(s.toLowerCase(Locale.ROOT))).collect(Collectors.joining(","));
+                    if(StringUtils.isNotBlank(unExistAttr)){
+                          throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑涓嶅瓨鍦�!",new String[]{codeClassifyTemplateAttrDO.getName(), unExistAttr});
+                    }
+                    //瑕佺湅鐪嬭〃鍗曟槸鍚︽樉绀�
+                    String unFormDisplayAttr = userdAttrList.stream().filter(s -> !VciBaseUtil.getBoolean(attrDTOMap.getOrDefault(s.toLowerCase(Locale.ROOT),
+                            new CodeClassifyTemplateAttrDTO()).getFormdisplayflag())).collect(Collectors.joining(","));
+                    if(StringUtils.isNotBlank(unFormDisplayAttr)){
+                        throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑娌℃湁璁剧疆 琛ㄥ崟鏄剧ず ",new String[]{codeClassifyTemplateAttrDO.getName(),unFormDisplayAttr});
+                    }
+                }
+            }
+
+            if(CLASSIFYTEMPLATEOID==null){
+                CLASSIFYTEMPLATEOID = codeClassifyTemplateAttrDTO.getClassifytemplateoid();
+            }
+
+        }
+
+        //鎵ц鏁版嵁淇濆瓨鎿嶄綔
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+        //鍏堥兘鍒犱簡
+        VciQueryWrapperForDO deleteAttrWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        deleteAttrWrapper.addQueryMap("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDODelete = codeClassifyTemplateAttrMapper.selectByWrapper(deleteAttrWrapper);
+
+        //oids
+        List<String> oids = new ArrayList<String>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDODelete){
+            oids.add(codeClassifyTemplateAttrDO.getOid());
+        }
+        BatchCBO batchCBOTemplateDelete = new BatchCBO();
+        if(!CollectionUtils.isEmpty(oids)){
+            batchCBOTemplateDelete = codeClassifyTemplateAttrMapper.batchDeleteByOids(oids);
+        }
+
+        //鍐嶆柊澧�
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
+            BatchCBO batchCBOTemplateAdd = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOInsert);
+            batchCBOTemplateDelete.copyFromOther(batchCBOTemplateAdd);
+        }
+
+        //璋冪敤闃舵
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
+            BatchCBO batchCBO0 = codeTemplatePhaseServiceI.codeTemplateAttrModifyTrigger(codeClassifyTemplateAttrDOInsert);
+            batchCBOTemplateDelete.copyFromOther(batchCBO0);
+        }
+
+        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+        //澶勭悊鍙緭鍙�夌殑瀛楃
+        if(!CollectionUtils.isEmpty(prefix)){
+            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"prefix",prefix,sessionInfo);
+        }
+        if(!CollectionUtils.isEmpty(suffix)){
+            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"suffix",suffix,sessionInfo);
+        }
+        if(!CollectionUtils.isEmpty(dateFormates)){
+            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"dateFormates",dateFormates,sessionInfo);
+        }
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBOTemplateDelete);//涓�璧锋墽琛屼繚瀛�
+        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOInsert);
+    }
+
+    /**
+     * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public BaseResult editSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�т富閿�");
+
+         //鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
+         if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDTO.getEnumString())){
+             throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
+         }
+
+         //鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
+         if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getReferbtmid())&&!checkKVObj(codeClassifyTemplateAttrDTO.getReferbtmid())){
+             throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
+         }
+
+
+         //妫�鏌s
+         CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOCopyFromDTO = new CodeClassifyTemplateAttrDO();
+         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDOCopyFromDTO);
+         boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOCopyFromDTO);
+         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+         }
+
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(codeClassifyTemplateAttrDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+         codeClassifyTemplateAttrMapper.updateByPrimaryKey(codeClassifyTemplateAttrDO);
+         return BaseResult.success(codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO));
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateAttrDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO, CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) {
+        boService.checkTs(codeClassifyTemplateAttrDO);
+        if(!checkIsLinked(codeClassifyTemplateAttrDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplateAttr(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�х殑涓婚敭");
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(codeClassifyTemplateAttrDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTemplateAttrMapper.deleteByPrimaryKey(codeClassifyTemplateAttrDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateAttrVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateAttrDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateAttrDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = codeClassifyTemplateAttrMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateAttrDO == null || StringUtils.isBlank(codeClassifyTemplateAttrDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateAttrDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = listCodeClassifyTemplateAttrDOByOidCollections(oidCollections);
+        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateAttrDO> listCodeClassifyTemplateAttrDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = new ArrayList<CodeClassifyTemplateAttrDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateAttrDO> tempDOList =  codeClassifyTemplateAttrMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateAttrDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTemplateAttrDOList;
+    }
+
+    /**
+     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
+    }
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    @Override
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
+        if(baseQueryObject.getConditionMap() == null){
+            baseQueryObject.setConditionMap(new HashMap<>());
+        }
+        DataGrid<OsBtmTypeAttributeVO> dataGrid=new DataGrid<OsBtmTypeAttributeVO>();
+        //妯℃澘oid
+        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
+        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
+        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
+
+        //娌℃湁oid涓嶆墽琛岄�昏緫
+        if(StringUtils.isBlank(templateAttrOid)){
+            dataGrid.setData(new ArrayList<>());
+            dataGrid.setTotal(0);
+            return dataGrid;
+        }
+
+        //鏌ヨ妯℃澘瀵硅薄
+        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(templateAttrOid);
+
+        //杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
+        List<OsBtmTypeAttributeVO> boAttrs = this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
+
+        //鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
+        if(boAttrs == null){
+            boAttrs = new ArrayList<>();
+        }
+        if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){
+            List<OsBtmTypeAttributeVO> finalBoAttrs = boAttrs;
+            attributeService.getDefaultAttributeVOs().stream().forEach(attr-> {
+                OsBtmTypeAttributeVO attributeVO = new OsBtmTypeAttributeVO();
+                BeanUtil.convert(attr, attributeVO);
+                if (VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(attributeVO.getId())) {
+                    attributeVO.setName("浼佷笟缂栫爜");
+                }
+                if ("name".equalsIgnoreCase(attributeVO.getId())) {
+                    attributeVO.setName("闆嗗洟鐮�");
+                }
+                attributeVO.setAttrDataType(attr.getAttributeDataType());
+                attributeVO.setAttributeLength(attr.getAttrLength());
+                attributeVO.setReferBtmTypeId(attr.getBtmTypeId());
+                attributeVO.setReferBtmTypeName(attr.getBtmTypeName());
+                finalBoAttrs.add(attributeVO);
+            });
+            boAttrs = finalBoAttrs;
+        }
+
+        //杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
+        List<String> btmOids = new ArrayList<String>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+            btmOids.add(codeClassifyTemplateAttrDO.getId());
+        }
+
+        //杩囨护鎺夊凡缁忓瓨鍦ㄧ殑灞炴��
+        List<OsBtmTypeAttributeVO> boAttrss = new ArrayList<OsBtmTypeAttributeVO>();
+        for (OsBtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
+            if(!btmOids.contains(osBtmTypeAttributeVO.getId())){
+                //鐪嬬湅鏄笉鏄湁妯$硦鏌ヨ
+                boolean inSearch = true;
+                if(StringUtils.isNotBlank(name) && !osBtmTypeAttributeVO.getName().contains(name.replace("*",""))){
+                    inSearch = false;
+                }
+                if(StringUtils.isNotBlank(id) && !osBtmTypeAttributeVO.getId().contains(id.replace("*",""))){
+                    inSearch = false;
+                }
+                if(inSearch) {
+                    boAttrss.add(osBtmTypeAttributeVO);
+                }
+            }
+        }
+        dataGrid.setData(boAttrss);
+        dataGrid.setTotal(boAttrss.size());
+        return dataGrid;
+    }
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    @Override
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
+        DataGrid<OsBtmTypeAttributeVO> dataGrid=new DataGrid<OsBtmTypeAttributeVO>();
+        //妯℃澘oid
+        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
+
+        //娌℃湁oid涓嶆墽琛岄�昏緫
+        if(StringUtils.isBlank(templateAttrOid)){
+            dataGrid.setData(new ArrayList<>());
+            dataGrid.setTotal(0);
+            return dataGrid;
+        }
+
+        //鏌ヨ妯℃澘瀵硅薄
+        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(templateAttrOid);
+
+        //杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
+        List<OsBtmTypeAttributeVO> boAttrs = this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
+
+        //杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
+        List<String> btmOids = new ArrayList<String>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+            btmOids.add(codeClassifyTemplateAttrDO.getId());
+        }
+
+        //杩囨护鎺夐櫎浜嗚嚜韬殑鍒殑灞炴��
+        List<OsBtmTypeAttributeVO> boAttrss = new ArrayList<OsBtmTypeAttributeVO>();
+        for (OsBtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
+            if(btmOids.contains(osBtmTypeAttributeVO.getId())){
+                boAttrss.add(osBtmTypeAttributeVO);
+            }
+        }
+        dataGrid.setData(boAttrss);
+        dataGrid.setTotal(boAttrss.size());
+        return dataGrid;
+    }
+    /**
+     * 鍚屾鍒板叾浠栨ā鏉�
+     * @param codeClassifyTemplateAttrDTO oid
+     * @return
+     */
+    @Override
+    public BaseResult copyto(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+
+        String templateAttrOid = codeClassifyTemplateAttrDTO.getOid();
+
+        //鏌ヨ鍑烘潵瑕佸鍒剁殑瀵硅薄
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(templateAttrOid);
+        String id = codeClassifyTemplateAttrDO.getId();//鑻辨枃鍚嶇О
+        String classfyTemplateOid = codeClassifyTemplateAttrDO.getClassifyTemplateOid();
+
+        //鏌ヨ鍏朵粬id=id鐨勬ā鏉垮睘鎬�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        queryWrapper.addQueryMap("id",id);
+        //鎵�鏈塱d=id鐨勬ā鏉垮睘鎬�
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
+        //瑕佸垹闄ょ殑妯℃澘灞炴�х殑oids
+        List<String> deleteOids = new ArrayList<String>();
+        //瑕佷慨鏀圭殑妯℃澘灞炴�у璞�
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOListInsert = new ArrayList<CodeClassifyTemplateAttrDO>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOi:codeClassifyTemplateAttrDOList){
+            String oid = codeClassifyTemplateAttrDOi.getOid();
+            String templateOldOid = codeClassifyTemplateAttrDOi.getClassifyTemplateOid();
+
+            CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOInsert = new CodeClassifyTemplateAttrDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,codeClassifyTemplateAttrDOInsert);
+            codeClassifyTemplateAttrDOInsert.setOid(oid);
+            codeClassifyTemplateAttrDOInsert.setClassifyTemplateOid(templateOldOid);
+            codeClassifyTemplateAttrDOListInsert.add(codeClassifyTemplateAttrDOInsert);
+
+            deleteOids.add(codeClassifyTemplateAttrDOi.getOid());
+        }
+
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+        //鍒犻櫎
+        BatchCBO batchCBOTemplateAttrDelete = codeClassifyTemplateAttrMapper.batchDeleteByOids(deleteOids);
+
+        //鍐嶆柊澧�
+        BatchCBO batchCBOTemplateAttrInsert = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOListInsert);
+        batchCBOTemplateAttrDelete.copyFromOther(batchCBOTemplateAttrInsert);
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBOTemplateAttrDelete);//涓�璧锋墽琛屼繚瀛�
+
+        return BaseResult.success();
+    }
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
+     *
+     * @param templateOidCollection 妯℃澘鐨勪富閿�
+     * @return 灞炴�х殑淇℃伅
+     */
+    @Override
+    public List<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection) {
+        if(CollectionUtils.isEmpty(templateOidCollection)){
+            return new ArrayList<>();
+        }
+        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
+        VciBaseUtil.switchCollectionForOracleIn(templateOidCollection).stream().forEach(templateOids->{
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOids.toArray(new String[0])) + ")");
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("orderNum");
+            List<CodeClassifyTemplateAttrDO> attrDOS = codeClassifyTemplateAttrMapper.selectByCondition(conditionMap, pageHelper);
+            if(!CollectionUtils.isEmpty(attrDOS)){
+                attrDOList.addAll(attrDOS);
+            }
+        });
+        return codeClassifyTemplateAttrDO2VOs(attrDOList);
+    }
+
+    public boolean checkKVArr(String kvString){
+        boolean isKV = true;
+        try {
+            JSONObject.parseArray(kvString, KeyValue.class);
+        }catch (Exception e){
+            isKV=false;
+        }
+        return isKV;
+    }
+    public boolean checkKVObj(String kvString){
+        boolean isKV = true;
+        try {
+            JSONObject.parseObject(kvString, UIFormReferVO.class);
+        }catch (Exception e){
+            isKV=false;
+        }
+        return isKV;
+    }
+
+    /**
+     * 鏍¢獙鏃堕棿鏍煎紡
+     * @param dateFormat 鏃堕棿鏍煎紡
+     * @return true琛ㄧず鏍¢獙閫氳繃
+     */
+    public boolean checkDateFormat(String dateFormat){
+        try{
+            VciDateUtil.date2Str(new Date(),dateFormat);
+            return  true;
+        }catch (Throwable e){
+            return false;
+        }
+    }
+
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java
new file mode 100644
index 0000000..5e0b607
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java
@@ -0,0 +1,382 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeClassifyTemplateButtonDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTemplateButtonDO;
+import com.vci.ubcs.code.service.CodeButtonServiceI;
+import com.vci.ubcs.code.service.CodeClassifyTemplateButtonServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateButtonServiceImpl implements CodeClassifyTemplateButtonServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateButtonDaoI codeClassifyTemplateButtonMapper;
+
+    /**
+     * 鎸夐挳鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeButtonServiceI buttonService;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        final String[] classifyTemplateOid = {""};
+        if(conditionMap!=null){
+            conditionMap.forEach((key,value)->{
+                if("classifytemplateoid".equalsIgnoreCase(key)){
+                    classifyTemplateOid[0] = value;
+                }
+            });
+        }
+        if(StringUtils.isBlank(classifyTemplateOid[0])){
+            return new DataGrid<>();
+        }
+
+        List<CodeClassifyTemplateButtonDO> doList = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyTemplateButtonVO> dataGrid=new DataGrid<CodeClassifyTemplateButtonVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateButtonDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateButtonMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO>  codeClassifyTemplateButtonDOs) throws VciBaseException{
+       return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOs,false);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException{
+        List<CodeClassifyTemplateButtonVO> voList = new ArrayList<CodeClassifyTemplateButtonVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOs)){
+            for(CodeClassifyTemplateButtonDO s: codeClassifyTemplateButtonDOs){
+                CodeClassifyTemplateButtonVO vo =  codeClassifyTemplateButtonDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        if(hasButtonVO && !CollectionUtils.isEmpty(voList)){
+            //鑾峰彇鎸夐挳鐨勬樉绀哄璞�
+            List<CodeButtonVO> buttonVOList = new ArrayList<>();
+            VciBaseUtil.switchCollectionForOracleIn(voList.stream().map(CodeClassifyTemplateButtonVO::getClassifybuttonoid).collect(Collectors.toList())).stream().forEach(buttonOids->{
+                buttonVOList.addAll(buttonService.listCodeButtonByOids(buttonOids));
+            });
+            Map<String, CodeButtonVO> buttonVOMap = Optional.ofNullable(buttonVOList).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+            voList.stream().forEach(vo->{
+                vo.setButtonVO(buttonVOMap.getOrDefault(vo.getClassifybuttonoid(),null));
+            });
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) throws VciBaseException{
+              CodeClassifyTemplateButtonVO vo = new CodeClassifyTemplateButtonVO();
+        if(codeClassifyTemplateButtonDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateButtonVO addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getClassifytemplateoid(),"妯℃澘鐨勪富閿�");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = new CodeClassifyTemplateButtonDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+        if(codeClassifyTemplateButtonDO.getOrderNum()== null){
+            //鏌ヨ鍏ㄩ儴
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifytemplateoid",codeClassifyTemplateButtonDTO.getClassifytemplateoid());
+            Long count = codeClassifyTemplateButtonMapper.countByCondition(conditionMap);
+            if(count == null){
+                count = 0L;
+            }
+            codeClassifyTemplateButtonDO.setOrderNum(Long.valueOf(count + 1L).intValue());
+        }
+        codeClassifyTemplateButtonMapper.insert(codeClassifyTemplateButtonDO);
+        return codeClassifyTemplateButtonDO2VO(codeClassifyTemplateButtonDO);
+    }
+
+    /**
+     * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyTemplateButtonVO editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+         codeClassifyTemplateButtonMapper.updateByPrimaryKey(codeClassifyTemplateButtonDO);
+         return codeClassifyTemplateButtonDO2VO(codeClassifyTemplateButtonDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateButtonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO, CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) {
+        CodeClassifyTemplateButtonDO tsDO = new CodeClassifyTemplateButtonDO();
+        BeanUtil.convert(codeClassifyTemplateButtonDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeClassifyTemplateButtonDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽殑涓婚敭");
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTemplateButtonMapper.deleteByPrimaryKey(codeClassifyTemplateButtonDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateButtonDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateButtonDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = codeClassifyTemplateButtonMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateButtonDO == null || StringUtils.isBlank(codeClassifyTemplateButtonDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateButtonDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = listCodeClassifyTemplateButtonDOByOidCollections(oidCollections);
+        return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateButtonDO> listCodeClassifyTemplateButtonDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = new ArrayList<CodeClassifyTemplateButtonDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateButtonDO> tempDOList =  codeClassifyTemplateButtonMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateButtonDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTemplateButtonDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyTemplateButton(conditionMap,pageHelper);
+    }
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     *
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
+        BatchCBO batchCBO = new BatchCBO();
+        if(StringUtils.isNotBlank(classifyTemplateOid)){
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifyTemplateOid",classifyTemplateOid);
+            List<CodeClassifyTemplateButtonDO> templateButtonDOS = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap, new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(templateButtonDOS)){
+                batchCBO.copyFromOther(codeClassifyTemplateButtonMapper.batchDeleteByOids(templateButtonDOS.stream().map(CodeClassifyTemplateButtonDO::getOid).collect(Collectors.toList())));
+            }
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     *
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid) {
+       return listButtonByTemplateOid(templateOid,false);
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     *
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勬樉绀轰俊鎭�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid, boolean hasButtonVO) {
+        if(StringUtils.isBlank(templateOid)){
+            return new ArrayList<>();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("classifyTemplateOid",templateOid);
+        PageHelper pageHelper = new PageHelper(-1);
+        pageHelper.addDefaultAsc("orderNum");
+        List<CodeClassifyTemplateButtonDO> templateButtonDOS = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap, pageHelper);
+        return codeClassifyTemplateButtonDO2VOs(templateButtonDOS,hasButtonVO);
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateMapServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateMapServiceImpl.java
new file mode 100644
index 0000000..73537e5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateMapServiceImpl.java
@@ -0,0 +1,278 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.dao.CodeClassifyTemplateMapDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTemplateMapDO;
+import com.vci.ubcs.code.service.CodeClassifyTemplateMapServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateMapDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateMapVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateMapServiceImpl implements CodeClassifyTemplateMapServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateMapDaoI codeClassifyTemplateMapMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeClassifyTemplateMapDO> doList = codeClassifyTemplateMapMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyTemplateMapVO> dataGrid=new DataGrid<CodeClassifyTemplateMapVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateMapDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateMapMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateMapDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOs) throws VciBaseException{
+        List<CodeClassifyTemplateMapVO> voList = new ArrayList<CodeClassifyTemplateMapVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateMapDOs)){
+           for(CodeClassifyTemplateMapDO s: codeClassifyTemplateMapDOs){
+                CodeClassifyTemplateMapVO vo =  codeClassifyTemplateMapDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateMapDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTemplateMapVO codeClassifyTemplateMapDO2VO(CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) throws VciBaseException{
+              CodeClassifyTemplateMapVO vo = new CodeClassifyTemplateMapVO();
+        if(codeClassifyTemplateMapDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateMapDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+//            if(true){
+//                vo.setLcStatusText({lcStatusFullClassName}.getTextByValue(vo.getLcStatus()));
+//            }
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateMapVO addSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = new CodeClassifyTemplateMapDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
+        codeClassifyTemplateMapMapper.insert(codeClassifyTemplateMapDO);
+        return codeClassifyTemplateMapDO2VO(codeClassifyTemplateMapDO);
+    }
+
+    /**
+     * 淇敼涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyTemplateMapVO editSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateMapDTO.getOid(),"涓婚搴撴ā鏉挎槧灏勮鍒欎富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByOid(codeClassifyTemplateMapDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
+         codeClassifyTemplateMapMapper.updateByPrimaryKey(codeClassifyTemplateMapDO);
+         return codeClassifyTemplateMapDO2VO(codeClassifyTemplateMapDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateMapDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateMapDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO, CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) {
+        if(!checkIsLinked(codeClassifyTemplateMapDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplateMap(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�",codeClassifyTemplateMapDTO.getOid(),"涓婚搴撴ā鏉挎槧灏勮鍒欑殑涓婚敭");
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByOid(codeClassifyTemplateMapDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTemplateMapMapper.deleteByPrimaryKey(codeClassifyTemplateMapDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateMapVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateMapDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateMapDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = codeClassifyTemplateMapMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateMapDO == null || StringUtils.isBlank(codeClassifyTemplateMapDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateMapDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOList = listCodeClassifyTemplateMapDOByOidCollections(oidCollections);
+        return codeClassifyTemplateMapDO2VOs(codeClassifyTemplateMapDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateMapDO> listCodeClassifyTemplateMapDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOList = new ArrayList<CodeClassifyTemplateMapDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateMapDO> tempDOList =  codeClassifyTemplateMapMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateMapDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTemplateMapDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyTemplateMap(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateServiceImpl.java
new file mode 100644
index 0000000..2128f3e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateServiceImpl.java
@@ -0,0 +1,1091 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.code.dao.*;
+import com.vci.ubcs.code.dao.*;
+import com.vci.ubcs.code.lifecycle.CodeClassifyTemplateLC;
+import com.vci.code.model.*;
+import com.vci.code.service.*;
+import com.vci.corba.common.VCIError;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.*;
+import com.vci.ubcs.code.service.*;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.*;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateDTO;
+import org.springblade.code.model.*;
+import org.springblade.code.service.*;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+import plm.bs.bom.clientobject.ClientBusinessObjectOperation;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏈嶅姟
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateServiceImpl implements CodeClassifyTemplateServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyProcessTempDaoI codeClassifyProcessTempDaoI;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodeTemplatePhaseDaoI codeTemplatePhaseDaoI;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyTemplateButtonDaoI codeClassifyTemplateButtonDaoI;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodePhaseAttrDaoI codePhaseAttrDaoI;
+
+    /**
+     * 鍒嗙被
+     */
+    @Resource
+    private CodeClassifyDaoI codeClassifyDaoI;
+
+    /**
+     * 妯℃澘闃舵
+     */
+    @Resource
+    private CodeTemplatePhaseServiceI codeTemplatePhaseServiceI;
+
+    /**
+     * 妯℃澘娴佺▼
+     */
+    @Resource
+    private CodeClassifyProcessTempServiceI codeClassifyProcessTempServiceI;
+
+    /**
+     * 妯℃澘鎸夐挳
+     */
+    @Resource
+    private CodeClassifyTemplateButtonServiceI codeClassifyTemplateButtonServiceI;
+
+
+    /**
+     * 妯℃澘灞炴��
+     */
+    @Resource
+    private CodeClassifyTemplateAttrDaoI codeClassifyTemplateAttrDaoI;
+
+    /**
+     * 妯℃澘灞炴�х殑鏈嶅姟
+     */
+    @Lazy
+    @Autowired(required = false)
+    private CodeClassifyTemplateAttrServiceI templateAttrService;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
+    */
+    private static  final String PARENT_FIELD_NAME = "";
+    /**
+     * 鏌ヨ鍒嗙被妯℃澘瀵硅薄 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject) throws VciBaseException{
+        List<CodeClassifyTemplateDO> doList =selectCodeClassifyTemplateDOByTree(treeQueryObject);
+        List<CodeClassifyTemplateVO> voList = codeClassifyTemplateDO2VOs(doList);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        return revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyTemplateVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+    }
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    @Override
+    public List<CodeClassifyTemplateDO> selectCodeClassifyTemplateDOByTree(TreeQueryObject treeQueryObject) {
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null,CodeClassifyTemplateDO.class);
+        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
+        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
+        queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
+        return codeClassifyTemplateMapper.selectByWrapper(queryWrapperForDO);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs) throws VciBaseException{
+        return codeClassifyTemplateDO2VOs(codeClassifyTemplateDOs,false);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasAttr 鏄惁鍖呭惈灞炴��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs,boolean hasAttr) throws VciBaseException{
+        List<CodeClassifyTemplateVO> voList = new ArrayList<CodeClassifyTemplateVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateDOs)){
+            for(CodeClassifyTemplateDO s: codeClassifyTemplateDOs){
+                CodeClassifyTemplateVO vo =  codeClassifyTemplateDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        if(hasAttr){
+            //涓�涓垎绫婚噷闈㈡�讳笉鑳借秴杩�1000涓敓鏁堢殑鐗堟湰鍚э紒锛侊紒
+            VciBaseUtil.switchCollectionForOracleIn(voList.stream().map(CodeClassifyTemplateVO::getOid).collect(Collectors.toList())).forEach(tempOids->{
+                List<CodeClassifyTemplateAttrVO> attrVOList = templateAttrService.listCodeClassifyTemplateAttrByTemplateOids(tempOids);
+                if(!CollectionUtils.isEmpty(attrVOList)){
+                    Map<String, List<CodeClassifyTemplateAttrVO>> attrVOMap = attrVOList.stream().collect(Collectors.groupingBy(s -> s.getClassifytemplateoid()));
+                    voList.stream().forEach(templateVO->{
+                        if(attrVOMap.containsKey(templateVO.getOid())){
+                            templateVO.setAttributes(attrVOMap.get(templateVO.getOid()));
+                        }
+                    });
+                }
+            });
+
+        }
+        return voList;
+    }
+
+
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTemplateVO codeClassifyTemplateDO2VO(CodeClassifyTemplateDO codeClassifyTemplateDO) throws VciBaseException{
+              CodeClassifyTemplateVO vo = new CodeClassifyTemplateVO();
+        if(codeClassifyTemplateDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(CodeClassifyTemplateLC.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public BaseResult<CodeClassifyTemplateVO> addSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+
+        //鏌ヨ鍒嗙被浠ュ強涓婄骇鍒嗙被鐨勪笟鍔$被鍨媌tmtypeid銆乥tmtypename
+        List<CodeClassifyDO> codeClassifyDOList = codeClassifyDaoI.selectAllLevelParents(codeClassifyTemplateDTO.getCodeclassifyoid());
+
+        //鎵�鏈夊垎绫婚兘娌℃湁涓氬姟绫诲瀷锛岃繑鍥炴彁绀�
+        if(codeClassifyDOList.size()==0){
+            return BaseResult.fail("娣诲姞妯℃澘娣诲姞澶辫触,鍒嗙被鍜屼笂绾у垎绫婚兘娌℃湁鍏宠仈涓氬姟绫诲瀷锛�");
+        }
+
+        //璁剧疆btmtypeid鍜宯ame
+        CodeClassifyDO codeClassifyDO = codeClassifyDOList.get(0);
+        codeClassifyTemplateDO.setBtmTypeId(codeClassifyDO.getBtmTypeId());
+        codeClassifyTemplateDO.setBtmTypeName(codeClassifyDO.getBtmTypeName());
+        codeClassifyTemplateDO.setLcStatus(FRAMEWORK_RELEASE_EDITING);
+        codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
+        //榛樿娣诲姞妯℃澘灞炴��
+//        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
+
+//        CodeClassifyTemplateAttrDO codeAttr = new CodeClassifyTemplateAttrDO();
+//        codeAttr.setId("id");
+//        codeAttr.setName("浼佷笟缂栫爜");
+//        codeAttr.setAttributeDataType("VTString");
+//        codeAttr.setAttrTableWidth(150);
+//        codeAttr.setOrderNum(1);
+//        codeAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        codeAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        codeAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(codeAttr);
+//
+//
+//        CodeClassifyTemplateAttrDO groupAttr = new CodeClassifyTemplateAttrDO();
+//        groupAttr.setId("name");
+//        groupAttr.setName("闆嗗洟鐮�");
+//        groupAttr.setAttributeDataType("VTString");
+//        groupAttr.setAttrTableWidth(150);
+//        groupAttr.setOrderNum(2);
+//        groupAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        groupAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        groupAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(groupAttr);
+//
+//        CodeClassifyTemplateAttrDO descAttr = new CodeClassifyTemplateAttrDO();
+//        descAttr.setId("description");
+//        descAttr.setName("鎻忚堪");
+//        descAttr.setAttrTableWidth(150);
+//        descAttr.setAttributeDataType("VTString");
+//        descAttr.setOrderNum(3);
+//        descAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        descAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        descAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(descAttr);
+//
+//        CodeClassifyTemplateAttrDO statusAttr = new CodeClassifyTemplateAttrDO();
+//        statusAttr.setId("lcstatus");
+//        statusAttr.setName("鐘舵��");
+//        statusAttr.setAttrTableWidth(70);
+//        statusAttr.setOrderNum(4);
+//        statusAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        statusAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        statusAttr.setAttributeDataType("VTString");
+//        statusAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(statusAttr);
+//
+//
+//        CodeClassifyTemplateAttrDO secAttr = new CodeClassifyTemplateAttrDO();
+//        secAttr.setId("secretgrade");
+//        secAttr.setName("瀵嗙骇");
+//        secAttr.setAttrTableWidth(70);
+//        secAttr.setAttributeDataType(VciFieldTypeEnum.VTInteger.name());
+//        secAttr.setEnumId("Enumsecretgrade");
+//        secAttr.setEnumName("瀵嗙骇");
+//        secAttr.setOrderNum(4);
+//        secAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        secAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        secAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(secAttr);
+
+        return BaseResult.success(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
+    }
+
+    /**
+     * 淇敼鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public BaseResult editSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄涓婚敭");
+         //妫�鏌s
+         CodeClassifyTemplateDO codeClassifyTemplateDOCopyFromDTO = new CodeClassifyTemplateDO();
+         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
+         boolean tsBoolean = boService.checkTs(codeClassifyTemplateDOCopyFromDTO);
+         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+         }
+
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
+         String lcstatus = codeClassifyTemplateDO.getLcStatus();
+         String versionvalue = codeClassifyTemplateDO.getVersionValue();
+
+         //鍙湁缂栬緫涓墠鑳戒慨鏀�
+         if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
+             return BaseResult.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳戒慨鏀癸紒");
+         }
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+         //涓嶄慨鏀圭増鏈彿鍜岀姸鎬�
+         codeClassifyTemplateDO.setLcStatus(lcstatus);
+         codeClassifyTemplateDO.setVersionValue(versionvalue);
+         codeClassifyTemplateMapper.updateByPrimaryKey(codeClassifyTemplateDO);
+         return BaseResult.success(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
+     }
+
+    /**
+     * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult checkIsCanDelete(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyTemplateDTO.getOid(),"涓婚敭");
+        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
+        return checkIsCanDeleteForDO(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+    }
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateDTO codeClassifyTemplateDTO, CodeClassifyTemplateDO codeClassifyTemplateDO) {
+        CodeClassifyTemplateDO codeClassifyTemplateDOCopyFromDTO = new CodeClassifyTemplateDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
+        boService.checkTs(codeClassifyTemplateDOCopyFromDTO);
+        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
+        if(checkChildIsLinked(codeClassifyTemplateDO.getOid())){
+            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
+        }
+        return BaseResult.success(checkHasChild(codeClassifyTemplateDO.getOid()));
+    }
+    /**
+      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+      *
+      * @param oid 涓婚敭
+      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    @Override
+    public boolean checkChildIsLinked(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        List<String> childOids = codeClassifyTemplateMapper.selectAllLevelChildOid(oid.trim());
+        if(!CollectionUtils.isEmpty(childOids)){
+             for(String childOid: childOids){
+                 if(!checkIsLinked(childOid)){
+                     return false;
+                 }
+             }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+    *
+    * @param oid 涓婚敭
+    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    @Override
+    public boolean checkHasChild(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        return codeClassifyTemplateMapper.countAllLevelChildOid(oid.trim()) > 0;
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplate(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+        checkIsCanDelete(codeClassifyTemplateDTO);
+        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄鐨勪富閿�");
+
+        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
+
+        //鍙湁缂栬緫涓墠鑳藉垹
+        if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
+            return BaseResult.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳藉垹闄わ紒");
+        }
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+
+        //妯℃澘oid
+        String templateOid = codeClassifyTemplateDTO.getOid();
+
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        BatchCBO batchCBO = new BatchCBO();
+
+        if(baseResult.isSuccess()) {
+            //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
+            List<String> childrenOids = codeClassifyTemplateMapper.selectAllLevelChildOid(codeClassifyTemplateDO.getOid().trim());
+            if (!CollectionUtils.isEmpty(childrenOids)) {
+                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids);
+                for (Collection<String> s : childrenCollections) {
+                    BatchCBO batchCBOi = codeClassifyTemplateMapper.batchDeleteByOids(s);
+                    batchCBO.copyFromOther(batchCBOi);
+                }
+            }
+        }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO_delete = codeClassifyTemplateMapper.deleteByPrimaryKey(codeClassifyTemplateDO.getOid());
+        batchCBO.copyFromOther(batchCBO_delete);
+
+        //鍒犻櫎妯℃澘灞炴��
+        VciQueryWrapperForDO templateQueryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        templateQueryWrapper.addQueryMap("classifyTemplateOid",templateOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(templateQueryWrapper);
+
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
+            List<String> templateAttrOids = new ArrayList<String>();
+            for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+                templateAttrOids.add(codeClassifyTemplateAttrDO.getOid());
+            }
+            BatchCBO batchCBO_templateAttr_delete = codeClassifyTemplateAttrDaoI.batchDeleteByOids(templateAttrOids);
+            batchCBO.copyFromOther(batchCBO_templateAttr_delete);
+        }
+
+        //璋冪敤妯℃澘闃舵鏂规硶
+        BatchCBO batchCBO_phase = codeTemplatePhaseServiceI.codeTemplateDeleteTrigger(templateOid);
+        batchCBO.copyFromOther(batchCBO_phase);
+
+
+
+        //璋冪敤妯℃澘鎸夐挳鏂规硶
+        BatchCBO batchCBO_button = codeClassifyTemplateButtonServiceI.codeTemplateDeleteTrigger(templateOid);
+        batchCBO.copyFromOther(batchCBO_button);
+
+        //璋冪敤妯℃澘娴佺▼鏂规硶
+        BatchCBO batchCBO_process = codeClassifyProcessTempServiceI.codeTemplateDeleteTrigger(templateOid);
+        batchCBO.copyFromOther(batchCBO_process);
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBO);//涓�璧锋墽琛屼繚瀛�
+
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
+    * @param oid 涓婚敭
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateDO2VO(selectByOid(oid));
+    }
+
+    /**
+     * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄(鍖呭惈灞炴�э級
+     *
+     * @param oid 涓婚敭
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateVO getObjectHasAttrByOid(String oid) throws VciBaseException {
+        List<CodeClassifyTemplateDO> doList = new ArrayList<>();
+        doList.add(selectByOid(oid));
+        List<CodeClassifyTemplateVO> templateVOS = codeClassifyTemplateDO2VOs(doList, true);
+        return CollectionUtils.isEmpty(templateVOS)?null:templateVOS.get(0);
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateDO == null || StringUtils.isBlank(codeClassifyTemplateDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = listCodeClassifyTemplateDOByOidCollections(oidCollections);
+        return codeClassifyTemplateDO2VOs(codeClassifyTemplateDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateDO> listCodeClassifyTemplateDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = new ArrayList<CodeClassifyTemplateDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateDO> tempDOList =  codeClassifyTemplateMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTemplateDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
+            treeQueryObject.getConditionMap().remove(LC_STATUS);
+        }
+        treeQueryObject.getConditionMap().put(LC_STATUS,CodeClassifyTemplateLC.RELEASED.getValue());
+        return treeCodeClassifyTemplate(treeQueryObject);
+    }
+
+    /**
+     * 鍒嗙被妯℃澘鍒楄〃
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        DataGrid<CodeClassifyTemplateVO> dataGrid=new DataGrid<CodeClassifyTemplateVO>();
+        //娌℃湁浼犲垎绫籭d锛屼笉鎵ц鏌ヨ閫昏緫锛岀洿鎺ヨ繑鍥�
+        if(conditionMap.size()==0){
+            dataGrid.setData(new ArrayList<>());
+            dataGrid.setTotal(0);
+            return dataGrid;
+        }
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("revisionSeq");
+        List<CodeClassifyTemplateDO> doList = codeClassifyTemplateMapper.selectByCondition(conditionMap,pageHelper);
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid
+     * @param lcStatus
+     * @return
+     */
+    @Override
+    public BaseResult updateLcStatus( String oid, String lcStatus){
+
+        //鍋滅敤鐨勬椂鍊欙紝楠岃瘉妯℃澘鏄惁涓哄凡鍙戝竷
+        if(CodeClassifyTemplateLC.DISABLED.getValue().equals(lcStatus)){
+            CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(oid);
+            if(!CodeClassifyTemplateLC.RELEASED.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
+                return BaseResult.fail("妯℃澘鏈惎鐢紝涓嶈兘鍋滅敤锛�");
+            }
+        }
+        //鍚敤銆佸仠鐢�
+        int u = codeClassifyTemplateMapper.updateLcStatus(oid,lcStatus);
+
+        return u==0?BaseResult.error("淇敼澶辫触锛�"):BaseResult.success("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鍗囩増
+     * @param codeClassifyDTO
+     */
+    @Override
+    public BaseResult Upgrade(CodeClassifyTemplateDTO codeClassifyDTO){
+
+        //鏃х殑妯℃澘oid
+        String templateOldOid = codeClassifyDTO.getOid();
+        //鍙湁宸插彂甯冪殑鎵嶈兘鍗囩増
+        CodeClassifyTemplateDO codeClassifyTemplateDOOld =  codeClassifyTemplateMapper.selectByPrimaryKey(templateOldOid);
+        if(!FRAMEWORK_RELEASE_RELEASED.equals(codeClassifyTemplateDOOld.getLcStatus())){
+            return BaseResult.fail("璇ユā鏉挎湭鍙戝竷锛屼笉鑳藉崌鐗堬紒");
+        }
+
+        ClientBusinessObjectOperation clientBusinessObjectOperation = new ClientBusinessObjectOperation();
+
+        //闇�瑕佹柊澧炵殑鍗囩骇妯℃澘
+        ClientBusinessObject clientBusinessObject_template = boService.selectCBOByOid(codeClassifyDTO.getOid(), "codeclstemplate");
+        ClientBusinessObject clientBusinessObject_template_insert = null;
+        try {
+            clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
+        }catch (VCIError e){
+            e.printStackTrace();
+            logger.error("===============>鍒嗙被妯℃澘-鍗囩増澶嶅埗鍑洪敊oid锛� "+templateOldOid+",mes"+e.error_message);
+            return BaseResult.error("鍗囩増鍑洪敊");
+        }
+
+
+        CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyTemplateDO);
+        WebUtil.copyValueToObjectFromCbos(clientBusinessObject_template_insert,codeClassifyTemplateDO);
+        //modify by weidy@2022-2-27
+        //鍗囩増鍚庝笉鑳戒娇鐢╥nsert鏂规硶锛屽洜涓洪偅涓案杩滄槸鏂板涓�鏉℃暟鎹紝
+        //涓婃柟鍏堜粠dto杞粰do锛岀劧鍚庢妸鍗囩増鐨勫垵濮嬪寲鐨勫睘鎬ф嫹璐濈粰do锛屾渶鍚庡啀浠巇o鎷疯礉鍒癱bo涓�
+        WebUtil.copyValueToCboFromObj(clientBusinessObject_template_insert,codeClassifyTemplateDO);
+        //鍗囩増杩囧悗鐨勬ā鏉縪id
+        String templateNewOid = codeClassifyTemplateDO.getOid();
+
+        //闇�瑕佸鍒剁殑妯℃澘灞炴��
+        //鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
+        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
+            String attrOid = VciBaseUtil.getPk();
+            codeClassifyTemplateAttrDO.setOid(attrOid);
+            codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
+        }
+
+        //澶嶅埗妯℃澘娴佺▼
+        List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
+
+        //澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
+        Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
+
+        List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//妯℃澘闃舵
+        List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+
+        //澶嶅埗妯℃澘鎸夐挳
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
+
+        //涓�璧蜂繚瀛樻暟鎹�
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        //淇濆瓨妯℃澘
+        BatchCBO batchCBOTemplate = new BatchCBO();
+        //batchCBO淇濆瓨鐨勬椂鍊欐病鏈夎兘澶熻嚜鍔╱pdate婧愭暟鎹殑isLastR
+        //batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
+        //浣跨敤saveRevisionBuisnessObject鍙互瑙e喅杩欎釜闂锛岃繖閲屽厛鏆傛椂鎵ц涓ゆ淇濆瓨
+        try {
+            clientBusinessObjectOperation.saveRevisionBuinessObject(clientBusinessObject_template_insert);
+        } catch (VCIError vciError) {
+            throw new VciBaseException("鍗囩増淇濆瓨鍑洪敊浜�",new String[0],vciError);
+        }
+        // end --modify by lihang @20220408
+        //codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
+        //淇濆瓨妯℃澘灞炴��
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)){
+            BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
+        }
+
+        //淇濆瓨妯℃澘娴佺▼
+        if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOList)) {
+            BatchCBO batchCBOTemplateProcessAttr = codeClassifyProcessTempDaoI.batchInsert(codeClassifyProcessTempDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplateProcessAttr);
+        }
+        //妯℃澘闃舵
+        if(!CollectionUtils.isEmpty(codeClassifyPhaseDOList)) {
+            BatchCBO batchCBOTemplatePhaseAttr = codeTemplatePhaseDaoI.batchInsert(codeClassifyPhaseDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttr);
+        }
+
+        //妯℃澘闃舵灞炴��
+        if(!CollectionUtils.isEmpty(codePhaseAttrDOList)) {
+            BatchCBO batchCBOTemplatePhaseAttrAttr = codePhaseAttrDaoI.batchInsert(codePhaseAttrDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttrAttr);
+        }
+
+        //妯℃澘鎸夐挳
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOList)) {
+            BatchCBO batchCBOTemplateButtonAttr = codeClassifyTemplateButtonDaoI.batchInsert(codeClassifyTemplateButtonDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplateButtonAttr);
+        }
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+
+        boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
+
+        return BaseResult.success("鍗囩増鎴愬姛锛�");
+    }
+
+    @Override
+    public BaseResult copyTemplate(CodeClassifyTemplateDTO codeClassifyDTO){
+
+        //鏃х殑妯℃澘oid
+        String oldOid = codeClassifyDTO.getOid();
+        //鏂扮殑妯℃澘oid
+        String newOid = VciBaseUtil.getPk();
+        //鍒嗙被oid,澶嶅埗杩囨潵鐨勬柊鐨勫垎绫籵id
+        String codeClassifyOid = codeClassifyDTO.getCodeclassifyoid();
+
+        //澶嶅埗妯℃澘
+        CodeClassifyTemplateDO codeClassifyTemplateDO_old =  codeClassifyTemplateMapper.selectByPrimaryKey(oldOid);//鏃фā鏉�
+
+        //楠岃瘉锛屼笟鍔$被鍨嬫槸涓嶆槸涓�鑷�
+        CodeClassifyDO codeClassifyDO_old = codeClassifyDaoI.selectBtmOrParentBtm(codeClassifyTemplateDO_old.getCodeClassifyOid());
+        if(codeClassifyDO_old==null){
+            return BaseResult.fail("澶嶅埗鐨勬ā鏉挎墍灞炲垎绫讳互鍙婁笂绾ф病鏈変笟鍔$被鍨嬶紝璇烽噸鏂伴�夋嫨!");
+        }
+
+        //鎵惧綋鍓嶅垎绫讳笅鐨勪笟鍔$被鍨�
+        CodeClassifyDO codeClassifyDO_new = codeClassifyDaoI.selectBtmOrParentBtm(codeClassifyOid);
+        if(codeClassifyDO_new==null){
+            return BaseResult.fail("褰撳墠鍒嗙被娌℃湁涓氬姟绫诲瀷锛岃閲嶆柊閫夋嫨!");
+        }
+
+        if(!codeClassifyDO_old.getBtmTypeId().equals(codeClassifyDO_new.getBtmTypeId())){
+            return BaseResult.fail("閫夋嫨鐨勫垎绫诲拰褰撳墠鍒嗙被涓氬姟绫诲瀷涓嶄竴鑷达紝璇烽噸鏂伴�夋嫨!");
+        }
+
+        codeClassifyTemplateDO_old.setId(codeClassifyDTO.getId());//鑻辨枃鍚嶇О
+        codeClassifyTemplateDO_old.setName(codeClassifyDTO.getName());//涓枃鍚嶇О
+        codeClassifyTemplateDO_old.setDescription(codeClassifyDTO.getDescription());//鎻忚堪
+        codeClassifyTemplateDO_old.setCodeClassifyOid(codeClassifyOid);//鍒嗙被oid
+        codeClassifyTemplateDO_old.setOid(newOid);
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = new ArrayList<CodeClassifyTemplateDO>();
+        codeClassifyTemplateDOList.add(codeClassifyTemplateDO_old);
+
+        //澶嶅埗妯℃澘灞炴��
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = copyTemplateAttr(oldOid,newOid);
+
+        //澶嶅埗妯℃澘娴佺▼
+        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = copyTemplateProcess(oldOid,newOid);
+
+        //澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
+        Map  phase_attrMap = copyTemplatePhase_attr(oldOid,newOid);
+
+        List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//妯℃澘闃舵
+        List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+
+        //澶嶅埗妯℃澘鎸夐挳
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(oldOid,newOid);
+
+        //涓�璧蜂繚瀛樻暟鎹�
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        //淇濆瓨妯℃澘
+        BatchCBO batchCBOTemplate = codeClassifyTemplateMapper.batchInsert(codeClassifyTemplateDOList);
+        //淇濆瓨妯℃澘灞炴��
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
+            BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
+        }
+
+        //淇濆瓨妯℃澘娴佺▼
+        if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOList)) {
+            BatchCBO batchCBOTemplateProcessAttr = codeClassifyProcessTempDaoI.batchInsert(codeClassifyProcessTempDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplateProcessAttr);
+        }
+
+        //妯℃澘闃舵
+        if(!CollectionUtils.isEmpty(codeClassifyPhaseDOList)) {
+            BatchCBO batchCBOTemplatePhaseAttr = codeTemplatePhaseDaoI.batchInsert(codeClassifyPhaseDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttr);
+        }
+
+        //妯℃澘闃舵灞炴��
+        if(!CollectionUtils.isEmpty(codePhaseAttrDOList)) {
+            BatchCBO batchCBOTemplatePhaseAttrAttr = codePhaseAttrDaoI.batchInsert(codePhaseAttrDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttrAttr);
+        }
+
+        //妯℃澘鎸夐挳
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOList)) {
+            BatchCBO batchCBOTemplateButtonAttr = codeClassifyTemplateButtonDaoI.batchInsert(codeClassifyTemplateButtonDOList);
+            batchCBOTemplate.copyFromOther(batchCBOTemplateButtonAttr);
+        }
+
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+
+        boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
+        return BaseResult.success("澶嶅埗鎴愬姛锛�");
+
+    }
+
+    /**
+     * 浣跨敤涓婚搴撶殑鍒嗙被涓婚敭锛岃幏鍙栫敓鏁堢殑妯℃澘
+     *
+     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
+     * @param hasAttribute    鏄惁鍖呭惈灞炴��
+     * @return 妯℃澘鐨勪俊鎭�
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> listReleaseTemplateByClassifyOid(String codeClassifyOid, boolean hasAttribute) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"涓婚搴撳垎绫讳富閿�");
+        List<CodeClassifyTemplateDO> templateDOS = selectOnlyTemplateByClassifyOid(codeClassifyOid);
+        if(CollectionUtils.isEmpty(templateDOS)){
+            throw new VciBaseException("褰撳墠鍒嗙被锛屼互鍙婂叾涓婄骇鍒嗙被閮芥病鏈夎缃ā鏉�");
+        }
+        List<CodeClassifyTemplateVO> templateVOList = codeClassifyTemplateDO2VOs(templateDOS, true);
+        return sortTemplateByRevision(templateVOList);
+    }
+
+    /**
+     * 鐢ㄦā鏉跨殑鐗堟湰鏉ユ帓搴�
+     * @param templateVOList 妯℃澘鐨勬樉绀哄璞�
+     * @return 鎺掑簭鍚庣殑鍒楄〃
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> sortTemplateByRevision(List<CodeClassifyTemplateVO> templateVOList){
+        if(!CollectionUtils.isEmpty(templateVOList) && templateVOList.size() >1){
+            //鑾峰彇鐗堟湰鍙锋渶澶х殑閭d釜
+            templateVOList = templateVOList.stream().sorted((o1,o2)->
+                Integer.valueOf(o1.getRevisionSeq()).compareTo(Integer.valueOf(o2.getRevisionValue()))
+            ).collect(Collectors.toList());
+        }
+        return templateVOList;
+    }
+
+    /**
+     * 鏍¢獙瀛愬垎绫绘槸鍚︾浉鍚岀殑妯℃澘
+     *
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return true琛ㄧず鐩稿悓
+     */
+    @Override
+    public boolean checkChildHasSameTemplate(String codeClassifyOid) {
+        Map<String/**妯℃澘鐨勪富閿�**/,String/**鍒嗙被鐨勪富閿�**/> childHasTemplateMap =codeClassifyTemplateMapper.selectChildHasReleaseTemplate(codeClassifyOid);
+        if(!CollectionUtils.isEmpty(childHasTemplateMap) && childHasTemplateMap.values().stream().collect(Collectors.toSet()).size()>1){
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     *鏍规嵁鐖跺垎绫籭d鍘绘煡鎵惧彾瀛愯妭鐐圭殑妯℃澘锛屽鏋滄病鏌ュ埌鍒欒涓烘ā鏉垮湪涓婂眰寤虹珛锛屽垯鏍规嵁鍒嗙被鍘绘煡褰撳墠妯℃澘
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> childTemplates(String codeClassifyOid){
+        List<CodeClassifyTemplateVO> codeClassifyTemplateVOList=new ArrayList<>();
+        Map<String/**妯℃澘鐨勪富閿�**/,String/**鍒嗙被鐨勪富閿�**/> childHasTemplateMap =codeClassifyTemplateMapper.selectChildHasReleaseTemplate(codeClassifyOid);
+        Set<String> templateOid = childHasTemplateMap.keySet();
+        List<CodeClassifyTemplateDO>  classifyTemplateDOS=new ArrayList<>();
+        if(!CollectionUtils.isEmpty(templateOid)) {
+            classifyTemplateDOS= this.listCodeClassifyTemplateDOByOidCollections(templateOid);
+        }else{
+            classifyTemplateDOS=selectOnlyTemplateByClassifyOid(codeClassifyOid);
+        }
+        List<CodeClassifyTemplateVO> templateVOList = codeClassifyTemplateDO2VOs(classifyTemplateDOS, true);
+        if(!CollectionUtils.isEmpty(templateVOList)){
+            codeClassifyTemplateVOList.addAll(templateVOList);
+        }
+        return codeClassifyTemplateVOList;
+    }
+    /**
+     * 浣跨敤鍒嗙被涓婚敭閫掑綊鏌ヨ
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 妯℃澘鐨勬暟鎹璞�
+     */
+    private List<CodeClassifyTemplateDO> selectOnlyTemplateByClassifyOid(String codeClassifyOid){
+        //1.鐩存帴鏌ヨ锛岀湅鐪嬭繖涓垎绫讳笅闈㈡湁娌℃湁鍙戝竷鐘舵�佺殑妯℃澘
+        //2.濡傛灉娌℃湁锛屽垯寰�涓婃壘鍒嗙被鐨勫唴瀹癸紝杩欎釜鍒嗙被灞傜骇涓嶄細澶锛屾墍浠ョ洿鎺ラ�掑綊鍗冲彲
+        //3.濡傛灉鍒嗙被涓嬮潰娣诲姞浜嗘ā鏉匡紝浣嗘槸娌℃湁鍙戝竷锛屽垯璇存槑妯℃澘鍙兘杩樺湪缂栬緫鐨勭姸鎬侊紝渚濈劧浣跨敤涓婄骇鍒嗙被
+
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifyOid",codeClassifyOid);
+        conditionMap.put("lcstatus",CodeClassifyTemplateLC.RELEASED.getValue());
+        List<CodeClassifyTemplateDO> templateDOS = codeClassifyTemplateMapper.selectByCondition(conditionMap, new PageHelper(-1));
+        if(CollectionUtils.isEmpty(templateDOS)){
+            //閫掑綊鎵句笂绾х殑妯℃澘
+            CodeClassifyDO classifyDO = codeClassifyDaoI.selectByPrimaryKey(codeClassifyOid);
+            if(StringUtils.isBlank(classifyDO.getParentCodeClassifyOid())){
+                //璇存槑宸茬粡鏄《浜嗭紝涔熸病鎵惧埌鐨勮瘽锛岄偅灏辫繑鍥炰簡
+                return null;
+            }
+            return selectOnlyTemplateByClassifyOid(classifyDO.getParentCodeClassifyOid());
+        }else{
+            return templateDOS;
+        }
+    }
+
+    /**
+     * 澶嶅埗妯℃澘锛屾ā鏉垮睘鎬�
+     * @param templateOldOid
+     * @param templateNewOid
+     * @param codeClassifyDTO 妯℃澘鍚嶇О锛屾ā鏉跨紪鍙凤紝鎻忚堪
+     * @return map tamplate:(List<CodeClassifyTemplateDO>) templateAttr:(List<CodeClassifyTemplateAttrDO>)
+     */
+    public Map copyTemplate_attr(String templateOldOid,String templateNewOid,String codeckassfyOid,CodeClassifyTemplateDTO codeClassifyDTO){
+        templateNewOid = templateNewOid==null?VciBaseUtil.getPk():VciBaseUtil.getPk();
+        VciQueryWrapperForDO codeClassifyTemplateQuery = new VciQueryWrapperForDO(CodeClassifyTemplateDO.class);
+        codeClassifyTemplateQuery.addQueryMap("oid",templateOldOid);
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = codeClassifyTemplateMapper.selectByWrapper(codeClassifyTemplateQuery);
+        for (CodeClassifyTemplateDO codeClassifyTemplateDO:codeClassifyTemplateDOList){
+            codeClassifyTemplateDO.setOid(templateNewOid);
+            codeClassifyTemplateDO.setCodeClassifyOid(codeckassfyOid);
+            codeClassifyTemplateDO.setId(codeClassifyDTO.getId());
+            codeClassifyTemplateDO.setName(codeClassifyDTO.getName());
+            codeClassifyTemplateDO.setDescription(codeClassifyDTO.getDescription());
+
+        }
+
+        //澶嶅埗妯℃澘灞炴��
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = copyTemplateAttr(templateOldOid,templateNewOid);
+        Map template_attrMap = new HashMap();
+        template_attrMap.put("tamplate",codeClassifyTemplateDOList);
+        template_attrMap.put("templateAttr",codeClassifyTemplateAttrDOList);
+        return template_attrMap;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘灞炴��
+     */
+    public List<CodeClassifyTemplateAttrDO> copyTemplateAttr(String templateOldOid,String templateNewOid){
+        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
+            String attrOid = VciBaseUtil.getPk();
+            codeClassifyTemplateAttrDO.setOid(attrOid);
+            codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
+        }
+        return codeClassifyTemplateAttrDOList;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘娴佺▼
+     */
+    public List<CodeClassifyProcessTempDO> copyTemplateProcess(String templateOldOid,String templateNewOid){
+        VciQueryWrapperForDO processWrapper = new VciQueryWrapperForDO(CodeClassifyProcessTempDO.class);
+        processWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = codeClassifyProcessTempDaoI.selectByWrapper(processWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
+        for (CodeClassifyProcessTempDO codeClassifyProcessTempDO:codeClassifyProcessTempDOList){
+            String newOid = VciBaseUtil.getPk();
+            codeClassifyProcessTempDO.setOid(newOid);
+            //codeClassifyProcessTempDO.setCodeClassifyOid(templateNewOid);
+            codeClassifyProcessTempDO.setClassifyTemplateOid(templateNewOid);
+            //modify by lihang - @20220406 璁剧疆妯℃澘涓婚敭浣嶇疆鍑洪敊锛屽鑷村崌鐗堢殑妯℃澘涓殑娴佺▼鏄┖鐨勩��
+        }
+        return codeClassifyProcessTempDOList;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘闃舵锛屾ā鏉垮睘鎬�
+     * @param templateOldOid
+     * @param templateNewOid
+     * @return map phase:(List<CodeTemplatePhaseDO>) phaseAttr:(List<CodePhaseAttrDO>)
+     */
+    public Map copyTemplatePhase_attr(String templateOldOid,String templateNewOid){
+        //妯℃澘闃舵
+        VciQueryWrapperForDO phaseWrapper = new VciQueryWrapperForDO(CodeTemplatePhaseDO.class);
+        phaseWrapper.addQueryMap("codeClassifyTemplateOid",templateOldOid);
+        List<CodeTemplatePhaseDO>  codeClassifyPhaseDOList = codeTemplatePhaseDaoI.selectByWrapper(phaseWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
+        Map<String,String> phaseKeyMap = new HashMap<String,String>();//闇�瑕佸鍒剁殑妯℃澘闃舵灞炴��,key:value,妯℃澘闃舵鑰乷id:妯℃澘灞炴�ф柊oid
+        List<String> phaseOidList = new ArrayList<String>();
+        for (CodeTemplatePhaseDO codeTemplatePhaseDO:codeClassifyPhaseDOList){
+            String oldoid = codeTemplatePhaseDO.getOid();
+            String newOid = VciBaseUtil.getPk();
+            codeTemplatePhaseDO.setOid(newOid);
+            codeTemplatePhaseDO.setCodeClassifyTemplateOid(templateNewOid);
+            phaseKeyMap.put(oldoid,newOid);
+            phaseOidList.add(oldoid);
+        }
+
+        //妯℃澘闃舵鐨勫睘鎬�
+        List<CodePhaseAttrDO> codePhaseAttrDOList = new ArrayList<CodePhaseAttrDO>();
+        if(!CollectionUtils.isEmpty(phaseOidList)){//size()==0涓嬭竟鏂规硶浼氭姤閿�
+            Map<String,String> conditionMap =  new HashMap<>();
+            conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])) + ")");
+            codePhaseAttrDOList = codePhaseAttrDaoI.selectByCondition(conditionMap,new PageHelper(-1));
+        }
+        for (CodePhaseAttrDO codePhaseAttrDO:codePhaseAttrDOList){
+            String oldPhaseoid = codePhaseAttrDO.getCodePhaseOid();
+            String newOid = VciBaseUtil.getPk();
+            codePhaseAttrDO.setOid(newOid);
+            codePhaseAttrDO.setCodePhaseOid(phaseKeyMap.get(oldPhaseoid));
+        }
+        Map phaseMap = new HashMap();
+        phaseMap.put("phase",codeClassifyPhaseDOList);
+        phaseMap.put("phaseAttr",codePhaseAttrDOList);
+        return phaseMap;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘鎸夐挳
+     */
+    public List<CodeClassifyTemplateButtonDO> copyTemplateButton(String templateOldOid,String templateNewOid){
+        VciQueryWrapperForDO buttonWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateButtonDO.class);
+        buttonWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = codeClassifyTemplateButtonDaoI.selectByWrapper(buttonWrapper);
+        for (CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO:codeClassifyTemplateButtonDOList){
+            String newOid = VciBaseUtil.getPk();
+            codeClassifyTemplateButtonDO.setOid(newOid);
+            codeClassifyTemplateButtonDO.setClassifyTemplateOid(templateNewOid);
+        }
+        return codeClassifyTemplateButtonDOList;
+    }
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
new file mode 100644
index 0000000..f6ebffb
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -0,0 +1,481 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeBasicSecDaoI;
+import com.vci.ubcs.code.dao.CodeClassifyValueDaoI;
+import com.vci.ubcs.code.model.CodeBasicSecDO;
+import com.vci.ubcs.code.model.CodeClassifyValueDO;
+import com.vci.ubcs.code.service.CodeClassifyValueServiceI;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.pagemodel.Tree;
+import com.vci.starter.web.pagemodel.TreeQueryObject;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.LC_STATUS;
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyValueServiceImpl implements CodeClassifyValueServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyValueDaoI codeClassifyValueMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 鐮佹鐨勪俊鎭�
+     */
+    @Autowired
+    private CodeBasicSecDaoI basicSecMapper;
+
+    /**
+    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
+    */
+    private static  final String PARENT_FIELD_NAME = "parentClassifyValueOid";
+    /**
+     * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException{
+       // List<CodeClassifyValueDO> doList =selectCodeClassifyValueDOByTree(treeQueryObject);
+        List<CodeClassifyValueDO> doList =selectCodeClassifyValueDO4Tree(treeQueryObject);
+        List<CodeClassifyValueVO> voList = codeClassifyValueDO2VOs(doList);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        return revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyValueVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+    }
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    @Override
+    public List<CodeClassifyValueDO> selectCodeClassifyValueDOByTree(TreeQueryObject treeQueryObject) {
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(treeQueryObject.getConditionMap(),CodeClassifyValueDO.class);
+        PageHelper ph = new PageHelper();
+        ph.addDefaultAsc("ordernum");
+        queryWrapperForDO.setPageHelper(ph);
+        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
+        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
+        //queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
+        parentQueryOption.setHasSelf(true);
+        queryWrapperForDO.childQueryParent(parentQueryOption);
+        return codeClassifyValueMapper.selectByWrapper(queryWrapperForDO);
+    }
+
+    private List<CodeClassifyValueDO> selectCodeClassifyValueDO4Tree(TreeQueryObject treeQueryObject){
+        Map<String, String> conditionMap = treeQueryObject.getConditionMap();
+        String currentSecOid = conditionMap.get("codeclassifysecoid");
+        String sql = "select oid from PLATFORMBTM_CODEBASICSEC start with  oid = '"+currentSecOid+"' connect by prior PARENTCLASSIFYSECOID = OID";
+        List<ClientBusinessObject> targetParentList = boService.queryBySql(sql, new HashMap<>());
+        Set<String> secOidList = targetParentList.stream().map(ClientBusinessObject::getOid).collect(Collectors.toSet());
+        conditionMap.clear();
+        StringBuilder oidStrBuilder = new StringBuilder();
+        secOidList.forEach(oid -> oidStrBuilder.append("'").append(oid).append("',"));
+        String oidStr = oidStrBuilder.toString().substring(0,oidStrBuilder.toString().length() -1);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(null,CodeClassifyValueDO.class);
+        PageHelper ph = new PageHelper();
+        ph.addDefaultAsc("ordernum");
+        ph.setLimit(-1);
+        wrapper.setPageHelper(ph);
+        wrapper.in("codeclassifysecoid",oidStr);
+        return codeClassifyValueMapper.selectByWrapper(wrapper);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyValueVO> codeClassifyValueDO2VOs(Collection<CodeClassifyValueDO>  codeClassifyValueDOs) throws VciBaseException{
+        List<CodeClassifyValueVO> voList = new ArrayList<CodeClassifyValueVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyValueDOs)){
+           for(CodeClassifyValueDO s: codeClassifyValueDOs){
+                CodeClassifyValueVO vo =  codeClassifyValueDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyValueVO codeClassifyValueDO2VO(CodeClassifyValueDO codeClassifyValueDO) throws VciBaseException{
+              CodeClassifyValueVO vo = new CodeClassifyValueVO();
+        if(codeClassifyValueDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyValueVO addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //娣诲姞瀵圭爜鍊煎瓙鐖剁骇鐨勫垽鏂�
+        if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentclassifyvalueoid())){
+            String parentclassifyvalueoid = codeClassifyValueDTO.getParentclassifyvalueoid();
+            String codeclassifysecoid = codeClassifyValueDTO.getCodeclassifysecoid();
+            CodeClassifyValueDO parentDO = codeClassifyValueMapper.selectByPrimaryKey(parentclassifyvalueoid);
+            if (parentDO.getCodeClassifySecOid().equalsIgnoreCase(codeclassifysecoid)){
+                throw new VciBaseException("涓嶅厑璁稿湪鐖剁爜鍊间腑鐩存帴娣诲姞瀛愮爜鍊�");
+            }
+        }
+        //灏咲TO杞崲涓篋O
+        CodeClassifyValueDO codeClassifyValueDO = new CodeClassifyValueDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDTO,codeClassifyValueDO);
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeclassifysecoid", codeClassifyValueDO.getCodeClassifySecOid());
+        conditionMap.put("parentclassifyvalueoid",codeClassifyValueDO.getParentClassifyValueOid());
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
+        List<CodeClassifyValueDO> existList = codeClassifyValueMapper.selectByWrapper(wrapper);
+        codeClassifyValueDO.setOrderNum(existList.size() + 1);
+        codeClassifyValueMapper.insert(codeClassifyValueDO);
+        return codeClassifyValueDO2VO(codeClassifyValueDO);
+    }
+
+    /**
+     * 淇敼鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyValueVO editSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鏁版嵁瀵硅薄",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊间富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyValueDTO,codeClassifyValueDO);
+         codeClassifyValueMapper.updateByPrimaryKey(codeClassifyValueDO);
+         return codeClassifyValueDO2VO(codeClassifyValueDO);
+     }
+
+/**
+ * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
+ * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+ * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+ * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+ */
+@Override
+public BaseResult checkIsCanDelete(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+    VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyValueDTO.getOid(),"涓婚敭");
+    CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
+    return checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
+}
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyValueDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyValueDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyValueDTO codeClassifyValueDTO, CodeClassifyValueDO codeClassifyValueDO) {
+        //boService.checkTs(codeClassifyValueDTO);
+        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
+        if(checkChildIsLinked(codeClassifyValueDO.getOid())){
+            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
+        }
+        return BaseResult.success(checkHasChild(codeClassifyValueDO.getOid()));
+    }
+    /**
+      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+      *
+      * @param oid 涓婚敭
+      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    @Override
+    public boolean checkChildIsLinked(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        List<String> childOids = codeClassifyValueMapper.selectAllLevelChildOid(oid.trim());
+        if(!CollectionUtils.isEmpty(childOids)){
+             for(String childOid: childOids){
+                 if(!checkIsLinked(childOid)){
+                     return false;
+                 }
+             }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+    *
+    * @param oid 涓婚敭
+    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    @Override
+    public boolean checkHasChild(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        return codeClassifyValueMapper.countAllLevelChildOid(oid.trim()) > 0;
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyValue(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊肩殑涓婚敭");
+        CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
+        if(baseResult.isSuccess()) {
+                        //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
+            List<String> childrenOids = codeClassifyValueMapper.selectAllLevelChildOid(codeClassifyValueDO.getOid().trim());
+            if (!CollectionUtils.isEmpty(childrenOids)) {
+                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids);
+                for(Collection<String> s : childrenCollections){
+                    codeClassifyValueMapper.batchDeleteByOids(s);
+                }
+            }
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyValueMapper.deleteByPrimaryKey(codeClassifyValueDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyValueVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyValueDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyValueDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyValueDO codeClassifyValueDO = codeClassifyValueMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyValueDO == null || StringUtils.isBlank(codeClassifyValueDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyValueDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyValueVO> listCodeClassifyValueByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyValueDO> codeClassifyValueDOList = listCodeClassifyValueDOByOidCollections(oidCollections);
+        return codeClassifyValueDO2VOs(codeClassifyValueDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyValueDO> listCodeClassifyValueDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyValueDO> codeClassifyValueDOList = new ArrayList<CodeClassifyValueDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyValueDO> tempDOList =  codeClassifyValueMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyValueDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyValueDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
+            treeQueryObject.getConditionMap().remove(LC_STATUS);
+        }
+                return treeCodeClassifyValue(treeQueryObject);
+    }
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
+     *
+     * @param classifySecOid         鐮佹鐨勪富閿�
+     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐮佸�肩殑鍐呭
+     */
+    @Override
+    public List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid) {
+        if(StringUtils.isBlank(classifySecOid)){
+            return new ArrayList<>();
+        }
+        CodeBasicSecDO secDO = basicSecMapper.selectByPrimaryKey(classifySecOid);
+        if(secDO == null || StringUtils.isBlank(secDO.getOid())){
+            throw new VciBaseException("鐮佹鐨勫唴瀹瑰湪绯荤粺涓笉瀛樺湪");
+        }
+        if(StringUtils.isNotBlank(secDO.getParentClassifySecOid()) && StringUtils.isBlank(parentClassifyValueOid)){
+            return new ArrayList<>();
+            //鍥犱负鏈変笂绾у垎绫荤殑鏃跺�欙紝蹇呴』鍏堥�夋嫨涓婄骇鍒嗙被鐨勫唴瀹�
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifySecOid",classifySecOid);
+        if(StringUtils.isNotBlank(parentClassifyValueOid)){
+            conditionMap.put("parentClassifyValueOid",parentClassifyValueOid);
+        }
+        PageHelper pageHelper = new PageHelper(-1);
+        pageHelper.addDefaultAsc("ordernum");
+        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByCondition(conditionMap, pageHelper);
+        return codeClassifyValueDO2VOs(valueDOList);
+    }
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult batchDeleteBySecOid(String codeclassifysecoid) {
+        VciBaseUtil.alertNotNull(codeclassifysecoid,"鍒嗙被鐮佹鐨勪富閿�");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifySecOid",codeclassifysecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
+        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByWrapper(wrapper);
+        codeClassifyValueMapper.batchDeleteByOids(valueDOList.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toList()));
+        return BaseResult.success();
+    }
+
+    /**
+     * 鎵归噺娣诲姞鍒嗙被鐮佹鐨勭爜鍊笺�備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍒嗙被鐮佹鐨勭爜鍊煎垪琛�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult batchSave4Order(List<CodeClassifyValueDTO> dtoList, String codeclassifysecoid) {
+        VciBaseUtil.alertNotNull(codeclassifysecoid,"鍒嗙被鐮佹涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifySecOid",codeclassifysecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
+        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByWrapper(wrapper);
+        List<CodeClassifyValueDO> updateList = new ArrayList<>();
+        dtoList.forEach(dto -> {
+            if( StringUtils.isNotBlank( dto.getOid() )){
+                List<CodeClassifyValueDO> collect = valueDOList.stream().filter(value -> {
+                    return dto.getOid().equals(value.getOid());
+                }).collect(Collectors.toList());
+                collect.forEach(ccv -> {
+                    ccv.setOrderNum(dto.getOrdernum());
+                    ccv.setId(dto.getId());
+                    ccv.setName(dto.getName());
+                    updateList.add(ccv);
+                });
+            }
+        });
+        codeClassifyValueMapper.batchUpdate(updateList);
+        return BaseResult.success();
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingServiceImpl.java
new file mode 100644
index 0000000..563766c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingServiceImpl.java
@@ -0,0 +1,1111 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import cn.hutool.json.XML;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.code.dao.*;
+import com.vci.code.model.*;
+import com.vci.code.service.*;
+import com.vci.code.utils.*;
+import com.vci.starter.web.enumpck.UserSecretEnum;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.pagemodel.SessionInfo;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.dao.*;
+import com.vci.ubcs.code.model.*;
+import com.vci.ubcs.code.service.*;
+import com.vci.ubcs.code.utils.*;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.*;
+import com.vci.ubcs.code.dto.DockingPreApplyDataDTO;
+import com.vci.ubcs.code.dto.DockingPreApplyDataInfoDTO;
+import org.springblade.code.model.*;
+import org.springblade.code.service.*;
+import org.springblade.code.utils.*;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+import com.vci.ubcs.code.vo.pagemodel.SysIntInfoVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
+
+/**
+ * 涓婚搴撻泦鎴愭湇鍔�
+ * @author wangyi
+ * @date 2022-03-20
+ */
+@Service
+public class CodeDuckingServiceImpl implements CodeDuckingServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingTaskDaoI dockingTaskDaoI;
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingDataDaoI dockingDataDaoI;
+
+    /**
+     * 闆嗘垚鏃ュ織鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private DockingLogeDaoI dockingLogeDaoI;
+
+    /**
+     * 闆嗘垚鎺ュ彛head鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private SysIntHeaderDaoI sysIntHeaderDaoI;
+
+    /**
+     * 妯℃澘灞炴�ф暟鎹搷浣滃眰
+     */
+    @Resource
+	@Lazy
+    private CodeClassifyDaoI codeClassifyDaoI;
+
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    @Lazy
+    private WebBoServiceI boService;
+
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 鏁版嵁鏈嶅姟
+     */
+    @Autowired(required = false)
+    @Lazy
+    private MdmEngineServiceI mdmEngineServiceI;
+
+    /**
+     * 缂栫爜棰勭敵璇锋湇鍔�
+     */
+    @Autowired(required = false)
+    @Lazy
+    private DockingPreApplyDataServiceI dockingPreApplyDataServiceI;
+
+    /**
+     * 瑕佹帹閫佺郴缁熺殑鏈嶅姟
+     */
+    @Autowired
+    private SysIntInfoServiceI sysIntInfoServiceI;
+
+    /**
+     * 鍒嗙被鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyServiceI;
+
+
+    @Value("${docking.tuhao:tuhao}")
+    public String tuhao;
+
+    @Value("${docking.tranTemp:D:\\PLT-2022\\web\\tranTemp}")
+    public String tranTemp;
+
+    @Value("${docking.preXmlTemp:D:\\PLT-2022\\web\\preXmlTemp}")
+    public String preXmlTemp;
+
+    /**
+     * 浜屻��1銆�2銆�3銆�4銆�
+     * 澶勭悊棰勭敵璇锋暟鎹�
+     * @param xmlDatas
+     * @return 鎺ユ敹鐨剎mlDate
+     */
+    @Override
+    public String applicateCode(String xmlDatas){
+
+        long start = System.currentTimeMillis();
+
+        Map<String,Object> datasMap = null;
+
+        //瑙f瀽xmlData
+        try {
+            datasMap = XmlUtil.readPreXmlData(xmlDatas);
+        }catch (Exception e){
+            logger.info("鎺ユ敹棰勭敵璇锋暟鎹紝瑙f瀽xmlData澶辫触锛寈mlDatas: "+xmlDatas+",e: "+e.getMessage());
+            e.printStackTrace();
+            //杩斿洖鎻愮ず
+            return XmlUtil.writePreBackXmlData(MdmDuckingConstant.XML_CODE_FAIL,"瑙f瀽xmlData澶辫触,e: "+e.getMessage(),null);
+        }
+
+        List<XmlData> xmlDataList = Collections.synchronizedList(new ArrayList<XmlData>());
+        String systemid = datasMap.getOrDefault(MdmDuckingConstant.XML_SYSTEMID,"").toString();
+        List<Map<String,Object>> dataMapList = (ArrayList<Map<String,Object>>)datasMap.get(MdmDuckingConstant.XML_DATAS);
+
+        //璁板綍杩欐鏁版嵁淇℃伅,骞朵笖鎶妜mldata鍐欏叆鏂囦欢
+        String currentDate = DateUtils.getCurrentDate(DateUtils.DATE_TO_STRING_DETAIAL_PATTERN);
+        File preXmlFile = new File(preXmlTemp+ File.separator+systemid+"-"+currentDate+".xml");
+
+        try {
+            FileUtils.write(preXmlFile, xmlDatas);
+        }catch (Exception e){
+            logger.error(currentDate+" 鎺ユ敹"+systemid+"绯荤粺棰勭敵璇锋暟鎹紝鍐欏叆鏂囦欢澶辫触锛乪:"+e.getMessage()+",xmlDatas: "+xmlDatas);
+            e.printStackTrace();
+        }
+
+        //澶勭悊姣忎竴鏉$敵璇风殑鏁版嵁
+        ExecutorService pool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()+1);
+
+        SessionInfo sessionInfo = WebUtil.getSessionInfo();
+        CountDownLatch countDownLatch = new CountDownLatch(dataMapList.size());
+        for (int i =0;i<dataMapList.size();i++){
+            Map<String,Object> dataMap = dataMapList.get(i);
+            pool.execute(()-> {
+                String unique = dataMap.getOrDefault(MdmDuckingConstant.XML_UNIQUE,"").toString();
+                String type = dataMap.getOrDefault(MdmDuckingConstant.XML_TYPE,"").toString();
+
+                //瑕佹彃鍏ョ殑data
+                DockingPreApplyDataDTO dockingPreApplyDataDO = new DockingPreApplyDataDTO();
+                //瑕佹彃鍏ョ殑datainfo
+                List<DockingPreApplyDataInfoDTO> dockingPreApplyDataInfoDOList = new ArrayList<DockingPreApplyDataInfoDTO>();
+                XmlData xmlData_ = new XmlData();
+
+                try {
+                    WebUtil.setSessionInfo(sessionInfo);
+
+                    String num = "";
+                    String datacode = "";
+                    String datamsg = "";
+                    String datamsglog = "";
+
+                    //state=400锛屽鐞嗘垚鍔燂紝娌℃湁鎵惧埌缂栫爜
+                    datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏈煡璇㈠埌瀵瑰簲缂栫爜锛岃祴鐮佸悗鎺ㄩ�佺紪鐮佷俊鎭�";
+                    datacode = MdmDuckingConstant.XML_STATE_400;
+                    XmlData xmlData = new XmlData();
+                    xmlData.setState(MdmDuckingConstant.XML_STATE_400);
+                    xmlData.setMsg(datamsg);
+                    xmlData.setUnique(unique);
+                    xmlData.setNum(null);
+                    logger.info(datamsg+"锛宒ata: "+dataMap.get(unique)+",num: ");
+                    xmlData_ = xmlData;
+
+                    //濡傛灉鏄疢PM闆嗘垚杩囨潵鐨勬暟鎹紝unique浣滀负鍥惧彿鏌ヨ
+                    if(MdmDuckingConstant.XML_SYSTEMID_MPM.equals(systemid)&& StringUtils.isNotEmpty(unique)) {
+
+                        //1銆佸厛鏌ヨ杩欎釜unique鏍规嵁鍥惧彿鏌ヨ锛屾湁鏁版嵁灏卞氨杩斿洖
+                        Map conditonMap = new HashMap();
+                        conditonMap.put("tuhao",unique);
+//                        conditonMap.put("lcstatus",FRAMEWORK_RELEASE_RELEASED);
+                        List<ClientBusinessObject> clientBusinessObjectList = boService.queryCBO(type,conditonMap);
+
+                        if(clientBusinessObjectList.size()>0) {
+                            num = clientBusinessObjectList.get(0).getId();
+                            String lcstatus = clientBusinessObjectList.get(0).getLcStatus();
+                            datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏈煡璇㈠埌瀵瑰簲缂栫爜锛岃祴鐮佸悗鎺ㄩ�佺紪鐮佷俊鎭�";
+                            if(FRAMEWORK_RELEASE_RELEASED.equals(lcstatus)) {
+                                datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏌ヨ缂栫爜鎴愬姛";
+                                datamsglog = datamsg+"锛宒ata: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = MdmDuckingConstant.XML_STATE_200;
+
+                            }else if(FRAMEWORK_RELEASE_SUBMIT.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:宸叉彁浜わ紝data: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = MdmDuckingConstant.XML_STATE_400;
+
+                            }else if(FRAMEWORK_RELEASE_AUDITING.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:瀹℃牳涓紝data: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = MdmDuckingConstant.XML_STATE_400;
+
+                            }else if(FRAMEWORK_RELEASE_EDITING.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:缂栬緫涓紝data: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = MdmDuckingConstant.XML_STATE_400;
+
+                            }else if(FRAMEWORK_DATA_DISABLED.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:鍋滅敤锛宒ata: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = MdmDuckingConstant.XML_STATE_400;
+                            }
+                            xmlData.setState(datacode);
+                            xmlData.setMsg(datamsg);
+                            xmlData.setUnique(unique);
+                            xmlData.setNum(num);
+                            logger.info(datamsglog);
+                            xmlData_ = xmlData;
+                        }
+                    }
+                    dockingPreApplyDataDO.setNum(num);
+                    dockingPreApplyDataDO.setDatacode(datacode);
+                    dockingPreApplyDataDO.setDatamsg(datamsg);
+
+                    //2銆佹牴鎹畊nique鏌ヨDockingPreApplyDataDO锛屾湁鏁版嵁灏变慨鏀瑰埆鐨勬墍鏈夌殑usedflag=false,璁剧疆杩欎釜涓簍rue
+                    //3銆佸啀鎻掑叆DockingPreApplyDataDO鍜孌ockingPreApplyDataInfoDO
+                    //鍏跺疄锛�2銆佸拰3銆佽繖涓ゆ鍦╠ockingPreApplyDataServiceI.addSaveDataAndInfo锛堬級杩欎釜鏂规硶涓竴璧峰仛浜�
+
+                    String dataoid = redisService.getUUIDEveryDay();
+//                    String dataoid = "1";
+                    dockingPreApplyDataDO.setOid(dataoid);
+                    dockingPreApplyDataDO.setPreapplyoid("1");
+                    dockingPreApplyDataDO.setUniquecode(unique);
+                    dockingPreApplyDataDO.setType(type);
+                    dockingPreApplyDataDO.setSystemid(systemid);
+
+                    Object attro = dataMap.get(MdmDuckingConstant.XML_PROS);
+
+                    //瑕佹彃鍏ョ殑datainfo
+                    List<Map<String,String>> attrList = null;
+                    if (attro == null) {
+                        attrList = new ArrayList<Map<String,String>>();
+                    }else {
+                        attrList = (ArrayList<Map<String,String>>)attro;
+                    }
+
+                    String mpm_model = null;
+                    String mpm_parttype = null;
+                    String mpm_unit = null;
+                    for (Map<String, String> attrMap : attrList) {
+                        String datainfooid = redisService.getUUIDEveryDay();
+//                      datainfooid = "1";
+                        String key = attrMap.getOrDefault(MdmDuckingConstant.XML_KEY,"");
+                        String mean = attrMap.getOrDefault(MdmDuckingConstant.XML_MEAN,"");
+                        String text = attrMap.getOrDefault(MdmDuckingConstant.XML_TEXT,"");
+
+                        DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDO = new DockingPreApplyDataInfoDTO();
+                        dockingPreApplyDataInfoDO.setDataoid(dataoid);
+                        dockingPreApplyDataInfoDO.setOid(datainfooid);
+                        dockingPreApplyDataInfoDO.setKey(key);
+                        dockingPreApplyDataInfoDO.setValue(text);
+                        dockingPreApplyDataInfoDO.setMean(mean);
+                        dockingPreApplyDataInfoDOList.add(dockingPreApplyDataInfoDO);
+
+                        //鍙栦笁涓��
+                        if(MdmDuckingConstant.XML_MPM_MODEL.equals(key)){//鍙朚PM瑙勬牸
+                            mpm_model = text;
+                            dockingPreApplyDataDO.setModel(mpm_model);
+                        }
+                        if(MdmDuckingConstant.XML_MPM_PARTTYPE.equals(key)){//鍙朚PM闆朵欢鍨嬪彿
+                            mpm_parttype = text;
+                            dockingPreApplyDataDO.setParttype(mpm_parttype);
+                        }
+                        if(MdmDuckingConstant.XML_MPM_UNIT.equals(key)){//鍗曚綅
+                            mpm_unit = text;
+                            dockingPreApplyDataDO.setUnit(mpm_unit);
+                        }
+                    }
+
+                    dockingPreApplyDataServiceI.addSaveDataAndInfo(dockingPreApplyDataDO, dockingPreApplyDataInfoDOList);
+
+                } catch (Exception e) {
+                    String datamsg = "鎺ユ敹棰勭敵璇锋暟鎹け璐ワ紒锛宒ata: "+dataMap.get(unique)+",e: "+e.getMessage();
+                    XmlData xmlData = new XmlData();
+                    xmlData.setState(MdmDuckingConstant.XML_STATE_500);
+                    xmlData.setMsg(datamsg);
+                    xmlData.setUnique(unique);
+                    xmlData.setNum(null);
+                    logger.error(datamsg+".dockingPreApplyDataDO锛� "+dockingPreApplyDataDO+",dockingPreApplyDataInfoDOList: "+dockingPreApplyDataInfoDOList);
+                    xmlData_ = xmlData;
+
+                    e.printStackTrace();
+                }finally {
+                    xmlDataList.add(xmlData_);
+                    countDownLatch.countDown();
+                }
+            });
+        }
+
+        //绛夊緟鎵�鏈夌嚎绋嬫墽琛屽畬鎴�
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+        String backXmlData = XmlUtil.writePreBackXmlData(MdmDuckingConstant.XML_CODE_SUCCESS,"鎺ユ敹棰勭敵璇锋暟鎹垚鍔燂紒",xmlDataList);
+
+
+        long end = System.currentTimeMillis();
+
+        //鎷兼帴杩斿洖鐨剎mlData
+        int dataMapSise = dataMapList.size();
+        int xmlDataSise = xmlDataList.size();
+        System.out.println("========================dataMapSise锛� "+dataMapSise+",xmlDataSise:"+xmlDataSise);
+
+        System.out.println("========================澶勭悊棰勭敵璇锋暟鎹竴鍏辫�楁椂 "+(end-start)/1000+"绉�");
+        return backXmlData;
+    }
+
+    /**
+     * 鍥涖��1銆�2銆�3
+     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
+     */
+    @Override
+    public void insertCache2(){
+
+        initSysadmin();
+
+        //sysintinfo鏌ヨ瑕佹帹閫佺殑涓婚搴撳拰鐩稿叧绯荤粺淇℃伅
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("usedflag","true");
+        List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
+
+        //distinct鍑轰富棰樺簱btmname,瀛樺偍key-value缁撴瀯鐨勫垎绫绘暟鎹紝杩欓噷鐨勫垎绫绘槸涓婚搴搑oot鑺傜偣
+        Set<String> btmtypeidSet = new HashSet<>();
+        Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//key=classifyoid,value=list<map>
+        for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
+            btmtypeidSet.add(sysIntInfoVOi.getBtmTypeId());
+            List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
+            if(SysIntInfoVOListi==null){
+                SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
+            }
+            SysIntInfoVOListi.add(sysIntInfoVOi);
+            sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
+        }
+
+        //鏌ヨdockingdata:oid,classifyoid,btmid,btmoid,sendtype,classifyid,classifyname
+//        List<Map> dataList = getDockingDatas();
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
+        queryWrapperForDO.addQueryMap("sendflag","false");
+        List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
+
+        for (DockingDataDO mapi:dataList){
+
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+
+            String dataoid = mapi.getOid();//data瀵硅薄鐨刼id
+            String classifyoid = mapi.getClassifyoid();
+            String id = mapi.getId();
+            String uniquecode = mapi.getUniquecode();
+            String btmid = mapi.getBtmid();
+            String btmoid = mapi.getBtmoid();
+            String sendtype = mapi.getSendtype();
+            String classifyid = mapi.getClassifyid();
+            String classifyname = mapi.getClassifyname();
+
+            //璁剧疆uniquecode
+            if(StringUtils.isEmpty(uniquecode)){
+                uniquecode = getTuhao(btmoid);//鏌ヨ鍥惧彿
+                if(StringUtils.isNotEmpty(uniquecode)) {
+                    updateDockingDatasUniqueCode(dataoid, uniquecode);
+                }
+            }
+            List<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
+            String rootClassifyoid = "";
+            String pushType="1";
+            if(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.equalsIgnoreCase(classifyoid)){//杩欎釜瀵瑰簲sysintinfo涓殑涓婚搴搃d锛屽鏋滄槸鍒嗙被鏁版嵁锛屽氨鏄疍OCKING_DEFAULT_CLASSIFY=CODECLASSIFY
+                rootClassifyoid = MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY;
+                //鍒ゆ柇鏄惁灞炰簬鍒嗙被鏍�,濡傛灉鏄粍缁囥�佷汉鍛樸�侀檮褰曚箣绫荤殑涓嶇敓鎴愪换鍔�,骞朵笖鑷姩娓呴櫎杩欎釜data
+                boolean iswupin = codeClassifyDaoI.isWupin(btmoid);
+                if(!"TakeBack".equals(sendtype)&&!iswupin){
+                    boolean u = delteDockingData(dataoid);
+                    logger.error("闆嗘垚data鍒犻櫎闈炲垎绫籨ata澶辫触锛乨ataoid:"+dataoid);
+                    continue;
+                }
+                pushType="2";
+                rootClassifyoid=btmoid;
+            }else {
+               /* CodeClassifyDO rootClassify = codeClassifyDaoI.getRootClassify(classifyoid);//root鍒嗙被
+                if(rootClassify==null){
+                    continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
+                }
+                rootClassifyoid = rootClassify.getOid();*/
+                rootClassifyoid=classifyoid;
+            }
+
+            List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(rootClassifyoid);
+            if(CollectionUtils.isEmpty(parentLeveDO)){
+                continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
+            }
+            Map<String, CodeClassifyDO> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+            String finalPushType = pushType;
+            oidCodeclassifyDOMap.keySet().forEach(oid->{
+                if(sysIntInfoDOMap.containsKey(oid)){
+                    List<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
+                    sysIntInfoDOS.stream().forEach(sysIntInfoDO -> {
+                        String sysPushType= sysIntInfoDO.getPushType();
+                        if(sysPushType.equalsIgnoreCase(finalPushType)){
+                            effectiveSysIntInfoVOs.add(sysIntInfoDO);
+                        }
+                    });
+
+
+                }
+            });
+            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
+                continue;
+            }
+            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
+            for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
+               // String sysinfoclassifyoid = sysIntInfoVOi.getClassifyoid();//intinfo鐨刢lassifyoid
+               // if(!rootClassifyoid.equals(sysinfoclassifyoid)){
+               //     continue;
+              //  }
+                DockingTaskDO dockingTaskDO = new DockingTaskDO();
+                String oid=redisService.getUUIDEveryDay();
+               // logger.error("===================================================oid: "+redisService.getUUIDEveryDay());
+                dockingTaskDO.setOid(oid);
+                dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_FALSE);
+                dockingTaskDO.setId(id);//缂栫爜
+                dockingTaskDO.setUniquecode(uniquecode);
+                dockingTaskDO.setBtmoid(btmoid);//鏁版嵁oid
+                dockingTaskDO.setBtmid(btmid);//鏁版嵁涓氬姟绫诲瀷id
+                dockingTaskDO.setClassifyid(classifyid);//鏁版嵁鍦ㄥ垎绫籭d
+                dockingTaskDO.setClassifyoid(classifyoid);//鏁版嵁鎵�鍦ㄥ垎绫籵id
+                dockingTaskDO.setClassifyname(classifyname);//鏁版嵁鎵�鍦ㄥ垎绫诲悕绉�
+                dockingTaskDO.setSendtype(sendtype);//鏁版嵁鎺ㄩ�佺被鍨�
+                dockingTaskDO.setDataoid(dataoid);
+
+                //intinfo
+                dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo鐨刼id
+                dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//绯荤粺oid
+                dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//绯荤粺缂栫爜
+                dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//绯荤粺name
+
+                dockingTaskDO_insert.add(dockingTaskDO);
+            }
+
+            BatchCBO bi = null;
+            if(dockingTaskDO_insert.size()!=0) {
+                bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
+                batchCBO.copyFromOther(bi);
+            }
+
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+
+            //dockingTaskDaoI.updateByPrimaryKey鏂规硶鎶ラ敊浜嗭紝鎵�浠ユ墜鍐欎簡杩欎釜
+            boolean u = updateDockingDatasSendFlag(dataoid, MdmDuckingConstant.SEND_FLAG_TRUE);
+            if(!u){
+                logger.error("闆嗘垚data鍒嗚В浠诲姟澶辫触锛乨ataoid:"+dataoid);
+                continue;
+            }
+
+        }
+    }
+
+    /**
+     * 鍥涖��3銆�
+     * 1銆�
+     */
+    @Override
+    public void sendData3(){
+
+        initSysadmin();
+
+        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
+        queryWrapper.addQueryMap("sendFlag", MdmDuckingConstant.SEND_FLAG_FALSE);
+        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
+
+        //姣忎釜task渚濇鎵ц鎺ㄩ��
+        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
+
+            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+
+            String paramString = null;
+
+            //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
+            String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
+            String systemcode = dockingTaskDO.getSystemcode();
+            String systemname = dockingTaskDO.getSystemname();
+            String systemoid = dockingTaskDO.getSystemoid();
+            String dataid = dockingTaskDO.getId();//缂栫爜
+            String uniquecode = dockingTaskDO.getUniquecode();//uniquecode
+
+            //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
+            SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
+            String url = sysIntInfoVO.getRequesturl();//url
+            String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
+            String paramType = sysIntInfoVO.getParamtype();//xml/json
+            String returnType = sysIntInfoVO.getReturntype();//xml/json
+            String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//涓昏鏄痺ebservice鐨勬柟娉曞悕
+            String namespace = sysIntInfoVO.getNamespace();//namespace
+            String soapaction = sysIntInfoVO.getSoapaction();//soapaction
+            String targName = sysIntInfoVO.getTargName();//targName
+            String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice鏄痗xf/axis
+
+            //鏌ヨparam
+            List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(systeminfooid);
+            //鏌ヨheader
+            List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(systeminfooid);
+
+            //鏌ヨ瑕佹帹閫佺殑鏁版嵁
+            String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁oid
+            String btmid = dockingTaskDO.getBtmid();//鏁版嵁btmid
+            String classifyoid = dockingTaskDO.getClassifyoid();
+            String classifyid = dockingTaskDO.getClassifyid();
+            String classifyname= dockingTaskDO.getClassifyname();
+            String sendtype = dockingTaskDO.getSendtype();
+
+            //缁勮鏁版嵁
+            XmlData xmlData = new XmlData();
+            xmlData.setSendtype(sendtype);
+
+            if(!MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.equals(btmid)) {
+                xmlData.setType(btmid);
+            }
+
+            String ret_xml = null;
+            String id = null;
+            String name = null;
+            String idpath = null;
+            String namepath = null;
+            //琛ㄧず鏄垎绫讳俊鎭暟鎹�
+            if(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.equals(btmid)){
+                xmlData.setNamepath("");
+                xmlData.setIdpath("");
+                xmlData.setNum("");
+
+                CodeClassifyDO codeClassifyDO = null;
+                try {
+                    codeClassifyDO = codeClassifyDaoI.selectByPrimaryKey(btmoid);
+                }catch (Exception e){
+
+                }
+
+                String classifyoid_parent = "";
+                int orderNum = 0;
+                if(codeClassifyDO==null){//鏌ヤ笉鍒版暟鎹紝璇存槑琚垹闄や簡锛屼粠DOCKING_CACHE2_DELETE鍙�
+                    CodeClassifyDO codeClassifyDOJson = (CodeClassifyDO)redisService.getCacheObject(MdmDuckingConstant.DOCKING_CACHE2_DELETE+btmoid);
+
+                    if(codeClassifyDOJson==null){
+                        BatchCBO insertLoge = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,"",url,"涓绘暟鎹郴缁熸湭鏌ヨ鍒板垹闄ょ殑鏁版嵁锛屾湭鎵ц鎺ㄩ�併��");
+                        batchCBO.copyFromOther(insertLoge);
+                        WebUtil.setPersistence(true);
+                        boService.persistenceBatch(batchCBO);
+                    }
+                    id = codeClassifyDOJson.getId();
+                    name = codeClassifyDOJson.getName();
+                    orderNum = codeClassifyDOJson.getOrderNum();
+                    classifyoid_parent = codeClassifyDOJson.getParentCodeClassifyOid();
+                }else {
+                    id = codeClassifyDO.getId();
+                    name = codeClassifyDO.getName();
+                    orderNum = codeClassifyDO.getOrderNum();
+                    classifyoid_parent = codeClassifyDO.getParentCodeClassifyOid();
+                }
+
+                //鐖剁骇,idpath,namepath,鍒嗙被鏁版嵁瑙嗗浘涓病鏈夋煡璇㈠嚭璺緞锛岄渶瑕佹墜鍔ㄥ幓鏌ヨ
+                CodeClassifyDO codeClassifyDO_parent = null;
+                try {
+                    codeClassifyDO_parent = codeClassifyDaoI.selectByPrimaryKey(classifyoid_parent);
+                    xmlData.setParentId(codeClassifyDO_parent.getId());
+
+                    //idpath,namepath
+
+                    List<CodeClassifyDO> codeClassifyDOList = codeClassifyDaoI.listParentClassify(codeClassifyDO_parent.getOid());
+                    for (int i=codeClassifyDOList.size()-1;i>=0;i--){
+                        CodeClassifyDO codeClassifyDOi=codeClassifyDOList.get(i);
+                        String idi = codeClassifyDOi.getId();
+                        String namei = codeClassifyDOi.getName();
+                        idpath = idpath==null?idi:idpath+"#"+idi;
+                        namepath = namepath==null?namei:namepath+"#"+namei;
+                    }
+                }catch (Exception e){
+
+                }
+
+                idpath = idpath==null?id:idpath+"#"+id;
+                namepath = namepath==null?name:namepath+"#"+name;
+
+                //鏌ヨ鍒嗙被璺緞
+                xmlData.setName(name);
+                xmlData.setNamepath(namepath);
+                xmlData.setIdpath(idpath);
+                xmlData.setId(id);
+                xmlData.setOrderNum(orderNum);
+
+                List<XmlData> xmlDataList = new ArrayList<XmlData>();
+                xmlDataList.add(xmlData);
+                ret_xml = XmlUtil.writeSendXmlData_classify(xmlDataList);//xml鏍煎紡鏁版嵁
+            }else {
+                Map<String, String> data = null;
+                try {
+                    //琛ㄧず鏄富鏁版嵁
+                    CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
+                    BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
+
+                    if (baseResult == null) {
+                        JSONObject josni = redisService.getCacheObject(MdmDuckingConstant.DOCKING_CACHE2_DELETE + btmoid);
+                        data = (Map) josni;
+                    } else {
+                        data = baseResult.getObj();
+                    }
+                }catch (Throwable e){
+                    BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"鏈煡璇㈠埌鐩稿簲鏁版嵁锛�");
+                    batchCBO.copyFromOther(failCbo);
+                    continue;
+                }
+
+                //澶勭悊璁¢噺鍗曚綅绛夎浆鎹�
+//                data = tran(data);
+
+                //濡傛灉鏄泦鎴恊rp閮ㄩ棬鏁版嵁闆嗘垚锛宲arentcode=null寤虹珛涓�绾ч儴闂�,鏃犱汉鏈烘瘮杈冨彧鏈夐儴闂紝娌℃湁绉戝,鎵�浠ョ郴缁熺殑绉戝鍏跺疄灏辨槸浠栦滑鐨勯儴闂�
+                if("organization".equals(btmid.toLowerCase())){
+                    String materialclassify = data.get("materialclassify");
+                    if("绉戝".equals(materialclassify)){
+                        data.put("parentcode","");
+                    }
+                }
+                //鏁版嵁杞崲d
+                String tran_xml = null;
+                try {
+                    //D:\MDM_important\PLT-2022\web\tranTemp\+绯荤粺鍚嶇О,浼氬幓鎵捐繖涓枃浠惰鍙栨暟鎹浆鎹俊鎭�
+                    tran_xml = FileUtils.readFileToString(new File(tranTemp+File.separator+systemcode+".xml"),"utf-8");
+                }catch (IOException e){
+                    e.printStackTrace();
+                }
+                if(StringUtils.isNotEmpty(tran_xml)){
+                    //閫氳繃tran_xml瀵筪ata鏁版嵁杞崲
+                    Map<String,Object> tran_map = null;
+                    try {
+                        tran_map = XmlUtil.readTranXml(tran_xml,btmid);
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                    if(tran_map!=null){//璇诲彇鍒拌繖涓猙tmid璁剧疆鐨勮浆鎹㈠叧绯讳簡鎵嶅仛澶勭悊
+                        for (String key:tran_map.keySet()){//key=materialtype
+                            Object data_pro_mapo = tran_map.get(key);//data_pro_map
+                            if(data_pro_mapo!=null){//杩欎釜鍊艰缃浆鎹簡鎵嶅鐞�
+                                Map<String,String> data_pro_map = (Map<String,String>)data_pro_mapo;
+                                String mdm_value = data.get(key);
+                                String system_value = data_pro_map.get(mdm_value);
+                                if(StringUtils.isNotEmpty(mdm_value)){
+                                    data.put(key,system_value);
+                                }
+                            }
+                        }
+                    }
+                }
+
+                String unique = null;
+                List<Pro> pros = new ArrayList<Pro>();
+                String codeclassifyoid = null;
+                for (String key:data.keySet()){
+                    Pro pro = new Pro();
+                    pro.setKey(key);
+                    pro.setMean("");
+                    pro.setValue(data.getOrDefault(key,""));
+                    pros.add(pro);
+                    if(tuhao.equals(key)){
+                        unique = data.getOrDefault(key,"");
+                    }
+                    if("oid".equals(key)){
+                        codeclassifyoid = data.getOrDefault(key,"");
+                    }
+                }
+                xmlData.setNum(data.getOrDefault("id",""));
+                xmlData.setPros(pros);
+                xmlData.setUnique(unique);
+
+                //鏌ヨ鍒嗙被璺緞,涓绘暟鎹湪瑙嗗浘涓凡缁忔煡璇㈠嚭浜嗚矾寰勶紝鍙笉杩囨槸,闂撮殧鐨�
+                namepath = classifyname.replaceAll(",","#");
+                idpath = classifyid.replaceAll(",","#");
+
+                xmlData.setNamepath(namepath);
+                xmlData.setIdpath(idpath);
+
+                List<XmlData> xmlDataList = new ArrayList<XmlData>();
+                xmlDataList.add(xmlData);
+                ret_xml = XmlUtil.writeSendXmlData(xmlDataList);//xml鏍煎紡鏁版嵁
+            }
+
+            //鍒囨崲xml/json
+            String sendString = null;
+            String backString = null;
+            if(paramType.equals(MdmDuckingConstant.DATATYPE_JSON)){
+                sendString = XML.toJSONObject(ret_xml).toString();
+            }else {
+                sendString = ret_xml;
+            }
+            logger.info("绯荤粺锛�"+systemcode);
+            logger.info("鎺ュ彛鍦板潃:"+url);
+            logger.info("鎺ュ彛鍑芥暟:"+interfaceFunction);
+            logger.info("鎺ュ彛浼犻�掑弬鏁�:"+sendString);
+            //鎺ㄩ�佹暟鎹�
+            try {
+                if (type.equals(MdmDuckingConstant.URLTYPE_GET)) {//GET璇锋眰
+                    String sendurl = url + "?" + MdmDuckingConstant.PARAM_XMLDATA + "=" + sendString;
+                    //鎷兼帴param
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
+                    }
+                    paramString=sendurl;
+                    backString = HttpUtils.get(sendurl);
+                } else if (type.equals(MdmDuckingConstant.URLTYPE_POST)) {//POST璇锋眰
+                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                    }
+                    paramString=params.toString();
+                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                    }
+                    backString = HttpUtils.post(url, params, headers);
+                } else if (type.equals(MdmDuckingConstant.URLTYPE_WEBSERVICE)) {//webserver璇锋眰
+                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                    }
+                    paramString=sendString;
+                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                    }
+                    backString = WsErpClientUtil.sendMsg(url, namespace, soapaction,interfaceFunction,targName, paramString, 10000);
+                } else {//corba鎺ュ彛
+
+                }
+                paramString=sendString;
+            }catch (Exception e){
+                e.printStackTrace();
+                BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"鎺ㄩ�佹暟鎹け璐ワ紒");
+                batchCBO.copyFromOther(failCbo);
+            }
+            logger.info("鎺ュ彛杩斿洖鍙傛暟:"+backString);
+            //瑙f瀽杩旇繕鍙傛暟
+            try {
+                BackXml backXml = null;
+                if(returnType.equals(MdmDuckingConstant.DATATYPE_JSON)){
+                    backXml = XmlUtil.readSendJsonData(backString);//鐩墠鍙鍙栦富鏁版嵁json杩斿洖淇℃伅
+                }else {
+                    if(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.equals(btmid)){
+                        backXml = XmlUtil.readSendXmlData_classify(backString);//鍒嗙被xml杩斿洖淇℃伅
+                    }else {
+                        backXml = XmlUtil.readSendXmlData(backString);//涓绘暟鎹畑ml杩斿洖淇℃伅
+                    }
+                }
+                List<XmlData> datas = backXml.getDatas();
+                boolean isSend = false;
+                for (XmlData xmlDatai:datas){
+                    String xml_datacode = xmlDatai.getState();
+                    String xml_datamsg = xmlDatai.getMsg();
+                    if(MdmDuckingConstant.XML_DATACODE_200.equals(xml_datacode)){
+                        BatchCBO insertLoge = taskSuccess(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(insertLoge);
+                        isSend = true;
+                    }else if(MdmDuckingConstant.XML_DATACODE_500.equals(xml_datacode)){
+                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(failCbo);
+                    }else if("true".equals(xml_datacode.toLowerCase())){
+                        BatchCBO insertLoge = taskSuccess(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(insertLoge);
+                        isSend = true;
+                    }else if("false".equals(xml_datacode)){
+                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(failCbo);
+                    }else{
+                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"杩旇繕xml鏍煎紡涓嶆纭紝缂哄皯code!");
+                        batchCBO.copyFromOther(failCbo);
+                    }
+                }
+
+                //鍏ㄩ兘鎺ユ敹鎴愬姛鐨勬儏鍐典笅,淇敼dockingtask sendflag涓哄凡鍙戦��
+                if(isSend) {
+                    dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
+                    BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
+                    batchCBO.copyFromOther(updateTask);
+                }
+
+            }catch (Exception e){
+                e.printStackTrace();
+                BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"瑙f瀽杩旇繕鏁版嵁澶辫触锛�");
+                batchCBO.copyFromOther(failCbo);
+            }
+
+            //姣忎竴涓猼ask涓�涓簨鐗�
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+
+        }
+    }
+
+    public static Map<String,String> tranMap = new HashMap<String,String>();
+    public Map<String,String> tran(Map<String,String> data){
+        if(tranMap.isEmpty()){
+//            tranMap.put("jiliangdw","jiliangdwname");
+        }
+
+        for (String key:tranMap.keySet()){
+            String tran_key = tranMap.get(key);
+            String tran_key_value = data.get(tran_key);
+            if(StringUtils.isNotEmpty(tran_key_value)){
+                data.put(key,tran_key_value);
+            }
+        }
+        data.put("shifoupihaoguanli","0");
+        return data;
+    }
+
+    /**
+     * 瀹氭椂浠诲姟鎺ㄩ��
+     */
+    @Override
+    public void DockingScheduing(){
+        //data 2 task
+        insertCache2();
+
+        //鎺ㄩ�佹暟鎹�
+        sendData3();
+    }
+
+    /**
+     * 鏁版嵁鍒犻櫎鐨勬椂鍊欙紝缂撳瓨鍒皉edis
+     * @param oid
+     */
+    @Override
+    public void cacheDeleteData(String oid,Object obj){
+        logger.info("鍒犻櫎鏁版嵁鎻掑叆redis,key: "+ MdmDuckingConstant.DOCKING_CACHE2_DELETE+",oid: "+oid+",obj: "+obj);
+        redisService.setCacheObject(MdmDuckingConstant.DOCKING_CACHE2_DELETE + oid, obj);
+    }
+
+    @Override
+    public DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        pageHelper.addDefaultAsc("sendflag");
+        List<DockingDataDO> doList = dockingDataDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<DockingDataDO> dataGrid=new DataGrid<DockingDataDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingDataDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    @Override
+    public DataGrid<DockingTaskDO> gridTask(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        pageHelper.addDefaultAsc("sendflag");
+        List<DockingTaskDO> doList = dockingTaskDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<DockingTaskDO> dataGrid=new DataGrid<DockingTaskDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingTaskDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    @Override
+    public DataGrid<DockingLogeDO> gridLoge(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<DockingLogeDO> doList = dockingLogeDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<DockingLogeDO> dataGrid=new DataGrid<DockingLogeDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingLogeDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    @Override
+    public DataGrid<SysIntHeaderDO> gridHeader(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<SysIntHeaderDO> doList = sysIntHeaderDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<SysIntHeaderDO> dataGrid=new DataGrid<SysIntHeaderDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(sysIntHeaderDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+    /**
+     * 鎺ㄩ�佹垚鍔�,鎻掑叆dockingtask锛屽悓鏃惰褰昹oge
+     * @param systemcode
+     * @param systemname
+     * @param systemoid
+     * @param paramString
+     * @param url
+     */
+    public BatchCBO taskSuccess(String systemcode,String systemname,String systemoid,String classifyoid,String classifyid,String classifyname,String id,String uniquecode,String paramString,String url,String msg){
+        String oid=redisService.getUUIDEveryDay();
+        DockingLogeDO dockingLogeDO = new DockingLogeDO();
+        dockingLogeDO.setOid(oid);
+        dockingLogeDO.setSystemcode(systemcode);
+        dockingLogeDO.setSystemname(systemname);
+        dockingLogeDO.setSystemoid(systemoid);
+        dockingLogeDO.setClassifyoid(classifyoid);
+        dockingLogeDO.setClassifyid(classifyid);
+        dockingLogeDO.setClassifyname(classifyname);
+        dockingLogeDO.setId(id);
+        dockingLogeDO.setUniquecode(uniquecode);
+       /** if(paramString.length()>100){
+            paramString = paramString.substring(0,100);
+        }***/
+        dockingLogeDO.setParamstring(paramString);
+        dockingLogeDO.setType(MdmDuckingConstant.DATA_LOGE_OUT);
+
+//        dockingLogeDO.setReturnstring(retString);
+        dockingLogeDO.setMsg(msg);
+        dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_TRUE);
+        BatchCBO insert = dockingLogeDaoI.insert(dockingLogeDO);
+        logger.info("闆嗘垚鎺ㄩ�佹暟鎹垚鍔�,systemcode:"+systemcode+",systemname:"+systemcode+",url:"+url+",param:"+paramString);
+        return insert;
+    }
+
+    /**
+     * 鎺ㄩ�佸け璐�,鎻掑叆dockingtask锛屽悓鏃惰褰昹oge
+     * @param systemcode
+     * @param systemname
+     * @param systemoid
+     * @param paramString
+     * @param url
+     */
+    public BatchCBO taskFail(String systemcode,String systemname,String systemoid,String classifyoid,String classifyid,String classifyname,String id,String uniquecode,String paramString,String url,String msg){
+        String oid=redisService.getUUIDEveryDay();
+        DockingLogeDO dockingLogeDO = new DockingLogeDO();
+        dockingLogeDO.setOid(oid);
+        dockingLogeDO.setSystemcode(systemcode);
+        dockingLogeDO.setSystemname(systemname);
+        dockingLogeDO.setSystemoid(systemoid);
+        dockingLogeDO.setClassifyoid(classifyoid);
+        dockingLogeDO.setClassifyid(classifyid);
+        dockingLogeDO.setClassifyname(classifyname);
+        dockingLogeDO.setId(id);
+        dockingLogeDO.setUniquecode(uniquecode);
+       /** if(StringUtils.isNotEmpty(paramString)&&paramString.length()>100){
+            paramString = paramString.substring(0,100);
+        }***/
+        dockingLogeDO.setParamstring(paramString);
+        dockingLogeDO.setType(MdmDuckingConstant.DATA_LOGE_OUT);
+
+        dockingLogeDO.setMsg(msg);
+        dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_FALSE);
+        BatchCBO insert = dockingLogeDaoI.insert(dockingLogeDO);
+
+        logger.error("闆嗘垚鎺ㄩ�佹暟鎹け璐�,systemcode:"+systemcode+",systemname:"+systemcode+",url:"+url+",param:"+paramString+",e:"+msg);
+        return insert;
+    }
+    public void initSysadmin(){
+        SessionInfo sessionInfo = new SessionInfo();
+        sessionInfo.setUserId("sysAdmin");
+        sessionInfo.setUserName("绯荤粺绠$悊鍛�");
+        sessionInfo.setIp(WebUtil.getLocalIp());
+        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
+        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
+        WebUtil.setSessionInfo(sessionInfo);
+    }
+
+    /**
+     * dockingdata鏌ヨ闇�瑕佹帹閫佺殑鏁版嵁
+     * @return
+     */
+    public List<Map> getDockingDatas(){
+        String sql = "select oid,id,classifyoid,btmid,btmoid,sendtype,classifyid,classifyname from PLATFORMBTM_codedockingDATA where sendflag = 'false'";
+        List<Map> datas = boService.queryBySqlForMap(sql,null);
+        return datas;
+    }
+
+    /**
+     * dockingdata鍒犻櫎
+     * @return
+     */
+    public boolean delteDockingData(String oid){
+        boolean u = false;
+        String sql = "delete from PLATFORMBTM_codedockingDATA where oid = '"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+
+    /**
+     * 鏌ヨ鍥惧彿
+     * @return
+     */
+    public String getTuhao(String oid){
+        String tuhao = "";
+        String sql = "select tuhao from PLATFORMBTM_wupin where oid = '"+oid+"'";
+        List<Map> datas = boService.queryBySqlForMap(sql,null);
+        if(datas!=null&&datas.size()!=0){
+            tuhao = datas.get(0).getOrDefault("tuhao","").toString();
+        }
+        return tuhao;
+    }
+
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+    /**
+     * dockingdata鏍规嵁oid淇敼sendflag
+     * @param oid
+     * @param sendflag
+     * @return
+     */
+    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
+        boolean u=false;
+        String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+
+    public boolean updateDockingDatasUniqueCode(String oid,String uniquecode){
+        boolean u=false;
+        String sql = "update PLATFORMBTM_codedockingdata set uniquecode = '"+uniquecode+"' where oid='"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
new file mode 100644
index 0000000..d24fc98
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -0,0 +1,636 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.ubcs.code.dao.CodeClassifyDaoI;
+import com.vci.ubcs.code.dao.DockingDataDaoI;
+import com.vci.ubcs.code.dao.DockingLogeDaoI;
+import com.vci.ubcs.code.dao.DockingTaskDaoI;
+import com.vci.ubcs.code.dto.datapush.classify.JsonRootDataDTO;
+import com.vci.ubcs.code.dto.datapush.classify.NodeClassifyDTO;
+import com.vci.ubcs.code.dto.datapush.classify.NodeDataDTO;
+import com.vci.ubcs.code.dto.datapush.classify.NodeLibraryDTO;
+import com.vci.ubcs.code.dto.datapush.data.NodeJosnDTO;
+import com.vci.ubcs.code.dto.datapush.data.NodeObjectDTO;
+import com.vci.ubcs.code.dto.datapush.data.NodeProDTO;
+import com.vci.ubcs.code.dto.datapush.data.NodedataDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultJsonDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultNodeDataDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO;
+import com.vci.code.model.*;
+import com.vci.ubcs.code.service.CodeDuckingSyncServiceI;
+import com.vci.ubcs.code.service.MdmEngineServiceI;
+import com.vci.ubcs.code.service.SysIntInfoServiceI;
+import com.vci.ubcs.code.utils.HttpUtils;
+import com.vci.ubcs.code.utils.WsErpClientUtil;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.enumpck.UserSecretEnum;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.SessionInfo;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.code.model.*;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.model.*;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+import com.vci.ubcs.code.vo.pagemodel.SysIntInfoVO;
+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;
+
+
+/**
+ * 涓婚搴撻泦鎴愭湇鍔�
+ * @author wangyi
+ * @date 2022-03-20
+ */
+@Service
+public class CodeDuckingSyncServiceImpl implements CodeDuckingSyncServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingTaskDaoI dockingTaskDaoI;
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingDataDaoI dockingDataDaoI;
+
+    /**
+     * 闆嗘垚鏃ュ織鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private DockingLogeDaoI dockingLogeDaoI;
+
+    /**
+     * 妯℃澘灞炴�ф暟鎹搷浣滃眰
+     */
+    @Resource
+    private CodeClassifyDaoI codeClassifyDaoI;
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+	private WebBoServiceI boService;
+
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 鏁版嵁鏈嶅姟
+     */
+    @Autowired(required = false)
+    @Lazy
+    private MdmEngineServiceI mdmEngineServiceI;
+
+
+    /**
+     * 瑕佹帹閫佺郴缁熺殑鏈嶅姟
+     */
+    @Autowired
+    private SysIntInfoServiceI sysIntInfoServiceI;
+
+    @Value("${dataSyncPush.dataParamName:xmlData}")
+    public String DATA_PARAM_NAME;
+
+    /**
+     * 瀹氭椂浠诲姟鎺ㄩ��
+     */
+    @Override
+    public void DockingDataSyncScheduing(){
+       // insertCache2();
+        initPushDataTaks(1);
+        sendpushDataForService();
+    }
+
+    /**
+     * 鍒嗙被瀹氭椂浠诲姟鎺ㄩ��
+     */
+    @Override
+    public void DockingClassSyncScheduing(){
+        initPushDataTaks(2);//鍒嗙被鎺ㄩ��
+        sendpushClsfForService();
+    }
+
+    /**
+     * 鎵嬪姩鎺ㄩ�佷负瀹屾垚鐨勬暟鎹�
+     * @param oids
+     * @return
+     */
+    @Override
+    public BaseResult sendData(String oids) {
+        VciBaseUtil.alertNotNull(oids,"绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄",oids,"绯荤粺闆嗘垚鍩虹淇℃伅鐨勪富閿�");
+        List<String> dockingTaskOidList=new ArrayList<>();
+        dockingTaskOidList= VciBaseUtil.str2List(oids);
+        List<DockingTaskDO> newDockingTaskDOs= this.dockingTaskDaoI.selectByPrimaryKeyCollection(dockingTaskOidList);
+        Map<String,List<DockingTaskDO>> typeDockingTaskDOMap=new HashMap<>();
+        newDockingTaskDOs.stream().forEach(newDockingTaskDO->{
+           String btmId=newDockingTaskDO.getBtmid();
+           if(btmId.equalsIgnoreCase(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
+               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
+               if(CollectionUtils.isEmpty(dockingTaskDOList)){
+                   dockingTaskDOList=new ArrayList<>();
+               }
+               dockingTaskDOList.add(newDockingTaskDO);
+               typeDockingTaskDOMap.put(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT),dockingTaskDOList);
+           }else{
+               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get("data");
+               if(CollectionUtils.isEmpty(dockingTaskDOList)){
+                   dockingTaskDOList=new ArrayList<>();
+               }
+               dockingTaskDOList.add(newDockingTaskDO);
+               typeDockingTaskDOMap.put("data",dockingTaskDOList);
+           }
+        });
+        typeDockingTaskDOMap.keySet().forEach(type->{
+           List<DockingTaskDO> DockingTaskDO=typeDockingTaskDOMap.get(type);
+           if(!CollectionUtils.isEmpty(DockingTaskDO)){
+               if(type.equalsIgnoreCase(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
+                   this.sendpushClsfForService(DockingTaskDO);
+               }else{
+                   this.sendpushDataForService(DockingTaskDO);
+               }
+           }
+        });
+       return  BaseResult.successMsg("鎵嬪姩鎺ㄩ�佸畬鎴�,璇锋牳瀵规槸鍚︽帹閫佹垚鍔�");
+    }
+    /***
+     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
+     * @param type
+     */
+    private void initPushDataTaks(int type){
+        initSysadmin();
+        //sysintinfo鏌ヨ瑕佹帹閫佺殑涓婚搴撳拰鐩稿叧绯荤粺淇℃伅
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("usedflag","true");
+        conditionMap.put("pushType",type==2?"2":"1") ;//2鏄唬琛ㄥ垎绫绘帹閫侊紝1鏄唬琛ㄦ暟鎹帹閫�
+
+        List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
+        if(CollectionUtils.isEmpty(sysIntInfoVOList)){
+            String title=type==2?"鍒嗙被鎺ㄩ��":"鏁版嵁鎺ㄩ��";
+            logger.info("info->鎵�鏈夐泦鎴愮郴缁燂紝鏈煡璇㈠埌鐩稿叧鐨勩��"+title+"銆戠殑鎺ュ彛閰嶇疆淇℃伅锛岄厤缃�");
+            return;
+        }
+        Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//key=classifyoid,value=list<map>
+        for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
+            List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
+            if(SysIntInfoVOListi==null){
+                SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
+            }
+            SysIntInfoVOListi.add(sysIntInfoVOi);
+            sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
+        }
+        //鏍规嵁绫诲瀷鍘绘煡璇㈤渶瑕侀泦鎴愮殑鍒嗙被鎴栬�呮暟鎹�
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
+        queryWrapperForDO.addQueryMap("sendflag","false");
+        if(type==2){
+            queryWrapperForDO.addQueryMap("btmTypeId", MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
+        }else {
+            queryWrapperForDO.addQueryMap("btmTypeId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT)) + ")");
+        }
+        List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
+
+        for (DockingDataDO mapi:dataList){
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+            String dataoid = mapi.getOid();//data瀵硅薄鐨刼id
+            String classifyoid = mapi.getClassifyoid();
+            String id = mapi.getId();
+            String uniquecode = mapi.getUniquecode();
+            String btmid = mapi.getBtmid();
+            String btmoid = mapi.getBtmoid();
+            String sendtype = mapi.getSendtype();
+            String classifyid = mapi.getClassifyid();
+            String classifyname = mapi.getClassifyname();
+            String curentClassOid=null;
+            if(type==2){
+                curentClassOid=btmoid;
+            }else{
+                curentClassOid=classifyoid;
+            }
+            List<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
+           //鏍规嵁褰撳墠鏁版嵁鐨刬d锛屾煡璇㈣幏鍙栧摢浜涚郴缁熼渶瑕佸仛闆嗘垚
+            List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(curentClassOid);
+            if(CollectionUtils.isEmpty(parentLeveDO)){
+                continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
+            }
+            Map<String, CodeClassifyDO> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+
+            oidCodeclassifyDOMap.keySet().forEach(oid->{
+                if(sysIntInfoDOMap.containsKey(oid)){
+                    List<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
+                    effectiveSysIntInfoVOs.addAll(sysIntInfoDOS);
+                }
+            });
+            //濡傛灉鏍¢獙鐨勭郴缁熸帴鍙d俊鎭笉瀛樺湪锛屽垯鏁版嵁涓嶄笉寰�淇℃伅閲屾帹閫�
+            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
+                continue;
+            }
+            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
+            for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
+                DockingTaskDO dockingTaskDO = new DockingTaskDO();
+                dockingTaskDO.setOid(redisService.getUUIDEveryDay());
+                dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_FALSE);
+                dockingTaskDO.setId(id);//缂栫爜
+                dockingTaskDO.setUniquecode(uniquecode);
+                dockingTaskDO.setBtmoid(btmoid);//鏁版嵁oid
+                dockingTaskDO.setBtmid(btmid);//鏁版嵁涓氬姟绫诲瀷id
+                dockingTaskDO.setClassifyid(classifyid);//鏁版嵁鍦ㄥ垎绫籭d
+                dockingTaskDO.setClassifyoid(classifyoid);//鏁版嵁鎵�鍦ㄥ垎绫籵id
+                dockingTaskDO.setClassifyname(classifyname);//鏁版嵁鎵�鍦ㄥ垎绫诲悕绉�
+                dockingTaskDO.setSendtype(sendtype);//鏁版嵁鎺ㄩ�佺被鍨�
+                dockingTaskDO.setDataoid(dataoid);
+
+                //intinfo
+                dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo鐨刼id
+                dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//绯荤粺oid
+                dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//绯荤粺缂栫爜
+                dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//绯荤粺name
+                dockingTaskDO_insert.add(dockingTaskDO);
+            }
+
+            BatchCBO bi = null;
+            if(dockingTaskDO_insert.size()!=0) {
+                bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
+                batchCBO.copyFromOther(bi);
+            }
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+            //dockingTaskDaoI.updateByPrimaryKey鏂规硶鎶ラ敊浜嗭紝鎵�浠ユ墜鍐欎簡杩欎釜
+            boolean u = updateDockingDatasSendFlag(dataoid, MdmDuckingConstant.SEND_FLAG_TRUE);
+            if(!u){
+                logger.error("闆嗘垚data鍒嗚В浠诲姟澶辫触锛乨ataoid:"+dataoid);
+                continue;
+            }
+
+        }
+    }
+    private void sendpushDataForService (){
+        initSysadmin();
+        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
+        queryWrapper.addQueryMap("sendFlag", MdmDuckingConstant.SEND_FLAG_FALSE);
+        queryWrapper.addQueryMap("btmId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT)) + ")");
+        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
+        sendpushDataForService(dockingTaskDOS);
+    }
+    /***
+     * 鍙戦�佺紪鐮佷富鏁版嵁
+     */
+    private void sendpushDataForService (List<DockingTaskDO> dockingTaskDOS){
+
+        //姣忎釜task渚濇鎵ц鎺ㄩ��
+        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
+            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+            String paramString="";
+            String sendString="";
+            String backString="";
+            try {
+                //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
+                String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
+                String classifyoid = dockingTaskDO.getClassifyoid();
+                //鏌ヨ瑕佹帹閫佺殑鏁版嵁
+                String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁btmid
+                //琛ㄧず鏄富鏁版嵁
+                CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
+                BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
+                List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
+                Map<String/**鑻辨枃鍚嶇О**/, String/**涓枃鍚嶇О**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
+                Map<String, String> data = new HashMap<>();
+                if (baseResult == null) {
+                    JSONObject josni = redisService.getCacheObject(MdmDuckingConstant.DOCKING_CACHE2_DELETE + btmoid);
+                    data = (Map) josni;
+                } else {
+                    data = baseResult.getObj();
+                }
+                List<NodeProDTO> nodeProDTOS = new ArrayList<>();
+                Map<String, String> finalData = data;
+                attrIdNameMap.keySet().forEach(field -> {
+                    String outName = attrIdNameMap.get(field);
+                    if (finalData.containsKey(field)) {
+                        String Value = finalData.get(field);
+                        NodeProDTO nodeProDTO = new NodeProDTO();
+                        nodeProDTO.setFiledName(field);
+                        nodeProDTO.setOutname(outName);
+                        nodeProDTO.setFiledValue(Value);
+                        nodeProDTOS.add(nodeProDTO);
+                    }
+                });
+
+                String[] classCodeLeves = dockingTaskDO.getClassifyid().split(",");
+                NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
+                NodedataDTO nodeDataDTO = new NodedataDTO();
+                NodeObjectDTO nodeObjectDTO = new NodeObjectDTO();
+                nodeObjectDTO.setCode(dockingTaskDO.getId());//璁剧疆缂栫爜
+                nodeObjectDTO.setClassCode(classCodeLeves[0]);
+                nodeObjectDTO.setStatus(data.get("lcstatus"));
+                nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]);
+                nodeObjectDTO.setPro(nodeProDTOS);
+                List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
+                nodeObjectDTOS.add(nodeObjectDTO);
+                nodeDataDTO.setObject(nodeObjectDTOS);
+                nodeJosnDTO.setData(nodeDataDTO);
+                //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
+                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
+                String paramType = sysIntInfoVO.getParamtype();//xml/json
+                if (paramType.equals(MdmDuckingConstant.DATATYPE_JSON)) {
+                    Object object = JSONObject.toJSON(nodeJosnDTO);
+                    sendString = object.toString();
+                } else {
+                    //缁勭粐杩斿洖鎺ュ彛淇℃伅
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(NodedataDTO.class);
+                    xStream.autodetectAnnotations(true);
+                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
+                }
+                //璋冪敤鎺ュ彛
+                callInterface(sendString,sysIntInfoVO, dockingTaskDO, batchCBO);
+            }catch (Throwable e){
+                e.printStackTrace();
+            }finally {
+                //姣忎竴涓猼ask涓�涓簨鐗�
+                WebUtil.setPersistence(true);
+                boService.persistenceBatch(batchCBO);
+            }
+        }
+    }
+    public void sendpushClsfForService(){
+        initSysadmin();
+        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
+        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
+        queryWrapper.addQueryMap("btmId", MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT));
+        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
+        sendpushClsfForService(dockingTaskDOS);
+    }
+    /***
+     * 鍙戦�佸垎绫绘暟鎹�
+     */
+    private void sendpushClsfForService(List<DockingTaskDO> dockingTaskDOS){
+        //姣忎釜task渚濇鎵ц鎺ㄩ��
+        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
+            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+            String paramString="";
+            String sendString="";
+            String backString="";
+            //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
+            String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
+            try {
+                //鏌ヨ瑕佹帹閫佺殑鏁版嵁
+                String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁btmid
+                JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO();
+                CodeClassifyDO codeClassifyDO=codeClassifyDaoI.selectByPrimaryKey(btmoid);
+                List<NodeClassifyDTO>nodeClassifyDTOList=new ArrayList<>();
+                NodeClassifyDTO nodeClassifyDTO=new NodeClassifyDTO();
+                nodeClassifyDTO.setClassCode(codeClassifyDO.getId());//鍒嗙被浠e彿
+                nodeClassifyDTO.setDescription(codeClassifyDO.getDescription());//鍒嗙被鎻忚堪
+                nodeClassifyDTO.setFullPathName(codeClassifyDO.getPath());//鍏ㄨ矾寰�
+                nodeClassifyDTO.setLcStatus(codeClassifyDO.getLcStatus());//鐘舵��
+              //  CodeClassifyDO parentClassDo=codeClassifyDaoI.selectByPrimaryKey(codeClassifyDO.getParentCodeClassifyOid());
+                nodeClassifyDTO.setPid(codeClassifyDO.getId());//鐖秈d鑺傜偣
+                nodeClassifyDTO.setId(codeClassifyDO.getOid());//鍒嗙被oid
+                nodeClassifyDTO.setName(codeClassifyDO.getName());//鍒嗙被鍚嶇О
+                nodeClassifyDTOList.add(nodeClassifyDTO);
+                NodeLibraryDTO nodeLibraryDTO=new NodeLibraryDTO();
+                nodeLibraryDTO.setClassify(nodeClassifyDTOList);
+                CodeClassifyDO rootClassify=codeClassifyDaoI.getRootClassify(btmoid);
+                nodeLibraryDTO.setId(rootClassify.getOid());
+                nodeLibraryDTO.setName(rootClassify.getName());
+                NodeDataDTO nodeDataDTO=new NodeDataDTO();
+                nodeDataDTO.setLibrary(nodeLibraryDTO);
+                jsonRootDataDTO.setData(nodeDataDTO);
+
+                //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
+                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
+                String paramType = sysIntInfoVO.getParamtype();//xml/json
+                if(paramType.equals(MdmDuckingConstant.DATATYPE_JSON)){
+                    Object object = JSONObject.toJSON(jsonRootDataDTO);
+                    sendString = object.toString();
+                }else{
+                    //缁勭粐杩斿洖鎺ュ彛淇℃伅
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(NodeDataDTO.class);
+                    xStream.autodetectAnnotations(true);
+                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
+                }
+                //璋冪敤鎺ュ彛
+                callInterface(sendString,sysIntInfoVO,dockingTaskDO,batchCBO);
+            }catch (Throwable e){
+                e.printStackTrace();
+            }finally {
+                //姣忎竴涓猼ask涓�涓簨鐗�
+                WebUtil.setPersistence(true);
+                boService.persistenceBatch(batchCBO);
+            }
+        }
+    }
+
+    /***
+     * 璋冪敤鎺ュ彛
+     * @param sysIntInfoVO
+     * @throws Throwable
+     */
+    private void callInterface(String  sendString , SysIntInfoVO sysIntInfoVO,DockingTaskDO dockingTaskDO,BatchCBO batchCBO) throws  Throwable{
+        String paramString = "";
+
+        String backString = "";
+        String msg="";
+        String url = sysIntInfoVO.getRequesturl();//url
+        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
+        try {
+
+            String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
+            String paramType = sysIntInfoVO.getParamtype();//xml/json
+            String returnType = sysIntInfoVO.getReturntype();//xml/json
+            String requestmethod= sysIntInfoVO.getRequestmethod();
+            String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//涓昏鏄痺ebservice鐨勬柟娉曞悕
+            String namespace = sysIntInfoVO.getNamespace();//namespace
+            String soapaction = sysIntInfoVO.getSoapaction();//soapaction
+            String targName = sysIntInfoVO.getTargName();//targName
+            String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice鏄痗xf/axis
+            //鏌ヨparam
+            List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(sysIntInfoVO.getOid());
+            //鏌ヨheader
+            List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(sysIntInfoVO.getOid());
+            if(type.equals(MdmDuckingConstant.URLTYPE_HTTP)) {
+                if (requestmethod.equals(MdmDuckingConstant.URLTYPE_GET)) {//GET璇锋眰
+                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
+                    //鎷兼帴param
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
+                    }
+                    paramString = sendurl;
+                    backString = HttpUtils.get(sendurl);
+                } else if (requestmethod.equals(MdmDuckingConstant.URLTYPE_POST)) {//POST璇锋眰
+                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                    }
+                    params.add(DATA_PARAM_NAME,sendString);
+                    paramString = params.toString();
+                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                    }
+                    backString = HttpUtils.post(url, params, headers);
+                }
+                if(backString.startsWith("\"")){
+                    backString=backString.substring(backString.indexOf("\"")+1);
+                }
+                if(backString.endsWith("\"")){
+                    backString=backString.substring(0,backString.lastIndexOf("\""));
+                }
+                if(backString.contains("\n")){
+                    String res="\n";
+                    backString=  backString.replaceAll(res,"");
+                }
+                if(backString.contains("\\")){
+                    String res="\\\\\"";
+                    backString=  backString.replaceAll(res,"\"").trim();
+                }
+            }else if (type.equals(MdmDuckingConstant.URLTYPE_WEBSERVICE)) {//webserver璇锋眰
+                MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                    params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                }
+                paramString = sendString;
+                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                    headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                }
+                backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000);
+
+            } else {//corba鎺ュ彛
+                //paramString=sendString;
+                //  backString = jacorbClient.getBOFactoryService().sendCode(sendString);
+            }
+
+            ResultJsonDTO resultJsonDTO = new ResultJsonDTO();
+            if(returnType.equals(MdmDuckingConstant.DATATYPE_JSON)){
+                resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class);
+            }else {
+                //缁勭粐杩斿洖鎺ュ彛淇℃伅
+                XStream xStream = new XStream(new DomDriver());
+                xStream.processAnnotations(ResultNodeDataDTO.class);
+                xStream.autodetectAnnotations(true);
+                ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString);
+                resultJsonDTO.setData(resultNodeDataDTO);
+            }
+            ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
+            resultNodeObjectDTOS=resultNodeDataDTO.getObject();
+
+        }catch (Throwable e){
+            msg="璋冪敤鎺ュ彛澶辫触:"+e;
+            e.printStackTrace();
+         //   throw  new Throwable("璋冪敤鎺ュ彛澶辫触:"+e);
+            ResultNodeObjectDTO   resultNodeObjectDTO=new ResultNodeObjectDTO();
+            resultNodeObjectDTO.setErroid("1");
+            resultNodeObjectDTO.setMsg(msg);
+            resultNodeObjectDTO.setCode(sysIntInfoVO.getPushType().equalsIgnoreCase("2")?dockingTaskDO.getClassifyid():dockingTaskDO.getId());
+            resultNodeObjectDTO.setOid(dockingTaskDO.getBtmoid());
+            resultNodeObjectDTOS.add(resultNodeObjectDTO);
+        }finally {
+            boolean isSend = false;
+            for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){
+                String erroid = resultNodeObjectDTO.getErroid();
+                msg = resultNodeObjectDTO.getMsg();
+                if("0".equals(erroid)){
+                    isSend = true;
+                }else if("1".equals(erroid)){
+                    isSend=false;
+                }else{
+                    isSend=false;
+                }
+                DockingLogeDO dockingLogeDO = new DockingLogeDO();
+                String oid=redisService.getUUIDEveryDay();
+                dockingLogeDO.setOid(oid);
+                dockingLogeDO.setSystemcode(dockingTaskDO.getSystemcode());
+                dockingLogeDO.setSystemname(dockingTaskDO.getSystemname());
+                dockingLogeDO.setSystemoid(dockingTaskDO.getSystemoid());
+                dockingLogeDO.setClassifyoid(dockingTaskDO.getClassifyoid());
+                dockingLogeDO.setClassifyid(dockingTaskDO.getClassifyid());
+                dockingLogeDO.setClassifyname(dockingTaskDO.getClassifyname());
+                dockingLogeDO.setId(dockingTaskDO.getId());
+                dockingLogeDO.setUniquecode(dockingTaskDO.getUniquecode());
+                dockingLogeDO.setParamstring(paramString);
+                dockingLogeDO.setReturnstring(backString);
+                dockingLogeDO.setInterfacestatus(isSend?"true":"false");
+                dockingLogeDO.setType(MdmDuckingConstant.DATA_LOGE_OUT);
+                dockingLogeDO.setMsg(msg);
+                logger.error("闆嗘垚鎺ㄩ�佹暟鎹�,systemcode:"+dockingTaskDO.getSystemcode()+",systemname:"+dockingTaskDO.getSystemname()+",url:"+url+",param:"+paramString+",e:"+msg);
+                BatchCBO dockingLogeDOBo = dockingLogeDaoI.insert(dockingLogeDO);
+                batchCBO.copyFromOther(dockingLogeDOBo);
+            }
+            //鍏ㄩ兘鎺ユ敹鎴愬姛鐨勬儏鍐典笅,淇敼dockingtask sendflag涓哄凡鍙戦��
+            if(isSend) {
+                dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
+                BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
+                batchCBO.copyFromOther(updateTask);
+            }
+        }
+    }
+    public void initSysadmin(){
+        SessionInfo sessionInfo = new SessionInfo();
+        sessionInfo.setUserId("sysAdmin");
+        sessionInfo.setUserName("绯荤粺绠$悊鍛�");
+        sessionInfo.setIp(WebUtil.getLocalIp());
+        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
+        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
+        WebUtil.setSessionInfo(sessionInfo);
+    }
+
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+    /**
+     * dockingdata鏍规嵁oid淇敼sendflag
+     * @param oid
+     * @param sendflag
+     * @return
+     */
+    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
+        boolean u=false;
+        String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
new file mode 100644
index 0000000..59260ff
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
@@ -0,0 +1,377 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeFixedValueDaoI;
+import com.vci.ubcs.code.model.CodeFixedValueDO;
+import com.vci.ubcs.code.service.CodeFixedValueServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeFixedValueDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeFixedValueServiceImpl implements CodeFixedValueServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeFixedValueDaoI codeFixedValueMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeFixedValueVO> gridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultAsc("ordernum");
+        if(conditionMap == null){
+            conditionMap = new HashMap<>();
+        }
+        String secOid = conditionMap.getOrDefault("codefixedsecoid", "");
+        if(StringUtils.isBlank(secOid)){
+            return new DataGrid<>();
+        }
+        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeFixedValueVO> dataGrid=new DataGrid<CodeFixedValueVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeFixedValueDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeFixedValueMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeFixedValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeFixedValueVO> codeFixedValueDO2VOs(Collection<CodeFixedValueDO>  codeFixedValueDOs) throws VciBaseException{
+        List<CodeFixedValueVO> voList = new ArrayList<CodeFixedValueVO>();
+        if(!CollectionUtils.isEmpty(codeFixedValueDOs)){
+           for(CodeFixedValueDO s: codeFixedValueDOs){
+                CodeFixedValueVO vo =  codeFixedValueDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeFixedValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeFixedValueVO codeFixedValueDO2VO(CodeFixedValueDO codeFixedValueDO) throws VciBaseException{
+              CodeFixedValueVO vo = new CodeFixedValueVO();
+        if(codeFixedValueDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeFixedValueVO addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeFixedValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeFixedValueDO codeFixedValueDO = new CodeFixedValueDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDTO,codeFixedValueDO);
+        codeFixedValueMapper.insert(codeFixedValueDO);
+        return codeFixedValueDO2VO(codeFixedValueDO);
+    }
+
+    /**
+     * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeFixedValueVO editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeFixedValueDTO,"鏁版嵁瀵硅薄",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊间富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeFixedValueDO codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeFixedValueDTO,codeFixedValueDO);
+         codeFixedValueMapper.updateByPrimaryKey(codeFixedValueDO);
+         return codeFixedValueDO2VO(codeFixedValueDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeFixedValueDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeFixedValueDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeFixedValueDTO codeFixedValueDTO, CodeFixedValueDO codeFixedValueDO) {
+        //boService.checkTs(codeFixedValueDTO);
+        if(!checkIsLinked(codeFixedValueDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeFixedValue(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeFixedValueDTO,"鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊肩殑涓婚敭");
+        CodeFixedValueDO codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeFixedValueDTO,codeFixedValueDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeFixedValueMapper.deleteByPrimaryKey(codeFixedValueDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeFixedValueVO getObjectByOid(String oid) throws VciBaseException{
+        return codeFixedValueDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeFixedValueDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeFixedValueDO codeFixedValueDO = codeFixedValueMapper.selectByPrimaryKey(oid.trim());
+        if(codeFixedValueDO == null || StringUtils.isBlank(codeFixedValueDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeFixedValueDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeFixedValueVO> listCodeFixedValueByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeFixedValueDO> codeFixedValueDOList = listCodeFixedValueDOByOidCollections(oidCollections);
+        return codeFixedValueDO2VOs(codeFixedValueDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeFixedValueDO> listCodeFixedValueDOByOidCollections(Collection<String> oidCollections){
+        List<CodeFixedValueDO> codeFixedValueDOList = new ArrayList<CodeFixedValueDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeFixedValueDO> tempDOList =  codeFixedValueMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeFixedValueDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeFixedValueDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeFixedValue(conditionMap,pageHelper);
+    }
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
+     *
+     * @param secOidCollection 鐮佹鐨勪富閿�
+     * @return 鐮佸�兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭鐜颁簡閿欒浼氭姏鍑哄紓甯�
+     */
+    @Override
+    public Map<String, List<CodeFixedValueVO>> listCodeFixedValueBySecOids(Collection<String> secOidCollection) throws VciBaseException {
+        if(CollectionUtils.isEmpty(secOidCollection)){
+            return  new HashMap<>();
+        }
+        List<CodeFixedValueVO> voList = new ArrayList<>();
+        VciBaseUtil.switchCollectionForOracleIn(secOidCollection).forEach(secOids->{
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("codefixedsecoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(secOids.toArray(new String[0])) + ")");
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("ordernum");
+            List<CodeFixedValueDO> valueDOS = codeFixedValueMapper.selectByCondition(conditionMap, pageHelper);
+            voList.addAll(codeFixedValueDO2VOs(Optional.ofNullable(valueDOS).orElseGet(() -> new ArrayList<>())));
+        });
+        return voList.stream().collect(Collectors.groupingBy(CodeFixedValueVO::getCodefixedsecoid));
+    }
+
+    /**
+     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid) {
+        VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codefixedsecoid",codefixedsecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeFixedValueDO.class);
+        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByWrapper(wrapper);
+        List<CodeFixedValueDO> updateList = new ArrayList<>();
+        List<String> deleteOidList = new ArrayList<>();
+        dtoList.forEach(dto -> {
+            if (StringUtils.isNotBlank(dto.getOid())){
+                List<CodeFixedValueDO> valueDOList = doList.stream().filter(value -> {
+                    return value.getOid().equals(dto.getOid());
+                }).collect(Collectors.toList());
+                valueDOList.forEach(valueDO -> {
+                    valueDO.setId(dto.getId());
+                    valueDO.setName(dto.getName());
+                    valueDO.setOrderNum(dto.getOrdernum());
+                    updateList.add(valueDO);
+                });
+            }else{
+                throw new VciBaseException("鍥哄畾鐮佹涓婚敭涓嶈兘涓虹┖");
+            }
+        });
+        if (doList.size() != dtoList.size()){
+            List<String> oidList = dtoList.stream().map(CodeFixedValueDTO::getOid).collect(Collectors.toList());
+            List<CodeFixedValueDO> deleteList = new ArrayList<>();
+            for (CodeFixedValueDO value : doList) {
+                if (!oidList.contains(value.getOid())){
+                    deleteList.add(value);
+                }
+            }
+            deleteOidList = deleteList.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toList());
+        }
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeFixedValueMapper.batchUpdate(updateList);
+        if (!CollectionUtils.isEmpty(deleteOidList)) {
+            BatchCBO batchDeleteByOids = codeFixedValueMapper.batchDeleteByOids(deleteOidList);
+            batchCBO.setDeleteCbos(batchDeleteByOids.getDeleteCbos());
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return BaseResult.success();
+    }
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult<CodeFixedValueVO> batchDeleteBySecOid(String codefixedsecoid) {
+        VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codefixedvalueoid",codefixedsecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeFixedValueDO.class);
+        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByWrapper(wrapper);
+        codeFixedValueMapper.batchDeleteByOids(doList.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toList()));
+        return BaseResult.success();
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java
new file mode 100644
index 0000000..7151c81
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java
@@ -0,0 +1,344 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeKeyAttrRepeatRuleDaoI;
+import com.vci.ubcs.code.model.CodeKeyAttrRepeatRuleDO;
+import com.vci.ubcs.code.service.CodeKeyAttrRepeatRuleServiceI;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeKeyAttrRepeatRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏈嶅姟
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeKeyAttrRepeatRuleServiceImpl implements CodeKeyAttrRepeatRuleServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeKeyAttrRepeatRuleDaoI codeKeyAttrRepeatRuleMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeKeyAttrRepeatRuleDO> doList = codeKeyAttrRepeatRuleMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeKeyAttrRepeatRuleVO> dataGrid=new DataGrid<CodeKeyAttrRepeatRuleVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeKeyAttrRepeatRuleDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeKeyAttrRepeatRuleMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeKeyAttrRepeatRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeKeyAttrRepeatRuleVO> codeKeyAttrRepeatRuleDO2VOs(Collection<CodeKeyAttrRepeatRuleDO>  codeKeyAttrRepeatRuleDOs) throws VciBaseException{
+        List<CodeKeyAttrRepeatRuleVO> voList = new ArrayList<CodeKeyAttrRepeatRuleVO>();
+        if(!CollectionUtils.isEmpty(codeKeyAttrRepeatRuleDOs)){
+           for(CodeKeyAttrRepeatRuleDO s: codeKeyAttrRepeatRuleDOs){
+                CodeKeyAttrRepeatRuleVO vo =  codeKeyAttrRepeatRuleDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeKeyAttrRepeatRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleDO2VO(CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) throws VciBaseException{
+              CodeKeyAttrRepeatRuleVO vo = new CodeKeyAttrRepeatRuleVO();
+        if(codeKeyAttrRepeatRuleDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeKeyAttrRepeatRuleDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeKeyAttrRepeatRuleVO addSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = new CodeKeyAttrRepeatRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
+        codeKeyAttrRepeatRuleMapper.insert(codeKeyAttrRepeatRuleDO);
+        return codeKeyAttrRepeatRuleDO2VO(codeKeyAttrRepeatRuleDO);
+    }
+
+    /**
+     * 淇敼鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeKeyAttrRepeatRuleVO editSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"鏁版嵁瀵硅薄",codeKeyAttrRepeatRuleDTO.getOid(),"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯涓婚敭");
+         //灏咲TO杞崲涓篋O
+         CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByOid(codeKeyAttrRepeatRuleDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
+         codeKeyAttrRepeatRuleMapper.updateByPrimaryKey(codeKeyAttrRepeatRuleDO);
+         return codeKeyAttrRepeatRuleDO2VO(codeKeyAttrRepeatRuleDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeKeyAttrRepeatRuleDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeKeyAttrRepeatRuleDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO, CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) {
+        CodeKeyAttrRepeatRuleDO repeatRuleDO = new CodeKeyAttrRepeatRuleDO();
+        BeanUtil.convert(codeKeyAttrRepeatRuleDTO,repeatRuleDO);
+        boService.checkTs(repeatRuleDO);
+        if(!checkIsLinked(codeKeyAttrRepeatRuleDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeKeyAttrRepeatRule(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄",codeKeyAttrRepeatRuleDTO.getOid(),"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鐨勪富閿�");
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByOid(codeKeyAttrRepeatRuleDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
+        if(baseResult.isSuccess()) {
+        }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeKeyAttrRepeatRuleMapper.deleteByPrimaryKey(codeKeyAttrRepeatRuleDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeKeyAttrRepeatRuleVO getObjectByOid(String oid) throws VciBaseException{
+        return codeKeyAttrRepeatRuleDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeKeyAttrRepeatRuleDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = codeKeyAttrRepeatRuleMapper.selectByPrimaryKey(oid.trim());
+        if(codeKeyAttrRepeatRuleDO == null || StringUtils.isBlank(codeKeyAttrRepeatRuleDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeKeyAttrRepeatRuleDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = listCodeKeyAttrRepeatRuleDOByOidCollections(oidCollections);
+        return codeKeyAttrRepeatRuleDO2VOs(codeKeyAttrRepeatRuleDOList);
+    }
+
+    /**
+     * 缂栧彿鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     *
+     * @param idCollections 缂栧彿闆嗗悎
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     */
+    @Override
+    public Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByIds(List<String> idCollections) {
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = listCodeKeyAttrRepeatRuleDOByIdCollections(idCollections);
+        return codeKeyAttrRepeatRuleDO2VOs(codeKeyAttrRepeatRuleDOList);
+    }
+
+    /**
+     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     * @param idCollections 缂栧彿鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeKeyAttrRepeatRuleDO> listCodeKeyAttrRepeatRuleDOByIdCollections(Collection<String> idCollections){
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = new ArrayList<CodeKeyAttrRepeatRuleDO>();
+        if(!CollectionUtils.isEmpty(idCollections)){
+            Collection<Collection<String>> idCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
+            for(Collection<String> ids: idCollectionsList){
+                List<CodeKeyAttrRepeatRuleDO> tempDOList =  codeKeyAttrRepeatRuleMapper.selectByIdCollection(ids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                    codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeKeyAttrRepeatRuleDOList;
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeKeyAttrRepeatRuleDO> listCodeKeyAttrRepeatRuleDOByOidCollections(Collection<String> oidCollections){
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = new ArrayList<CodeKeyAttrRepeatRuleDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeKeyAttrRepeatRuleDO> tempDOList =  codeKeyAttrRepeatRuleMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeKeyAttrRepeatRuleDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeKeyAttrRepeatRule(conditionMap,pageHelper);
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭潵鑾峰彇鍏抽敭灞炴�у垽鏂鍒欑殑鍐呭
+     *
+     * @param classifyFullInfo 涓婚搴撳垎绫荤殑鍏ㄩ儴淇℃伅
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeKeyAttrRepeatRuleVO getRuleByClassifyFullInfo(CodeClassifyFullInfoBO classifyFullInfo) {
+        VciBaseUtil.alertNotNull(classifyFullInfo,"涓婚搴撳垎绫荤殑淇℃伅");
+        String keyAttrRuleOid = classifyFullInfo.getCurrentClassifyVO().getCodekeyattrrepeatoid();
+        if(StringUtils.isBlank(keyAttrRuleOid)){
+            //鎴戜滑鏍规嵁涓婄骇鐨勫垎绫伙紝鎸夌収灞傜骇鍊掑簭鎺掑垪
+            if(!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())){
+                //鏈変笂绾у垎绫荤殑鎯呭喌涓嬫墠鍘绘煡璇�
+                List<CodeClassifyVO> sortedClassifyVO = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList());
+                for(int i = sortedClassifyVO.size() -1;i>=0;i--){
+                    CodeClassifyVO record = sortedClassifyVO.get(i);
+                    if(StringUtils.isNotBlank(record.getCodekeyattrrepeatoid())){
+                        keyAttrRuleOid = record.getCodekeyattrrepeatoid();
+                        break;
+                    }
+                }
+            }
+        }
+        if(StringUtils.isNotBlank(keyAttrRuleOid)){
+           return getObjectByOid(keyAttrRuleOid);
+        }
+        //鍏抽敭灞炴�х殑瑙勫垯鍙互涓虹┖锛屼负绌虹殑鏃跺�欏氨浠h〃涓嶆帶鍒讹紝
+        return null;
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java
new file mode 100644
index 0000000..647ce9f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java
@@ -0,0 +1,301 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.CodePhaseAttrDaoI;
+import com.vci.ubcs.code.model.CodePhaseAttrDO;
+import com.vci.ubcs.code.service.CodePhaseAttrServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodePhaseAttrDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 闃舵鐨勫睘鎬ф湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodePhaseAttrServiceImpl implements CodePhaseAttrServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodePhaseAttrDaoI codePhaseAttrMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑闃舵鐨勫睘鎬�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodePhaseAttrDO> doList = codePhaseAttrMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodePhaseAttrVO> dataGrid=new DataGrid<CodePhaseAttrVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codePhaseAttrDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codePhaseAttrMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codePhaseAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO>  codePhaseAttrDOs) throws VciBaseException{
+        List<CodePhaseAttrVO> voList = new ArrayList<CodePhaseAttrVO>();
+        if(!CollectionUtils.isEmpty(codePhaseAttrDOs)){
+           for(CodePhaseAttrDO s: codePhaseAttrDOs){
+                CodePhaseAttrVO vo =  codePhaseAttrDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codePhaseAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodePhaseAttrVO codePhaseAttrDO2VO(CodePhaseAttrDO codePhaseAttrDO) throws VciBaseException{
+              CodePhaseAttrVO vo = new CodePhaseAttrVO();
+        if(codePhaseAttrDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codePhaseAttrDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodePhaseAttrVO addSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codePhaseAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodePhaseAttrDO codePhaseAttrDO = new CodePhaseAttrDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codePhaseAttrDTO,codePhaseAttrDO);
+        codePhaseAttrMapper.insert(codePhaseAttrDO);
+        return codePhaseAttrDO2VO(codePhaseAttrDO);
+    }
+
+    /**
+     * 淇敼闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodePhaseAttrVO editSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codePhaseAttrDTO,"鏁版嵁瀵硅薄",codePhaseAttrDTO.getOid(),"闃舵鐨勫睘鎬т富閿�");
+         //灏咲TO杞崲涓篋O
+         CodePhaseAttrDO codePhaseAttrDO = selectByOid(codePhaseAttrDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codePhaseAttrDTO,codePhaseAttrDO);
+         codePhaseAttrMapper.updateByPrimaryKey(codePhaseAttrDO);
+         return codePhaseAttrDO2VO(codePhaseAttrDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codePhaseAttrDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codePhaseAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodePhaseAttrDTO codePhaseAttrDTO, CodePhaseAttrDO codePhaseAttrDO) {
+        CodePhaseAttrDO tsDO = new CodePhaseAttrDO();
+        BeanUtil.convert(codePhaseAttrDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codePhaseAttrDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodePhaseAttr(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codePhaseAttrDTO,"闃舵鐨勫睘鎬ф暟鎹璞�",codePhaseAttrDTO.getOid(),"闃舵鐨勫睘鎬х殑涓婚敭");
+        CodePhaseAttrDO codePhaseAttrDO = selectByOid(codePhaseAttrDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codePhaseAttrDTO,codePhaseAttrDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codePhaseAttrMapper.deleteByPrimaryKey(codePhaseAttrDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
+    * @param oid 涓婚敭
+    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodePhaseAttrVO getObjectByOid(String oid) throws VciBaseException{
+        return codePhaseAttrDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodePhaseAttrDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodePhaseAttrDO codePhaseAttrDO = codePhaseAttrMapper.selectByPrimaryKey(oid.trim());
+        if(codePhaseAttrDO == null || StringUtils.isBlank(codePhaseAttrDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codePhaseAttrDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodePhaseAttrVO> listCodePhaseAttrByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodePhaseAttrDO> codePhaseAttrDOList = listCodePhaseAttrDOByOidCollections(oidCollections);
+        return codePhaseAttrDO2VOs(codePhaseAttrDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodePhaseAttrDO> listCodePhaseAttrDOByOidCollections(Collection<String> oidCollections){
+        List<CodePhaseAttrDO> codePhaseAttrDOList = new ArrayList<CodePhaseAttrDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodePhaseAttrDO> tempDOList =  codePhaseAttrMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codePhaseAttrDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codePhaseAttrDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodePhaseAttr(conditionMap,pageHelper);
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鍜岄樁娈电紪鍙疯幏鍙栧寘鍚殑灞炴��
+     *
+     * @param templateOid 妯℃澘鐨勭紪鍙�
+     * @param phaseId     闃舵鐨勭紪鍙�
+     * @return 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    @Override
+    public List<String> listAttrByTemplateOidAndPhaseId(String templateOid, String phaseId) {
+        if(StringUtils.isBlank(templateOid)|| StringUtils.isBlank(phaseId)){
+            return new ArrayList<>();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(select oid from "+
+                VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE) +
+                " where codeClassifyTemplateOid ='" + templateOid + "' and lower(name) ='" + phaseId.trim().toLowerCase(Locale.ROOT) + "')");
+        PageHelper pageHelper = new PageHelper(-1);
+        List<CodePhaseAttrDO> attrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, pageHelper);
+        return CollectionUtils.isEmpty(attrDOS)?new ArrayList<>():attrDOS.stream().map(CodePhaseAttrDO::getId).collect(Collectors.toList());
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java
new file mode 100644
index 0000000..51b54bc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java
@@ -0,0 +1,279 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.CodeResembleRuleDaoI;
+import com.vci.ubcs.code.model.CodeResembleRuleDO;
+import com.vci.ubcs.code.service.CodeResembleRuleServiceI;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.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 com.vci.ubcs.code.dto.CodeResembleRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏈嶅姟
+ * @author weidy
+ * @date 2022-04-10
+ */
+@Service
+public class CodeResembleRuleServiceImpl implements CodeResembleRuleServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeResembleRuleDaoI codeResembleRuleMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐩镐技鏌ヨ瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeResembleRuleDO> doList = codeResembleRuleMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeResembleRuleVO> dataGrid=new DataGrid<CodeResembleRuleVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeResembleRuleDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeResembleRuleMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeResembleRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO>  codeResembleRuleDOs) throws VciBaseException{
+        List<CodeResembleRuleVO> voList = new ArrayList<CodeResembleRuleVO>();
+        if(!CollectionUtils.isEmpty(codeResembleRuleDOs)){
+           for(CodeResembleRuleDO s: codeResembleRuleDOs){
+                CodeResembleRuleVO vo =  codeResembleRuleDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRuleDO codeResembleRuleDO) throws VciBaseException{
+              CodeResembleRuleVO vo = new CodeResembleRuleVO();
+        if(codeResembleRuleDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+                         vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeResembleRuleDO codeResembleRuleDO = new CodeResembleRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,codeResembleRuleDO);
+        codeResembleRuleMapper.insert(codeResembleRuleDO);
+        return codeResembleRuleDO2VO(codeResembleRuleDO);
+    }
+
+    /**
+     * 淇敼鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeResembleRuleDTO,"鏁版嵁瀵硅薄",codeResembleRuleDTO.getOid(),"鐩镐技鏌ヨ瑙勫垯涓婚敭");
+         //灏咲TO杞崲涓篋O
+         CodeResembleRuleDO codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeResembleRuleDTO,codeResembleRuleDO);
+         codeResembleRuleMapper.updateByPrimaryKey(codeResembleRuleDO);
+         return codeResembleRuleDO2VO(codeResembleRuleDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeResembleRuleDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeResembleRuleDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeResembleRuleDTO codeResembleRuleDTO, CodeResembleRuleDO codeResembleRuleDO) {
+            CodeResembleRuleDO tsDO = new CodeResembleRuleDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeResembleRuleDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄",codeResembleRuleDTO.getOid(),"鐩镐技鏌ヨ瑙勫垯鐨勪富閿�");
+        CodeResembleRuleDO codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeResembleRuleDTO,codeResembleRuleDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeResembleRuleMapper.deleteByPrimaryKey(codeResembleRuleDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeResembleRuleVO getObjectByOid(String oid) throws VciBaseException{
+        return codeResembleRuleDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeResembleRuleDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeResembleRuleDO codeResembleRuleDO = codeResembleRuleMapper.selectByPrimaryKey(oid.trim());
+        if(codeResembleRuleDO == null || StringUtils.isBlank(codeResembleRuleDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeResembleRuleDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeResembleRuleDO> codeResembleRuleDOList = listCodeResembleRuleDOByOidCollections(oidCollections);
+        return codeResembleRuleDO2VOs(codeResembleRuleDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeResembleRuleDO> listCodeResembleRuleDOByOidCollections(Collection<String> oidCollections){
+        List<CodeResembleRuleDO> codeResembleRuleDOList = new ArrayList<CodeResembleRuleDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeResembleRuleDO> tempDOList =  codeResembleRuleMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeResembleRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeResembleRuleDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeResembleRule(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
new file mode 100644
index 0000000..af3abc8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
@@ -0,0 +1,685 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.CodeBasicSecDaoI;
+import com.vci.ubcs.code.dao.CodeRuleDaoI;
+import com.vci.ubcs.code.lifecycle.CodeRuleLC;
+import com.vci.ubcs.code.model.CodeAllCodeDO;
+import com.vci.ubcs.code.model.CodeBasicSecDO;
+import com.vci.ubcs.code.model.CodeClassifyDO;
+import com.vci.ubcs.code.model.CodeRuleDO;
+import com.vci.ubcs.code.service.CodeBasicSecServiceI;
+import com.vci.ubcs.code.service.CodeClassifyServiceI;
+import com.vci.ubcs.code.service.CodeRuleServiceI;
+import com.vci.corba.common.VCIError;
+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.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeBasicSecDTO;
+import com.vci.ubcs.code.dto.CodeRuleDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+import plm.bs.bom.clientobject.ClientBusinessObjectOperation;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐湇鍔�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeRuleServiceImpl implements CodeRuleServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeRuleDaoI codeRuleMapper;
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+     * 瀵硅薄鐨勬搷浣�
+     */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 涓婚搴撳垎绫绘暟鎹搷浣滃眰
+     */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyService;
+
+    /**
+     * 鐮佹鍩虹淇℃伅鏈嶅姟
+     */
+    @Autowired
+    private CodeBasicSecServiceI codeBasicSecService;
+
+    /**
+     * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeBasicSecDaoI codeBasicSecMapper;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeRuleVO> gridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeRuleDO> doList = codeRuleMapper.selectByCondition(conditionMap, pageHelper);
+        DataGrid<CodeRuleVO> dataGrid = new DataGrid<CodeRuleVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeRuleDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeRuleMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs) throws VciBaseException {
+        return codeRuleDO2VOs(codeRuleDOs, false);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasSec      鏄惁鍖呭惈鐮佹
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs, boolean hasSec) throws VciBaseException {
+        List<CodeRuleVO> voList = new ArrayList<CodeRuleVO>();
+        if (!CollectionUtils.isEmpty(codeRuleDOs)) {
+            for (CodeRuleDO s : codeRuleDOs) {
+                CodeRuleVO vo = codeRuleDO2VO(s);
+                if (vo != null) {
+                    voList.add(vo);
+                }
+            }
+            if (hasSec) {
+                List<CodeBasicSecVO> secVOList = codeBasicSecService.listCodeBasicSecByRuleOids(voList.stream().map(CodeRuleVO::getOid).collect(Collectors.toList()));
+                if (!CollectionUtils.isEmpty(secVOList)) {
+                    Map<String, List<CodeBasicSecVO>> secVOMap = secVOList.stream().collect(Collectors.groupingBy(CodeBasicSecVO::getPkCodeRule));
+                    voList.stream().forEach(vo -> {
+                        vo.setSecVOList(secVOMap.getOrDefault(vo.getOid(), new ArrayList<>()));
+                    });
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO) throws VciBaseException {
+        CodeRuleVO vo = new CodeRuleVO();
+        if (codeRuleDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(CodeRuleLC.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDO 瑙勫垯鐨勬暟鎹璞�
+     * @param hasSec     鏄惁鏌ヨ鐮佹
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    public CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO, boolean hasSec) throws VciBaseException {
+        CodeRuleVO vo = new CodeRuleVO();
+        if (codeRuleDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(CodeRuleLC.getTextByValue(vo.getLcStatus()));
+            if (hasSec) {
+                //鏌ヨ鐮佹
+                vo.setSecVOList(codeBasicSecService.listCodeBasicSecByRuleOid(vo.getOid()));
+            }
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeRuleDO codeRuleDO = new CodeRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
+        codeRuleMapper.insert(codeRuleDO);
+        return codeRuleDO2VO(codeRuleDO);
+    }
+
+    /**
+     * 淇敼涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO editSave(CodeRuleDTO codeRuleDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "鏁版嵁瀵硅薄", codeRuleDTO.getOid(), "涓绘暟鎹紪鐮佽鍒欎富閿�");
+        if (!checkEditDelStatus(codeRuleDTO.getLcStatus())) {
+            throw new VciBaseException("缂栫爜瑙勫垯宸插彂甯冿紝涓嶅厑璁哥紪杈戞垨鍒犻櫎");
+        }
+        //灏咲TO杞崲涓篋O
+        CodeRuleDO codeRuleDO = selectByOid(codeRuleDTO.getOid());
+        revisionModelUtil.copyFromDTOIgnore(codeRuleDTO, codeRuleDO);
+        codeRuleMapper.updateByPrimaryKey(codeRuleDO);
+        return codeRuleDO2VO(codeRuleDO);
+    }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     *
+     * @param codeRuleDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeRuleDO  鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeRuleDTO codeRuleDTO, CodeRuleDO codeRuleDO) {
+        boService.checkTs(codeRuleDTO);
+        if (!checkIsLinked(codeRuleDO.getOid())) {
+            return BaseResult.success();
+        } else {
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE, new String[]{""});
+        }
+    }
+
+    /**
+     * 鏍¢獙鏄惁琚紩鐢�
+     *
+     * @param oid 涓婚敭
+     * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    private boolean checkIsLinked(String oid) throws VciBaseException {
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "涓绘暟鎹紪鐮佽鍒欐暟鎹璞�", codeRuleDTO.getOid(), "涓绘暟鎹紪鐮佽鍒欑殑涓婚敭");
+        CodeRuleDO codeRuleDO = selectByOid(codeRuleDTO.getOid());
+        //BaseResult baseResult = checkIsCanDeleteForDO(codeRuleDTO,codeRuleDO);
+        // if(baseResult.isSuccess()) {
+        //             }else{
+        //     return baseResult;
+        // }
+        if (!checkEditDelStatus(codeRuleDO.getLcStatus())) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸插彂甯冿紝涓嶅厑璁哥紪杈戞垨鍒犻櫎");
+        } else {
+            if (isAlreadyInUse(codeRuleDO.getOid())) {
+                return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄わ紒");
+            }
+        }
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("codeRuleOid", codeRuleDTO.getOid());
+        List<CodeAllCodeDO> codeDOList = boService.queryObject(CodeAllCodeDO.class, conditionMap);
+        if (!CollectionUtils.isEmpty(codeDOList)) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸茬敓鎴愮紪鐮侊紝涓嶅厑璁稿垹闄�");
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeBasicSecService.batchDeleteSecByCodeRuleOid(codeRuleDO.getOid());
+        BatchCBO mainCBO = codeRuleMapper.deleteByPrimaryKey(codeRuleDO.getOid());
+        WebUtil.setPersistence(true);
+        Set<ClientBusinessObject> deleteSet = new HashSet<>();
+        deleteSet.addAll(batchCBO.getDeleteCbos());
+        deleteSet.addAll(mainCBO.getDeleteCbos());
+        batchCBO.setDeleteCbos(deleteSet);
+        boService.persistenceBatch(batchCBO);
+        return (batchCBO != null && batchCBO.getDeleteCbos() != null && batchCBO.getDeleteCbos().size() > 0) ? BaseResult.successMsg(DELETE_SUCCESS) : BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+     * 鏍¢獙缂栫爜瑙勫垯鐨勭姸鎬佹槸鍚﹀彲浠ョ紪杈戞垨鍒犻櫎
+     *
+     * @param lcStatus 缂栫爜瑙勫垯
+     * @return true琛ㄧず鍙互缂栬緫鎴栧垹闄わ紝false琛ㄧず涓嶅彲浠�
+     */
+    @Override
+    public boolean checkEditDelStatus(String lcStatus) {
+        if (CodeRuleLC.RELEASED.getValue().equals(lcStatus) || CodeRuleLC.DISABLED.getValue().equals(lcStatus)) {
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param oid 涓婚敭
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO getObjectByOid(String oid) throws VciBaseException {
+        return codeRuleDO2VO(selectByOid(oid));
+    }
+
+    /**
+     * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oid 涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    private CodeRuleDO selectByOid(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid, "涓婚敭");
+        CodeRuleDO codeRuleDO = codeRuleMapper.selectByPrimaryKey(oid.trim());
+        if (codeRuleDO == null || StringUtils.isBlank(codeRuleDO.getOid())) {
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeRuleDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeRuleDO> codeRuleDOList = listCodeRuleDOByOidCollections(oidCollections);
+        return codeRuleDO2VOs(codeRuleDOList);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @param hasSec         鏄惁鍖呭惈鐮佹
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections, boolean hasSec) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeRuleDO> codeRuleDOList = listCodeRuleDOByOidCollections(oidCollections);
+        return codeRuleDO2VOs(codeRuleDOList, true);
+    }
+
+    /**
+     * 浣跨敤缂栧彿鐨勯泦鍚堣幏鍙栬鍒欑殑鍐呭
+     *
+     * @param idCollection 缂栧彿鐨勯泦鍚�
+     * @return 瑙勫垯鐨勫唴瀹�
+     */
+    @Override
+    public List<CodeRuleVO> listCodeRuleByIds(Collection<String> idCollection) {
+        return codeRuleDO2VOs(listCodeRuleDOByIdCollections(idCollection));
+    }
+
+    /**
+     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oidCollections 涓婚敭鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeRuleDO> listCodeRuleDOByOidCollections(Collection<String> oidCollections) {
+        List<CodeRuleDO> codeRuleDOList = new ArrayList<CodeRuleDO>();
+        if (!CollectionUtils.isEmpty(oidCollections)) {
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for (Collection<String> oids : oidCollectionsList) {
+                List<CodeRuleDO> tempDOList = codeRuleMapper.selectByPrimaryKeyCollection(oids);
+                if (!CollectionUtils.isEmpty(tempDOList)) {
+                    codeRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return codeRuleDOList;
+    }
+
+    /**
+     * 浣跨敤缂栧彿闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param idCollections 缂栧彿鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeRuleDO> listCodeRuleDOByIdCollections(Collection<String> idCollections) {
+        List<CodeRuleDO> codeRuleDOList = new ArrayList<CodeRuleDO>();
+        if (!CollectionUtils.isEmpty(idCollections)) {
+            Collection<Collection<String>> idCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
+            for (Collection<String> ids : idCollectionsList) {
+                List<CodeRuleDO> tempDOList = codeRuleMapper.selectByIdCollection(ids);
+                if (!CollectionUtils.isEmpty(tempDOList)) {
+                    codeRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return codeRuleDOList;
+    }
+
+
+    /**
+     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeRuleVO> refDataGridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (conditionMap == null) {
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeRule(conditionMap, pageHelper);
+    }
+
+    /**
+     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
+     *
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 涓婚搴撳垎绫讳娇鐢ㄥ埌璇ョ紪鐮佽鍒欑殑鎵�鏈夐泦鍚�
+     */
+    @Override
+    public Collection<CodeClassifyVO> listUseRangeInCodeClassify(String oid) {
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("codeRuleOid", oid);
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyDO.class);
+        List<CodeClassifyDO> dos = codeClassifyService.selectByWrapper(queryWrapper);
+        return codeClassifyService.codeClassifyDO2VOs(dos);
+    }
+
+    /**
+     * 妫�楠岀紪鐮佽鍒欐槸鍚﹀凡缁忚浣跨敤
+     *
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return true琛ㄧず宸茬粡浣跨敤锛宖alse琛ㄧず鏈浣跨敤
+     */
+    @Override
+    public boolean isAlreadyInUse(String oid) {
+        Collection<CodeClassifyVO> codeClassifyVOS = listUseRangeInCodeClassify(oid);
+        if (codeClassifyVOS.size() > 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
+     *
+     * @param oid    缂栫爜瑙勫垯涓婚敭
+     * @param update enable:鍚敤 disable:鍋滅敤 release:鍙戝竷
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult updateStatus(String oid, String update) {
+        int count = 0;
+        CodeRuleDO codeRuleDO = selectByOid(oid);
+        if ("enable".equalsIgnoreCase(update)) {
+            if (!CodeRuleLC.DISABLED.getValue().equals(codeRuleDO.getLcStatus())) {
+                return BaseResult.fail("闈炲仠鐢ㄧ姸鎬佺殑缂栫爜瑙勫垯鏃犻渶鐐瑰嚮鍚敤");
+            }
+            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.RELEASED.getValue());
+        } else if ("disable".equalsIgnoreCase(update)) {
+            if (!CodeRuleLC.RELEASED.getValue().equals(codeRuleDO.getLcStatus())) {
+                return BaseResult.fail("闈炲彂甯冪姸鎬佺殑缂栫爜瑙勫垯鏃犳硶鍋滅敤");
+            }
+            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.DISABLED.getValue());
+        } else if ("release".equalsIgnoreCase(update)) {
+            if (!CodeRuleLC.EDITING.getValue().equals(codeRuleDO.getLcStatus())) {
+                return BaseResult.fail("闈炵紪杈戠姸鎬佺殑缂栫爜瑙勫垯鏃犳硶鍙戝竷");
+            }
+            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.RELEASED.getValue());
+        } else {
+            return BaseResult.fail("鏆備笉鏀寔鐨勬搷浣滅被鍨�");
+        }
+        if (count > 0) {
+            return BaseResult.success();
+        } else {
+            return BaseResult.fail("鏇存柊鐘舵�佸け璐�");
+        }
+    }
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    public BaseResult cloneCodeRule_v1(CodeRuleDTO codeRuleDTO) {
+        VciBaseUtil.alertNotNull(codeRuleDTO.getOid(), "缂栫爜瑙勫垯涓婚敭");
+        ClientBusinessObjectOperation operation = new ClientBusinessObjectOperation();
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule", codeRuleDTO.getOid());
+        List<CodeBasicSecDO> basicSecDOS = boService.queryObject(CodeBasicSecDO.class, conditionMap);
+        List<String> secOidList = new ArrayList<>();
+        for (CodeBasicSecDO secDO : basicSecDOS) {
+            secOidList.add(secDO.getOid());
+        }
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        try {
+            ClientBusinessObject templateCbo = operation.readBusinessObjectById(codeRuleDTO.getOid(), MdmBtmTypeConstant.CODE_RULE);
+            ClientBusinessObject codeRuleCbo = operation.initBusinessObject(templateCbo.getBtmName());
+            String curOid = codeRuleCbo.getOid();
+            String curRevisionId = codeRuleCbo.getRevisionid();
+            String curNameOid = codeRuleCbo.getNameoid();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(templateCbo, codeRuleCbo);
+            codeRuleCbo.setOid(curOid);
+            codeRuleCbo.setRevisionid(curRevisionId);
+            codeRuleCbo.setNameoid(curNameOid);
+            codeRuleCbo.setId(templateCbo.getId() + "_copy");
+            codeRuleCbo.setName(templateCbo.getName() + "_copy");
+            if (!CollectionUtils.isEmpty(secOidList)) {
+                ClientBusinessObject[] secCboArr = operation.readBusinessObjectById(secOidList.toArray(new String[0]), MdmBtmTypeConstant.CODE_BASIC_SEC);
+                for (ClientBusinessObject cbo : secCboArr) {
+                    ClientBusinessObject newSecCbo = operation.initBusinessObject(cbo.getBtmName());
+                    String newSecCboOid = newSecCbo.getOid();
+                    String newSecCboRevisionId = newSecCbo.getRevisionid();
+                    String newSecCboNameOid = newSecCbo.getNameoid();
+                    BeanUtilForVCI.copyPropertiesIgnoreCase(cbo, newSecCbo);
+                    newSecCbo.setOid(newSecCboOid);
+                    newSecCbo.setRevisionid(newSecCboRevisionId);
+                    newSecCbo.setNameoid(newSecCboNameOid);
+                    newSecCbo.setId(newSecCbo.getId() + "_copy");
+                    newSecCbo.setName(newSecCbo.getName() + "_copy");
+                    newSecCbo.setAttributeValue("pkCodeRule", codeRuleCbo.getOid());
+                    cboList.add(newSecCbo);
+                }
+            }
+            cboList.add(codeRuleCbo);
+            ClientBusinessObject[] saveList = operation.batchSaveCreateBuinessObject(cboList.toArray(new ClientBusinessObject[0]));
+            if (saveList.length == 0) {
+                return BaseResult.fail("鍏嬮殕鍑洪敊浜嗏�︹��");
+            }
+        } catch (VCIError vciError) {
+            vciError.printStackTrace();
+        }
+        return BaseResult.success();
+    }
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    @Override
+    public BaseResult cloneCodeRule(CodeRuleDTO codeRuleDTO) {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        CodeRuleDO codeRuleDO = new CodeRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
+        WebUtil.setPersistence(false);
+        BatchCBO batchInsertCBO = codeRuleMapper.insert(codeRuleDO);
+        List<CodeBasicSecDTO> secList = codeRuleDTO.getElements();
+        secList.forEach(codeBasicSecDTO -> {
+            codeBasicSecDTO.setPkCodeRule(codeRuleDO.getOid());
+            KeyValue attrKv = codeBasicSecService.checkAttrNullableBySecType(codeBasicSecDTO);
+            if (!"success".equals(attrKv.getKey())) {
+                throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
+            }
+            CodeBasicSecDO codeBasicSecDO = new CodeBasicSecDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
+            codeBasicSecDO.setOid("");
+            codeBasicSecDO.setRevisionOid("");
+            codeBasicSecDO.setNameOid("");
+            BatchCBO cbo = codeBasicSecMapper.insert(codeBasicSecDO);
+            batchInsertCBO.addCreateCbo(cbo.getCreateCboArray()[0]);
+        });
+        boService.persistenceBatch(batchInsertCBO);
+        return BaseResult.success();
+    }
+
+    /**
+     * 浣跨敤涓婚敭鑾峰彇缂栫爜瑙勫垯鐨勫唴瀹�
+     *
+     * @param oid 涓婚敭
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeRuleVO getObjectHasSecByOid(String oid) {
+        CodeRuleDO ruleDO = selectByOid(oid);
+        return codeRuleDO2VO(ruleDO, true);
+    }
+
+    /**
+     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
+     *
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult clearAllCode(String oid) {
+        WebUtil.alertNotNull(oid, "缂栫爜瑙勫垯涓婚敭");
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("codeRuleOid", oid);
+        List<CodeAllCodeDO> codeDOList = boService.queryObject(CodeAllCodeDO.class, conditionMap);
+        if (CollectionUtils.isEmpty(codeDOList)) {
+            return BaseResult.fail("褰撳墠缂栫爜瑙勫垯娌℃湁鐢熸垚缂栫爜,鏃犻渶娓呯┖");
+        }
+        //鏄惁闇�瑕佽繘琛宐tm涓嶇粺涓�鐨勫垽鏂�?
+        String btmType = codeDOList.get(0).getCreateCodeBtm();
+        /*boolean flag = codeDOList.stream().anyMatch(s -> !StringUtils.equalsIgnoreCase(btmType, s.getCreateCodeBtm()));
+        if (flag) {
+            return BaseResult.fail("褰撳墠缂栫爜瑙勫垯鐢熸垚缂栫爜鍦ㄤ笉鍚岀被鍨嬩笅浣跨敤杩�");
+        }*/
+        //澶氱绫诲瀷涓嬬殑鏌ヨ
+        Set<String> btmTypeSet = codeDOList.stream().filter(s -> {
+            return !StringUtils.equalsIgnoreCase(btmType, s.getCreateCodeBtm());
+        }).map(s -> s.getCreateCodeBtm()).collect(Collectors.toSet());
+        List<ClientBusinessObject> businessDataList = new ArrayList<>();
+        if (btmTypeSet.size() > 1) {
+            for (String btm : btmTypeSet) {
+                String sql = "select COUNT(w.OID) from PLATFORMBTM_" + btm + "  w\n" +
+                        "join PLATFORMBTM_" + MdmBtmTypeConstant.CODE_ALL_CODE + " c on w.OID = c.CREATECODEOID\n" +
+                        "where c.CREATECODEBTM = '" + btm + "' and c.CODERULEOID = '" + oid + "'" +
+                        "and w.ISLASTR = '1' and w.ISLASTV = '1'";
+                List<ClientBusinessObject> businessData = boService.queryByOnlySql(sql);
+                businessDataList.addAll(businessData);
+            }
+        }else {
+            String sql = "select COUNT(w.OID) from PLATFORMBTM_" + btmType + "  w\n" +
+                    "join PLATFORMBTM_" + MdmBtmTypeConstant.CODE_ALL_CODE + " c on w.OID = c.CREATECODEOID\n" +
+                    "where c.CREATECODEBTM = '" + btmType + "' and c.CODERULEOID = '" + oid + "'" +
+                    "and w.ISLASTR = '1' and w.ISLASTV = '1'";
+            List<ClientBusinessObject> businessData = boService.queryByOnlySql(sql);
+            businessDataList.addAll(businessData);
+        }
+        if (CollectionUtils.isEmpty(businessDataList) || StringUtils.isBlank(businessDataList.get(0).getAttributeValue("COUNT(w.OID)"))) {
+            //鏃犳晥鏌ヨ
+            return BaseResult.fail("鏌ヨ澶辫触");
+        } else if (!StringUtils.equalsIgnoreCase("0", businessDataList.get(0).getAttributeValue("COUNT(w.OID)"))) {
+            return BaseResult.fail("缂栫爜瑙勫垯鐢熸垚鐨勭紪鐮佸凡鍦ㄤ笟鍔℃暟鎹腑搴旂敤锛屼笉鍏佽娓呯┖");
+        }
+        //娌℃湁鏁版嵁锛屽彲浠ュ畨鍏ㄥ垹闄�
+        WebUtil.setPersistence(false);
+        //鍒犻櫎鐮佸�艰〃涓殑鏁版嵁锛屼絾涓嶅锛屽鏋滄湁娴佹按鐨勭爜娈碉紝闇�瑕侀噸鏂拌绠楁祦姘�
+        conditionMap.clear();
+        conditionMap.put("codeRuleOid", oid);
+        List<ClientBusinessObject> serialValueList = boService.queryCBO("codeserialvalue", conditionMap);
+        BatchCBO batchCBO = boService.batchDelete(codeDOList);
+        batchCBO.getDeleteCbos().addAll(serialValueList);
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return BaseResult.success();
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java
new file mode 100644
index 0000000..e389694
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java
@@ -0,0 +1,62 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
+import com.vci.ubcs.code.service.CodeSerialAlgorithmServiceI;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.ApplicationContextProvider;
+import org.apache.commons.lang3.StringUtils;
+import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
+import org.springframework.aop.framework.Advised;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 娴佹按绠楁硶鐨勬湇鍔�
+ * @author weidy
+ * @date 2022-2-17
+ */
+@Service
+public class CodeSerialAlgorithmServiceImpl implements CodeSerialAlgorithmServiceI {
+    /**
+     * 鑾峰彇娴佹按绠楁硶鐨勫垪琛�
+     *
+     * @return 娴佹按绠楁硶鐨勪俊鎭�
+     */
+    @Override
+    public DataGrid<CodeSerialAlgorithmVO> gridSerialAlgorithm() {
+        //浣跨敤涓婚敭鍘绘壂鎻�
+        String[] beanNames = ApplicationContextProvider.getApplicationContext().getBeanNamesForAnnotation(MdmSerialAlgorithm.class);
+        List<CodeSerialAlgorithmVO> voList = new ArrayList<>();
+        if(beanNames!=null && beanNames.length>0){
+            for(String beanName : beanNames){
+                Object bean = ApplicationContextProvider.getApplicationContext().getBean(beanName);
+                if(bean!=null){
+                    CodeSerialAlgorithmVO algorithmVO = new CodeSerialAlgorithmVO();
+                    Advised advised = (Advised)bean;
+                    Class<?> targetClass = advised.getTargetSource().getTargetClass();
+                    algorithmVO.setClassFullName(targetClass.getName());
+                    MdmSerialAlgorithm serialAlgorithm = targetClass.getDeclaredAnnotation(MdmSerialAlgorithm.class);
+                    if(serialAlgorithm==null){
+                        serialAlgorithm = targetClass.getAnnotation(MdmSerialAlgorithm.class);
+                    }
+                    if(serialAlgorithm !=null) {
+                        algorithmVO.setName(serialAlgorithm.text());
+                        algorithmVO.setDescription(serialAlgorithm.description());
+                        algorithmVO.setId(serialAlgorithm.value());
+                        if(StringUtils.isBlank(algorithmVO.getId())){
+                            algorithmVO.setId(beanName);
+                        }
+                        voList.add(algorithmVO);
+                    }
+                }
+            }
+        }
+        DataGrid<CodeSerialAlgorithmVO> dataGrid = new DataGrid<>();
+        dataGrid.setData(voList);
+        dataGrid.setTotal(voList.size());
+        return dataGrid;
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSynonymServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSynonymServiceImpl.java
new file mode 100644
index 0000000..41930f0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSynonymServiceImpl.java
@@ -0,0 +1,278 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.dao.CodeSynonymDaoI;
+import com.vci.ubcs.code.model.CodeSynonymDO;
+import com.vci.ubcs.code.service.CodeSynonymServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeSynonymDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeSynonymVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
+
+/**
+ * 鍚屼箟璇嶉厤缃湇鍔�
+ * @author weidy
+ * @date 2022-02-17
+ */
+@Service
+public class CodeSynonymServiceImpl implements CodeSynonymServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeSynonymDaoI codeSynonymMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍚屼箟璇嶉厤缃�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeSynonymDO> doList = codeSynonymMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeSynonymVO> dataGrid=new DataGrid<CodeSynonymVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeSynonymDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeSynonymMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeSynonymDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO> codeSynonymDOs) throws VciBaseException{
+        List<CodeSynonymVO> voList = new ArrayList<CodeSynonymVO>();
+        if(!CollectionUtils.isEmpty(codeSynonymDOs)){
+           for(CodeSynonymDO s: codeSynonymDOs){
+                CodeSynonymVO vo =  codeSynonymDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeSynonymDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeSynonymVO codeSynonymDO2VO(CodeSynonymDO codeSynonymDO) throws VciBaseException{
+              CodeSynonymVO vo = new CodeSynonymVO();
+        if(codeSynonymDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeSynonymVO addSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeSynonymDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeSynonymDO codeSynonymDO = new CodeSynonymDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDTO,codeSynonymDO);
+        codeSynonymMapper.insert(codeSynonymDO);
+        return codeSynonymDO2VO(codeSynonymDO);
+    }
+
+    /**
+     * 淇敼鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeSynonymVO editSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeSynonymDTO,"鏁版嵁瀵硅薄",codeSynonymDTO.getOid(),"鍚屼箟璇嶉厤缃富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeSynonymDO codeSynonymDO = selectByOid(codeSynonymDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeSynonymDTO,codeSynonymDO);
+         codeSynonymMapper.updateByPrimaryKey(codeSynonymDO);
+         return codeSynonymDO2VO(codeSynonymDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeSynonymDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeSynonymDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeSynonymDTO codeSynonymDTO, CodeSynonymDO codeSynonymDO) {
+            CodeSynonymDO tsDO = new CodeSynonymDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeSynonymDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeSynonym(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeSynonymDTO,"鍚屼箟璇嶉厤缃暟鎹璞�",codeSynonymDTO.getOid(),"鍚屼箟璇嶉厤缃殑涓婚敭");
+        CodeSynonymDO codeSynonymDO = selectByOid(codeSynonymDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeSynonymDTO,codeSynonymDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeSynonymMapper.deleteByPrimaryKey(codeSynonymDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
+    * @param oid 涓婚敭
+    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeSynonymVO getObjectByOid(String oid) throws VciBaseException{
+        return codeSynonymDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeSynonymDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeSynonymDO codeSynonymDO = codeSynonymMapper.selectByPrimaryKey(oid.trim());
+        if(codeSynonymDO == null || StringUtils.isBlank(codeSynonymDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeSynonymDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeSynonymVO> listCodeSynonymByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeSynonymDO> codeSynonymDOList = listCodeSynonymDOByOidCollections(oidCollections);
+        return codeSynonymDO2VOs(codeSynonymDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeSynonymDO> listCodeSynonymDOByOidCollections(Collection<String> oidCollections){
+        List<CodeSynonymDO> codeSynonymDOList = new ArrayList<CodeSynonymDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeSynonymDO> tempDOList =  codeSynonymMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeSynonymDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeSynonymDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeSynonymVO> refDataGridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeSynonym(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTemplatePhaseServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTemplatePhaseServiceImpl.java
new file mode 100644
index 0000000..bb8f9f4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTemplatePhaseServiceImpl.java
@@ -0,0 +1,509 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.CodePhaseAttrDaoI;
+import com.vci.ubcs.code.dao.CodeTemplatePhaseDaoI;
+import com.vci.ubcs.code.model.CodeClassifyTemplateAttrDO;
+import com.vci.ubcs.code.model.CodePhaseAttrDO;
+import com.vci.ubcs.code.model.CodeTemplatePhaseDO;
+import com.vci.ubcs.code.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.ubcs.code.service.CodePhaseAttrServiceI;
+import com.vci.ubcs.code.service.CodeTemplatePhaseServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 妯℃澘闃舵鏈嶅姟
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeTemplatePhaseServiceImpl implements CodeTemplatePhaseServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeTemplatePhaseDaoI codeTemplatePhaseMapper;
+
+    /**
+     * 妯℃澘灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI tempAttrService;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    @Lazy
+	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 闃舵鐨勫睘鎬�
+     */
+    @Autowired
+    private CodePhaseAttrServiceI phaseAttrService;
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodePhaseAttrDaoI codePhaseAttrMapper;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeTemplatePhaseDO> doList = codeTemplatePhaseMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeTemplatePhaseVO> dataGrid=new DataGrid<CodeTemplatePhaseVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeTemplatePhaseDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeTemplatePhaseMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO>  codeTemplatePhaseDOs) throws VciBaseException{
+        List<CodeTemplatePhaseVO> voList = new ArrayList<CodeTemplatePhaseVO>();
+        if(!CollectionUtils.isEmpty(codeTemplatePhaseDOs)){
+           for(CodeTemplatePhaseDO s: codeTemplatePhaseDOs){
+                CodeTemplatePhaseVO vo =  codeTemplatePhaseDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhaseDO codeTemplatePhaseDO) throws VciBaseException{
+              CodeTemplatePhaseVO vo = new CodeTemplatePhaseVO();
+        if(codeTemplatePhaseDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+                    }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+        //灏咲TO杞崲涓篋O
+        CodeTemplatePhaseDO codeTemplatePhaseDO = new CodeTemplatePhaseDO();
+        codeTemplatePhaseDO.setOid(VciBaseUtil.getPk());
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeTemplatePhaseMapper.insert(codeTemplatePhaseDO);
+        List<CodePhaseAttrDO> attrDOList = new ArrayList<>();
+        codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+            CodePhaseAttrDO attrDO = new CodePhaseAttrDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+            attrDO.setOid(VciBaseUtil.getPk());
+            attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+            attrDOList.add(attrDO);
+        });
+        BatchCBO attrCBO = codePhaseAttrMapper.batchInsert(attrDOList);
+        batchCBO.copyFromOther(attrCBO);
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+    }
+
+    /**
+     * 淇敼妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵涓婚敭",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+         //灏咲TO杞崲涓篋O
+         CodeTemplatePhaseDO codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+         WebUtil.setPersistence(false);
+         BatchCBO batchCBO = codeTemplatePhaseMapper.updateByPrimaryKey(codeTemplatePhaseDO);
+         //鎶婁互鍓嶇殑鍒犻櫎
+         List<CodePhaseAttrDO> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+         if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+             BatchCBO delCBO = codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList()));
+             batchCBO.copyFromOther(delCBO);
+         }
+         List<CodePhaseAttrDO> attrDOList = new ArrayList<>();
+         codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+             CodePhaseAttrDO attrDO = new CodePhaseAttrDO();
+             BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+             attrDO.setOid(VciBaseUtil.getPk());
+             attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+             attrDOList.add(attrDO);
+         });
+         BatchCBO attrCBO = codePhaseAttrMapper.batchInsert(attrDOList);
+         batchCBO.copyFromOther(attrCBO);
+         WebUtil.setPersistence(true);
+         boService.persistenceBatch(batchCBO);
+         return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+     }
+
+    /**
+     * 浣跨敤闃舵涓婚敭鑾峰彇鍖呭惈鐨勫睘鎬�
+     * @param codePhaseOid 闃舵鐨勪富閿�
+     * @return 鍖呭惈灞炴�х殑鏁版嵁瀵硅薄
+     */
+     private List<CodePhaseAttrDO> listPhaseAttrDOByPhaseOid(String codePhaseOid){
+         Map<String,String> conditionMap = new HashMap<>();
+         conditionMap.put("codePhaseOid",codePhaseOid);
+         List<CodePhaseAttrDO> phaseAttrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
+         return phaseAttrDOS;
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeTemplatePhaseDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeTemplatePhaseDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeTemplatePhaseDTO codeTemplatePhaseDTO, CodeTemplatePhaseDO codeTemplatePhaseDO) {
+        CodeTemplatePhaseDO tsDO = new CodeTemplatePhaseDO();
+        BeanUtil.convert(codeTemplatePhaseDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeTemplatePhaseDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"妯℃澘闃舵鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵鐨勪富閿�");
+        CodeTemplatePhaseDO codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeTemplatePhaseMapper.deleteByPrimaryKey(codeTemplatePhaseDO.getOid());
+        //闇�瑕佸垹闄ゅ睘鎬�
+        List<CodePhaseAttrDO> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+        if(!CollectionUtils.isEmpty(phaseAttrDOS)) {
+            BatchCBO deleteCBO = codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList()));
+            batchCBO.copyFromOther(deleteCBO);
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+     * 妯℃澘淇敼瑙﹀彂鍔熻兘
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateAttrModifyTrigger(List<CodeClassifyTemplateAttrDO> attrDOList){
+        //灞炴�т慨鏀圭殑鏃跺�欙紝闇�瑕佸悓姝ヤ慨鏀瑰搴斿睘鎬х殑鍚嶇О
+        BatchCBO batchCBO = new BatchCBO();
+        List<CodePhaseAttrDO> phaseAttrDOS =listLinkAttrDOByTemplateAttrDOS(attrDOList);
+        if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+            //璇存槑鏈夊睘鎬�,鎴戜滑鍘绘浛鎹竴涓�
+            Map<String, CodeClassifyTemplateAttrDO> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+            phaseAttrDOS.stream().forEach(phaseAttrDO->{
+                if(attrDOMap.containsKey(phaseAttrDO.getId())){
+                    CodeClassifyTemplateAttrDO attrDO = attrDOMap.get(phaseAttrDO.getId());
+                    phaseAttrDO.setId(attrDO.getId());
+                    phaseAttrDO.setName(attrDO.getName());
+                    phaseAttrDO.setAttributeGroup(attrDO.getAttributeGroup());
+                }
+            });
+            BatchCBO updateCBO = codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
+            batchCBO.copyFromOther(updateCBO);
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 浣跨敤妯℃澘鐨勫睘鎬ц幏鍙栭樁娈典腑鍖呭惈鐨勫睘鎬у唴瀹�
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 闃舵閲岀殑灞炴�ф暟鎹璞�
+     */
+    private List<CodePhaseAttrDO> listLinkAttrDOByTemplateAttrDOS(List<CodeClassifyTemplateAttrDO> attrDOList){
+        if(!CollectionUtils.isEmpty(attrDOList)) {
+            //鏌ヨ杩欎釜妯℃澘閲屽寘鍚殑鎵�鏈夐樁娈电殑杩欎簺灞炴��
+            //鍥犱负oracle閲岃〃鐨勫瓧娈典笉鑳借秴杩�1000涓紝鎵�浠ユ垜浠繖閲岄粯璁ゅ睘鎬т釜鏁版槸灏忎簬1000鐨勶紱
+            Map<String, String> conditionMap = new HashMap<>();
+            conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + attrDOList.get(0).getClassifyTemplateOid() + "')");
+            conditionMap.put("id", QueryOptionConstant.IN + "(" +  VciBaseUtil.toInSql(attrDOList.stream().map(CodeClassifyTemplateAttrDO::getId).collect(Collectors.toList()).toArray(new String[0])) + ")");
+            return codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
+        }else{
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * 闃舵鐨勮〃鍚�
+     * @return 琛ㄥ悕
+     */
+    private String getPhaseTable(){
+        return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE);
+    }
+
+    /**
+     * 闃舵灞炴�х殑琛ㄥ悕
+     * @return 琛ㄥ悕
+     */
+    private String getPhaseAttrTable(){
+        return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_PHASE_ATTR);
+    }
+
+    /**
+     * 妯℃澘灞炴�у垹闄ょ殑鏃跺�欒Е鍙�
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateAttrDeleteTrigger(List<CodeClassifyTemplateAttrDO> attrDOList){
+        BatchCBO batchCBO = new BatchCBO();
+        List<CodePhaseAttrDO> phaseAttrDOS =listLinkAttrDOByTemplateAttrDOS(attrDOList);
+        if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+            //灞炴�ц鍒犻櫎鐨勬椂鍊欙紝闃舵閲岄潰涔熶竴鏍疯琚垹闄�
+            batchCBO.copyFromOther(codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList())));
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     *
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
+        BatchCBO batchCBO = new BatchCBO();
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifyTemplateOid",classifyTemplateOid);
+        List<CodeTemplatePhaseDO> templatePhaseDOS = codeTemplatePhaseMapper.selectByCondition(conditionMap, new PageHelper(-1));
+        conditionMap.clear();
+        if(!CollectionUtils.isEmpty(templatePhaseDOS)) {
+            batchCBO.copyFromOther(codeTemplatePhaseMapper.batchDeleteByOids(templatePhaseDOS.stream().map(CodeTemplatePhaseDO::getOid).collect(Collectors.toList())));
+            conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + classifyTemplateOid + "')");
+            List<CodePhaseAttrDO> phaseAttrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+                batchCBO.copyFromOther(codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList())));
+            }
+        }
+        return batchCBO;
+    }
+
+    /**
+    * 涓婚敭鑾峰彇妯℃澘闃舵
+    * @param oid 涓婚敭
+    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException{
+        return codeTemplatePhaseDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeTemplatePhaseDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeTemplatePhaseDO codeTemplatePhaseDO = codeTemplatePhaseMapper.selectByPrimaryKey(oid.trim());
+        if(codeTemplatePhaseDO == null || StringUtils.isBlank(codeTemplatePhaseDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeTemplatePhaseDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeTemplatePhaseDO> codeTemplatePhaseDOList = listCodeTemplatePhaseDOByOidCollections(oidCollections);
+        return codeTemplatePhaseDO2VOs(codeTemplatePhaseDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeTemplatePhaseDO> listCodeTemplatePhaseDOByOidCollections(Collection<String> oidCollections){
+        List<CodeTemplatePhaseDO> codeTemplatePhaseDOList = new ArrayList<CodeTemplatePhaseDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeTemplatePhaseDO> tempDOList =  codeTemplatePhaseMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeTemplatePhaseDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeTemplatePhaseDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収妯℃澘闃舵鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeTemplatePhase(conditionMap,pageHelper);
+    }
+
+    /**
+     * 闃舵涓嶅寘鍚殑灞炴��
+     *
+     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+     * @param pageHelper   鍒嗛〉瀵硅薄
+     * @return 灞炴�х殑淇℃伅
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) {
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        if(!conditionMap.containsKey("classifyTemplateOid")){
+            return new DataGrid<>("娌℃湁妯℃澘鐨勪富閿�");
+        }
+        //闇�瑕佸垽鏂樁娈电殑涓婚敭鏄惁瀛樺湪
+        String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+        if(StringUtils.isNotBlank(codePhaseOid)){
+            //鎺掗櫎闃舵涓婁娇鐢ㄧ殑
+            conditionMap.remove("codePhaseOid");
+            conditionMap.put("id", QueryOptionConstant.NOTIN + "(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
+        }
+        return tempAttrService.gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
+    }
+
+    /**
+     * 闃舵鍖呭惈鐨勫睘鎬�
+     *
+     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+     * @param pageHelper   鍒嗛〉瀵硅薄
+     * @return 灞炴�х殑淇℃伅
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) {
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+        if(StringUtils.isBlank(codePhaseOid)){
+            return new DataGrid<>();
+        }
+        conditionMap.remove("codePhaseOid");
+        CodeTemplatePhaseDO phaseDO = selectByOid(codePhaseOid);
+        conditionMap.put("id",QueryOptionConstant.IN + "(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
+        conditionMap.put("classifyTemplateOid",phaseDO.getCodeClassifyTemplateOid());
+        return tempAttrService.gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataInfoServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataInfoServiceImpl.java
new file mode 100644
index 0000000..bb7c943
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataInfoServiceImpl.java
@@ -0,0 +1,277 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.dao.DockingPreApplyDataInfoDaoI;
+import com.vci.ubcs.code.model.DockingPreApplyDataInfoDO;
+import com.vci.ubcs.code.service.DockingPreApplyDataInfoServiceI;
+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 com.vci.ubcs.code.dto.DockingPreApplyDataInfoDTO;
+import com.vci.ubcs.code.vo.pagemodel.DockingPreApplyDataInfoVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+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
+    @Lazy
+	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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataServiceImpl.java
new file mode 100644
index 0000000..f40b909
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataServiceImpl.java
@@ -0,0 +1,1119 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.cloud.commons.io.FileUtils;
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.ubcs.code.constant.MdmEngineConstant;
+import com.vci.ubcs.code.dao.DockingPreApplyDataDaoI;
+import com.vci.ubcs.code.dao.DockingPreApplyDataInfoDaoI;
+import com.vci.ubcs.code.lifecycle.CodeDefaultLC;
+import com.vci.ubcs.code.model.DockingPreApplyDataDO;
+import com.vci.ubcs.code.model.DockingPreApplyDataInfoDO;
+import com.vci.code.service.*;
+import com.vci.ubcs.code.utils.AttributeMapConfig;
+import com.vci.ubcs.code.utils.EnumVO;
+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.ubcs.code.service.*;
+import com.vci.ubcs.code.vo.pagemodel.*;
+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 com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.DockingPreApplyDataDTO;
+import com.vci.ubcs.code.dto.DockingPreApplyDataInfoDTO;
+import com.vci.ubcs.code.dto.PreApplyCodeOrderDTO;
+import org.springblade.code.service.*;
+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.*;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏈嶅姟
+ * @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
+    @Lazy
+	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(MdmDuckingConstant.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 -> !MdmEngineConstant.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(MdmDuckingConstant.XML_DATA);
+        for (Element data_element:data_elements){
+            Attribute systemid_attr = data_element.attribute(MdmDuckingConstant.XML_SYSTEMID);
+            String systemid = systemid_attr==null?"":systemid_attr.getValue();//systemid
+
+            Attribute type_attr = data_element.attribute(MdmDuckingConstant.XML_TYPE);
+            String type = type_attr==null?"":type_attr.getValue();//type
+
+            List<Element> attr_elements = data_element.elements(MdmDuckingConstant.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(MdmDuckingConstant.XML_SYSTEMKEY);
+                String systemkey = systemkey_attr==null?"":systemkey_attr.getValue();//systemkey
+
+                Attribute mdmkey_attr = attr_element.attribute(MdmDuckingConstant.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreAttrMappingSeviceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreAttrMappingSeviceImpl.java
new file mode 100644
index 0000000..760c143
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreAttrMappingSeviceImpl.java
@@ -0,0 +1,531 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dao.DockingPreAttrMappingDaoI;
+import com.vci.ubcs.code.dao.DockingPreAttrRangeDaoI;
+import com.vci.ubcs.code.model.DockingPreAttrMappingDO;
+import com.vci.ubcs.code.model.DockingPreAttrRangeDO;
+import com.vci.ubcs.code.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.ubcs.code.service.DockingPreAttrMappingSeviceI;
+import com.vci.ubcs.code.service.MdmEngineServiceI;
+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 com.vci.ubcs.code.dto.DockingPreAttrMappingDTO;
+import com.vci.ubcs.code.dto.DockingPreAttrRangeDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+import com.vci.ubcs.code.vo.pagemodel.DockingPreAttrMappingVO;
+import com.vci.ubcs.code.vo.pagemodel.DockingPreAttrRangeVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import 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
+    @Lazy
+	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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
new file mode 100644
index 0000000..11c8248
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -0,0 +1,2758 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmEngineConstant;
+import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
+import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
+import com.vci.ubcs.code.enumpack.CodeUseButtonPositionTypeEnum;
+import com.vci.ubcs.code.lifecycle.CodeDefaultLC;
+import com.vci.ubcs.code.model.CodeClassifyTemplateAttrDO;
+import com.vci.ubcs.code.model.CodeClassifyTemplateDO;
+import com.vci.code.service.*;
+import com.vci.ubcs.code.utils.DateUtils;
+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.ubcs.code.service.*;
+import com.vci.ubcs.code.vo.pagemodel.*;
+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 com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
+import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import org.springblade.code.service.*;
+import org.springblade.code.vo.pagemodel.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+import plm.bs.bom.clientobject.ClientBusinessObjectOperation;
+
+import 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;
+
+/**
+ * 涓绘暟鎹紩鎿庢湇鍔�
+ *
+ * @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
+    @Lazy
+	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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD, codeClassifyOid);
+        } else {
+            conditionMap.put(MdmEngineConstant.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(MdmEngineConstant.CODE_FIELD)) {
+            selectFieldList.add(MdmEngineConstant.CODE_FIELD);
+        }
+        if (!selectFieldList.contains(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD)) {
+            selectFieldList.add(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD);
+        }
+        if (!selectFieldList.contains(MdmEngineConstant.CODE_TEMPLATE_OID_FIELD)) {
+            selectFieldList.add(MdmEngineConstant.CODE_TEMPLATE_OID_FIELD);
+        }
+        if (!selectFieldList.contains(MdmEngineConstant.CODE_FULL_PATH_FILED)) {
+            selectFieldList.add(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid());
+            cbo.setAttributeValue(MdmEngineConstant.CODE_TEMPLATE_OID_FIELD, templateVO.getOid());
+            cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.SECRET_FIELD));
+            if (secret == 0 || !secretService.checkDataSecret(secret)) {
+                Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                cbo.setAttributeValue(MdmEngineConstant.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
new file mode 100644
index 0000000..a3bb336
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -0,0 +1,4016 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmEngineConstant;
+import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
+import com.vci.ubcs.code.lifecycle.CodeAllCodeLC;
+import com.vci.ubcs.code.lifecycle.CodeDefaultLC;
+import com.vci.code.service.*;
+import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.code.vo.universalInter.attrmap.DataObjectVO;
+import com.vci.ubcs.code.vo.universalInter.attrmap.RowDatas;
+import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultDataObjectDetailDO;
+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.ubcs.code.service.*;
+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 com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
+import com.vci.ubcs.code.dto.CodeExportAttrDTO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import org.springblade.code.service.*;
+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 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;
+
+
+/**
+ * 涓绘暟鎹鍏ュ鍑烘湇鍔�
+ * @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
+    @Lazy
+	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 ->
+                    !MdmEngineConstant.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 ->
+                !MdmEngineConstant.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(MdmEngineConstant.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 ->
+                !MdmEngineConstant.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((MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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 ->
+                !MdmEngineConstant.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(MdmEngineConstant.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 ->
+                    !MdmEngineConstant.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((MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD))) {
+                        String row_index = cbo.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.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((MdmEngineConstant.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(MdmEngineConstant.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((MdmEngineConstant.IMPORT_ROW_INDEX)), t -> t.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.IMPORT_ROW_INDEX))).map(s -> s.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.IMPORT_ROW_INDEX);
+            String secLength = cbo.getAttributeValue(MdmEngineConstant.CODE_SEC_LENGTH_FIELD);
+            //鎵惧垎绫�
+            String classifyOid = cbo.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+                    cbo.setAttributeValue(MdmEngineConstant.CODE_FULL_PATH_FILED,fullPath);
+                    //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                    int secret = VciBaseUtil.getInt(cbo.getAttributeValue(MdmEngineConstant.SECRET_FIELD));
+                    if(secret == 0 || !secretService.checkDataSecret(secret) ){
+                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                        cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.CODE_TEMPLATE_OID_FIELD,templateVO.getOid());
+                cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+                    cbo.setAttributeValue(MdmEngineConstant.CODE_FULL_PATH_FILED,fullPath);
+                    int secret = VciBaseUtil.getInt(cbo.getAttributeValue(MdmEngineConstant.SECRET_FIELD));
+                    if(secret == 0 || !secretService.checkDataSecret(secret) ){
+                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                        cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.CODE_TEMPLATE_OID_FIELD,templateVO.getOid());
+                cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD);
+            //濡傛灉path涓虹┖锛屽垯琛ㄧず鏄鍏ュ綋鍓嶅垎绫�
+            if(StringUtils.isBlank(classifyPath)){
+                classifyPath = "#current#";
+            }
+            if ( !pathMap.containsKey(classifyPath)) {
+                String row_index = cbo.getAttributeValue(MdmEngineConstant.IMPORT_ROW_INDEX);
+                errorMap.put(row_index,errorMap.getOrDefault(row_index,"") + ";鍒嗙被璺緞涓嶅瓨鍦�");
+            } else {
+                //杞竴涓嬪垎绫荤殑涓婚敭
+                try {
+                    String classifyOid = pathMap.get(classifyPath).getOid();
+                    cbo.setAttributeValueWithNoCheck(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD, classifyOid);
+                    cbo.setAttributeValue(MdmEngineConstant.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 ->
+                !MdmEngineConstant.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 = MdmEngineConstant.CODE_CLASSIFY_OID_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "鐮佹瀹藉害".equalsIgnoreCase(title)){
+                id = MdmEngineConstant.CODE_SEC_LENGTH_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)){
+                id = MdmEngineConstant.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(MdmEngineConstant.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 = MdmEngineConstant.CODE_CLASSIFY_OID_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "鐮佹瀹藉害".equalsIgnoreCase(title)){
+                id = MdmEngineConstant.CODE_SEC_LENGTH_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)){
+                id = MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD))) {
+                                CodeClassifyFullInfoBO currentClassifyFullInfo = classifyService.getClassifyFullInfo(cbo.getAttributeValue(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD));
+                                classifyFullInfoMap.put(currentClassifyFullInfo.getCurrentClassifyVO().getOid(), currentClassifyFullInfo);
+                            }
+                        }
+                        CodeClassifyFullInfoBO newClassifyFullInfo= classifyFullInfoMap.get(cbo.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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((MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.IMPORT_ROW_INDEX),newCboList);
+                }
+                return isKeyCheck;
+            }else{
+                return false;
+            }
+        }).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatDataMap)){
+            resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s->s.getAttributeValue(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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 ->!MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.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 -> !MdmEngineConstant.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 ->
+                    !MdmEngineConstant.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(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid());
+            cbo.setAttributeValue(MdmEngineConstant.CODE_TEMPLATE_OID_FIELD, templateVO.getOid());
+            cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.SECRET_FIELD));
+            if (secret == 0 || !secretService.checkDataSecret(secret)) {
+                Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+                    cbo.setAttributeValue(MdmEngineConstant.CODE_FULL_PATH_FILED,fullPath);
+                    //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                    int secret = VciBaseUtil.getInt(cbo.getAttributeValue(MdmEngineConstant.SECRET_FIELD));
+                    if(secret == 0 || !secretService.checkDataSecret(secret) ){
+                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                        cbo.setAttributeValue(MdmEngineConstant.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(MdmEngineConstant.CODE_TEMPLATE_OID_FIELD,codeImprotDataVO.getTemplateOid());
+                cbo.setAttributeValue(MdmEngineConstant.IMPORT_ROW_INDEX,rowData.get(MdmEngineConstant.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(MdmEngineConstant.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
new file mode 100644
index 0000000..5fee65e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -0,0 +1,743 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.constant.MdmEngineConstant;
+import com.vci.ubcs.code.dao.CodeAllCodeDaoI;
+import com.vci.ubcs.code.dao.CodeSerialValueDaoI;
+import com.vci.ubcs.code.enumpack.CodeCutTypeEnum;
+import com.vci.ubcs.code.enumpack.CodeGetValueTypeEnum;
+import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
+import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
+import com.vci.ubcs.code.lifecycle.CodeAllCodeLC;
+import com.vci.ubcs.code.model.CodeAllCodeDO;
+import com.vci.ubcs.code.model.CodeSerialValueDO;
+import com.vci.ubcs.code.service.MdmProductCodeServiceI;
+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 com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeOrderSecDTO;
+import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.web.other.BdSelectInputCharAspect.SEP;
+
+/**
+ * 鐢熸垚缂栫爜鐨勬湇鍔�
+ * @author weidy
+ * @date 2022-3-6
+ */
+@Service
+public class MdmProductCodeServiceImpl implements MdmProductCodeServiceI {
+
+    /**
+     * 涓氬姟鏁版嵁鐨勬湇鍔�
+     */
+    @Autowired
+    @Lazy
+	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(MdmEngineConstant.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(MdmEngineConstant.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 ? MdmEngineConstant.EMPTY_SERIAL_UNIT : serialUnitList.stream().collect(Collectors.joining(MdmEngineConstant.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(MdmEngineConstant.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 ? MdmEngineConstant.EMPTY_SERIAL_UNIT : thisSerialUnitList.stream().collect(Collectors.joining(MdmEngineConstant.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(MdmEngineConstant.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntAuthorityServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntAuthorityServiceImpl.java
new file mode 100644
index 0000000..d938380
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntAuthorityServiceImpl.java
@@ -0,0 +1,290 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.dao.SysIntAuthorityDaoI;
+import com.vci.ubcs.code.enumpack.SysIntegrationAuthorityTypeEnum;
+import com.vci.ubcs.code.model.SysIntAuthorityDO;
+import com.vci.ubcs.code.service.SysIntAuthorityServiceI;
+import com.vci.ubcs.code.service.SysIntInfoServiceI;
+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 com.vci.ubcs.code.dto.SysIntAuthorityDTO;
+import com.vci.ubcs.code.vo.pagemodel.SysIntAuthorityVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+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
+    @Lazy
+	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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntBaseServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntBaseServiceImpl.java
new file mode 100644
index 0000000..6cf5dd0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntBaseServiceImpl.java
@@ -0,0 +1,285 @@
+package com.vci.ubcs.code.service.impl;
+
+
+import com.vci.ubcs.code.dao.SysIntBaseDaoI;
+import com.vci.ubcs.code.model.SysIntBaseDO;
+import com.vci.ubcs.code.service.SysIntBaseServiceI;
+import com.vci.ubcs.code.service.SysIntInfoServiceI;
+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 org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.vci.ubcs.code.dto.SysIntBaseDTO;
+import com.vci.ubcs.code.vo.pagemodel.SysIntBaseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+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
+//    @Lazy
+//	private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 绯荤粺闆嗘垚鐨勬帴鍙d俊鎭湇鍔�
+     */
+    @Autowired
+	@Lazy
+    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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntInfoServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntInfoServiceImpl.java
new file mode 100644
index 0000000..60a3de8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntInfoServiceImpl.java
@@ -0,0 +1,1097 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.ubcs.code.constant.MdmEngineConstant;
+import com.vci.code.dao.*;
+import com.vci.ubcs.code.dto.datapush.classify.JsonRootDataDTO;
+import com.vci.ubcs.code.dto.datapush.classify.NodeClassifyDTO;
+import com.vci.ubcs.code.dto.datapush.classify.NodeDataDTO;
+import com.vci.ubcs.code.dto.datapush.classify.NodeLibraryDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultJsonDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultNodeDataDTO;
+import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO;
+import com.vci.ubcs.code.dao.*;
+import com.vci.ubcs.code.enumpack.SysIntegrationAuthorityTypeEnum;
+import com.vci.ubcs.code.enumpack.SysIntegrationRequestTypeEnum;
+import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum;
+import com.vci.code.model.*;
+import com.vci.ubcs.code.service.CodeClassifyServiceI;
+import com.vci.ubcs.code.service.MdmEngineServiceI;
+import com.vci.ubcs.code.service.SysIntBaseServiceI;
+import com.vci.ubcs.code.service.SysIntInfoServiceI;
+import com.vci.ubcs.code.utils.HttpUtils;
+import com.vci.ubcs.code.utils.WsErpClientUtil;
+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.ubcs.code.model.*;
+import com.vci.ubcs.code.vo.pagemodel.*;
+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 com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
+import org.springblade.code.dao.*;
+import com.vci.ubcs.code.dto.SysIntHeaderDTO;
+import com.vci.ubcs.code.dto.SysIntInfoDTO;
+import com.vci.ubcs.code.dto.SysIntParamDTO;
+import com.vci.ubcs.code.dto.UpdateSysInfoStatusDTO;
+import org.springblade.code.model.*;
+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.*;
+
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏈嶅姟
+ * @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
+    @Lazy
+	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(MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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", MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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", MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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(MdmEngineConstant.CODE_CLASSIFY_OID_FIELD, codeClassifyOid);
+            } else {
+                conditionMap.put(MdmEngineConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.URLTYPE_HTTP)) {
+                if (requestmethod.equals(MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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(MdmDuckingConstant.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/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
new file mode 100644
index 0000000..f8a33f6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -0,0 +1,920 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.constant.MdmDuckingConstant;
+import com.vci.ubcs.code.constant.MdmEngineConstant;
+import com.vci.ubcs.code.dao.DockingLogeDaoI;
+import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
+import com.vci.ubcs.code.model.CodeClassifyDO;
+import com.vci.ubcs.code.model.DockingLogeDO;
+import com.vci.ubcs.code.service.CodeClassifyServiceI;
+import com.vci.ubcs.code.service.MdmEngineServiceI;
+import com.vci.ubcs.code.service.MdmIOServiceI;
+import com.vci.ubcs.code.service.UniversalInterfaceI;
+import com.vci.ubcs.code.utils.AttributeMapConfig;
+import com.vci.ubcs.code.utils.gennerAttrMapUtil;
+import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.code.vo.universalInter.apply.*;
+import com.vci.ubcs.code.vo.universalInter.attrmap.DataObjectVO;
+import com.vci.ubcs.code.vo.universalInter.classify.*;
+import com.vci.ubcs.code.vo.universalInter.data.*;
+import com.vci.ubcs.code.vo.universalInter.result.json.*;
+import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultClassfyVO;
+import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultDataObjectDetailDO;
+import com.vci.ubcs.code.vo.universalInter.result.xml.XMLResultSystemVO;
+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 com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.CodeOrderSecDTO;
+import org.springblade.code.vo.pagemodel.*;
+import org.springblade.code.vo.universalInter.apply.*;
+import com.vci.ubcs.code.vo.universalInter.attrmap.ClsfAttrMappingDO;
+import com.vci.ubcs.code.vo.universalInter.attrmap.LibraryClsfDO;
+import com.vci.ubcs.code.vo.universalInter.attrmap.LibraryDO;
+import com.vci.ubcs.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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/***
+ * 缁熶竴鎺ュ彛
+ */
+@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
+    @Lazy
+	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();
+                    DataObjectVO dataObjectVO = new DataObjectVO();
+                    List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !MdmEngineConstant.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();
+                        DataObjectVO dataObjectVO = new DataObjectVO();
+                        //灏嗛粯璁ょ殑灞炴�у叏閮ㄦ浛鎹㈡帀
+                        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !MdmEngineConstant.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<com.vci.ubcs.code.vo.universalInter.data.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 -> {
+                        com.vci.ubcs.code.vo.universalInter.data.DataObjectVO dataObjectVO=new com.vci.ubcs.code.vo.universalInter.data.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, 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/service/impl/tt.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/tt.xml
similarity index 100%
rename from Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/tt.xml
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/tt.xml
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/update.json b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/update.json
similarity index 100%
rename from Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/update.json
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/update.json
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/AttributeMapConfig.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/AttributeMapConfig.java
new file mode 100644
index 0000000..5b8aba6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/AttributeMapConfig.java
@@ -0,0 +1,33 @@
+package com.vci.ubcs.code.utils;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+@ConfigurationProperties(prefix="attrconfig")
+@Component
+public class AttributeMapConfig {
+    private Map<String,String> system_attrmap;
+    /**
+     * WRJ涓绘暟鎹笌MPM鏋氫妇鍊兼槧灏勯厤缃�
+     */
+    private Map<String, List<EnumVO>> mpmEnumMap;
+    public Map<String, String> getSystem_attrmap() {
+        return system_attrmap;
+    }
+    public void setSystem_attrmap(Map<String, String> system_attrmap) {
+        this.system_attrmap = system_attrmap;
+    }
+
+    public void setMpmEnumMap(Map<String, List<EnumVO>> mpmEnumMap) {
+        this.mpmEnumMap = mpmEnumMap;
+    }
+
+    public Map<String, List<EnumVO>> getMpmEnumMap() {
+        return mpmEnumMap;
+    }
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/BackXml.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/BackXml.java
new file mode 100644
index 0000000..ce21b1c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/BackXml.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.code.utils;
+
+import java.util.List;
+
+public class BackXml{
+    private List<XmlData> datas;
+    public String state;//鍏跺疄灏辨槸datacode锛屼篃鏄痗ode
+    public String msg;//鍏跺疄灏辨槸datamsg
+
+    public List<XmlData> getDatas() {
+        return datas;
+    }
+
+    public void setDatas(List<XmlData> datas) {
+        this.datas = datas;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "BackXml{" +
+                "datas=" + datas +
+                ", state='" + state + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/DateUtils.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/DateUtils.java
new file mode 100644
index 0000000..a8f295a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/DateUtils.java
@@ -0,0 +1,527 @@
+package com.vci.ubcs.code.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * yyyy-MM-dd HH:mm:ss
+ *
+ */
+public class DateUtils {
+
+    /** 骞�-鏈�-鏃� 鏃�:鍒�:绉� 鏄剧ず鏍煎紡 */
+    // 澶囨敞:濡傛灉浣跨敤澶у啓HH鏍囪瘑浣跨敤24灏忔椂鏄剧ず鏍煎紡,濡傛灉浣跨敤灏忓啓hh灏辫〃绀轰娇鐢�12灏忔椂鍒舵牸寮忋��
+    public static String DATE_TO_STRING_DETAIAL_PATTERN = "yyyy-MM-dd HH:mm:ss";
+
+    /** 骞�-鏈�-鏃� 鏄剧ず鏍煎紡 */
+    public static String DATE_TO_STRING_SHORT_PATTERN = "yyyy-MM-dd";
+
+    /**
+     * 鎶婃棩鏈熷瓧绗︿覆鏍煎紡鍖栨垚鏃ユ湡绫诲瀷锛岄粯璁yyy-MM-dd HH:mm:ss
+     * @param dateStr
+     * @return
+     */
+    public static Date convert2Date(String dateStr) {
+        return convert2Date(dateStr,DATE_TO_STRING_DETAIAL_PATTERN);
+    }
+
+    /**
+     * 鎶婃棩鏈熷瓧绗︿覆鏍煎紡鍖栨垚鏃ユ湡绫诲瀷
+     * @param dateStr
+     * @param format
+     * @return
+     */
+    public static Date convert2Date(String dateStr, String format) {
+        SimpleDateFormat simple = new SimpleDateFormat(format);
+        try {
+            simple.setLenient(false);
+            return simple.parse(dateStr);
+        } catch (Exception e) {
+            return  null;
+        }
+    }
+
+
+    /**
+     * 鎶婃棩鏈熺被鍨嬫牸寮忓寲鎴愬瓧绗︿覆
+     * @param date
+     * @param format
+     * @return
+     */
+    public static String convert2String(Date date, String format) {
+        SimpleDateFormat formater = new SimpleDateFormat(format);
+        try {
+            return formater.format(date);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * 杞瑂ql鐨則ime鏍煎紡
+     * @param date
+     * @return
+     */
+    public static java.sql.Timestamp convertSqlTime(Date date){
+        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
+        return timestamp;
+    }
+
+    /**
+     * 杞瑂ql鐨勬棩鏈熸牸寮�
+     * @param date
+     * @return
+     */
+    public static java.sql.Date convertSqlDate(Date date){
+        java.sql.Date Datetamp = new java.sql.Date(date.getTime());
+        return Datetamp;
+    }
+
+
+    /**
+     * 鑾峰彇褰撳墠鏃ユ湡,榛樿yyyy-MM-dd HH:mm:ss
+     * @return
+     */
+    public static String getCurrentDate() {
+        return getCurrentDate(DATE_TO_STRING_DETAIAL_PATTERN);
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏃ユ湡
+     * @param format
+     * @return
+     */
+    public static String getCurrentDate(String format) {
+        return new SimpleDateFormat(format).format(new Date());
+    }
+
+    /**
+     * 鑾峰彇鏃堕棿鎴�
+     * @return
+     */
+    public static long getTimestamp()
+    {
+        return System.currentTimeMillis();
+    }
+
+    /**
+     * 鏃堕棿瀛楃涓茶浆鏃堕棿鎴�
+     */
+    public static long stringToTimestamp(String str){
+        long time = 0;
+        try {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = simpleDateFormat.parse(str);
+            time = date.getTime();
+        }catch (Exception e){
+
+        }
+        return time;
+    }
+
+    /**
+     * 鑾峰彇鏈堜唤鐨勫ぉ鏁�
+     * @param year
+     * @param month
+     * @return
+     */
+    public static int getDaysOfMonth(int year, int month) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(year, month - 1, 1);
+        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勫勾
+     * @param date
+     * @return
+     */
+    public static int getYear(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.YEAR);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勬湀
+     * @param date
+     * @return
+     */
+    public static int getMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.MONTH) + 1;
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勬棩
+     * @param date
+     * @return
+     */
+    public static int getDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.DATE);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勬椂
+     * @param date
+     * @return
+     */
+    public static int getHour(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.HOUR);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勫垎绉�
+     * @param date
+     * @return
+     */
+    public static int getMinute(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.MINUTE);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勭
+     * @param date
+     * @return
+     */
+    public static int getSecond(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.SECOND);
+    }
+
+    /**
+     * 鑾峰彇鏄熸湡鍑�
+     * @param date
+     * @return
+     */
+    public static int getWeekDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+        return dayOfWeek-1;
+    }
+
+    /**
+     * 鑾峰彇鍝竴骞村叡鏈夊灏戝懆
+     * @param year
+     * @return
+     */
+    public static int getMaxWeekNumOfYear(int year) {
+        Calendar c = new GregorianCalendar();
+        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
+        return getWeekNumOfYear(c.getTime());
+    }
+
+    /**
+     * 鍙栧緱鏌愬ぉ鏄竴骞翠腑鐨勫灏戝懆
+     * @param date
+     * @return
+     */
+    public static int getWeekNumOfYear(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setMinimalDaysInFirstWeek(7);
+        c.setTime(date);
+        return c.get(Calendar.WEEK_OF_YEAR);
+    }
+
+    /**
+     * 鍙栧緱鏌愬ぉ鎵�鍦ㄥ懆鐨勭涓�澶�
+     * @param date
+     * @return
+     */
+    public static Date getFirstDayOfWeek(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setTime(date);
+        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
+        return c.getTime();
+    }
+
+    /**
+     * 鍙栧緱鏌愬ぉ鎵�鍦ㄥ懆鐨勬渶鍚庝竴澶�
+     * @param date
+     * @return
+     */
+    public static Date getLastDayOfWeek(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setTime(date);
+        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
+        return c.getTime();
+    }
+
+    /**
+     * 鍙栧緱鏌愬勾鏌愬懆鐨勭涓�澶� 瀵逛簬浜ゅ弶:2008-12-29鍒�2009-01-04灞炰簬2008骞寸殑鏈�鍚庝竴鍛�,2009-01-05涓�2009骞寸涓�鍛ㄧ殑绗竴澶�
+     * @param year
+     * @param week
+     * @return
+     */
+    public static Date getFirstDayOfWeek(int year, int week) {
+        Calendar calFirst = Calendar.getInstance();
+        calFirst.set(year, 0, 7);
+        Date firstDate = getFirstDayOfWeek(calFirst.getTime());
+
+        Calendar firstDateCal = Calendar.getInstance();
+        firstDateCal.setTime(firstDate);
+
+        Calendar c = new GregorianCalendar();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, Calendar.JANUARY);
+        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
+
+        Calendar cal = (GregorianCalendar) c.clone();
+        cal.add(Calendar.DATE, (week - 1) * 7);
+        firstDate = getFirstDayOfWeek(cal.getTime());
+
+        return firstDate;
+    }
+
+    /**
+     * 鍙栧緱鏌愬勾鏌愬懆鐨勬渶鍚庝竴澶� 瀵逛簬浜ゅ弶:2008-12-29鍒�2009-01-04灞炰簬2008骞寸殑鏈�鍚庝竴鍛�, 2009-01-04涓�
+     * 2008骞存渶鍚庝竴鍛ㄧ殑鏈�鍚庝竴澶�
+     * @param year
+     * @param week
+     * @return
+     */
+    public static Date getLastDayOfWeek(int year, int week) {
+        Calendar calLast = Calendar.getInstance();
+        calLast.set(year, 0, 7);
+        Date firstDate = getLastDayOfWeek(calLast.getTime());
+
+        Calendar firstDateCal = Calendar.getInstance();
+        firstDateCal.setTime(firstDate);
+
+        Calendar c = new GregorianCalendar();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, Calendar.JANUARY);
+        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
+
+        Calendar cal = (GregorianCalendar) c.clone();
+        cal.add(Calendar.DATE, (week - 1) * 7);
+        Date lastDate = getLastDayOfWeek(cal.getTime());
+
+        return lastDate;
+    }
+
+
+    private static Date add(Date date, int calendarField, int amount) {
+        if (date == null) {
+            throw new IllegalArgumentException("The date must not be null");
+        } else {
+            Calendar c = Calendar.getInstance();
+            c.setTime(date);
+            c.add(calendarField, amount);
+            return c.getTime();
+        }
+    }
+
+    /*
+     * 1鍒欎唬琛ㄧ殑鏄骞翠唤鎿嶄綔锛� 2鏄鏈堜唤鎿嶄綔锛� 3鏄鏄熸湡鎿嶄綔锛� 5鏄鏃ユ湡鎿嶄綔锛� 11鏄灏忔椂鎿嶄綔锛� 12鏄鍒嗛挓鎿嶄綔锛� 13鏄绉掓搷浣滐紝
+     * 14鏄姣鎿嶄綔
+     */
+
+    /**
+     * 澧炲姞骞�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addYears(Date date, int amount) {
+        return add(date, 1, amount);
+    }
+
+    /**
+     * 澧炲姞鏈�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addMonths(Date date, int amount) {
+        return add(date, 2, amount);
+    }
+
+    /**
+     * 澧炲姞鍛�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addWeeks(Date date, int amount) {
+        return add(date, 3, amount);
+    }
+
+    /**
+     * 澧炲姞澶�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addDays(Date date, int amount) {
+        return add(date, 5, amount);
+    }
+
+    /**
+     * 澧炲姞鏃�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addHours(Date date, int amount) {
+        return add(date, 11, amount);
+    }
+
+    /**
+     * 澧炲姞鍒�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addMinutes(Date date, int amount) {
+        return add(date, 12, amount);
+    }
+
+    /**
+     * 澧炲姞绉�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addSeconds(Date date, int amount) {
+        return add(date, 13, amount);
+    }
+
+    /**
+     * 澧炲姞姣
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addMilliseconds(Date date, int amount) {
+        return add(date, 14, amount);
+    }
+
+
+
+    /**
+     * time宸�
+     * @param before
+     * @param after
+     * @return
+     */
+    public static long diffTimes(Date before, Date after){
+        return after.getTime() - before.getTime();
+    }
+
+    /**
+     * 绉掑樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static long diffSecond(Date before, Date after){
+        return (after.getTime() - before.getTime())/1000;
+    }
+
+    /**
+     * 鍒嗙宸�
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffMinute(Date before, Date after){
+        return (int)(after.getTime() - before.getTime())/1000/60;
+    }
+
+    /**
+     * 鏃跺樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffHour(Date before, Date after){
+        return (int)(after.getTime() - before.getTime())/1000/60/60;
+    }
+
+    /**
+     * 澶╂暟宸�
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffDay(Date before, Date after) {
+        return Integer.parseInt(String.valueOf(((after.getTime() - before.getTime()) / 86400000)));
+    }
+
+    /**
+     * 鏈堝樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffMonth(Date before, Date after){
+        int monthAll=0;
+        int yearsX = diffYear(before,after);
+        Calendar c1 = Calendar.getInstance();
+        Calendar c2 = Calendar.getInstance();
+        c1.setTime(before);
+        c2.setTime(after);
+        int monthsX = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
+        monthAll=yearsX*12+monthsX;
+        int daysX =c2.get(Calendar.DATE) - c1.get(Calendar.DATE);
+        if(daysX>0){
+            monthAll=monthAll+1;
+        }
+        return monthAll;
+    }
+
+    /**
+     * 骞村樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffYear(Date before, Date after) {
+        return getYear(after) - getYear(before);
+    }
+
+    /**
+     * 璁剧疆23:59:59
+     * @param date
+     * @return
+     */
+    public static Date setEndDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        return calendar.getTime();
+    }
+
+    /**
+     * 璁剧疆00:00:00
+     * @param date
+     * @return
+     */
+    public static Date setStartDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 00);
+        calendar.set(Calendar.MINUTE, 00);
+        calendar.set(Calendar.SECOND, 00);
+        return calendar.getTime();
+    }
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/EnumVO.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/EnumVO.java
new file mode 100644
index 0000000..012f475
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/EnumVO.java
@@ -0,0 +1,25 @@
+package com.vci.ubcs.code.utils;
+
+public class EnumVO{
+    /***
+     *
+     */
+    private String enumText;
+    private String enumValue;
+
+    public String getEnumText() {
+        return enumText;
+    }
+
+    public void setEnumText(String enumText) {
+        this.enumText = enumText;
+    }
+
+    public String getEnumValue() {
+        return enumValue;
+    }
+
+    public void setEnumValue(String enumValue) {
+        this.enumValue = enumValue;
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/HttpUtils.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/HttpUtils.java
new file mode 100644
index 0000000..dd06779
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/HttpUtils.java
@@ -0,0 +1,194 @@
+package com.vci.ubcs.code.utils;
+
+import org.springframework.http.*;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * http璇锋眰宸ュ叿绫�
+ *
+ * @since 2020-03-25
+ */
+public class HttpUtils {
+
+    //Content-Type鐨刱ey
+    public static String CONTENT_TYPE = "Content-Type";
+    //json鏁版嵁
+    public static String CONTENT_TYPE_JSON = MediaType.APPLICATION_JSON_VALUE;
+    public static String CONTENT_TYPE_JSON_UTF8 = MediaType.APPLICATION_JSON_UTF8_VALUE;
+
+    //琛ㄥ崟鏍煎紡,榛樿
+    public static String CONTENT_TYPE_TEXT = MediaType.APPLICATION_FORM_URLENCODED_VALUE;
+
+    /**
+     * get璇锋眰
+     *
+     * @param url
+     * @return
+     */
+    public static String get(String url) {
+        return get(url, null);
+    }
+
+    /**
+     * get璇锋眰
+     *
+     * @param url
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String get(String url, MultiValueMap<String, String> headers) {
+        return request(url, null, headers, HttpMethod.GET);
+    }
+
+    /**
+     * post璇锋眰
+     *
+     * @param url
+     * @param params 璇锋眰鍙傛暟
+     * @return
+     */
+    public static String post(String url, MultiValueMap<String, String> params) {
+        return post(url, params, null);
+    }
+
+    /**
+     * post璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
+        return request(url, params, headers, HttpMethod.POST);
+    }
+
+    /**
+     * put璇锋眰
+     *
+     * @param url
+     * @param params 璇锋眰鍙傛暟
+     * @return
+     */
+    public static String put(String url, MultiValueMap<String, String> params) {
+        return put(url, params, null);
+    }
+
+    /**
+     * put璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
+        return request(url, params, headers, HttpMethod.PUT);
+    }
+
+    /**
+     * delete璇锋眰
+     *
+     * @param url
+     * @param params 璇锋眰鍙傛暟
+     * @return
+     */
+    public static String delete(String url, MultiValueMap<String, String> params) {
+        return delete(url, params, null);
+    }
+
+    /**
+     * delete璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
+        return request(url, params, headers, HttpMethod.DELETE);
+    }
+
+    /**
+     * 琛ㄥ崟璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @param method  璇锋眰鏂瑰紡
+     * @return
+     */
+    public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
+        if (params == null) {
+            params = new LinkedMultiValueMap<>();
+        }
+        return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
+    }
+
+    /**
+     * http璇锋眰
+     *
+     * @param url
+     * @param params    璇锋眰鍙傛暟
+     * @param headers   璇锋眰澶�
+     * @param method    璇锋眰鏂瑰紡
+     * @param mediaType 鍙傛暟绫诲瀷
+     * @return
+     */
+    public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
+        if (url == null || url.trim().isEmpty()) {
+            return null;
+        }
+        RestTemplate client = new RestTemplate();
+        // header
+        HttpHeaders httpHeaders = new HttpHeaders();
+        if (headers != null) {
+            httpHeaders.addAll(headers);
+        }
+        // 鎻愪氦鏂瑰紡锛氳〃鍗曘�乯son
+        httpHeaders.setContentType(mediaType);
+        HttpEntity<Object> httpEntity = new HttpEntity(params, httpHeaders);
+        ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
+        return response.getBody();
+    }
+
+    public static MultiValueMap<String, String> set_params_headers(String key,String value,MultiValueMap<String, String> map){
+        if(map==null){
+            map = new LinkedMultiValueMap<>();
+        }
+        map.add(key,value);
+        return map;
+    }
+    /**
+     * 鑾峰彇ip
+     * @param request
+     * @return
+     */
+    public static String getIpAddressFromRequest(HttpServletRequest request){
+        String ip = request.getHeader("X-Forwarded-For");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") >-1) {
+            //0:0:0:0:0:0:0:1鏄湰鏈哄湪璁块棶
+            ip = "127.0.0.1";
+        }
+        return ip;
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Json2XmlUtil.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Json2XmlUtil.java
new file mode 100644
index 0000000..6cb301e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Json2XmlUtil.java
@@ -0,0 +1,121 @@
+package com.vci.ubcs.code.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import de.odysseus.staxon.json.JsonXMLConfig;
+import de.odysseus.staxon.json.JsonXMLConfigBuilder;
+import de.odysseus.staxon.json.JsonXMLOutputFactory;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLEventWriter;
+import javax.xml.stream.XMLInputFactory;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class Json2XmlUtil {
+
+    /**
+     * @Description: xml convert to json
+     */
+    public static String XmlToJson(String xmlString){
+
+        StringReader input = new StringReader(xmlString);
+        StringWriter output = new StringWriter();
+        try {
+            JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(true).autoPrimitive(true).prettyPrint(true).build();
+            XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(input);
+            XMLEventWriter writer = new JsonXMLOutputFactory(config).createXMLEventWriter(output);
+            writer.add(reader);
+            reader.close();
+            writer.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                output.close();
+                input.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return output.toString();
+    }
+
+    public static String replaceBlank(String jsonString) {
+        if(StringUtils.isEmpty(jsonString)){
+            return jsonString;
+        }
+        Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+        Matcher m = p.matcher(jsonString);
+        String dest = m.replaceAll("");
+        return dest;
+    }
+
+    public static String jsontoxml(JSONObject jo, String gt) {
+        StringBuffer xmlStr = new StringBuffer();
+        Iterator<Map.Entry<String, Object>> iter = jo.entrySet().iterator();
+        while (iter.hasNext()) {
+            Map.Entry<String, Object> entry = (Map.Entry<String, Object>) iter.next();
+            String key = entry.getKey().toString();
+            String val = entry.getValue().toString();
+            //鍊奸潪绌�
+            if (StringUtils.isNotEmpty(val)) {
+                //JSON瀵硅薄
+                if (val.substring(0, 1).equals("{")) {
+                    xmlStr.append(gt);
+                    xmlStr.append("<");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                    xmlStr.append(jsontoxml(JSONObject.parseObject(val), gt + ""));
+                    xmlStr.append(gt);
+                    xmlStr.append("</");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                }
+                //JSON鏁扮粍
+                else if (val.substring(0, 1).equals("[")) {
+                    JSONArray ja = JSONArray.parseArray(val);
+                    for (int i = 0; i < ja.size(); i++) {
+                        JSONObject jo2 = new JSONObject();
+                        jo2.put(key, ja.getJSONObject(i));
+                        xmlStr.append(jsontoxml(jo2, gt + ""));
+                    }
+                }
+                //JSON鍊�
+                else {
+                    xmlStr.append(gt);
+                    xmlStr.append("<");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                    xmlStr.append(val);
+                    xmlStr.append("</");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                }
+            }
+            //鍊间负绌�
+            else{
+                xmlStr.append(gt);
+                xmlStr.append("<");
+                xmlStr.append(key);
+                xmlStr.append(">");
+                xmlStr.append("");
+                xmlStr.append("</");
+                xmlStr.append(key);
+                xmlStr.append(">");
+            }
+        }
+        return xmlStr.toString();
+    }
+
+    public static String jsonToXml(JSONObject jo0) {
+        String xml = jsontoxml(jo0, "");
+        return xml;
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/PatternUtil.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/PatternUtil.java
new file mode 100644
index 0000000..ddf0feb
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/PatternUtil.java
@@ -0,0 +1,49 @@
+package com.vci.ubcs.code.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class PatternUtil {
+
+    //*${xxx}*
+    public static Pattern dynamic = Pattern.compile(".*\\$\\{([a-z]+)\\}.*");
+    public static Pattern dynamicLimitCount = Pattern.compile("\\$\\{([a-z]+)\\}");
+    /**
+     * 鍒ゆ柇鍐呭涓槸鍚﹀寘鍚姩鎬佸弬鏁�(${key}褰㈠紡鐨�)
+     *
+     * @param content 瑕佸垽鏂殑鍐呭
+     * @return
+     */
+    public static boolean isContainsDynamicParameter(String content) {
+        if(StringUtils.isBlank(content)){
+            return false;
+        }
+        return dynamic.matcher(content).matches();
+    }
+
+    /**
+     * 鎸夌収鍔ㄦ�佸唴瀹圭殑鍙傛暟鍑虹幇椤哄簭,灏嗗弬鏁版斁鍒癓ist涓�
+     *
+     * @param content
+     * @return
+     */
+    public static List<String> getKeyListByContent(String content) {
+        if(StringUtils.isBlank(content)){
+            return new ArrayList<>();
+        }
+        Set<String> paramSet = new LinkedHashSet<>();
+        Matcher m = dynamicLimitCount.matcher(content);
+        while (m.find()) {
+            paramSet.add(m.group(1));
+        }
+        return new ArrayList<>(paramSet);
+    }
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Pro.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Pro.java
new file mode 100644
index 0000000..a58534f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Pro.java
@@ -0,0 +1,40 @@
+package com.vci.ubcs.code.utils;
+
+public class Pro{
+    public String key;
+    public String mean;
+    public String value;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getMean() {
+        return mean;
+    }
+
+    public void setMean(String mean) {
+        this.mean = mean;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "Pro{" +
+                "key='" + key + '\'' +
+                ", mean='" + mean + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsAxis2ClientUtil.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsAxis2ClientUtil.java
new file mode 100644
index 0000000..96f9881
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsAxis2ClientUtil.java
@@ -0,0 +1,59 @@
+package com.vci.ubcs.code.utils;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.commons.lang3.StringUtils;
+
+public class WsAxis2ClientUtil {
+
+    /**
+     * axis2璋冪敤瀹㈡埛绔�
+     *
+     * @param url                   璇锋眰鏈嶅姟鍦板潃
+     * @param nameSpace             鍛藉悕绌洪棿
+     * @param method                鏂规硶鍚�
+     * @param tarName                鍙傛暟鍚嶇О
+     * @param xmlData                璇锋眰鎶ユ枃
+     * @param timeOutInMilliSeconds 瓒呮椂鏃堕棿
+     * @return String 绫诲瀷鐨勫搷搴旀姤鎭�
+     */
+    public static String sendMsg(String url, String nameSpace,String soapAction, String method, String tarName, String xmlData, long timeOutInMilliSeconds) throws Exception {
+        ServiceClient serviceClient = new ServiceClient();
+        Options option = new Options();
+        option.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        option.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+        // 鍊间负targetNamespace+methodName
+        if(StringUtils.isEmpty(soapAction)){
+            soapAction = nameSpace+method;
+        }
+        option.setAction(soapAction);
+
+        EndpointReference epfs = new EndpointReference(url);
+        option.setTo(epfs);
+        serviceClient.setOptions(option);
+
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace namespaceOM = fac.createOMNamespace(nameSpace, "");
+        OMElement element = fac.createOMElement(method, namespaceOM);
+        OMElement theCityCode = fac.createOMElement(tarName, namespaceOM);
+        theCityCode.setText(xmlData);
+        element.addChild(theCityCode);
+//        OMElement theUserID = fac.createOMElement("theUserID ", namespace);
+//        theUserID.setText("");
+//        element.addChild(theUserID);
+
+        OMElement resultOM = serviceClient.sendReceive(element);
+
+        String result = resultOM.getFirstElement().getText();
+        System.out.println(result);
+        return result;
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsErpClientUtil.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsErpClientUtil.java
new file mode 100644
index 0000000..152bd8d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsErpClientUtil.java
@@ -0,0 +1,59 @@
+package com.vci.ubcs.code.utils;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.commons.lang3.StringUtils;
+
+public class WsErpClientUtil {
+
+    /**
+     * axis2璋冪敤瀹㈡埛绔�
+     *
+     * @param url                   璇锋眰鏈嶅姟鍦板潃
+     * @param nameSpace             鍛藉悕绌洪棿
+     * @param method                鏂规硶鍚�
+     * @param tarName                鍙傛暟鍚嶇О
+     * @param xmlData                璇锋眰鎶ユ枃
+     * @param timeOutInMilliSeconds 瓒呮椂鏃堕棿
+     * @return String 绫诲瀷鐨勫搷搴旀姤鎭�
+     */
+    public static String sendMsg(String url, String nameSpace,String soapAction, String method, String tarName, String xmlData, long timeOutInMilliSeconds) throws Exception {
+        ServiceClient serviceClient = new ServiceClient();
+        Options option = new Options();
+        option.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        option.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+        // 鍊间负targetNamespace+methodName
+        if(StringUtils.isEmpty(soapAction)){
+            soapAction = nameSpace+method;
+        }
+        option.setAction(soapAction);
+
+        EndpointReference epfs = new EndpointReference(url);
+        option.setTo(epfs);
+        serviceClient.setOptions(option);
+
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace namespaceOM = fac.createOMNamespace(nameSpace, "");
+        OMElement element = fac.createOMElement(method, namespaceOM);
+        OMElement theCityCode = fac.createOMElement(tarName, namespaceOM);
+        theCityCode.setText(xmlData);
+        element.addChild(theCityCode);
+//        OMElement theUserID = fac.createOMElement("theUserID ", namespace);
+//        theUserID.setText("");
+//        element.addChild(theUserID);
+
+        OMElement resultOM = serviceClient.sendReceive(element);
+
+        String result = resultOM.getFirstElement().getText();
+        System.out.println(result);
+        return result;
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlData.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlData.java
new file mode 100644
index 0000000..00e315b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlData.java
@@ -0,0 +1,143 @@
+package com.vci.ubcs.code.utils;
+
+import java.util.List;
+
+public class XmlData{
+    public String unique;
+    public String type;//鍒嗙被缂栧彿
+    public String sendtype;//鎺ㄩ�佹暟鎹被鍨�
+    public String state;//鍏跺疄灏辨槸datacode锛屼篃鏄痗ode
+    public String msg;//鍏跺疄灏辨槸datamsg
+    public String num;
+    public String namepath;
+    public String name;
+    public String idpath;
+    public String id;
+    public Integer orderNum;
+    public String parentId;
+    public List<Pro> pros;
+
+
+    public String getUnique() {
+        return unique;
+    }
+
+    public void setUnique(String unique) {
+        this.unique = unique;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public String getNum() {
+        return num;
+    }
+
+    public void setNum(String num) {
+        this.num = num;
+    }
+
+    public String getNamepath() {
+        return namepath;
+    }
+
+    public void setNamepath(String namepath) {
+        this.namepath = namepath;
+    }
+
+    public String getIdpath() {
+        return idpath;
+    }
+
+    public void setIdpath(String idpath) {
+        this.idpath = idpath;
+    }
+
+    public List<Pro> getPros() {
+        return pros;
+    }
+
+    public String getSendtype() {
+        return sendtype;
+    }
+
+    public void setSendtype(String sendtype) {
+        this.sendtype = sendtype;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setPros(List<Pro> pros) {
+        this.pros = pros;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public int getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(int orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    @Override
+    public String toString() {
+        return "XmlData{" +
+                "unique='" + unique + '\'' +
+                ", type='" + type + '\'' +
+                ", sendtype='" + sendtype + '\'' +
+                ", state='" + state + '\'' +
+                ", msg='" + msg + '\'' +
+                ", num='" + num + '\'' +
+                ", namepath='" + namepath + '\'' +
+                ", name='" + name + '\'' +
+                ", idpath='" + idpath + '\'' +
+                ", id='" + id + '\'' +
+                ", orderNum='" + orderNum + '\'' +
+                ", parentId='" + parentId + '\'' +
+                ", pros=" + pros +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlUtil.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlUtil.java
new file mode 100644
index 0000000..e8980df
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlUtil.java
@@ -0,0 +1,770 @@
+package com.vci.ubcs.code.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.dom4j.Attribute;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.ubcs.code.constant.MdmDuckingConstant.*;
+
+
+public class XmlUtil {
+    /*
+    绗竴鐗堟湰
+     */
+    public static Map<String,Object> readPreXml_bak(String xmlData) throws Exception{
+
+        Map<String,Object> datasMap = new HashMap<String,Object>();
+
+        Document document = DocumentHelper.parseText(xmlData);
+        Element datas_element = document.getRootElement();
+        Attribute datas_systemid_attr = datas_element.attribute(XML_SYSTEMID);
+        String systemid = datas_systemid_attr==null?"":datas_systemid_attr.getValue();//systemid
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<Map<String,Object>> dataMapList = new ArrayList<Map<String,Object>>();
+        for (Element data_element:data_elements){
+            Map<String,Object> dataMap = new HashMap<String,Object>();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String type = data_type_attr==null?"":data_type_attr.getValue();//type
+
+            Element pro_elements = data_element.element(XML_PROS);
+            List<Element> attrs_elements = pro_elements.elements(XML_ATTR);
+
+            List<Map<String,String>> attrList = new ArrayList<Map<String,String>>();
+            for (Element attr_element:attrs_elements){
+                Map<String,String> attrMap = new HashMap<String,String>();
+
+                Attribute attr_key_attr = attr_element.attribute(XML_KEY);
+                String attr_key = attr_key_attr==null?"":attr_key_attr.getValue();//key
+
+                Attribute attr_mean_attr = attr_element.attribute(XML_MEAN);
+                String attr_mean = attr_mean_attr==null?"":attr_mean_attr.getValue();//mean
+
+                String attr_text = attr_element.getText();
+
+                attrMap.put(XML_KEY,attr_key);
+                attrMap.put(XML_MEAN,attr_mean);
+                attrMap.put(XML_TEXT,attr_text);
+                attrList.add(attrMap);
+            }
+            dataMap.put(XML_UNIQUE,unique);
+            dataMap.put(XML_TYPE,type);
+            dataMap.put(XML_ATTR,attrList);
+
+            dataMapList.add(dataMap);
+
+            datasMap.put(XML_SYSTEMID,systemid);
+            datasMap.put(XML_DATAS,dataMapList);
+        }
+        return datasMap;
+    }
+
+    public static String writePreBackXmlData_bak(String code,String msg,List<XmlData> xmlDataList){
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element root = document.addElement(XML_DATAS);
+            root.addAttribute(XML_CODE, code);
+            root.addAttribute(XML_MSG, msg);
+            if(xmlDataList!=null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if(xmlData==null){
+                        continue;
+                    }
+                    Element data_element = root.addElement(XML_DATA);
+                    data_element.addAttribute(XML_UNIQUE, xmlData.getUnique());
+                    data_element.addAttribute(XML_STATE, xmlData.getState());
+                    data_element.addAttribute(XML_MSG, xmlData.getMsg());
+                    data_element.addAttribute(XML_NUM, xmlData.getNum());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString=document.asXML();
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+        return xmlString;
+    }
+
+    /*
+    鏍规嵁閮ㄩ暱宸茬粡淇敼鐨勭涓�鐗�
+    <object>
+        <systemid>MPM</systemid>
+        <datas>
+            <data>
+                <unique>oa0001</unique>
+                <type>wupin</type>
+                <pros>
+                    <pro>
+                        <key>code01</key>
+                        <mean>鎵�灞炵粨鏋�</mean>
+                        <value>娓╁害璋冭妭鍣�1</value>
+                    </pro>
+                    <pro>
+                        <key>code02</key>
+                        <mean>涓昏鍔熻兘</mean>
+                        <value>瀵肩數杩炴帴1</value>
+                    </pro>
+                </pros>
+            </data>
+            <data>
+                <unique>oa0002</unique>
+                <type>wupin</type>
+                <pros>
+                    <pro>
+                        <key>code01</key>
+                        <mean>鎵�灞炵粨鏋�</mean>
+                        <value>娓╁害璋冭妭鍣�2</value>
+                    </pro>
+                    <pro>
+                        <key>code02</key>
+                        <mean>涓昏鍔熻兘</mean>
+                        <value>瀵肩數杩炴帴2</value>
+                    </pro>
+                </pros>
+            </data>
+        </datas>
+    </object>
+     */
+    public static Map<String,Object> readPreXml1(String xmlData) throws Exception{
+
+        Map<String,Object> datasMap = new HashMap<String,Object>();
+
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+        Element system_element = object_element.element(XML_SYSTEMID);
+        String systemid = system_element.getText();
+        Element datas_element = object_element.element(XML_DATAS);
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<Map<String,Object>> datasList = new ArrayList<Map<String,Object>>();
+        for (Element data_element:data_elements){
+            Map<String,Object> dataMap = new HashMap<String,Object>();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String type = data_type_attr==null?"":data_type_attr.getValue();//type
+
+            Element pros_elements = data_element.element(XML_PROS);
+            List<Element> pro_elements = pros_elements.elements(XML_PRO);
+
+            List<Map<String,String>> proList = new ArrayList<Map<String,String>>();
+            for (Element pro_element:pro_elements){
+                Map<String,String> proMap = new HashMap<String,String>();
+
+                Element pro_key_element = pro_element.element(XML_KEY);
+                String pro_key = pro_key_element==null?"":pro_key_element.getText();//key
+
+                Element pro_mean_element = pro_element.element(XML_MEAN);
+                String pro_mean = pro_mean_element==null?"":pro_mean_element.getText();//mean
+
+                String pro_text = pro_element.getText();
+
+                proMap.put(XML_KEY,pro_key);
+                proMap.put(XML_MEAN,pro_mean);
+                proMap.put(XML_TEXT,pro_text);
+                proList.add(proMap);
+            }
+            dataMap.put(XML_UNIQUE,unique);
+            dataMap.put(XML_TYPE,type);
+            dataMap.put(XML_PROS,proList);
+
+            datasList.add(dataMap);
+
+            datasMap.put(XML_SYSTEMID,systemid);
+            datasMap.put(XML_DATAS,datasList);
+        }
+        return datasMap;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+            <data>
+                <unique>oa0001</unique>
+                <datacode>200</datacode>
+                <datamsg>鏍规嵁鍥惧彿鏌ヨ缂栫爜鎴愬姛锛�</datamsg>
+                <num>OA-0002-01</num>
+            </data>
+            <data>
+                <unique>oa0002</unique>
+                <datacode>400</datacode>
+                <datamsg>鎺ユ敹鏁版嵁鎴愬姛锛�</datamsg>
+                <num/>
+            </data>
+            <data>
+                <unique>oa0003</unique>
+                <datacode>500</datacode>
+                <datamsg>鎺ユ敹鏁版嵁澶辫触锛屽弬鏁扮己灏憉nique锛�</datamsg>
+                <num/>
+            </data>
+        </datas>
+    </object>
+     */
+    public static String writePreBackXmlData1(String code,String msg,List<XmlData> xmlDataList){
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element code_element = object_element.addElement(XML_CODE);
+            code_element.setText(code);
+
+            Element msg_element = object_element.addElement(XML_MSG);
+            msg_element.setText(msg);
+
+            if(xmlDataList!=null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if(xmlData==null){
+                        continue;
+                    }
+                    Element data_element = object_element.addElement(XML_DATA);
+
+                    Element unique_element = data_element.addElement(XML_UNIQUE);
+                    unique_element.setText(xmlData.getUnique());
+
+                    Element datacode_element = data_element.addElement(XML_DATACODE);
+                    datacode_element.setText(xmlData.getState());
+
+                    Element datacmsg_element = data_element.addElement(XML_DATAMSG);
+                    datacmsg_element.setText(xmlData.getMsg());
+
+                    Element num_element = data_element.addElement(XML_NUM);
+                    num_element.setText(xmlData.getNum());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString=document.asXML();
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+        return xmlString;
+    }
+
+    /*
+    閮ㄩ暱浜茶嚜鍔ㄦ墜淇敼鐨勭増鏈�
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object systemid="MPM">
+        <datas>
+            <data unique="oa0001" type="wupin">
+                <props>
+                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�1" />
+                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩數杩炴帴1" />
+                </props>
+            </data>
+            <data unique="oa0002" type="wupin">
+                <props>
+                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�2" />
+                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩數杩炴帴2" />
+                </props>
+            </data>
+        </datas>
+    </object>
+     */
+    public static Map<String,Object> readPreXmlData(String xmlData) throws Exception{
+
+        Map<String,Object> datasMap = new HashMap<String,Object>();
+
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+
+        Attribute systemid_attr = object_element.attribute(XML_SYSTEMID);
+        String systemid = systemid_attr.getValue();
+
+        Element datas_element = object_element.element(XML_DATAS);
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<Map<String,Object>> datasList = new ArrayList<Map<String,Object>>();
+        for (Element data_element:data_elements){
+            Map<String,Object> dataMap = new HashMap<String,Object>();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String type = data_type_attr==null?"":data_type_attr.getValue();//type
+
+            Element pros_elements = data_element.element(XML_PROS);
+            List<Element> pro_elements = pros_elements.elements(XML_PRO);
+
+            List<Map<String,String>> proList = new ArrayList<Map<String,String>>();
+            for (Element pro_element:pro_elements){
+                Map<String,String> proMap = new HashMap<String,String>();
+
+                Attribute pro_key_attr = pro_element.attribute(XML_KEY);
+                String pro_key = pro_key_attr==null?"":pro_key_attr.getValue();//key
+
+                pro_key = pro_key.toLowerCase();//鍏ㄩ兘杞崲涓哄皬鍐�
+
+                Attribute pro_mean_attr = pro_element.attribute(XML_MEAN);
+                String pro_mean = pro_mean_attr==null?"":pro_mean_attr.getValue();//mean
+
+                Attribute pro_value_attr = pro_element.attribute(XML_VALUE);
+                String pro_value = pro_value_attr==null?"":pro_value_attr.getValue();//mean
+
+                proMap.put(XML_KEY,pro_key);
+                proMap.put(XML_MEAN,pro_mean);
+                proMap.put(XML_TEXT,pro_value);
+                proList.add(proMap);
+            }
+            dataMap.put(XML_UNIQUE,unique);
+            dataMap.put(XML_TYPE,type);
+            dataMap.put(XML_PROS,proList);
+
+            datasList.add(dataMap);
+
+            datasMap.put(XML_SYSTEMID,systemid);
+            datasMap.put(XML_DATAS,datasList);
+        }
+        return datasMap;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+            <data unique="oa0001" state="200" num="OA-0002-01">
+                <msg>鏍规嵁鍥惧彿鏌ヨ缂栫爜鎴愬姛锛�</msg>
+            </data>
+            <data unique="oa0002" state="400" num="">
+                <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
+            </data>
+        </datas>
+    </object>
+     */
+    public static String writePreBackXmlData(String code,String msg,List<XmlData> xmlDataList){
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element code_element = object_element.addElement(XML_CODE);
+            code_element.setText(code);
+
+            Element msg_element = object_element.addElement(XML_MSG);
+            msg_element.setText(msg);
+
+            Element datas_element = object_element.addElement(XML_DATAS);
+
+            if(xmlDataList!=null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if(xmlData==null){
+                        continue;
+                    }
+                    Element data_element = datas_element.addElement(XML_DATA);
+
+                    data_element.addAttribute(XML_UNIQUE,xmlData.getUnique());
+                    data_element.addAttribute(XML_STATE,xmlData.getState());
+                    data_element.addAttribute(XML_NUM,xmlData.getNum());
+
+                    Element datamsg_element = data_element.addElement(XML_MSG);
+                    datamsg_element.setText(xmlData.getMsg());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString=document.asXML();
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+        return xmlString;
+    }
+
+    /*
+    涓绘暟鎹帹閫佺殑xmlData鏍煎紡
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <datas>
+            <data unique="oa0002" type="wupin" state="3" num="01020000003">
+                <namepath>鐗╁搧#鎴愬搧鍙婇檮浠�</namepath>
+                <idpath>wuping#cpjfj</idpath>
+                <props>
+                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�2" />
+                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩嚎杩炴帴2" />
+                </props>
+            </data>
+        </datas>
+    </object>
+     */
+    public static String writeSendXmlData(List<XmlData> xmlDataList) {
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element datas_element = object_element.addElement(XML_DATAS);
+
+            if (xmlDataList != null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if (xmlData == null) {
+                        continue;
+                    }
+                    Element data_element = datas_element.addElement(XML_DATA);
+                    data_element.addAttribute(XML_UNIQUE, xmlData.getUnique());
+                    data_element.addAttribute(XML_TYPE, xmlData.getType());
+                    data_element.addAttribute(XML_STATE, xmlData.getSendtype());
+
+                    Element pros_element = data_element.addElement(XML_PROS);
+                    List<Pro> pros = xmlData.getPros();
+                    String lcstatue = null;
+                    String id = null;
+                    for (Pro pro : pros) {
+                        if("lcstatus".equals(pro.getKey())){
+                            lcstatue = pro.getValue();
+                        }
+                        if("id".equals(pro.getKey())){
+                            id = pro.getValue();
+                        }
+                        Element pro_element = pros_element.addElement(XML_PRO);
+                        pro_element.addAttribute(XML_KEY, pro.getKey());
+                        pro_element.addAttribute(XML_VALUE, pro.getValue());
+                        pro_element.addAttribute(XML_MEAN, pro.getKey());
+                    }
+                    if(StringUtils.isNotEmpty(lcstatue)){
+                        data_element.addAttribute(XML_STATE, lcstatue);
+                    }
+                    if(StringUtils.isNotEmpty(id)){
+                        data_element.addAttribute(XML_NUM, id);
+                    }
+
+                    Element pro_namepath_element = data_element.addElement(XML_NAMEPATH);
+                    pro_namepath_element.setText(xmlData.getNamepath());
+
+                    Element pro_idpath_element = data_element.addElement(XML_IDPATH);
+                    pro_idpath_element.setText(xmlData.getIdpath());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString = document.asXML();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return xmlString;
+    }
+
+    /*
+    鍒嗙被鏁版嵁鎺ㄩ�佺殑xmlData鏍煎紡
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <datas>
+            <data>
+                <id>shoutao</id>
+                <idpath>wuping#shoutao</idpath>
+                <name>鎵嬪</name>
+                <namepath>鐗╁搧#鎵嬪</namepath>
+                <orderNum>2</orderNum>
+                <parentId>wuping</parentId>
+            </data>
+        </datas>
+     </object>
+     */
+    public static String writeSendXmlData_classify(List<XmlData> xmlDataList) {
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element datas_element = object_element.addElement(XML_DATAS);
+
+            if (xmlDataList != null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if (xmlData == null) {
+                        continue;
+                    }
+                    Element data_element = datas_element.addElement(XML_DATA);
+
+                    Element pro_name_element = data_element.addElement(XML_NAME);
+                    pro_name_element.setText(xmlData.getName());
+
+                    Element pro_namepath_element = data_element.addElement(XML_NAMEPATH);
+                    pro_namepath_element.setText(xmlData.getNamepath());
+
+                    Element pro_id_element = data_element.addElement(XML_ID);
+                    pro_id_element.setText(xmlData.getId());
+
+                    Element pro_idpath_element = data_element.addElement(XML_IDPATH);
+                    pro_idpath_element.setText(xmlData.getIdpath());
+
+                    Element pro_ordernum_element = data_element.addElement(XML_ORDERNUM);
+                    pro_ordernum_element.setText(xmlData.getOrderNum()+"");
+
+                    Element pro_parentid_element = data_element.addElement(XML_PARENTID);
+                    pro_parentid_element.setText(xmlData.getParentId()==null?"":xmlData.getParentId());
+
+                    Element pro_state_element = data_element.addElement(XML_STATE);
+                    pro_state_element.setText(xmlData.getSendtype());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString = document.asXML();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return xmlString;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+        <data unique="oa0001" state="200" num="01020000001">
+            <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
+        </data>
+        </datas>
+    </object>
+     */
+    public static BackXml readSendXmlData(String xmlData) throws Exception{
+
+        BackXml backXml = new BackXml();
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+
+        Element code_element = object_element.element(XML_CODE);
+        String code = code_element.getText();
+
+        Element msg_element = object_element.element(XML_MSG);
+        String msg = msg_element.getText();
+
+        Element datas_element = object_element.element(XML_DATAS);
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<XmlData> datasList = new ArrayList<XmlData>();
+        for (Element data_element:data_elements){
+            XmlData xmlData_return = new XmlData();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_state_attr = data_element.attribute(XML_STATE);
+            String state = data_state_attr==null?"":data_state_attr.getValue();//state
+
+            Attribute data_num_attr = data_element.attribute(XML_NUM);
+            String num = data_num_attr==null?"":data_num_attr.getValue();//num
+
+            Element data_msg_elements = data_element.element(XML_MSG);
+            String datamsg = data_msg_elements==null?"":data_msg_elements.getText();//msg
+
+            xmlData_return.setUnique(unique);
+            xmlData_return.setState(state);
+            xmlData_return.setNum(num);
+            xmlData_return.setMsg(datamsg);
+            datasList.add(xmlData_return);
+        }
+        backXml.setState(code);
+        backXml.setMsg(msg);
+        backXml.setDatas(datasList);
+        return backXml;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>鎺ㄩ�佹垚鍔�</msg>
+        <code>200</code>
+        <datas>
+            <data>
+                <idpath>wuping#shoutao</idpath>
+                <state>true</state>
+            </data>
+            <data>
+                <idpath>wuping#fanghufu</idpath>
+                <state>false</state>
+            </data>
+        </datas>
+    </object>
+     */
+    public static BackXml readSendXmlData_classify(String xmlData) throws Exception{
+
+        BackXml backXml = new BackXml();
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+
+        Element code_element = object_element.element(XML_CODE);
+        String code = code_element.getText();
+
+        Element msg_element = object_element.element(XML_MSG);
+        String msg = msg_element.getText();
+
+        Element datas_element = object_element.element(XML_DATAS);
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<XmlData> datasList = new ArrayList<XmlData>();
+        for (Element data_element:data_elements){
+            XmlData xmlData_return = new XmlData();
+
+            Element data_idpath_elements = data_element.element(XML_IDPATH);
+            String idpath = data_idpath_elements.getText();
+
+            Element data_state_elements = data_element.element(XML_STATE);
+            String state = data_state_elements.getText();
+
+            Element xml_msg_elements = data_element.element(XML_MSG);
+            String xml_msg = xml_msg_elements.getText();
+
+            xmlData_return.setIdpath(idpath);
+            xmlData_return.setMsg(xml_msg);
+            xmlData_return.setState(state);
+
+            datasList.add(xmlData_return);
+        }
+        backXml.setState(code);
+        backXml.setMsg(msg);
+        backXml.setDatas(datasList);
+        return backXml;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+        <data unique="oa0001" state="200" num="01020000001">
+            <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
+        </data>
+        </datas>
+    </object>
+     */
+    public static BackXml readSendJsonData(String jsonData) throws Exception{
+
+        BackXml backXml = new BackXml();
+        JSONObject json_root = JSONObject.parseObject(jsonData);
+        String code = json_root.getString(XML_CODE);
+        String msg = json_root.getString(XML_MSG);
+        Object datas_obj = json_root.get(XML_DATAS);
+
+        List<XmlData> datasList = new ArrayList<XmlData>();
+        if(datas_obj!=null){
+            JSONArray datas_arr = (JSONArray)datas_obj;
+            for (Object data_obj:datas_arr){
+                XmlData xmlData_return = new XmlData();
+
+                JSONObject data_json = (JSONObject)data_obj;
+                String unique = data_json.getString(XML_UNIQUE);
+                String state = data_json.getString(XML_STATE);
+                String num = data_json.getString(XML_NUM);
+                String datamsg = data_json.getString(XML_MSG);
+
+                xmlData_return.setUnique(unique);
+                xmlData_return.setState(state);
+                xmlData_return.setNum(num);
+                xmlData_return.setMsg(datamsg);
+                datasList.add(xmlData_return);
+            }
+        }
+
+        backXml.setState(code);
+        backXml.setMsg(msg);
+        backXml.setDatas(datasList);
+        return backXml;
+    }
+
+    //璇诲彇鏁版嵁杞崲xml鏁版嵁涓簃ap
+    /*
+<?xml version="1.0" encoding="UTF-8"?>
+<object>
+<datas>
+<data type="wupin">
+<props>
+<prop key="materialtype">
+<prop_tran mdmkey="1001" mdmvalue="鏉愭枡" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1002" mdmvalue="鎴愬搧" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1003" mdmvalue="鏈虹墿鏂�" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1004" mdmvalue="缁间繚" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1005" mdmvalue="璧勪骇" systemkey="" tranvalue=""/>
+</prop>
+</props>
+</data>
+</datas>
+</object>
+     */
+    public static Map<String,Object> readTranXml(String tran_xml,String btmid) throws Exception{
+        Map<String,Object> retMap = new HashMap<String,Object>();
+        if(StringUtils.isEmpty(btmid)){
+            return retMap;
+        }
+        Document document = DocumentHelper.parseText(tran_xml);
+        Element object_element = document.getRootElement();
+
+        Element datas_element = object_element.element(XML_DATAS);
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        for (Element data_element:data_elements){
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String data_type = data_type_attr==null?"":data_type_attr.getValue();
+            if(!btmid.equals(data_type)){
+                continue;
+            }
+
+            Element data_pros_elements = data_element.element(XML_PROS);
+            List<Element> data_pro_elements = data_pros_elements.elements(XML_PRO);
+            for (Element data_pro_element:data_pro_elements) {
+                Map<String,String> data_pro_map = new HashMap<String,String>();
+                Attribute xml_type_attr = data_pro_element.attribute(XML_KEY);//materialtype
+                String xml_type = xml_type_attr==null?"":xml_type_attr.getValue();
+
+                List<Element>prop_tran_elements = data_pro_element.elements(XML_PRO_TRAN);//prop_tran
+                for (Element prop_tran_element:prop_tran_elements) {
+                    Attribute mdm_key_attr = prop_tran_element.attribute(XML_MDMKEY);
+                    String mdm_key = mdm_key_attr==null?"":mdm_key_attr.getValue();
+
+                    Attribute mdm_value_attr = prop_tran_element.attribute(XML_MDMVALUE);
+                    String mdm_value = mdm_value_attr==null?"":mdm_value_attr.getValue();
+
+                    Attribute system_key_attr = prop_tran_element.attribute(XML_SYSTEMKEY);
+                    String system_key = system_key_attr==null?"":system_key_attr.getValue();
+
+                    Attribute system_value_attr = prop_tran_element.attribute(XML_SYSTEMVALUE);
+                    String system_value = system_value_attr==null?"":system_value_attr.getValue();
+
+//                  data_pro_map.put(XML_MDMKEY,mdm_key);
+//                  data_pro_map.put(XML_MDMVALUE,mdm_value);
+//                  data_pro_map.put(XML_SYSTEMKEY,system_key);
+//                  data_pro_map.put(XML_SYSTEMVALUE,system_value);
+                    data_pro_map.put(mdm_key,system_key);
+                    data_pro_map.put(mdm_value,system_value);
+                }
+                retMap.put(xml_type,data_pro_map);
+            }
+
+        }
+        return retMap;
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/gennerAttrMapUtil.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/gennerAttrMapUtil.java
new file mode 100644
index 0000000..8dd82f6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/gennerAttrMapUtil.java
@@ -0,0 +1,45 @@
+package com.vci.ubcs.code.utils;
+
+import com.vci.ubcs.code.vo.universalInter.attrmap.LibraryDO;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.starter.web.util.LocalFileUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Map;
+
+public class gennerAttrMapUtil {
+    @Autowired
+    private AttributeMapConfig attributeMapConfig;
+    private static  String fileName="";
+    private static gennerAttrMapUtil newInstance=null;
+    public static gennerAttrMapUtil getNewInstance() {
+        if(newInstance==null){
+            newInstance=new gennerAttrMapUtil();
+        }
+        return newInstance;
+    }
+
+    /****
+     * 鑾峰彇
+     * @param systemId
+     */
+    public LibraryDO gennerAttrMapBySystem(String systemId, Map<String, String> system_attrmap) throws Throwable{
+        if(StringUtils.isBlank(systemId)){
+            throw new Throwable("绯荤粺鏍囪瘑涓虹┖");
+        }
+        LibraryDO rootDataVO=new LibraryDO();
+        if(system_attrmap.containsKey(systemId)){
+           String path=system_attrmap.get(systemId);
+           String attributeMapData=  LocalFileUtil.readContentForFile(path);
+           XStream xStream = new XStream(new DomDriver());
+           xStream.processAnnotations(LibraryDO.class);
+           xStream.autodetectAnnotations(true);
+            rootDataVO = (LibraryDO) xStream.fromXML(attributeMapData);
+
+        }
+        return rootDataVO;
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-code/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-code/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application-test.yml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-code/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-test.yml
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application.yml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-code/src/main/resources/application.yml
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application.yml
diff --git a/Source/BladeX/blade-service/blade-desk/Dockerfile b/Source/UBCS/ubcs-service/ubcs-desk/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-service/blade-desk/Dockerfile
rename to Source/UBCS/ubcs-service/ubcs-desk/Dockerfile
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/pom.xml b/Source/UBCS/ubcs-service/ubcs-desk/pom.xml
new file mode 100644
index 0000000..6342eb2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>ubcs-service</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-desk</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-desk-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-user-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-flow-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <!--Oss-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-oss</artifactId>
+        </dependency>
+        <!--MinIO-->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+        </dependency>
+        <!--QiNiu-->
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+        </dependency>
+        <!--<dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-transaction</artifactId>
+        </dependency>-->
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/DeskApplication.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/DeskApplication.java
new file mode 100644
index 0000000..249cab0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/DeskApplication.java
@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * Desk鍚姩鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class DeskApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_DESK_NAME, DeskApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/DashBoardController.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/DashBoardController.java
new file mode 100644
index 0000000..6c99ce5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/DashBoardController.java
@@ -0,0 +1,207 @@
+package com.vci.ubcs.desk.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 棣栭〉
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@Api(value = "棣栭〉", tags = "棣栭〉")
+public class DashBoardController {
+
+	/**
+	 * 娲昏穬鐢ㄦ埛
+	 */
+	@GetMapping("/dashboard/activities")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "娲昏穬鐢ㄦ埛", notes = "娲昏穬鐢ㄦ埛")
+	public R activities() {
+		List<Map<String, Object>> list = new ArrayList<>();
+
+		Map<String, Object> map1 = new HashMap<>(16);
+		map1.put("id", "trend-1");
+		map1.put("updatedAt", "2019-01-01");
+		map1.put("user", Kv.create().set("name", "鏇蹭附涓�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
+		map1.put("group", Kv.create().set("name", "楂橀�兼牸璁捐澶╁洟").set("link", "http://github.com/"));
+		map1.put("project", Kv.create().set("name", "鍏湀杩唬").set("link", "http://github.com/"));
+		map1.put("template", "鍦� @{group} 鏂板缓椤圭洰 @{project}");
+		list.add(map1);
+
+		Map<String, Object> map2 = new HashMap<>(16);
+		map2.put("id", "trend-2");
+		map2.put("updatedAt", "2019-01-01");
+		map2.put("user", Kv.create().set("name", "浠樺皬灏�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
+		map2.put("group", Kv.create().set("name", "楂橀�兼牸璁捐澶╁洟").set("link", "http://github.com/"));
+		map2.put("project", Kv.create().set("name", "涓冩湀鏈堣凯浠�").set("link", "http://github.com/"));
+		map2.put("template", "鍦�  @{group} 鏂板缓椤圭洰 @{project}");
+		list.add(map2);
+
+		return R.data(list);
+	}
+
+	/**
+	 * 鐢ㄦ埛淇℃伅
+	 */
+	@GetMapping("/dashboard/info")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鐢ㄦ埛淇℃伅", notes = "鐢ㄦ埛淇℃伅")
+	public R info() {
+		Map<String, Object> map = new HashMap<>(16);
+		map.put("id", "trend-1");
+		map.put("updatedAt", "2019-01-01");
+		map.put("user", Kv.create().set("name", "鏇蹭附涓�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
+		map.put("group", Kv.create().set("name", "楂橀�兼牸璁捐澶╁洟").set("link", "http://github.com/"));
+		map.put("project", Kv.create().set("name", "鍏湀杩唬").set("link", "http://github.com/"));
+		map.put("template", "鍦� @{group} 鏂板缓椤圭洰 @{project}");
+		return R.data(map);
+	}
+
+	/**
+	 * 绛惧悕淇℃伅
+	 */
+	@PostMapping("/dashboard/sign")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "绛惧悕淇℃伅", notes = "绛惧悕淇℃伅")
+	public R sign() {
+		Map<String, Object> map = new HashMap<>(16);
+		map.put("user", Kv.create().set("name", "鏇蹭附涓�").set("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"));
+		return R.data(map);
+	}
+
+	/**
+	 * 鑾峰彇娑堟伅
+	 */
+	@GetMapping("/notice/notices")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "娑堟伅", notes = "娑堟伅")
+	public R notices() {
+		List<Map<String, String>> list = new ArrayList<>();
+		Map<String, String> map1 = new HashMap<>(16);
+		map1.put("logo", "https://spring.io/img/homepage/icon-spring-framework.svg");
+		map1.put("title", "SpringBoot");
+		map1.put("description", "鐜板湪鐨剋eb椤圭洰鍑犱箮閮戒細鐢ㄥ埌spring妗嗘灦锛岃�岃浣跨敤spring闅惧厤闇�瑕侀厤缃ぇ閲忕殑xml閰嶇疆鏂囦欢锛岃�� springboot鐨勫嚭鐜拌В   鍐充簡杩欎竴闂锛屼竴涓」鐩敋鑷充笉鐢ㄩ儴缃插埌鏈嶅姟鍣ㄤ笂鐩存帴寮�璺戯紝鐪熷儚springboot鎵�璇达細鈥渏ust run鈥濄��");
+		map1.put("member", "Chill");
+		map1.put("href", "http://spring.io/projects/spring-boot");
+		list.add(map1);
+
+		Map<String, String> map2 = new HashMap<>(16);
+		map2.put("logo", "https://spring.io/img/homepage/icon-spring-cloud.svg");
+		map2.put("title", "SpringCloud");
+		map2.put("description", "SpringCloud鏄熀浜嶴pringBoot鐨勪竴鏁村瀹炵幇寰湇鍔$殑妗嗘灦銆備粬鎻愪緵浜嗗井鏈嶅姟寮�鍙戞墍闇�鐨勯厤缃鐞嗐�佹湇鍔″彂鐜般�佹柇璺櫒銆佹櫤鑳借矾鐢便�佸井浠g悊銆佹帶鍒舵�荤嚎銆佸叏灞�閿併�佸喅绛栫珵閫夈�佸垎甯冨紡浼氳瘽鍜岄泦缇ょ姸鎬佺鐞嗙瓑缁勪欢銆�");
+		map2.put("member", "Chill");
+		map2.put("href", "http://spring.io/projects/spring-cloud");
+		list.add(map2);
+
+		Map<String, String> map3 = new HashMap<>(16);
+		map3.put("logo", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1546359961068&di=05ff9406e6675ca9a58a525a7e7950b9&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D575314515%2C4268715674%26fm%3D214%26gp%3D0.jpg");
+		map3.put("title", "Mybatis");
+		map3.put("description", "MyBatis 鏄竴娆句紭绉�鐨勬寔涔呭眰妗嗘灦锛屽畠鏀寔瀹氬埗鍖� SQL銆佸瓨鍌ㄨ繃绋嬩互鍙婇珮绾ф槧灏勩�侻yBatis 閬垮厤浜嗗嚑涔庢墍鏈夌殑 JDBC 浠g爜鍜屾墜鍔ㄨ缃弬鏁颁互鍙婅幏鍙栫粨鏋滈泦銆侻yBatis 鍙互浣跨敤绠�鍗曠殑 XML 鎴栨敞瑙f潵閰嶇疆鍜屾槧灏勫師鐢熶俊鎭紝灏嗘帴鍙e拰 Java 鐨� POJOs(Plain Old Java Objects,鏅�氱殑 Java瀵硅薄)鏄犲皠鎴愭暟鎹簱涓殑璁板綍銆�");
+		map3.put("member", "Chill");
+		map3.put("href", "http://www.mybatis.org/mybatis-3/getting-started.html");
+		list.add(map3);
+
+		Map<String, String> map4 = new HashMap<>(16);
+		map4.put("logo", "https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png");
+		map4.put("title", "React");
+		map4.put("description", "React 璧锋簮浜� Facebook 鐨勫唴閮ㄩ」鐩紝鍥犱负璇ュ叕鍙稿甯傚満涓婃墍鏈� JavaScript MVC 妗嗘灦锛岄兘涓嶆弧鎰忥紝灏卞喅瀹氳嚜宸卞啓涓�濂楋紝鐢ㄦ潵鏋惰Instagram 鐨勭綉绔欍�傚仛鍑烘潵浠ュ悗锛屽彂鐜拌繖濂椾笢瑗垮緢濂界敤锛屽氨鍦�2013骞�5鏈堝紑婧愪簡銆�");
+		map4.put("member", "Chill");
+		map4.put("href", "https://reactjs.org/");
+		list.add(map4);
+
+		Map<String, String> map5 = new HashMap<>(16);
+		map5.put("logo", "https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png");
+		map5.put("title", "Ant Design");
+		map5.put("description", "铓傝殎閲戞湇浣撻獙鎶�鏈儴缁忚繃澶ч噺鐨勯」鐩疄璺靛拰鎬荤粨锛屾矇娣�鍑鸿璁¤瑷� Ant Design锛岃繖鍙笉鍗曠函鍙槸璁捐鍘熷垯銆佹帶浠惰鑼冨拰瑙嗚灏哄锛岃繕閰嶅鏈夊墠绔唬鐮佸疄鐜版柟妗堛�備篃灏辨槸璇撮噰鐢ˋnt Design鍚庯紝UI璁捐鍜屽墠绔晫闈㈢爺鍙戝彲鍚屾瀹屾垚锛屾晥鐜囧ぇ澶ф彁鍗囥��");
+		map5.put("member", "Chill");
+		map5.put("href", "https://ant.design/docs/spec/introduce-cn");
+		list.add(map5);
+
+		Map<String, String> map6 = new HashMap<>(16);
+		map6.put("logo", "https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png");
+		map6.put("title", "Ant Design Pro");
+		map6.put("description", "Ant Design Pro 鏄竴涓紒涓氱骇寮�绠卞嵆鐢ㄧ殑涓悗鍙板墠绔�/璁捐瑙e喅鏂规銆傜鍚堥樋閲岃拷姹傜殑'鏁忔嵎鐨勫墠绔�+寮哄ぇ鐨勪腑鍙�'鐨勬�濇兂銆�");
+		map6.put("member", "Chill");
+		map6.put("href", "https://pro.ant.design");
+		list.add(map6);
+
+		return R.data(list);
+	}
+
+	/**
+	 * 鑾峰彇鎴戠殑娑堟伅
+	 */
+	@GetMapping("/notice/my-notices")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "娑堟伅", notes = "娑堟伅")
+	public R myNotices() {
+		List<Map<String, String>> list = new ArrayList<>();
+		Map<String, String> map1 = new HashMap<>(16);
+		map1.put("id", "000000001");
+		map1.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png");
+		map1.put("title", "浣犳敹鍒颁簡 14 浠芥柊鍛ㄦ姤");
+		map1.put("datetime", "2018-08-09");
+		map1.put("type", "notification");
+		list.add(map1);
+
+		Map<String, String> map2 = new HashMap<>(16);
+		map2.put("id", "000000002");
+		map2.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png");
+		map2.put("title", "浣犳帹鑽愮殑 鏇插Ξ濡� 宸查�氳繃绗笁杞潰璇�");
+		map2.put("datetime", "2018-08-08");
+		map2.put("type", "notification");
+		list.add(map2);
+
+
+		Map<String, String> map3 = new HashMap<>(16);
+		map3.put("id", "000000003");
+		map3.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg");
+		map3.put("title", "鏇蹭附涓� 璇勮浜嗕綘");
+		map3.put("description", "鎻忚堪淇℃伅鎻忚堪淇℃伅鎻忚堪淇℃伅");
+		map3.put("datetime", "2018-08-07");
+		map3.put("type", "message");
+		map3.put("clickClose", "true");
+		list.add(map3);
+
+
+		Map<String, String> map4 = new HashMap<>(16);
+		map4.put("id", "000000004");
+		map4.put("avatar", "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg");
+		map4.put("title", "鏈卞亸鍙� 鍥炲浜嗕綘");
+		map4.put("description", "杩欑妯℃澘鐢ㄤ簬鎻愰啋璋佷笌浣犲彂鐢熶簡浜掑姩锛屽乏渚ф斁銆庤皝銆忕殑澶村儚");
+		map4.put("type", "message");
+		map4.put("datetime", "2018-08-07");
+		map4.put("clickClose", "true");
+		list.add(map4);
+
+
+		Map<String, String> map5 = new HashMap<>(16);
+		map5.put("id", "000000005");
+		map5.put("title", "浠诲姟鍚嶇О");
+		map5.put("description", "浠诲姟闇�瑕佸湪 2018-01-12 20:00 鍓嶅惎鍔�");
+		map5.put("extra", "鏈紑濮�");
+		map5.put("status", "todo");
+		map5.put("type", "event");
+		list.add(map5);
+
+		return R.data(list);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/LeaveController.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/LeaveController.java
new file mode 100644
index 0000000..6554dd5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/LeaveController.java
@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.controller;
+
+import com.vci.ubcs.desk.entity.ProcessLeave;
+import com.vci.ubcs.system.user.cache.UserCache;
+import lombok.AllArgsConstructor;
+import com.vci.ubcs.common.cache.CacheNames;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.desk.service.ILeaveService;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@RequestMapping("/process/leave")
+@AllArgsConstructor
+public class LeaveController extends BladeController implements CacheNames {
+
+	private final ILeaveService leaveService;
+
+	/**
+	 * 璇︽儏
+	 *
+	 * @param businessId 涓婚敭
+	 */
+	@GetMapping("detail")
+	public R<ProcessLeave> detail(Long businessId) {
+		ProcessLeave detail = leaveService.getById(businessId);
+		detail.getFlow().setAssigneeName(UserCache.getUser(detail.getCreateUser()).getName());
+		return R.data(detail);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param leave 璇峰亣淇℃伅
+	 */
+	@PostMapping("start-process")
+	public R startProcess(@RequestBody ProcessLeave leave) {
+		return R.status(leaveService.startProcess(leave));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/NoticeController.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/NoticeController.java
new file mode 100644
index 0000000..afb0f1c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/NoticeController.java
@@ -0,0 +1,150 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.TenantDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.desk.entity.Notice;
+import com.vci.ubcs.desk.feign.INoticeClient;
+import com.vci.ubcs.desk.service.INoticeService;
+import com.vci.ubcs.desk.vo.NoticeVO;
+import com.vci.ubcs.desk.wrapper.NoticeWrapper;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Map;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@TenantDS
+@RestController
+@RequestMapping("notice")
+@AllArgsConstructor
+@Api(value = "鐢ㄦ埛鍗氬", tags = "鍗氬鎺ュ彛")
+public class NoticeController extends BladeController {
+
+	private final INoticeService noticeService;
+
+	private final INoticeClient noticeClient;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆notice")
+	public R<NoticeVO> detail(Notice notice) {
+		Notice detail = noticeService.getOne(Condition.getQueryWrapper(notice));
+		return R.data(NoticeWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "category", value = "鍏憡绫诲瀷", paramType = "query", dataType = "integer"),
+		@ApiImplicitParam(name = "title", value = "鍏憡鏍囬", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
+	public R<IPage<NoticeVO>> list(@ApiIgnore @RequestParam Map<String, Object> notice, Query query) {
+		NoticeWrapper.build().noticeQuery(notice);
+		IPage<Notice> pages = noticeService.page(Condition.getPage(query), Condition.getQueryWrapper(notice, Notice.class));
+		return R.data(NoticeWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 澶氳〃鑱斿悎鏌ヨ鑷畾涔夊垎椤�
+	 */
+	@GetMapping("/page")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "category", value = "鍏憡绫诲瀷", paramType = "query", dataType = "integer"),
+		@ApiImplicitParam(name = "title", value = "鍏憡鏍囬", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆notice")
+	public R<IPage<NoticeVO>> page(@ApiIgnore NoticeVO notice, Query query) {
+		IPage<NoticeVO> pages = noticeService.selectNoticePage(Condition.getPage(query), notice);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆notice")
+	public R save(@RequestBody Notice notice) {
+		return R.status(noticeService.save(notice));
+	}
+
+	/**
+	 * 淇敼
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆notice")
+	public R update(@RequestBody Notice notice) {
+		return R.status(noticeService.updateById(notice));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆notice")
+	public R submit(@RequestBody Notice notice) {
+		return R.status(noticeService.saveOrUpdate(notice));
+	}
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆notice")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎") @RequestParam String ids) {
+		boolean temp = noticeService.deleteLogic(Func.toLongList(ids));
+		return R.status(temp);
+	}
+
+	/**
+	 * 杩滅▼璋冪敤鍒嗛〉鎺ュ彛
+	 */
+	@GetMapping("/top")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鍒嗛〉杩滅▼璋冪敤", notes = "浼犲叆current,size")
+	public R<BladePage<Notice>> top(@ApiParam(value = "褰撳墠椤�") @RequestParam Integer current, @ApiParam(value = "姣忛〉鏄剧ず鏉℃暟") @RequestParam Integer size) {
+		BladePage<Notice> page = noticeClient.top(current, size);
+		return R.data(page);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/entity/ProcessLeave.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/entity/ProcessLeave.java
new file mode 100644
index 0000000..7f29a3a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/entity/ProcessLeave.java
@@ -0,0 +1,67 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.flow.core.entity.FlowEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 璇峰亣娴佺▼瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@TableName("pl_wf_process_leave")
+@EqualsAndHashCode(callSuper = true)
+public class ProcessLeave extends FlowEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 娴佺▼瀹氫箟id
+	 */
+	private String processDefinitionId;
+	/**
+	 * 娴佺▼瀹炰緥id
+	 */
+	private String processInstanceId;
+	/**
+	 * 璇峰亣寮�濮嬫椂闂�
+	 */
+	private Date startTime;
+	/**
+	 * 璇峰亣缁撴潫鏃堕棿
+	 */
+	private Date endTime;
+	/**
+	 * 璇峰亣鐞嗙敱
+	 */
+	private String reason;
+	/**
+	 * 瀹℃壒浜�
+	 */
+	private String taskUser;
+	/**
+	 * 娴佺▼鐢宠鏃堕棿
+	 */
+	private Date applyTime;
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/feign/NoticeClient.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/feign/NoticeClient.java
new file mode 100644
index 0000000..a2121ca
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/feign/NoticeClient.java
@@ -0,0 +1,54 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import com.vci.ubcs.desk.entity.Notice;
+import com.vci.ubcs.desk.service.INoticeService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * Notice Feign
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class NoticeClient implements INoticeClient {
+
+	private final INoticeService service;
+
+	@Override
+	@GetMapping(TOP)
+	public BladePage<Notice> top(Integer current, Integer size) {
+		Query query = new Query();
+		query.setCurrent(current);
+		query.setSize(size);
+		IPage<Notice> page = service.page(Condition.getPage(query));
+		return BladePage.of(page);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/LeaveMapper.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/LeaveMapper.java
new file mode 100644
index 0000000..a6efd9c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/LeaveMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.desk.entity.ProcessLeave;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface LeaveMapper extends BaseMapper<ProcessLeave> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/NoticeMapper.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/NoticeMapper.java
new file mode 100644
index 0000000..ecb3a07
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/NoticeMapper.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.desk.entity.Notice;
+import com.vci.ubcs.desk.vo.NoticeVO;
+
+import java.util.List;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface NoticeMapper extends BaseMapper<Notice> {
+
+	/**
+	 * 鍓峃鏉℃暟鎹�
+	 *
+	 * @param number 鏁伴噺
+	 * @return List<Notice>
+	 */
+	List<Notice> topList(Integer number);
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page   鍒嗛〉
+	 * @param notice 瀹炰綋
+	 * @return List<NoticeVO>
+	 */
+	List<NoticeVO> selectNoticePage(IPage page, NoticeVO notice);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/ILeaveService.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/ILeaveService.java
new file mode 100644
index 0000000..fb02bd0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/ILeaveService.java
@@ -0,0 +1,37 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.service;
+
+import com.vci.ubcs.desk.entity.ProcessLeave;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface ILeaveService extends BaseService<ProcessLeave> {
+
+	/**
+	 * 寮�鍚祦绋�
+	 *
+	 * @param leave 璇峰亣瀹炰綋
+	 * @return boolean
+	 */
+	boolean startProcess(ProcessLeave leave);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/INoticeService.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/INoticeService.java
new file mode 100644
index 0000000..5abc782
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/INoticeService.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.desk.entity.Notice;
+import com.vci.ubcs.desk.vo.NoticeVO;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface INoticeService extends BaseService<Notice> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 * @param page
+	 * @param notice
+	 * @return
+	 */
+	IPage<NoticeVO> selectNoticePage(IPage<NoticeVO> page, NoticeVO notice);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/LeaveServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/LeaveServiceImpl.java
new file mode 100644
index 0000000..d434a6d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/LeaveServiceImpl.java
@@ -0,0 +1,81 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.service.impl;
+
+import com.vci.ubcs.desk.entity.ProcessLeave;
+import com.vci.ubcs.desk.mapper.LeaveMapper;
+import com.vci.ubcs.desk.service.ILeaveService;
+import com.vci.ubcs.flow.core.constant.ProcessConstant;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.core.feign.IFlowClient;
+import com.vci.ubcs.flow.core.utils.FlowUtil;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class LeaveServiceImpl extends BaseServiceImpl<LeaveMapper, ProcessLeave> implements ILeaveService {
+
+	private final IFlowClient flowClient;
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	// @GlobalTransactional
+	public boolean startProcess(ProcessLeave leave) {
+		String businessTable = FlowUtil.getBusinessTable(ProcessConstant.LEAVE_KEY);
+		if (Func.isEmpty(leave.getId())) {
+			// 淇濆瓨leave
+			leave.setApplyTime(DateUtil.now());
+			save(leave);
+			// 鍚姩娴佺▼
+			Kv variables = Kv.create()
+				.set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName())
+				.set("taskUser", TaskUtil.getTaskUser(leave.getTaskUser()))
+				.set("days", DateUtil.between(leave.getStartTime(), leave.getEndTime()).toDays());
+			R<BladeFlow> result = flowClient.startProcessInstanceById(leave.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(leave.getId())), variables);
+			if (result.isSuccess()) {
+				log.debug("娴佺▼宸插惎鍔�,娴佺▼ID:" + result.getData().getProcessInstanceId());
+				// 杩斿洖娴佺▼id鍐欏叆leave
+				leave.setProcessInstanceId(result.getData().getProcessInstanceId());
+				updateById(leave);
+			} else {
+				throw new ServiceException("寮�鍚祦绋嬪け璐�");
+			}
+		} else {
+
+			updateById(leave);
+		}
+		return true;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/NoticeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/NoticeServiceImpl.java
new file mode 100644
index 0000000..6b8775e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/NoticeServiceImpl.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.desk.mapper.NoticeMapper;
+import com.vci.ubcs.desk.service.INoticeService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import com.vci.ubcs.desk.entity.Notice;
+import com.vci.ubcs.desk.vo.NoticeVO;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class NoticeServiceImpl extends BaseServiceImpl<NoticeMapper, Notice> implements INoticeService {
+
+	@Override
+	public IPage<NoticeVO> selectNoticePage(IPage<NoticeVO> page, NoticeVO notice) {
+		// 鑻ヤ笉浣跨敤mybatis-plus鑷甫鐨勫垎椤垫柟娉曪紝鍒欎笉浼氳嚜鍔ㄥ甫鍏enantId锛屾墍浠ユ垜浠渶瑕佽嚜琛屾敞鍏�
+		notice.setTenantId(AuthUtil.getTenantId());
+		return page.setRecords(baseMapper.selectNoticePage(page, notice));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/wrapper/NoticeWrapper.java b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/wrapper/NoticeWrapper.java
new file mode 100644
index 0000000..a7668c4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/wrapper/NoticeWrapper.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.desk.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.desk.entity.Notice;
+import com.vci.ubcs.desk.vo.NoticeVO;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.enums.DictEnum;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Notice鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class NoticeWrapper extends BaseEntityWrapper<Notice, NoticeVO> {
+
+	public static NoticeWrapper build() {
+		return new NoticeWrapper();
+	}
+
+	@Override
+	public NoticeVO entityVO(Notice notice) {
+		NoticeVO noticeVO = Objects.requireNonNull(BeanUtil.copy(notice, NoticeVO.class));
+		String dictValue = DictCache.getValue(DictEnum.NOTICE, noticeVO.getCategory());
+		noticeVO.setCategoryName(dictValue);
+		return noticeVO;
+	}
+
+	/**
+	 * 鏌ヨ鏉′欢澶勭悊
+	 */
+	public void noticeQuery(Map<String, Object> notice) {
+		// 姝ゅ満鏅粎鍦� pg鏁版嵁搴� map绫诲瀷浼犲弬鐨勬儏鍐典笅闇�瑕佸鐞嗭紝entity浼犲弬宸茬粡鍖呭惈鏁版嵁绫诲瀷锛屽垯鏃犻渶鍏冲績
+		// 閽堝 pg鏁版嵁搴� int绫诲瀷瀛楁鏌ヨ闇�瑕佸己杞殑澶勭悊绀轰緥
+		String searchKey = "category";
+		if (Func.isNotEmpty(notice.get(searchKey))) {
+			// 鏁版嵁搴撳瓧娈典负int绫诲瀷锛岃缃�"="鏌ヨ锛屽叿浣撴煡璇㈠弬鏁拌瑙� @org.springblade.core.mp.support.SqlKeyword
+			notice.put(searchKey.concat("_equal"), Func.toInt(notice.get(searchKey)));
+			// 榛樿"like"鏌ヨ锛宲g鏁版嵁搴� 鍦烘櫙浼氭姤閿欙紝鎵�浠ュ皢鍏跺垹闄�
+			notice.remove(searchKey);
+		}
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-desk/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/resources/application-test.yml b/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-desk/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/LeaveMapper.xml b/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/LeaveMapper.xml
new file mode 100644
index 0000000..d616a5b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/LeaveMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.desk.mapper.LeaveMapper">
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/NoticeMapper.xml b/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/NoticeMapper.xml
new file mode 100644
index 0000000..abc2ee9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/NoticeMapper.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.desk.mapper.NoticeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="noticeResultMap" type="com.vci.ubcs.desk.entity.Notice">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="release_time" property="releaseTime"/>
+        <result column="title" property="title"/>
+        <result column="content" property="content"/>
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="noticeVOResultMap" type="com.vci.ubcs.desk.vo.NoticeVO">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="release_time" property="releaseTime"/>
+        <result column="title" property="title"/>
+        <result column="content" property="content"/>
+    </resultMap>
+
+    <select id="topList" resultMap="noticeResultMap">
+        select * from pl_org_notice limit #{number}
+    </select>
+
+    <select id="selectNoticePage" resultMap="noticeVOResultMap">
+        SELECT
+        n.*,
+        d.dict_value AS categoryName
+        FROM
+        pl_org_notice n
+        LEFT JOIN ( SELECT * FROM pl_sys_dict WHERE CODE = 'notice' ) d ON n.category = d.dict_key
+        WHERE
+        n.is_deleted = 0 and n.tenant_id = #{notice.tenantId}
+        <if test="notice.title!=null">
+            and n.title like concat(concat('%', #{notice.title}), '%')
+        </if>
+        <if test="notice.category!=null">
+            and n.category = #{notice.category}
+        </if>
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/pom.xml b/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
new file mode 100644
index 0000000..8a7f992
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/pom.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>ubcs-service</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-omd</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-omd-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-flow-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+
+        <!--Oss-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-oss</artifactId>
+        </dependency>
+        <!--MinIO-->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+        </dependency>
+        <!--QiNiu-->
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+        </dependency>
+        <!--<dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-transaction</artifactId>
+        </dependency>-->
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/OmdApplication.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/OmdApplication.java
new file mode 100644
index 0000000..b8bcaa5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/OmdApplication.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * 绯荤粺妯″潡鍚姩鍣�
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class OmdApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_NAME_OMD, OmdApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictBizOmdController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictBizOmdController.java
new file mode 100644
index 0000000..8bc9646
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictBizOmdController.java
@@ -0,0 +1,189 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.omd.wrapper.DictBizWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.omd.entity.DictBizM;
+import com.vci.ubcs.omd.service.IDictBizService;
+import com.vci.ubcs.omd.vo.DictBizMVO;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dict-biz")
+@Api(value = "涓氬姟瀛楀吀", tags = "涓氬姟瀛楀吀")
+public class DictBizOmdController extends BladeController {
+
+	private final IDictBizService dictService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dict")
+	public R<DictBizMVO> detail(DictBizM dict) {
+		DictBizM detail = dictService.getOne(Condition.getQueryWrapper(dict));
+		return R.data(DictBizWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒楄〃
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<List<DictBizMVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
+		List<DictBizM> list = dictService.list(Condition.getQueryWrapper(dict, DictBizM.class).lambda().orderByAsc(DictBizM::getSort));
+		return R.data(DictBizWrapper.build().listNodeVO(list));
+	}
+
+	/**
+	 * 椤剁骇鍒楄〃
+	 */
+	@GetMapping("/parent-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<IPage<DictBizMVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
+		return R.data(dictService.parentList(dict, query));
+	}
+
+	/**
+	 * 瀛愬垪琛�
+	 */
+	@GetMapping("/child-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "parentId", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<List<DictBizMVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
+		return R.data(dictService.childList(dict, parentId));
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<DictBizMVO>> tree() {
+		List<DictBizMVO> tree = dictService.tree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/parent-tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<DictBizMVO>> parentTree() {
+		List<DictBizMVO> tree = dictService.parentTree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
+	public R submit(@Valid @RequestBody DictBizM dict) {
+		CacheUtil.clear(DICT_CACHE);
+		return R.status(dictService.submit(dict));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(DICT_CACHE);
+		return R.status(dictService.removeDict(ids));
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀
+	 */
+	@GetMapping("/dictionary")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鑾峰彇瀛楀吀", notes = "鑾峰彇瀛楀吀")
+	public R<List<DictBizM>> dictionary(String code) {
+		List<DictBizM> tree = dictService.getList(code);
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍�
+	 */
+	@GetMapping("/dictionary-tree")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "鑾峰彇瀛楀吀鏍�", notes = "鑾峰彇瀛楀吀鏍�")
+	public R<List<DictBizMVO>> dictionaryTree(String code) {
+		List<DictBizM> tree = dictService.getList(code);
+		return R.data(DictBizWrapper.build().listNodeVO(tree));
+	}
+
+	/**
+	 * 妫�鏌ュ瓧鍏告槸鍚﹀瓨鍦紝瀛樺湪鍗宠繑鍥烇紝涓嶅瓨鍦ㄦ柊澧�
+	 */
+	@PostMapping("/check")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
+	public R checkOrInsert(@Valid @RequestBody DictBizM dict) {
+		CacheUtil.clear(DICT_CACHE);
+		return dictService.checkOrInsert(dict);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/DictBizClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/DictBizClient.java
new file mode 100644
index 0000000..299a6c7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/DictBizClient.java
@@ -0,0 +1,69 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.omd.entity.DictBizM;
+import com.vci.ubcs.omd.service.IDictBizService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+
+
+/**
+ * 瀛楀吀鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class DictBizClient implements IDictBizClient {
+
+	private final IDictBizService service;
+
+	@Override
+	@GetMapping(GET_BY_ID)
+	public R<DictBizM> getById(Long id) {
+		return R.data(service.getById(id));
+	}
+
+	@Override
+	@GetMapping(GET_VALUE)
+	public R<String> getValue(String code, String dictKey) {
+		return R.data(service.getValue(code, dictKey));
+	}
+
+	@Override
+	@GetMapping(GET_LIST)
+	public R<List<DictBizM>> getList(String code) {
+		return R.data(service.getList(code));
+	}
+
+	@Override
+	@GetMapping(CHECK_VALUE)
+	public R getCheck(DictBizM dict) {
+		return service.checkOrInsert(dict);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/DictBizMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/DictBizMapper.java
new file mode 100644
index 0000000..38b3b7b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/DictBizMapper.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.entity.DictBizM;
+import com.vci.ubcs.omd.vo.DictBizMVO;
+
+import java.util.List;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface DictBizMapper extends BaseMapper<DictBizM> {
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	String getValue(String code, String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	List<DictBizM> getList(String code);
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @return
+	 */
+	List<DictBizMVO> tree();
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @return
+	 */
+	List<DictBizMVO> parentTree();
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IDictBizService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IDictBizService.java
new file mode 100644
index 0000000..7a4601c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IDictBizService.java
@@ -0,0 +1,109 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.omd.entity.DictBizM;
+import com.vci.ubcs.omd.vo.DictBizMVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IDictBizService extends IService<DictBizM> {
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<DictBizMVO> tree();
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<DictBizMVO> parentTree();
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	String getValue(String code, String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	List<DictBizM> getList(String code);
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dict
+	 * @return
+	 */
+	boolean submit(DictBizM dict);
+
+	/**
+	 * 鍒犻櫎瀛楀吀
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeDict(String ids);
+
+	/**
+	 * 椤剁骇鍒楄〃
+	 *
+	 * @param dict
+	 * @param query
+	 * @return
+	 */
+	IPage<DictBizMVO> parentList(Map<String, Object> dict, Query query);
+
+	/**
+	 * 瀛愬垪琛�
+	 *
+	 * @param dict
+	 * @param parentId
+	 * @return
+	 */
+	List<DictBizMVO> childList(Map<String, Object> dict, Long parentId);
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dict
+	 * @return
+	 */
+	R checkOrInsert(DictBizM dict);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/DictBizServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/DictBizServiceImpl.java
new file mode 100644
index 0000000..5d11c41
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/DictBizServiceImpl.java
@@ -0,0 +1,142 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.mapper.DictBizMapper;
+import com.vci.ubcs.omd.service.IDictBizService;
+import com.vci.ubcs.omd.wrapper.DictBizWrapper;
+import com.vci.ubcs.common.constant.CommonConstant;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.omd.cache.DictBizCache;
+import com.vci.ubcs.omd.entity.DictBizM;
+import com.vci.ubcs.omd.vo.DictBizMVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class DictBizServiceImpl extends ServiceImpl<DictBizMapper, DictBizM> implements IDictBizService {
+
+	@Override
+	public List tree() {
+		return  ForestNodeMerger.merge((List)baseMapper.tree());
+	}
+
+	@Override
+	public List<DictBizMVO> parentTree() {
+		return ForestNodeMerger.merge((List)baseMapper.parentTree());
+	}
+
+	@Override
+	public String getValue(String code, String dictKey) {
+		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
+	}
+
+	@Override
+	public List<DictBizM> getList(String code) {
+		return baseMapper.getList(code);
+	}
+
+	@Override
+	public boolean submit(DictBizM dict) {
+		LambdaQueryWrapper<DictBizM> lqw = Wrappers.<DictBizM>query().lambda().eq(DictBizM::getCode, dict.getCode()).eq(DictBizM::getDictKey, dict.getDictKey());
+		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBizM::getId, dict.getId()));
+		if (cnt > 0L) {
+			throw new ServiceException("褰撳墠瀛楀吀閿�煎凡瀛樺湪!");
+		}
+		// 淇敼椤剁骇瀛楀吀鍚庡悓姝ユ洿鏂颁笅灞炲瓧鍏哥殑缂栧彿
+		if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
+			DictBizM parent = DictBizCache.getById(dict.getId());
+			this.update(Wrappers.<DictBizM>update().lambda().set(DictBizM::getCode, dict.getCode()).eq(DictBizM::getCode, parent.getCode()).ne(DictBizM::getParentId, BladeConstant.TOP_PARENT_ID));
+		}
+		if (Func.isEmpty(dict.getParentId())) {
+			dict.setParentId(BladeConstant.TOP_PARENT_ID);
+		}
+		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		CacheUtil.clear(DICT_CACHE);
+		return saveOrUpdate(dict);
+	}
+
+	@Override
+	public boolean removeDict(String ids) {
+		Long cnt = baseMapper.selectCount(Wrappers.<DictBizM>query().lambda().in(DictBizM::getParentId, Func.toLongList(ids)));
+		if (cnt > 0L) {
+			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
+		}
+		return removeByIds(Func.toLongList(ids));
+	}
+
+	@Override
+	public IPage<DictBizMVO> parentList(Map<String, Object> dict, Query query) {
+		IPage<DictBizM> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBizM.class).lambda().eq(DictBizM::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictBizM::getSort));
+		return DictBizWrapper.build().pageVO(page);
+	}
+
+	@Override
+	public List<DictBizMVO> childList(Map<String, Object> dict, Long parentId) {
+		if (parentId < 0) {
+			return new ArrayList<>();
+		}
+		dict.remove("parentId");
+		DictBizM parentDict = DictBizCache.getById(parentId);
+		List<DictBizM> list = this.list(Condition.getQueryWrapper(dict, DictBizM.class).lambda().ne(DictBizM::getId, parentId).eq(DictBizM::getCode, parentDict.getCode()).orderByAsc(DictBizM::getSort));
+		return DictBizWrapper.build().listNodeVO(list);
+	}
+
+    @Override
+    public R checkOrInsert(DictBizM dict) {
+
+		LambdaQueryWrapper<DictBizM> lqw = Wrappers.<DictBizM>query().lambda().eq(DictBizM::getCode, dict.getCode()).eq(DictBizM::getDictKey, dict.getDictKey());
+		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBizM::getId, dict.getId()));
+		if (cnt > 0L) {
+			return R.fail("瀛楀吀宸茬粡瀛樺湪锛�");
+		}
+
+		if (Func.isEmpty(dict.getParentId())) {
+			dict.setParentId(BladeConstant.TOP_PARENT_ID);
+		}
+		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		CacheUtil.clear(DICT_CACHE);
+
+		if(saveOrUpdate(dict) == true){
+			return R.success("鎿嶄綔鎴愬姛!");
+		}
+		return R.fail("鎿嶄綔澶辫触锛�");
+
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/DictBizWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/DictBizWrapper.java
new file mode 100644
index 0000000..5d185d4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/DictBizWrapper.java
@@ -0,0 +1,61 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.omd.cache.DictBizCache;
+import com.vci.ubcs.omd.entity.DictBizM;
+import com.vci.ubcs.omd.vo.DictBizMVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class DictBizWrapper extends BaseEntityWrapper<DictBizM, DictBizMVO> {
+
+	public static DictBizWrapper build() {
+		return new DictBizWrapper();
+	}
+
+	@Override
+	public DictBizMVO entityVO(DictBizM dict) {
+		DictBizMVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictBizMVO.class));
+		if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+			dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			DictBizM parent = DictBizCache.getById(dict.getParentId());
+			dictVO.setParentName(parent.getDictValue());
+		}
+		return dictVO;
+	}
+
+	public List<DictBizMVO> listNodeVO(List<DictBizM> list) {
+		List<DictBizMVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictBizMVO.class)).collect(Collectors.toList());
+		return ForestNodeMerger.merge((List)collect);
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-omd/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-omd/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-service/blade-omd/src/main/resources/application-test.yml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-omd/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/DictBizMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/DictBizMapper.xml
new file mode 100644
index 0000000..1cb8b5f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/DictBizMapper.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.omd.mapper.DictBizMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="dictResultMap" type="com.vci.ubcs.omd.entity.DictBizM">
+        <id column="id" property="id"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="code" property="code"/>
+        <result column="dict_key" property="dictKey"/>
+        <result column="dict_value" property="dictValue"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+    </resultMap>
+
+    <select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from pl_sys_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
+    </select>
+
+    <!-- oracle 鐗堟湰 -->
+    <!--<select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from pl_sys_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
+    </select>-->
+
+    <select id="getList" resultMap="dictResultMap">
+        select id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict_biz where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0
+    </select>
+
+    <select id="parentTree" resultMap="treeNodeResultMap">
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0 and parent_id = 0
+    </select>
+
+</mapper>
diff --git a/Source/BladeX/blade-service/blade-system/Dockerfile b/Source/UBCS/ubcs-service/ubcs-system/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-service/blade-system/Dockerfile
rename to Source/UBCS/ubcs-service/ubcs-system/Dockerfile
diff --git a/Source/UBCS/ubcs-service/ubcs-system/pom.xml b/Source/UBCS/ubcs-service/ubcs-system/pom.xml
new file mode 100644
index 0000000..c738b24
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-system</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-excel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-system-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-user-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/SystemApplication.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/SystemApplication.java
new file mode 100644
index 0000000..ad3daac
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/SystemApplication.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * 绯荤粺妯″潡鍚姩鍣�
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class SystemApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_SYSTEM_NAME, SystemApplication.class, args);
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ApiScopeController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ApiScopeController.java
new file mode 100644
index 0000000..46105aa
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ApiScopeController.java
@@ -0,0 +1,123 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IApiScopeService;
+import com.vci.ubcs.system.wrapper.ApiScopeWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.ApiScope;
+import com.vci.ubcs.system.vo.ApiScopeVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 鎺ュ彛鏉冮檺鎺у埗鍣�
+ *
+ * @author BladeX
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("api-scope")
+@Api(value = "鎺ュ彛鏉冮檺", tags = "鎺ュ彛鏉冮檺")
+public class ApiScopeController extends BladeController {
+
+	private final IApiScopeService apiScopeService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dataScope")
+	public R<ApiScope> detail(ApiScope dataScope) {
+		ApiScope detail = apiScopeService.getOne(Condition.getQueryWrapper(dataScope));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆dataScope")
+	public R<IPage<ApiScopeVO>> list(ApiScope dataScope, Query query) {
+		IPage<ApiScope> pages = apiScopeService.page(Condition.getPage(query), Condition.getQueryWrapper(dataScope));
+		return R.data(ApiScopeWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 鏂板
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆dataScope")
+	public R save(@Valid @RequestBody ApiScope dataScope) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(apiScopeService.save(dataScope));
+	}
+
+	/**
+	 * 淇敼
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆dataScope")
+	public R update(@Valid @RequestBody ApiScope dataScope) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(apiScopeService.updateById(dataScope));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dataScope")
+	public R submit(@Valid @RequestBody ApiScope dataScope) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(apiScopeService.saveOrUpdate(dataScope));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(apiScopeService.deleteLogic(Func.toLongList(ids)));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/AuthClientController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/AuthClientController.java
new file mode 100644
index 0000000..dae2717
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/AuthClientController.java
@@ -0,0 +1,118 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IAuthClientService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.AuthClient;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+
+/**
+ *  搴旂敤绠$悊鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/client")
+@ApiIgnore
+@Api(value = "搴旂敤绠$悊", tags = "鎺ュ彛")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+public class AuthClientController extends BladeController {
+
+	private final IAuthClientService clientService;
+
+	/**
+	* 璇︽儏
+	*/
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆client")
+	public R<AuthClient> detail(AuthClient authClient) {
+		AuthClient detail = clientService.getOne(Condition.getQueryWrapper(authClient));
+		return R.data(detail);
+	}
+
+	/**
+	* 鍒嗛〉
+	*/
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆client")
+	public R<IPage<AuthClient>> list(AuthClient authClient, Query query) {
+		IPage<AuthClient> pages = clientService.page(Condition.getPage(query), Condition.getQueryWrapper(authClient));
+		return R.data(pages);
+	}
+
+	/**
+	* 鏂板
+	*/
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆client")
+	public R save(@Valid @RequestBody AuthClient authClient) {
+		return R.status(clientService.save(authClient));
+	}
+
+	/**
+	* 淇敼
+	*/
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆client")
+	public R update(@Valid @RequestBody AuthClient authClient) {
+		return R.status(clientService.updateById(authClient));
+	}
+
+	/**
+	* 鏂板鎴栦慨鏀�
+	*/
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆client")
+	public R submit(@Valid @RequestBody AuthClient authClient) {
+		return R.status(clientService.saveOrUpdate(authClient));
+	}
+
+
+	/**
+	* 鍒犻櫎
+	*/
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(clientService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/CombinationController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/CombinationController.java
new file mode 100644
index 0000000..84d9609
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/CombinationController.java
@@ -0,0 +1,108 @@
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.ICombinationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.Combination;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 瀵嗙爜缁勫悎鏂瑰紡琛�(Combination)琛ㄦ帶鍒跺眰
+ *
+ * @author makejava
+ * @since 2023-03-20 15:23:16
+ */
+@ApiIgnore
+@AllArgsConstructor
+@RestController
+@Api(value = "瀵嗙爜缁勫悎鏂瑰紡", tags = "鎺ュ彛")
+@RequestMapping("/combination")
+public class CombinationController {
+
+	/**
+	 * 鏈嶅姟瀵硅薄
+	 */
+	@Resource
+	private final ICombinationService combinationService;
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param combination 绛涢�夋潯浠�
+	 * @param query      鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鍒嗛〉鏌ヨ", notes = "浼犲叆combination锛屽垎椤靛弬鏁皅uery")
+	public R<IPage<Combination>> queryByPage(Combination combination, Query query) {
+		IPage<Combination> pages = combinationService.page(Condition.getPage(query), Condition.getQueryWrapper(combination));
+		return R.data(pages);
+	}
+
+	/**
+	 * 涓嬫媺鏁版嵁婧�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�")
+	public R<List> select() {
+		List<Map<String, Object>> map = combinationService.selectMaps();
+		return R.data(map);
+	}
+
+	/**
+	 * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 鍗曟潯鏁版嵁
+	 */
+	@GetMapping("/one")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁", notes = "浼犲叆id")
+	public ResponseEntity<Combination> queryById(@ApiParam(value = "缁勫悎鏂瑰紡ID", required = true) @RequestParam Long id) {
+		return ResponseEntity.ok(this.combinationService.queryById(id));
+	}
+
+	/**
+	 * 鏂板鍜屼慨鏀规暟鎹�
+	 *
+	 * @param combination 瀹炰綋
+	 * @return 鏂板缁撴灉
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板鍜屼慨鏀规暟鎹�", notes = "浼犲叆combination")
+	public R submit(@Valid @RequestBody Combination combination) {
+		return R.status(combinationService.submit(combination));
+	}
+
+	/**
+	 * 鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鍒犻櫎鏄惁鎴愬姛
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public ResponseEntity<Boolean> deleteById(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam List<String> ids) {
+		return ResponseEntity.ok(this.combinationService.deleteByIds(ids));
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DataScopeController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DataScopeController.java
new file mode 100644
index 0000000..ec53524
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DataScopeController.java
@@ -0,0 +1,123 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IDataScopeService;
+import com.vci.ubcs.system.wrapper.DataScopeWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.DataScope;
+import com.vci.ubcs.system.vo.DataScopeVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 鏁版嵁鏉冮檺鎺у埗鍣�
+ *
+ * @author BladeX
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("data-scope")
+@Api(value = "鏁版嵁鏉冮檺", tags = "鏁版嵁鏉冮檺")
+public class DataScopeController extends BladeController {
+
+	private final IDataScopeService dataScopeService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dataScope")
+	public R<DataScope> detail(DataScope dataScope) {
+		DataScope detail = dataScopeService.getOne(Condition.getQueryWrapper(dataScope));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆dataScope")
+	public R<IPage<DataScopeVO>> list(DataScope dataScope, Query query) {
+		IPage<DataScope> pages = dataScopeService.page(Condition.getPage(query), Condition.getQueryWrapper(dataScope));
+		return R.data(DataScopeWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 鏂板
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆dataScope")
+	public R save(@Valid @RequestBody DataScope dataScope) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(dataScopeService.save(dataScope));
+	}
+
+	/**
+	 * 淇敼
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆dataScope")
+	public R update(@Valid @RequestBody DataScope dataScope) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(dataScopeService.updateById(dataScope));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dataScope")
+	public R submit(@Valid @RequestBody DataScope dataScope) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(dataScopeService.saveOrUpdate(dataScope));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(dataScopeService.deleteLogic(Func.toLongList(ids)));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java
new file mode 100644
index 0000000..baeec08
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java
@@ -0,0 +1,176 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IDeptService;
+import com.vci.ubcs.system.user.cache.UserCache;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.wrapper.DeptWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.entity.Dept;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.vo.DeptVO;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dept")
+@Api(value = "閮ㄩ棬", tags = "閮ㄩ棬")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+public class DeptController extends BladeController {
+
+	private final IDeptService deptService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dept")
+	public R<DeptVO> detail(Dept dept) {
+		Dept detail = deptService.getOne(Condition.getQueryWrapper(dept));
+		return R.data(DeptWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒楄〃
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "deptName", value = "閮ㄩ棬鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "fullName", value = "閮ㄩ棬鍏ㄧО", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dept")
+	public R<List<DeptVO>> list(@ApiIgnore @RequestParam Map<String, Object> dept, BladeUser bladeUser) {
+		QueryWrapper<Dept> queryWrapper = Condition.getQueryWrapper(dept, Dept.class);
+		List<Dept> list = deptService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Dept::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+		return R.data(DeptWrapper.build().listNodeVO(list));
+	}
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 */
+	@GetMapping("/lazy-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "deptName", value = "閮ㄩ棬鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "fullName", value = "閮ㄩ棬鍏ㄧО", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆dept")
+	public R<List<DeptVO>> lazyList(@ApiIgnore @RequestParam Map<String, Object> dept, Long parentId, BladeUser bladeUser) {
+		List<DeptVO> list = deptService.lazyList(bladeUser.getTenantId(), parentId, dept);
+		return R.data(DeptWrapper.build().listNodeLazyVO(list));
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<DeptVO>> tree(String tenantId, BladeUser bladeUser) {
+		List<DeptVO> tree = deptService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
+		return R.data(tree);
+	}
+
+	/**
+	 * 鎳掑姞杞借幏鍙栭儴闂ㄦ爲褰㈢粨鏋�
+	 */
+	@GetMapping("/lazy-tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鎳掑姞杞芥爲褰㈢粨鏋�", notes = "鏍戝舰缁撴瀯")
+	public R<List<DeptVO>> lazyTree(String tenantId, Long parentId, BladeUser bladeUser) {
+		List<DeptVO> tree = deptService.lazyTree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), parentId);
+		return R.data(tree);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dept")
+	public R submit(@Valid @RequestBody Dept dept) {
+		if (deptService.submit(dept)) {
+			CacheUtil.clear(SYS_CACHE);
+			// 杩斿洖鎳掑姞杞芥爲鏇存柊鑺傜偣鎵�闇�瀛楁
+			Kv kv = Kv.create().set("id", String.valueOf(dept.getId())).set("tenantId", dept.getTenantId())
+				.set("deptCategoryName", DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory()));
+			return R.data(kv);
+		}
+		return R.fail("鎿嶄綔澶辫触");
+	}
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(SYS_CACHE);
+		return R.status(deptService.removeDept(ids));
+	}
+
+	/**
+	 * 涓嬫媺鏁版嵁婧�
+	 */
+	//@PreAuth(AuthConstant.PERMIT_ALL)
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆id闆嗗悎")
+	public R<List<Dept>> select(Long userId, String deptId) {
+		if (Func.isNotEmpty(userId)) {
+			User user = UserCache.getUser(userId);
+			deptId = user.getDeptId();
+		}
+		List<Dept> list = deptService.list(Wrappers.<Dept>lambdaQuery().in(Dept::getId, Func.toLongList(deptId)));
+		return R.data(list);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictBizController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictBizController.java
new file mode 100644
index 0000000..66615d9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictBizController.java
@@ -0,0 +1,179 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IDictBizService;
+import com.vci.ubcs.system.wrapper.DictBizWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.DictBiz;
+import com.vci.ubcs.system.vo.DictBizVO;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dict-biz")
+@Api(value = "涓氬姟瀛楀吀", tags = "涓氬姟瀛楀吀")
+public class DictBizController extends BladeController {
+
+	private final IDictBizService dictService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dict")
+	public R<DictBizVO> detail(DictBiz dict) {
+		DictBiz detail = dictService.getOne(Condition.getQueryWrapper(dict));
+		return R.data(DictBizWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒楄〃
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<List<DictBizVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
+		List<DictBiz> list = dictService.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().orderByAsc(DictBiz::getSort));
+		return R.data(DictBizWrapper.build().listNodeVO(list));
+	}
+
+	/**
+	 * 椤剁骇鍒楄〃
+	 */
+	@GetMapping("/parent-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<IPage<DictBizVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
+		return R.data(dictService.parentList(dict, query));
+	}
+
+	/**
+	 * 瀛愬垪琛�
+	 */
+	@GetMapping("/child-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "parentId", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<List<DictBizVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
+		return R.data(dictService.childList(dict, parentId));
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<DictBizVO>> tree() {
+		List<DictBizVO> tree = dictService.tree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/parent-tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<DictBizVO>> parentTree() {
+		List<DictBizVO> tree = dictService.parentTree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
+	public R submit(@Valid @RequestBody DictBiz dict) {
+		CacheUtil.clear(DICT_CACHE);
+		return R.status(dictService.submit(dict));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(DICT_CACHE);
+		return R.status(dictService.removeDict(ids));
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀
+	 */
+	@GetMapping("/dictionary")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鑾峰彇瀛楀吀", notes = "鑾峰彇瀛楀吀")
+	public R<List<DictBiz>> dictionary(String code) {
+		List<DictBiz> tree = dictService.getList(code);
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍�
+	 */
+	@GetMapping("/dictionary-tree")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "鑾峰彇瀛楀吀鏍�", notes = "鑾峰彇瀛楀吀鏍�")
+	public R<List<DictBizVO>> dictionaryTree(String code) {
+		List<DictBiz> tree = dictService.getList(code);
+		return R.data(DictBizWrapper.build().listNodeVO(tree));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictController.java
new file mode 100644
index 0000000..60e6a01
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictController.java
@@ -0,0 +1,196 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IDictService;
+import com.vci.ubcs.system.wrapper.DictWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import com.vci.ubcs.common.constant.CommonConstant;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.entity.Dict;
+import com.vci.ubcs.system.vo.DictVO;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dict")
+@Api(value = "瀛楀吀", tags = "瀛楀吀")
+public class DictController extends BladeController {
+
+	private final IDictService dictService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dict")
+	public R<DictVO> detail(Dict dict) {
+		Dict detail = dictService.getOne(Condition.getQueryWrapper(dict));
+		return R.data(DictWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒楄〃
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<List<DictVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
+		List<Dict> list = dictService.list(Condition.getQueryWrapper(dict, Dict.class).lambda().orderByAsc(Dict::getSort));
+		DictWrapper dictWrapper = new DictWrapper();
+		return R.data(dictWrapper.listNodeVO(list));
+	}
+
+	/**
+	 * 椤剁骇鍒楄〃
+	 */
+	@GetMapping("/parent-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<IPage<DictVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
+		return R.data(dictService.parentList(dict, query));
+	}
+
+	/**
+	 * 瀛愬垪琛�
+	 */
+	@GetMapping("/child-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "parentId", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
+	public R<List<DictVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
+		return R.data(dictService.childList(dict, parentId));
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<DictVO>> tree() {
+		List<DictVO> tree = dictService.tree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/parent-tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<DictVO>> parentTree() {
+		List<DictVO> tree = dictService.parentTree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
+	public R submit(@Valid @RequestBody Dict dict) {
+		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
+		return R.status(dictService.submit(dict));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
+		return R.status(dictService.removeDict(ids));
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀
+	 */
+	@GetMapping("/dictionary")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鑾峰彇瀛楀吀", notes = "鑾峰彇瀛楀吀")
+	public R<List<Dict>> dictionary(String code) {
+		List<Dict> tree = dictService.getList(code);
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍�
+	 */
+	@GetMapping("/dictionary-tree")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "鑾峰彇瀛楀吀鏍�", notes = "鑾峰彇瀛楀吀鏍�")
+	public R<List<DictVO>> dictionaryTree(String code) {
+		List<Dict> tree = dictService.getList(code);
+		return R.data(DictWrapper.build().listNodeVO(tree));
+	}
+
+	/**
+	 * 瀛楀吀閿�煎垪琛�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "瀛楀吀閿�煎垪琛�", notes = "瀛楀吀閿�煎垪琛�")
+	public R<List<Dict>> select() {
+		List<Dict> list = dictService.list(Wrappers.<Dict>query().lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID));
+		list.forEach(dict -> dict.setDictValue(dict.getCode() + StringPool.COLON + StringPool.SPACE + dict.getDictValue()));
+		return R.data(list);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
new file mode 100644
index 0000000..8d49df5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
@@ -0,0 +1,284 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IMenuService;
+import com.vci.ubcs.system.service.ITopMenuService;
+import com.vci.ubcs.system.wrapper.MenuWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Menu;
+import com.vci.ubcs.system.entity.TopMenu;
+import com.vci.ubcs.system.vo.CheckedTreeVO;
+import com.vci.ubcs.system.vo.GrantTreeVO;
+import com.vci.ubcs.system.vo.MenuVO;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
+
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/menu")
+@Api(value = "鑿滃崟", tags = "鑿滃崟")
+public class MenuController extends BladeController {
+
+	private final IMenuService menuService;
+	private final ITopMenuService topMenuService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆menu")
+	public R<MenuVO> detail(Menu menu) {
+		Menu detail = menuService.getOne(Condition.getQueryWrapper(menu));
+		return R.data(MenuWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒楄〃
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
+	})
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆menu")
+	public R<List<MenuVO>> list(@ApiIgnore @RequestParam Map<String, Object> menu) {
+		List<Menu> list = menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().orderByAsc(Menu::getSort));
+		return R.data(MenuWrapper.build().listNodeVO(list));
+	}
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 */
+	@GetMapping("/lazy-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
+	})
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆menu")
+	public R<List<MenuVO>> lazyList(Long parentId, @ApiIgnore @RequestParam Map<String, Object> menu) {
+		List<MenuVO> list = menuService.lazyList(parentId, menu);
+		return R.data(MenuWrapper.build().listNodeLazyVO(list));
+	}
+
+	/**
+	 * 鑿滃崟鍒楄〃
+	 */
+	@GetMapping("/menu-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
+	})
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鑿滃崟鍒楄〃", notes = "浼犲叆menu")
+	public R<List<MenuVO>> menuList(@ApiIgnore @RequestParam Map<String, Object> menu) {
+		List<Menu> list = menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().eq(Menu::getCategory, 1).orderByAsc(Menu::getSort));
+		return R.data(MenuWrapper.build().listNodeVO(list));
+	}
+
+	/**
+	 * 鎳掑姞杞借彍鍗曞垪琛�
+	 */
+	@GetMapping("/lazy-menu-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "鑿滃崟缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "鑿滃崟鍚嶇О", paramType = "query", dataType = "string")
+	})
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鎳掑姞杞借彍鍗曞垪琛�", notes = "浼犲叆menu")
+	public R<List<MenuVO>> lazyMenuList(Long parentId, @ApiIgnore @RequestParam Map<String, Object> menu) {
+		List<MenuVO> list = menuService.lazyMenuList(parentId, menu);
+		return R.data(MenuWrapper.build().listNodeLazyVO(list));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆menu")
+	public R submit(@Valid @RequestBody Menu menu) {
+		if (menuService.submit(menu)) {
+			CacheUtil.clear(MENU_CACHE);
+			CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
+			// 杩斿洖鎳掑姞杞芥爲鏇存柊鑺傜偣鎵�闇�瀛楁
+			Kv kv = Kv.create().set("id", String.valueOf(menu.getId()));
+			return R.data(kv);
+		}
+		return R.fail("鎿嶄綔澶辫触");
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(MENU_CACHE);
+		CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
+		return R.status(menuService.removeMenu(ids));
+	}
+
+	/**
+	 * 鍓嶇鑿滃崟鏁版嵁
+	 */
+	@GetMapping("/routes")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鍓嶇鑿滃崟鏁版嵁", notes = "鍓嶇鑿滃崟鏁版嵁")
+	public R<List<MenuVO>> routes(BladeUser user, Long topMenuId) {
+		List<MenuVO> list = menuService.routes((user == null) ? null : user.getRoleId(), topMenuId);
+		return R.data(list);
+	}
+
+	/**
+	 * 鍓嶇鎸夐挳鏁版嵁
+	 */
+	@GetMapping("/buttons")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "鍓嶇鎸夐挳鏁版嵁", notes = "鍓嶇鎸夐挳鏁版嵁")
+	public R<List<MenuVO>> buttons(BladeUser user) {
+		List<MenuVO> list = menuService.buttons(user.getRoleId());
+		return R.data(list);
+	}
+
+	/**
+	 * 鑾峰彇鑿滃崟鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<TreeNode>> tree() {
+		List<TreeNode> tree = menuService.tree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇鏉冮檺鍒嗛厤鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/grant-tree")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "鏉冮檺鍒嗛厤鏍戝舰缁撴瀯", notes = "鏉冮檺鍒嗛厤鏍戝舰缁撴瀯")
+	public R<GrantTreeVO> grantTree(BladeUser user) {
+		GrantTreeVO vo = new GrantTreeVO();
+		vo.setMenu(menuService.grantTree(user));
+		vo.setDataScope(menuService.grantDataScopeTree(user));
+		vo.setApiScope(menuService.grantApiScopeTree(user));
+		return R.data(vo);
+	}
+
+	/**
+	 * 鑾峰彇鏉冮檺鍒嗛厤鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/role-tree-keys")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "瑙掕壊鎵�鍒嗛厤鐨勬爲", notes = "瑙掕壊鎵�鍒嗛厤鐨勬爲")
+	public R<CheckedTreeVO> roleTreeKeys(String roleIds) {
+		CheckedTreeVO vo = new CheckedTreeVO();
+		vo.setMenu(menuService.roleTreeKeys(roleIds));
+		vo.setDataScope(menuService.dataScopeTreeKeys(roleIds));
+		vo.setApiScope(menuService.apiScopeTreeKeys(roleIds));
+		return R.data(vo);
+	}
+
+	/**
+	 * 鑾峰彇椤堕儴鑿滃崟鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/grant-top-tree")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "椤堕儴鑿滃崟鏍戝舰缁撴瀯", notes = "椤堕儴鑿滃崟鏍戝舰缁撴瀯")
+	public R<GrantTreeVO> grantTopTree(BladeUser user) {
+		GrantTreeVO vo = new GrantTreeVO();
+		vo.setMenu(menuService.grantTopTree(user));
+		return R.data(vo);
+	}
+
+	/**
+	 * 鑾峰彇椤堕儴鑿滃崟鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/top-tree-keys")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "椤堕儴鑿滃崟鎵�鍒嗛厤鐨勬爲", notes = "椤堕儴鑿滃崟鎵�鍒嗛厤鐨勬爲")
+	public R<CheckedTreeVO> topTreeKeys(String topMenuIds) {
+		CheckedTreeVO vo = new CheckedTreeVO();
+		vo.setMenu(menuService.topTreeKeys(topMenuIds));
+		return R.data(vo);
+	}
+
+	/**
+	 * 椤堕儴鑿滃崟鏁版嵁
+	 */
+	@GetMapping("/top-menu")
+	@ApiOperationSupport(order = 16)
+	@ApiOperation(value = "椤堕儴鑿滃崟鏁版嵁", notes = "椤堕儴鑿滃崟鏁版嵁")
+	public R<List<TopMenu>> topMenu(BladeUser user) {
+		if (Func.isEmpty(user)) {
+			return null;
+		}
+		List<TopMenu> list = topMenuService.list(Wrappers.<TopMenu>query().lambda().orderByAsc(TopMenu::getSort));
+		return R.data(list);
+	}
+
+	/**
+	 * 鑾峰彇閰嶇疆鐨勮鑹叉潈闄�
+	 */
+	@GetMapping("/auth-routes")
+	@ApiOperationSupport(order = 17)
+	@ApiOperation(value = "鑿滃崟鐨勮鑹叉潈闄�")
+	public R<List<Kv>> authRoutes(BladeUser user) {
+		if (Func.isEmpty(user)) {
+			return null;
+		}
+		return R.data(menuService.authRoutes(user));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ParamController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ParamController.java
new file mode 100644
index 0000000..7127d81
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ParamController.java
@@ -0,0 +1,107 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IParamService;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Param;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.PARAM_CACHE;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/param")
+@Api(value = "鍙傛暟绠$悊", tags = "鎺ュ彛")
+public class ParamController extends BladeController {
+
+	private final IParamService paramService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆param")
+	public R<Param> detail(Param param) {
+		Param detail = paramService.getOne(Condition.getQueryWrapper(param));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "paramName", value = "鍙傛暟鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "paramKey", value = "鍙傛暟閿悕", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "paramValue", value = "鍙傛暟閿��", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆param")
+	public R<IPage<Param>> list(@ApiIgnore @RequestParam Map<String, Object> param, Query query) {
+		IPage<Param> pages = paramService.page(Condition.getPage(query), Condition.getQueryWrapper(param, Param.class));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆param")
+	public R submit(@Valid @RequestBody Param param) {
+		CacheUtil.clear(PARAM_CACHE);
+		CacheUtil.clear(PARAM_CACHE, Boolean.FALSE);
+		return R.status(paramService.saveOrUpdate(param));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(PARAM_CACHE);
+		CacheUtil.clear(PARAM_CACHE, Boolean.FALSE);
+		return R.status(paramService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/PostController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/PostController.java
new file mode 100644
index 0000000..7e79da8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/PostController.java
@@ -0,0 +1,149 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IPostService;
+import com.vci.ubcs.system.wrapper.PostWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Post;
+import com.vci.ubcs.system.vo.PostVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 宀椾綅琛� 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/post")
+@Api(value = "宀椾綅", tags = "宀椾綅")
+public class PostController extends BladeController {
+
+	private final IPostService postService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆post")
+	public R<PostVO> detail(Post post) {
+		Post detail = postService.getOne(Condition.getQueryWrapper(post));
+		return R.data(PostWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒嗛〉 宀椾綅琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆post")
+	public R<IPage<PostVO>> list(Post post, Query query) {
+		IPage<Post> pages = postService.page(Condition.getPage(query), Condition.getQueryWrapper(post));
+		return R.data(PostWrapper.build().pageVO(pages));
+	}
+
+
+	/**
+	 * 鑷畾涔夊垎椤� 宀椾綅琛�
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆post")
+	public R<IPage<PostVO>> page(PostVO post, Query query) {
+		IPage<PostVO> pages = postService.selectPostPage(Condition.getPage(query), post);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 宀椾綅琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆post")
+	public R save(@Valid @RequestBody Post post) {
+		CacheUtil.clear(SYS_CACHE);
+		return R.status(postService.save(post));
+	}
+
+	/**
+	 * 淇敼 宀椾綅琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆post")
+	public R update(@Valid @RequestBody Post post) {
+		CacheUtil.clear(SYS_CACHE);
+		return R.status(postService.updateById(post));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 宀椾綅琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆post")
+	public R submit(@Valid @RequestBody Post post) {
+		CacheUtil.clear(SYS_CACHE);
+		return R.status(postService.saveOrUpdate(post));
+	}
+
+
+	/**
+	 * 鍒犻櫎 宀椾綅琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(SYS_CACHE);
+		return R.status(postService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 涓嬫媺鏁版嵁婧�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆post")
+	public R<List<Post>> select(String tenantId, BladeUser bladeUser) {
+		List<Post> list = postService.list(Wrappers.<Post>query().lambda().eq(Post::getTenantId, Func.toStrWithEmpty(tenantId, bladeUser.getTenantId())));
+		return R.data(list);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RegionController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RegionController.java
new file mode 100644
index 0000000..787a19c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RegionController.java
@@ -0,0 +1,202 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.excel.RegionExcel;
+import com.vci.ubcs.system.excel.RegionImporter;
+import com.vci.ubcs.system.service.IRegionService;
+import com.vci.ubcs.system.wrapper.RegionWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import com.vci.ubcs.system.entity.Region;
+import com.vci.ubcs.system.vo.RegionVO;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 琛屾斂鍖哄垝琛� 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/region")
+@Api(value = "琛屾斂鍖哄垝", tags = "琛屾斂鍖哄垝")
+public class RegionController extends BladeController {
+
+	private final IRegionService regionService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆region")
+	public R<RegionVO> detail(Region region) {
+		Region detail = regionService.getOne(Condition.getQueryWrapper(region));
+		return R.data(RegionWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒嗛〉 琛屾斂鍖哄垝琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆region")
+	public R<IPage<Region>> list(Region region, Query query) {
+		IPage<Region> pages = regionService.page(Condition.getPage(query), Condition.getQueryWrapper(region));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 */
+	@GetMapping("/lazy-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "鍖哄垝缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "鍖哄垝鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆menu")
+	public R<List<RegionVO>> lazyList(String parentCode, @ApiIgnore @RequestParam Map<String, Object> menu) {
+		List<RegionVO> list = regionService.lazyList(parentCode, menu);
+		return R.data(RegionWrapper.build().listNodeLazyVO(list));
+	}
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 */
+	@GetMapping("/lazy-tree")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "鍖哄垝缂栧彿", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "name", value = "鍖哄垝鍚嶇О", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆menu")
+	public R<List<RegionVO>> lazyTree(String parentCode, @ApiIgnore @RequestParam Map<String, Object> menu) {
+		List<RegionVO> list = regionService.lazyTree(parentCode, menu);
+		return R.data(RegionWrapper.build().listNodeLazyVO(list));
+	}
+
+	/**
+	 * 鏂板 琛屾斂鍖哄垝琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆region")
+	public R save(@Valid @RequestBody Region region) {
+		return R.status(regionService.save(region));
+	}
+
+	/**
+	 * 淇敼 琛屾斂鍖哄垝琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆region")
+	public R update(@Valid @RequestBody Region region) {
+		return R.status(regionService.updateById(region));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 琛屾斂鍖哄垝琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆region")
+	public R submit(@Valid @RequestBody Region region) {
+		return R.status(regionService.submit(region));
+	}
+
+
+	/**
+	 * 鍒犻櫎 琛屾斂鍖哄垝琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆涓婚敭")
+	public R remove(@ApiParam(value = "涓婚敭", required = true) @RequestParam String id) {
+		return R.status(regionService.removeRegion(id));
+	}
+
+	/**
+	 * 琛屾斂鍖哄垝涓嬫媺鏁版嵁婧�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆tenant")
+	public R<List<Region>> select(@RequestParam(required = false, defaultValue = "00") String code) {
+		List<Region> list = regionService.list(Wrappers.<Region>query().lambda().eq(Region::getParentCode, code));
+		return R.data(list);
+	}
+
+	/**
+	 * 瀵煎叆琛屾斂鍖哄垝鏁版嵁
+	 */
+	@PostMapping("import-region")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "瀵煎叆琛屾斂鍖哄垝", notes = "浼犲叆excel")
+	public R importRegion(MultipartFile file, Integer isCovered) {
+		RegionImporter regionImporter = new RegionImporter(regionService, isCovered == 1);
+		ExcelUtil.save(file, regionImporter, RegionExcel.class);
+		return R.success("鎿嶄綔鎴愬姛");
+	}
+
+	/**
+	 * 瀵煎嚭琛屾斂鍖哄垝鏁版嵁
+	 */
+	@GetMapping("export-region")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "瀵煎嚭琛屾斂鍖哄垝", notes = "浼犲叆user")
+	public void exportRegion(@ApiIgnore @RequestParam Map<String, Object> region, HttpServletResponse response) {
+		QueryWrapper<Region> queryWrapper = Condition.getQueryWrapper(region, Region.class);
+		List<RegionExcel> list = regionService.exportRegion(queryWrapper);
+		ExcelUtil.export(response, "琛屾斂鍖哄垝鏁版嵁" + DateUtil.time(), "琛屾斂鍖哄垝鏁版嵁琛�", list, RegionExcel.class);
+	}
+
+	/**
+	 * 瀵煎嚭妯℃澘
+	 */
+	@GetMapping("export-template")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "瀵煎嚭妯℃澘")
+	public void exportUser(HttpServletResponse response) {
+		List<RegionExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "琛屾斂鍖哄垝妯℃澘", "琛屾斂鍖哄垝琛�", list, RegionExcel.class);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java
new file mode 100644
index 0000000..d4bb4a0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java
@@ -0,0 +1,167 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IRoleService;
+import com.vci.ubcs.system.user.cache.UserCache;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.wrapper.RoleWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.entity.Role;
+import com.vci.ubcs.system.vo.GrantVO;
+import com.vci.ubcs.system.vo.RoleVO;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/role")
+@Api(value = "瑙掕壊", tags = "瑙掕壊")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+public class RoleController extends BladeController {
+
+	private final IRoleService roleService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆role")
+	public R<RoleVO> detail(Role role) {
+		Role detail = roleService.getOne(Condition.getQueryWrapper(role));
+		return R.data(RoleWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鍒楄〃
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "roleName", value = "鍙傛暟鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "roleAlias", value = "瑙掕壊鍒悕", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆role")
+	public R<List<RoleVO>> list(@ApiIgnore @RequestParam Map<String, Object> role, BladeUser bladeUser) {
+		QueryWrapper<Role> queryWrapper = Condition.getQueryWrapper(role, Role.class);
+		List<Role> list = roleService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Role::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+		return R.data(RoleWrapper.build().listNodeVO(list));
+	}
+
+	/**
+	 * 鑾峰彇瑙掕壊鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<RoleVO>> tree(String tenantId, BladeUser bladeUser) {
+		List<RoleVO> tree = roleService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇鎸囧畾瑙掕壊鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/tree-by-id")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<RoleVO>> treeById(Long roleId, BladeUser bladeUser) {
+		Role role = SysCache.getRole(roleId);
+		List<RoleVO> tree = roleService.tree(Func.notNull(role) ? role.getTenantId() : bladeUser.getTenantId());
+		return R.data(tree);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆role")
+	public R submit(@Valid @RequestBody Role role) {
+		CacheUtil.clear(SYS_CACHE);
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(roleService.submit(role));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(SYS_CACHE);
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(roleService.removeRole(ids));
+	}
+
+	/**
+	 * 璁剧疆瑙掕壊鏉冮檺
+	 */
+	@PostMapping("/grant")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鏉冮檺璁剧疆", notes = "浼犲叆roleId闆嗗悎浠ュ強menuId闆嗗悎")
+	public R grant(@RequestBody GrantVO grantVO) {
+		CacheUtil.clear(SYS_CACHE);
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds(), grantVO.getDataScopeIds(), grantVO.getApiScopeIds());
+		return R.status(temp);
+	}
+
+	/**
+	 * 涓嬫媺鏁版嵁婧�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆id闆嗗悎")
+	public R<List<Role>> select(Long userId, String roleId) {
+		if (Func.isNotEmpty(userId)) {
+			User user = UserCache.getUser(userId);
+			roleId = user.getRoleId();
+		}
+		List<Role> list = roleService.list(Wrappers.<Role>lambdaQuery().in(Role::getId, Func.toLongList(roleId)));
+		return R.data(list);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/SearchController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/SearchController.java
new file mode 100644
index 0000000..38c956a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/SearchController.java
@@ -0,0 +1,98 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IDeptService;
+import com.vci.ubcs.system.service.IPostService;
+import com.vci.ubcs.system.service.IRoleService;
+import com.vci.ubcs.system.wrapper.PostWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Post;
+import com.vci.ubcs.system.vo.DeptVO;
+import com.vci.ubcs.system.vo.PostVO;
+import com.vci.ubcs.system.vo.RoleVO;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 鏌ヨ鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/search")
+@Api(value = "鏌ヨ", tags = "鏌ヨ")
+public class SearchController {
+
+	private final IRoleService roleService;
+
+	private final IDeptService deptService;
+
+	private final IPostService postService;
+
+	/**
+	 * 瑙掕壊淇℃伅鏌ヨ
+	 */
+	@GetMapping("/role")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "瑙掕壊淇℃伅鏌ヨ", notes = "浼犲叆roleName鎴栬�卲arentId")
+	public R<List<RoleVO>> roleSearch(String roleName, Long parentId) {
+		return R.data(roleService.search(roleName, parentId));
+	}
+
+	/**
+	 * 閮ㄩ棬淇℃伅鏌ヨ
+	 */
+	@GetMapping("/dept")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "閮ㄩ棬淇℃伅鏌ヨ", notes = "浼犲叆deptName鎴栬�卲arentId")
+	public R<List<DeptVO>> deptSearch(String deptName, Long parentId) {
+		return R.data(deptService.search(deptName, parentId));
+	}
+
+	/**
+	 * 宀椾綅淇℃伅鏌ヨ
+	 */
+	@GetMapping("/post")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "宀椾綅淇℃伅鏌ヨ", notes = "浼犲叆postName")
+	public R<IPage<PostVO>> postSearch(String postName, Query query) {
+		LambdaQueryWrapper<Post> queryWrapper = Wrappers.<Post>query().lambda();
+		if (Func.isNotBlank(postName)) {
+			queryWrapper.like(Post::getPostName, postName);
+		}
+		IPage<Post> pages = postService.page(Condition.getPage(query), queryWrapper);
+		return R.data(PostWrapper.build().pageVO(pages));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java
new file mode 100644
index 0000000..f011799
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java
@@ -0,0 +1,122 @@
+package com.vci.ubcs.system.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IStrategyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.Strategy;
+import org.springframework.data.domain.Page;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 瀵嗙爜绛栫暐(Strategy)琛ㄦ帶鍒跺眰
+ *
+ * @author makejava
+ * @since 2023-03-20 16:45:31
+ */
+@NonDS
+@ApiIgnore
+@AllArgsConstructor
+@RestController
+@RequestMapping("/strategy")
+@Api(value = "瀵嗙爜绛栫暐", tags = "鎺ュ彛")
+public class StrategyController {
+
+	/**
+	 * 鏈嶅姟瀵硅薄
+	 */
+	@Resource
+	private IStrategyService strategyService;
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param query 鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鍒嗛〉鏌ヨ", notes = "浼犲叆鍒嗛〉鍙傛暟query")
+	public R<Page<Strategy>> queryByPage(Query query) {
+		Page<Strategy> strategyPage = strategyService.queryAllByPage(query);
+		return R.data(strategyPage);
+	}
+
+	/**
+	 * 鏌ヨ榛樿瀵嗙爜绛栫暐
+	 *
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping("/default")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ヨ榛樿瀵嗙爜绛栫暐")
+	public R<Strategy> queryByIsDefault() {
+		Strategy strategy = strategyService.queryByIsDefault();
+		return R.data(strategy);
+	}
+
+	/**
+	 * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 鍗曟潯鏁版嵁
+	 */
+	@GetMapping("/one")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁", notes = "浼犲叆id")
+	public ResponseEntity<Strategy> queryById(@ApiParam(value = "瀵嗙爜绛栫暐ID", required = true) @RequestParam String id) {
+		return ResponseEntity.ok(this.strategyService.queryById(id));
+	}
+
+	/**
+	 * 鏂板鍜屼慨鏀规暟鎹�
+	 *
+	 * @param strategy 瀹炰綋
+	 * @return 鏂板缁撴灉
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀规暟鎹�", notes = "浼犲叆strategy")
+	public ResponseEntity<Boolean> submit(@Valid @RequestBody Strategy strategy) {
+		return ResponseEntity.ok(this.strategyService.submit(strategy));
+	}
+
+	/**
+	 * 鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鍒犻櫎鏄惁鎴愬姛
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
+	public ResponseEntity<Boolean> deleteById(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam List<String> ids) {
+		return ResponseEntity.ok(this.strategyService.deleteByIds(ids));
+	}
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐
+	 *
+	 * @param userId 瀹炰綋
+	 * @return 鏂板缁撴灉
+	 */
+	@PostMapping("/query-userid")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐", notes = "浼犲叆userId")
+	public R<Strategy> queryByUserId(@Valid @RequestParam Long userId) {
+		return R.data(this.strategyService.queryByUserId(userId));
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantController.java
new file mode 100644
index 0000000..a2e5bcd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantController.java
@@ -0,0 +1,245 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.ITenantPackageService;
+import com.vci.ubcs.system.service.ITenantService;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Tenant;
+import com.vci.ubcs.system.entity.TenantPackage;
+import com.vci.ubcs.system.vo.TenantVO;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+import static org.springblade.core.tenant.constant.TenantBaseConstant.TENANT_DATASOURCE_CACHE;
+import static org.springblade.core.tenant.constant.TenantBaseConstant.TENANT_DATASOURCE_EXIST_KEY;
+import static com.vci.ubcs.system.cache.SysCache.TENANT_PACKAGE_ID;
+import static com.vci.ubcs.system.cache.SysCache.TENANT_TENANT_ID;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+@RequestMapping("/tenant")
+@Api(value = "绉熸埛绠$悊", tags = "鎺ュ彛")
+public class TenantController extends BladeController {
+
+	private final ITenantService tenantService;
+
+	private final ITenantPackageService tenantPackageService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆tenant")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<Tenant> detail(Tenant tenant) {
+		Tenant detail = tenantService.getOne(Condition.getQueryWrapper(tenant));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "tenantId", value = "鍙傛暟鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "tenantName", value = "瑙掕壊鍒悕", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "contactNumber", value = "鑱旂郴鐢佃瘽", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆tenant")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<IPage<Tenant>> list(@ApiIgnore @RequestParam Map<String, Object> tenant, Query query, BladeUser bladeUser) {
+		QueryWrapper<Tenant> queryWrapper = Condition.getQueryWrapper(tenant, Tenant.class);
+		IPage<Tenant> pages = tenantService.page(Condition.getPage(query), (!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Tenant::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+		return R.data(pages);
+	}
+
+	/**
+	 * 涓嬫媺鏁版嵁婧�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆tenant")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<List<Tenant>> select(Tenant tenant, BladeUser bladeUser) {
+		QueryWrapper<Tenant> queryWrapper = Condition.getQueryWrapper(tenant);
+		List<Tenant> list = tenantService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Tenant::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+		return R.data(list);
+	}
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆tenant")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<IPage<Tenant>> page(Tenant tenant, Query query) {
+		IPage<Tenant> pages = tenantService.selectTenantPage(Condition.getPage(query), tenant);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆tenant")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	public R submit(@Valid @RequestBody TenantVO tenantVO) {
+		return R.status(tenantService.submitTenant(tenantVO));
+	}
+
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(tenantService.removeTenant(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 鏁版嵁婧愰厤缃�
+	 */
+	@PostMapping("/datasource")
+	@ApiOperationSupport(order = 8)
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperation(value = "鏁版嵁婧愰厤缃�", notes = "浼犲叆datasource_id")
+	public R datasource(@ApiParam(value = "绉熸埛ID", required = true) @RequestParam String tenantId, @ApiParam(value = "鏁版嵁婧怚D", required = true) @RequestParam Long datasourceId){
+		CacheUtil.evict(TENANT_DATASOURCE_CACHE, TENANT_DATASOURCE_EXIST_KEY, tenantId, Boolean.FALSE);
+		return R.status(tenantService.update(Wrappers.<Tenant>update().lambda().set(Tenant::getDatasourceId, datasourceId).eq(Tenant::getTenantId, tenantId)));
+	}
+
+	/**
+	 * 鏍规嵁鍚嶇О鏌ヨ鍒楄〃
+	 *
+	 * @param name 绉熸埛鍚嶇О
+	 */
+	@GetMapping("/find-by-name")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆tenant")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<List<Tenant>> findByName(String name) {
+		List<Tenant> list = tenantService.list(Wrappers.<Tenant>query().lambda().like(Tenant::getTenantName, name));
+		return R.data(list);
+	}
+
+	/**
+	 * 鏍规嵁鍩熷悕鏌ヨ淇℃伅
+	 *
+	 * @param domain 鍩熷悕
+	 */
+	@GetMapping("/info")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "閰嶇疆淇℃伅", notes = "浼犲叆domain")
+	public R<Kv> info(String domain) {
+		Tenant tenant = tenantService.getOne(Wrappers.<Tenant>query().lambda().eq(Tenant::getDomainUrl, domain));
+		Kv kv = Kv.create();
+		if (tenant != null) {
+			kv.set("tenantId", tenant.getTenantId())
+				.set("domain", tenant.getDomainUrl())
+				.set("backgroundUrl", tenant.getBackgroundUrl());
+		}
+		return R.data(kv);
+	}
+
+	/**
+	 * 鏍规嵁绉熸埛ID鏌ヨ浜у搧鍖呰鎯�
+	 *
+	 * @param tenantId 绉熸埛ID
+	 */
+	@GetMapping("/package-detail")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "浜у搧鍖呰鎯�", notes = "浼犲叆tenantId")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	public R<TenantPackage> packageDetail(Long tenantId) {
+		Tenant tenant = tenantService.getById(tenantId);
+		return R.data(tenantPackageService.getById(tenant.getPackageId()));
+	}
+
+	/**
+	 * 浜у搧鍖呴厤缃�
+	 */
+	@PostMapping("/package-setting")
+	@ApiOperationSupport(order = 12)
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	@ApiOperation(value = "浜у搧鍖呴厤缃�", notes = "浼犲叆packageId")
+	public R packageSetting(@ApiParam(value = "绉熸埛ID", required = true) @RequestParam String tenantId, @ApiParam(value = "浜у搧鍖匢D") Long packageId) {
+		CacheUtil.evict(SYS_CACHE, TENANT_TENANT_ID, tenantId, Boolean.FALSE);
+		CacheUtil.evict(SYS_CACHE, TENANT_PACKAGE_ID, tenantId, Boolean.FALSE);
+		return R.status(tenantService.update(Wrappers.<Tenant>update().lambda().set(Tenant::getPackageId, packageId).eq(Tenant::getTenantId, tenantId)));
+	}
+
+	/**
+	 * 鏌ヨ绉熸埛淇℃伅锛岀畝閿�煎褰㈠娍
+	 * @return
+	 */
+	@GetMapping("/tenant-map")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "涓嬫媺绉熸埛淇℃伅")
+	public R<List> findAll() {
+		List<Map<String, Object>> map = tenantService.selectMaps();
+		return R.data(map);
+	}
+
+	/**
+	 * 鏌ヨ鏄惁閰嶇疆鏈夐粯璁ゅ繀椤诲紑鍚笁鍛樼鐞�
+	 * @return
+	 */
+	@GetMapping("/find-ssa-enable")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "涓嬫媺绉熸埛淇℃伅")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	public R findIsOpen() {
+		boolean isOpen = this.tenantService.findIsOpen();
+		return R.data(isOpen);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantPackageController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantPackageController.java
new file mode 100644
index 0000000..a323994
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantPackageController.java
@@ -0,0 +1,131 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.ITenantPackageService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.TenantPackage;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 绉熸埛浜у搧琛� 鎺у埗鍣�
+ *
+ * @author BladeX
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/tenant-package")
+@Api(value = "绉熸埛浜у搧琛�", tags = "绉熸埛浜у搧琛ㄦ帴鍙�")
+public class TenantPackageController extends BladeController {
+
+	private final ITenantPackageService tenantPackageService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆tenantPackage")
+	public R<TenantPackage> detail(TenantPackage tenantPackage) {
+		TenantPackage detail = tenantPackageService.getOne(Condition.getQueryWrapper(tenantPackage));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉 绉熸埛浜у搧琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆tenantPackage")
+	public R<IPage<TenantPackage>> list(TenantPackage tenantPackage, Query query) {
+		IPage<TenantPackage> pages = tenantPackageService.page(Condition.getPage(query), Condition.getQueryWrapper(tenantPackage));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 绉熸埛浜у搧琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆tenantPackage")
+	public R save(@Valid @RequestBody TenantPackage tenantPackage) {
+		return R.status(tenantPackageService.save(tenantPackage));
+	}
+
+	/**
+	 * 淇敼 绉熸埛浜у搧琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆tenantPackage")
+	public R update(@Valid @RequestBody TenantPackage tenantPackage) {
+		return R.status(tenantPackageService.updateById(tenantPackage));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 绉熸埛浜у搧琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆tenantPackage")
+	public R submit(@Valid @RequestBody TenantPackage tenantPackage) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(tenantPackageService.saveOrUpdate(tenantPackage));
+	}
+
+
+	/**
+	 * 鍒犻櫎 绉熸埛浜у搧琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+		return R.status(tenantPackageService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+	/**
+	 * 涓嬫媺鏁版嵁婧�
+	 */
+	@GetMapping("/select")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "涓嬫媺鏁版嵁婧�", notes = "浼犲叆tenant")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<List<TenantPackage>> select(TenantPackage tenantPackage) {
+		return R.data(tenantPackageService.list(Condition.getQueryWrapper(tenantPackage)));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TopMenuController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TopMenuController.java
new file mode 100644
index 0000000..4321169
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TopMenuController.java
@@ -0,0 +1,136 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.ITopMenuService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.TopMenu;
+import com.vci.ubcs.system.vo.GrantVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 椤堕儴鑿滃崟琛� 鎺у埗鍣�
+ *
+ * @author BladeX
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/topmenu")
+@Api(value = "椤堕儴鑿滃崟琛�", tags = "椤堕儴鑿滃崟")
+//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+public class TopMenuController extends BladeController {
+
+	private final ITopMenuService topMenuService;
+
+	/**
+	 * 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆topMenu")
+	public R<TopMenu> detail(TopMenu topMenu) {
+		TopMenu detail = topMenuService.getOne(Condition.getQueryWrapper(topMenu));
+		return R.data(detail);
+	}
+
+	/**
+	 * 鍒嗛〉 椤堕儴鑿滃崟琛�
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆topMenu")
+	public R<IPage<TopMenu>> list(TopMenu topMenu, Query query) {
+		IPage<TopMenu> pages = topMenuService.page(Condition.getPage(query), Condition.getQueryWrapper(topMenu).lambda().orderByAsc(TopMenu::getSort));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板 椤堕儴鑿滃崟琛�
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆topMenu")
+	public R save(@Valid @RequestBody TopMenu topMenu) {
+		return R.status(topMenuService.save(topMenu));
+	}
+
+	/**
+	 * 淇敼 椤堕儴鑿滃崟琛�
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆topMenu")
+	public R update(@Valid @RequestBody TopMenu topMenu) {
+		return R.status(topMenuService.updateById(topMenu));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀� 椤堕儴鑿滃崟琛�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆topMenu")
+	public R submit(@Valid @RequestBody TopMenu topMenu) {
+		return R.status(topMenuService.saveOrUpdate(topMenu));
+	}
+
+
+	/**
+	 * 鍒犻櫎 椤堕儴鑿滃崟琛�
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(topMenuService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 璁剧疆椤堕儴鑿滃崟
+	 */
+	@PostMapping("/grant")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "椤堕儴鑿滃崟閰嶇疆", notes = "浼犲叆topMenuId闆嗗悎浠ュ強menuId闆嗗悎")
+	public R grant(@RequestBody GrantVO grantVO) {
+		CacheUtil.clear(SYS_CACHE);
+		CacheUtil.clear(MENU_CACHE);
+		CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
+		boolean temp = topMenuService.grant(grantVO.getTopMenuIds(), grantVO.getMenuIds());
+		return R.status(temp);
+	}
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java
new file mode 100644
index 0000000..bbdeea0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java
@@ -0,0 +1,62 @@
+package com.vci.ubcs.system.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IUserPwdstrategyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import com.vci.ubcs.system.vo.UserPwdstrategyVO;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * 鐢ㄦ埛瀵嗙爜绛栫暐鍏宠仈(UserPwdstrategy)琛ㄦ帶鍒跺眰
+ *
+ * @author ludc
+ * @since 2023-03-20 15:23:24
+ */
+@NonDS
+@ApiIgnore
+@AllArgsConstructor
+@RestController
+@RequestMapping("/user-pwdstrategy")
+@Api(value = "鐢ㄦ埛瀵嗙爜瀹夊叏绛栫暐鍏宠仈琛�", tags = "鎺ュ彛")
+public class UserPwdstrategyController {
+
+	@Resource
+	private IUserPwdstrategyService userPwdstrategyService;
+
+	/**
+	 * 鏂板鍜屼慨鏀规暟鎹�
+	 *
+	 * @param userPwdstrategyVO 瀹炰綋
+	 * @return 鏂板缁撴灉
+	 */
+	@PutMapping("/insert")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鏁版嵁", notes = "浼犲叆userPwdstrategy")
+	public ResponseEntity<Boolean> insert(@Valid @RequestBody UserPwdstrategyVO userPwdstrategyVO) {
+		return ResponseEntity.ok(this.userPwdstrategyService.submit(userPwdstrategyVO));
+	}
+
+	/**
+	 * 鏂板鍜屼慨鏀规暟鎹�
+	 *
+	 * @param userPwdstrategyVO 瀹炰綋
+	 * @return 鏂板缁撴灉
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "淇敼鏁版嵁", notes = "浼犲叆userPwdstrategy")
+	public ResponseEntity<Boolean> update(@Valid @RequestBody UserPwdstrategyVO userPwdstrategyVO) {
+		return ResponseEntity.ok(this.userPwdstrategyService.submit(userPwdstrategyVO));
+	}
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ValueRangeController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ValueRangeController.java
new file mode 100644
index 0000000..586f557
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ValueRangeController.java
@@ -0,0 +1,92 @@
+package com.vci.ubcs.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.service.IValueRangeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.ValueRange;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * (ValueRangeController)琛ㄦ帶鍒跺眰
+ *
+ * @author ludc
+ * @since 2023-03-20 15:23:24
+ */
+@NonDS
+@ApiIgnore
+@AllArgsConstructor
+@RestController
+@RequestMapping("/value-range")
+@Api(value = "瀵嗙爜缁勫悎鏂瑰紡鍙栧��", tags = "鎺ュ彛")
+public class ValueRangeController {
+
+	/**
+	 * 鏈嶅姟瀵硅薄
+	 */
+	@Resource
+	private IValueRangeService valueRangeService;
+
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dataScope")
+	public R<List<ValueRange>> queryByList() {
+		return R.data(valueRangeService.queryByAll());
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param valueRange 绛涢�夋潯浠�
+	 * @param query      鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉鏌ヨ", notes = "浼犲叆valueRange锛屽垎椤靛弬鏁皅uery")
+	public R<IPage<ValueRange>> queryByPage(ValueRange valueRange, Query query) {
+		IPage<ValueRange> pages = valueRangeService.page(Condition.getPage(query), Condition.getQueryWrapper(valueRange));
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏂板鍜屼慨鏀规暟鎹�
+	 *
+	 * @param valueRange 瀹炰綋
+	 * @return 鏂板缁撴灉
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鍜屼慨鏀规暟鎹�", notes = "浼犲叆valueRange")
+	public ResponseEntity<Boolean> submit(@Valid @RequestBody ValueRange valueRange) {
+		return ResponseEntity.ok(this.valueRangeService.submit(valueRange));
+	}
+
+	/**
+	 * 鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鍒犻櫎鏄惁鎴愬姛
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public ResponseEntity<Boolean> deleteById(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam List<String> ids) {
+		return ResponseEntity.ok(this.valueRangeService.deleteByIds(ids));
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionExcel.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionExcel.java
new file mode 100644
index 0000000..8594479
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionExcel.java
@@ -0,0 +1,90 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * RegionExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(16)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class RegionExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ExcelProperty("鍖哄垝缂栧彿")
+	private String code;
+
+	@ExcelProperty("鐖跺尯鍒掔紪鍙�")
+	private String parentCode;
+
+	@ExcelProperty("绁栧尯鍒掔紪鍙�")
+	private String ancestors;
+
+	@ExcelProperty("鍖哄垝鍚嶇О")
+	private String name;
+
+	@ExcelProperty("鐪佺骇鍖哄垝缂栧彿")
+	private String provinceCode;
+
+	@ExcelProperty("鐪佺骇鍚嶇О")
+	private String provinceName;
+
+	@ExcelProperty("甯傜骇鍖哄垝缂栧彿")
+	private String cityCode;
+
+	@ExcelProperty("甯傜骇鍚嶇О")
+	private String cityName;
+
+	@ExcelProperty("鍖虹骇鍖哄垝缂栧彿")
+	private String districtCode;
+
+	@ExcelProperty("鍖虹骇鍚嶇О")
+	private String districtName;
+
+	@ExcelProperty("闀囩骇鍖哄垝缂栧彿")
+	private String townCode;
+
+	@ExcelProperty("闀囩骇鍚嶇О")
+	private String townName;
+
+	@ExcelProperty("鏉戠骇鍖哄垝缂栧彿")
+	private String villageCode;
+
+	@ExcelProperty("鏉戠骇鍚嶇О")
+	private String villageName;
+
+	@ExcelProperty("灞傜骇")
+	private Integer regionLevel;
+
+	@ExcelProperty("鎺掑簭")
+	private Integer sort;
+
+	@ExcelProperty("澶囨敞")
+	private String remark;
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionImporter.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionImporter.java
new file mode 100644
index 0000000..5116dce
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionImporter.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.excel;
+
+import com.vci.ubcs.system.service.IRegionService;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+
+import java.util.List;
+
+/**
+ * 琛屾斂鍖哄垝鏁版嵁瀵煎叆绫�
+ *
+ * @author Chill
+ */
+@RequiredArgsConstructor
+public class RegionImporter implements ExcelImporter<RegionExcel> {
+
+	private final IRegionService service;
+	private final Boolean isCovered;
+
+	@Override
+	public void save(List<RegionExcel> data) {
+		service.importRegion(data, isCovered);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/ApiScopeClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/ApiScopeClient.java
new file mode 100644
index 0000000..214d48d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/ApiScopeClient.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.springblade.core.secure.constant.PermissionConstant.permissionAllStatement;
+import static org.springblade.core.secure.constant.PermissionConstant.permissionStatement;
+
+/**
+ * 鎺ュ彛鏉冮檺Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@RequiredArgsConstructor
+public class ApiScopeClient implements IApiScopeClient {
+
+	private final JdbcTemplate jdbcTemplate;
+
+	@Override
+	@GetMapping(PERMISSION_PATH)
+	public List<String> permissionPath(String roleId) {
+		List<Long> roleIds = Func.toLongList(roleId);
+		return jdbcTemplate.queryForList(permissionAllStatement(roleIds.size()), roleIds.toArray(), String.class);
+	}
+
+	@Override
+	@GetMapping(PERMISSION_CODE)
+	public List<String> permissionCode(String permission, String roleId) {
+		List<Object> args = new ArrayList<>(Collections.singletonList(permission));
+		List<Long> roleIds = Func.toLongList(roleId);
+		args.addAll(roleIds);
+		return jdbcTemplate.queryForList(permissionStatement(roleIds.size()), args.toArray(), String.class);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DataScopeClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DataScopeClient.java
new file mode 100644
index 0000000..fd567a1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DataScopeClient.java
@@ -0,0 +1,109 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.datascope.constant.DataScopeConstant;
+import org.springblade.core.datascope.model.DataScopeModel;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 鏁版嵁鏉冮檺Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@RequiredArgsConstructor
+public class DataScopeClient implements IDataScopeClient {
+
+	private static final DataScopeModel SEARCHED_DATA_SCOPE_MODEL = new DataScopeModel(Boolean.TRUE);
+
+	private final JdbcTemplate jdbcTemplate;
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param mapperId 鏁版嵁鏉冮檺mapperId
+	 * @param roleId   鐢ㄦ埛瑙掕壊闆嗗悎
+	 * @return DataScopeModel
+	 */
+	@Override
+	@GetMapping(GET_DATA_SCOPE_BY_MAPPER)
+	public DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
+		List<Object> args = new ArrayList<>(Collections.singletonList(mapperId));
+		List<Long> roleIds = Func.toLongList(roleId);
+		args.addAll(roleIds);
+		// 澧炲姞searched瀛楁闃叉鏈厤缃殑鍙傛暟閲嶅璇诲簱瀵艰嚧缂撳瓨鍑荤┛
+		// 鍚庣画鑻ユ湁鏂板閰嶇疆鍒欎細娓呯┖缂撳瓨閲嶆柊鍔犺浇
+		DataScopeModel dataScope;
+		List<DataScopeModel> list = jdbcTemplate.query(DataScopeConstant.dataByMapper(roleIds.size()), args.toArray(), new BeanPropertyRowMapper<>(DataScopeModel.class));
+		if (CollectionUtil.isNotEmpty(list)) {
+			dataScope = list.iterator().next();
+			dataScope.setSearched(Boolean.TRUE);
+		} else {
+			dataScope = SEARCHED_DATA_SCOPE_MODEL;
+		}
+		return dataScope;
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁鏉冮檺
+	 *
+	 * @param code 鏁版嵁鏉冮檺璧勬簮缂栧彿
+	 * @return DataScopeModel
+	 */
+	@Override
+	@GetMapping(GET_DATA_SCOPE_BY_CODE)
+	public DataScopeModel getDataScopeByCode(String code) {
+		// 澧炲姞searched瀛楁闃叉鏈厤缃殑鍙傛暟閲嶅璇诲簱瀵艰嚧缂撳瓨鍑荤┛
+		// 鍚庣画鑻ユ湁鏂板閰嶇疆鍒欎細娓呯┖缂撳瓨閲嶆柊鍔犺浇
+		DataScopeModel dataScope;
+		List<DataScopeModel> list = jdbcTemplate.query(DataScopeConstant.DATA_BY_CODE, new Object[]{code}, new BeanPropertyRowMapper<>(DataScopeModel.class));
+		if (CollectionUtil.isNotEmpty(list)) {
+			dataScope = list.iterator().next();
+			dataScope.setSearched(Boolean.TRUE);
+		} else {
+			dataScope = SEARCHED_DATA_SCOPE_MODEL;
+		}
+		return dataScope;
+	}
+
+	/**
+	 * 鑾峰彇閮ㄩ棬瀛愮骇
+	 *
+	 * @param deptId 閮ㄩ棬id
+	 * @return deptIds
+	 */
+	@Override
+	@GetMapping(GET_DEPT_ANCESTORS)
+	public List<Long> getDeptAncestors(Long deptId) {
+		return jdbcTemplate.queryForList(DataScopeConstant.DATA_BY_DEPT, new Object[]{deptId}, Long.class);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictBizClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictBizClient.java
new file mode 100644
index 0000000..7eb0cc3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictBizClient.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+
+import com.vci.ubcs.system.service.IDictBizService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.DictBiz;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+
+
+/**
+ * 瀛楀吀鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class DictBizClient implements IDictBizClient {
+
+	private final IDictBizService service;
+
+	@Override
+	@GetMapping(GET_BY_ID)
+	public R<DictBiz> getById(Long id) {
+		return R.data(service.getById(id));
+	}
+
+	@Override
+	@GetMapping(GET_VALUE)
+	public R<String> getValue(String code, String dictKey) {
+		return R.data(service.getValue(code, dictKey));
+	}
+
+	@Override
+	@GetMapping(GET_LIST)
+	public R<List<DictBiz>> getList(String code) {
+		return R.data(service.getList(code));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictClient.java
new file mode 100644
index 0000000..a3846d2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictClient.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+
+import com.vci.ubcs.system.service.IDictService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import com.vci.ubcs.system.entity.Dict;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+
+
+/**
+ * 瀛楀吀鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class DictClient implements IDictClient {
+
+	private final IDictService service;
+
+	@Override
+	@GetMapping(GET_BY_ID)
+	public R<Dict> getById(Long id) {
+		return R.data(service.getById(id));
+	}
+
+	@Override
+	@GetMapping(GET_VALUE)
+	public R<String> getValue(String code, String dictKey) {
+		return R.data(service.getValue(code, dictKey));
+	}
+
+	@Override
+	@GetMapping(GET_LIST)
+	public R<List<Dict>> getList(String code) {
+		return R.data(service.getList(code));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
new file mode 100644
index 0000000..5f1dca7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
@@ -0,0 +1,225 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.feign;
+
+import com.vci.ubcs.system.entity.*;
+import com.vci.ubcs.system.service.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+
+/**
+ * 绯荤粺鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class SysClient implements ISysClient {
+
+	private final IDeptService deptService;
+
+	private final IPostService postService;
+
+	private final IRoleService roleService;
+
+	private final IMenuService menuService;
+
+	private final ITenantService tenantService;
+
+	private final ITenantPackageService tenantPackageService;
+
+	private final IParamService paramService;
+
+	private final IRegionService regionService;
+
+	private final IStrategyService strategyService;
+
+	private final ICombinationService combinationService;
+
+	@Override
+	@GetMapping(MENU)
+	public R<Menu> getMenu(Long id) {
+		return R.data(menuService.getById(id));
+	}
+
+	@Override
+	@GetMapping(DEPT)
+	public R<Dept> getDept(Long id) {
+		return R.data(deptService.getById(id));
+	}
+
+	@Override
+	public R<String> getDeptIds(String tenantId, String deptNames) {
+		return R.data(deptService.getDeptIds(tenantId, deptNames));
+	}
+
+	@Override
+	public R<String> getDeptIdsByFuzzy(String tenantId, String deptNames) {
+		return R.data(deptService.getDeptIdsByFuzzy(tenantId, deptNames));
+	}
+
+	@Override
+	@GetMapping(DEPT_NAME)
+	public R<String> getDeptName(Long id) {
+		return R.data(deptService.getById(id).getDeptName());
+	}
+
+	@Override
+	@GetMapping(DEPT_NAMES)
+	public R<List<String>> getDeptNames(String deptIds) {
+		return R.data(deptService.getDeptNames(deptIds));
+	}
+
+	@Override
+	@GetMapping(DEPT_CHILD)
+	public R<List<Dept>> getDeptChild(Long deptId) {
+		return R.data(deptService.getDeptChild(deptId));
+	}
+
+	@Override
+	public R<Post> getPost(Long id) {
+		return R.data(postService.getById(id));
+	}
+
+	@Override
+	public R<String> getPostIds(String tenantId, String postNames) {
+		return R.data(postService.getPostIds(tenantId, postNames));
+	}
+
+	@Override
+	public R<String> getPostIdsByFuzzy(String tenantId, String postNames) {
+		return R.data(postService.getPostIdsByFuzzy(tenantId, postNames));
+	}
+
+	@Override
+	public R<String> getPostName(Long id) {
+		return R.data(postService.getById(id).getPostName());
+	}
+
+	@Override
+	public R<List<String>> getPostNames(String postIds) {
+		return R.data(postService.getPostNames(postIds));
+	}
+
+	@Override
+	@GetMapping(ROLE)
+	public R<Role> getRole(Long id) {
+		return R.data(roleService.getById(id));
+	}
+
+	@Override
+	public R<String> getRoleIds(String tenantId, String roleNames) {
+		return R.data(roleService.getRoleIds(tenantId, roleNames));
+	}
+
+	@Override
+	@GetMapping(ROLE_NAME)
+	public R<String> getRoleName(Long id) {
+		return R.data(roleService.getById(id).getRoleName());
+	}
+
+	@Override
+	@GetMapping(ROLE_ALIAS)
+	public R<String> getRoleAlias(Long id) {
+		return R.data(roleService.getById(id).getRoleAlias());
+	}
+
+	@Override
+	@GetMapping(ROLE_NAMES)
+	public R<List<String>> getRoleNames(String roleIds) {
+		return R.data(roleService.getRoleNames(roleIds));
+	}
+
+	@Override
+	@GetMapping(ROLE_ALIASES)
+	public R<List<String>> getRoleAliases(String roleIds) {
+		return R.data(roleService.getRoleAliases(roleIds));
+	}
+
+	@Override
+	@GetMapping(TENANT)
+	public R<Tenant> getTenant(Long id) {
+		return R.data(tenantService.getById(id));
+	}
+
+	@Override
+	@GetMapping(TENANT_ID)
+	public R<Tenant> getTenant(String tenantId) {
+		return R.data(tenantService.getByTenantId(tenantId));
+	}
+
+	@Override
+	@GetMapping(TENANT_PACKAGE)
+	public R<TenantPackage> getTenantPackage(String tenantId) {
+		Tenant tenant = tenantService.getByTenantId(tenantId);
+		return R.data(tenantPackageService.getById(tenant.getPackageId()));
+	}
+
+	@Override
+	@GetMapping(PARAM)
+	public R<Param> getParam(Long id) {
+		return R.data(paramService.getById(id));
+	}
+
+	@Override
+	@GetMapping(PARAM_VALUE)
+	public R<String> getParamValue(String paramKey) {
+		return R.data(paramService.getValue(paramKey));
+	}
+
+	@Override
+	@GetMapping(REGION)
+	public R<Region> getRegion(String code) {
+		return R.data(regionService.getById(code));
+	}
+
+	@Override
+	@PostMapping(STRATEGY)
+	public R<Strategy> getByTenantIdAndName(String tenantId, String name) {
+		return R.data(strategyService.queryByNameAndTenantId(tenantId,name));
+	}
+
+	@Override
+	@PostMapping(STRATEGYBYID)
+	public R<Strategy> getByUserId(Long userId) {
+		return R.data(strategyService.queryByUserId(userId));
+	}
+
+	@Override
+	@PostMapping(REGEX)
+	public R<String> getRegex(@RequestBody List<String> combinationIds) {
+		return R.data(combinationService.getRegex(combinationIds));
+	}
+
+	@Override
+	@PostMapping(REGEXONE)
+	public R<List<String>> getRegexByList(List<String> combinationIds) {
+		return R.data(combinationService.getRegexList(combinationIds));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ApiScopeMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ApiScopeMapper.java
new file mode 100644
index 0000000..9a2d45a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ApiScopeMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.ApiScope;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author BladeX
+ */
+public interface ApiScopeMapper extends BaseMapper<ApiScope> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/AuthClientMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/AuthClientMapper.java
new file mode 100644
index 0000000..d8720d5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/AuthClientMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.AuthClient;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface AuthClientMapper extends BaseMapper<AuthClient> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/CombinationMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/CombinationMapper.java
new file mode 100644
index 0000000..6c0dc74
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/CombinationMapper.java
@@ -0,0 +1,59 @@
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import com.vci.ubcs.system.entity.Combination;
+
+import java.util.List;
+
+/**
+ * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2023-03-20 15:23:17
+ */
+public interface CombinationMapper extends BaseMapper<Combination> {
+
+	/**
+	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	Combination queryById(String id);
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 * @param page
+	 * @param combination
+	 * @return
+	 */
+	List<Combination> selectCombinationPage(IPage page, Combination combination);
+
+	/**
+	 * 缁熻鎬昏鏁�
+	 *
+	 * @param combination 鏌ヨ鏉′欢
+	 * @return 鎬昏鏁�
+	 */
+	long count(Combination combination);
+
+	/**
+	 * 鏌ヨ缁勫悎鏂瑰紡姝e垯
+	 *
+	 * @param combinationIds 鏌ヨ鏉′欢
+	 * @return 鎬昏鏁�
+	 */
+	String queryRegex(@Param("combinationIds") List<String> combinationIds);
+
+	/**
+	 * 鏌ヨ缁勫悎鏂瑰紡瀵瑰簲姝e垯闆嗗悎
+	 *
+	 * @param combinationIds 鏌ヨ鏉′欢
+	 * @return 鎬昏鏁�
+	 */
+	List<String> queryRegexList(@Param("combinationIds") List<String> combinationIds);
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DataScopeMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DataScopeMapper.java
new file mode 100644
index 0000000..7b05aeb
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DataScopeMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.DataScope;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author BladeX
+ */
+public interface DataScopeMapper extends BaseMapper<DataScope> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java
new file mode 100644
index 0000000..ef7b5c0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java
@@ -0,0 +1,68 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.Dept;
+import com.vci.ubcs.system.vo.DeptVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * DeptMapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface DeptMapper extends BaseMapper<Dept> {
+
+	/**
+	 * 鎳掑姞杞介儴闂ㄥ垪琛�
+	 *
+	 * @param tenantId
+	 * @param parentId
+	 * @param param
+	 * @return
+	 */
+	List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @param tenantId
+	 * @return
+	 */
+	List<DeptVO> tree(String tenantId);
+
+	/**
+	 * 鎳掑姞杞借幏鍙栨爲褰㈣妭鐐�
+	 *
+	 * @param tenantId
+	 * @param parentId
+	 * @return
+	 */
+	List<DeptVO> lazyTree(String tenantId, Long parentId);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鍚�
+	 *
+	 * @param ids
+	 * @return
+	 */
+	List<String> getDeptNames(Long[] ids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictBizMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictBizMapper.java
new file mode 100644
index 0000000..c7b5fac
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictBizMapper.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.DictBiz;
+import com.vci.ubcs.system.vo.DictBizVO;
+
+import java.util.List;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface DictBizMapper extends BaseMapper<DictBiz> {
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	String getValue(String code, String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	List<DictBiz> getList(String code);
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @return
+	 */
+	List<DictBizVO> tree();
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @return
+	 */
+	List<DictBizVO> parentTree();
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictMapper.java
new file mode 100644
index 0000000..cce81c9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictMapper.java
@@ -0,0 +1,73 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.system.entity.Dict;
+import com.vci.ubcs.system.vo.DictVO;
+
+import java.util.List;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface DictMapper extends BaseMapper<Dict> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param dict
+	 * @return
+	 */
+	List<DictVO> selectDictPage(IPage page, DictVO dict);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	String getValue(String code, String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	List<Dict> getList(String code);
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @return
+	 */
+	List<DictVO> tree();
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @return
+	 */
+	List<DictVO> parentTree();
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
new file mode 100644
index 0000000..64bfdc7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
@@ -0,0 +1,183 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.core.tool.node.TreeNode;
+import com.vci.ubcs.system.dto.MenuDTO;
+import com.vci.ubcs.system.entity.Menu;
+import com.vci.ubcs.system.vo.MenuVO;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * MenuMapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface MenuMapper extends BaseMapper<Menu> {
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 *
+	 * @param parentId
+	 * @param param
+	 * @return
+	 */
+	List<MenuVO> lazyList(Long parentId, Map<String, Object> param);
+
+	/**
+	 * 鎳掑姞杞借彍鍗曞垪琛�
+	 *
+	 * @param parentId
+	 * @param param
+	 * @return
+	 */
+	List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<TreeNode> tree();
+
+	/**
+	 * 鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<TreeNode> grantTree();
+
+	/**
+	 * 鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<TreeNode> grantTreeByRole(List<Long> roleId);
+
+	/**
+	 * 椤堕儴鑿滃崟鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<TreeNode> grantTopTree();
+
+	/**
+	 * 椤堕儴鑿滃崟鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<TreeNode> grantTopTreeByRole(List<Long> roleId);
+
+	/**
+	 * 鏁版嵁鏉冮檺鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<TreeNode> grantDataScopeTree();
+
+	/**
+	 * 鎺ュ彛鏉冮檺鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<TreeNode> grantApiScopeTree();
+
+	/**
+	 * 鏁版嵁鏉冮檺鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<TreeNode> grantDataScopeTreeByRole(List<Long> roleId);
+
+	/**
+	 * 鎺ュ彛鏉冮檺鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<TreeNode> grantApiScopeTreeByRole(List<Long> roleId);
+
+	/**
+	 * 鎵�鏈夎彍鍗�
+	 *
+	 * @return
+	 */
+	List<Menu> allMenu();
+
+	/**
+	 * 鏉冮檺閰嶇疆鑿滃崟
+	 *
+	 * @param roleId
+	 * @param topMenuId
+	 * @return
+	 */
+	List<Menu> roleMenu(List<Long> roleId, Long topMenuId);
+
+	/**
+	 * 鏉冮檺閰嶇疆鑿滃崟
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<Menu> roleMenuByRoleId(List<Long> roleId);
+
+	/**
+	 * 鏉冮檺閰嶇疆鑿滃崟
+	 *
+	 * @param topMenuId
+	 * @return
+	 */
+	List<Menu> roleMenuByTopMenuId(Long topMenuId);
+
+	/**
+	 * 鑿滃崟鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<Menu> routes(List<Long> roleId);
+
+	/**
+	 * 鎸夐挳鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<Menu> allButtons();
+
+	/**
+	 * 鎸夐挳鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<Menu> buttons(List<Long> roleId);
+
+	/**
+	 * 鑾峰彇閰嶇疆鐨勮鑹叉潈闄�
+	 *
+	 * @param roleIds
+	 * @return
+	 */
+	List<MenuDTO> authRoutes(List<Long> roleIds);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ParamMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ParamMapper.java
new file mode 100644
index 0000000..4d0b4f8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ParamMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.Param;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface ParamMapper extends BaseMapper<Param> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/PostMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/PostMapper.java
new file mode 100644
index 0000000..69f9c3f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/PostMapper.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.system.entity.Post;
+import com.vci.ubcs.system.vo.PostVO;
+
+import java.util.List;
+
+/**
+ * 宀椾綅琛� Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface PostMapper extends BaseMapper<Post> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param post
+	 * @return
+	 */
+	List<PostVO> selectPostPage(IPage page, PostVO post);
+
+	/**
+	 * 鑾峰彇宀椾綅鍚�
+	 *
+	 * @param ids
+	 * @return
+	 */
+	List<String> getPostNames(Long[] ids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RegionMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RegionMapper.java
new file mode 100644
index 0000000..4114731
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RegionMapper.java
@@ -0,0 +1,62 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.excel.RegionExcel;
+import org.apache.ibatis.annotations.Param;
+import com.vci.ubcs.system.entity.Region;
+import com.vci.ubcs.system.vo.RegionVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 琛屾斂鍖哄垝琛� Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface RegionMapper extends BaseMapper<Region> {
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 *
+	 * @param parentCode
+	 * @param param
+	 * @return
+	 */
+	List<RegionVO> lazyList(String parentCode, Map<String, Object> param);
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 *
+	 * @param parentCode
+	 * @param param
+	 * @return
+	 */
+	List<RegionVO> lazyTree(String parentCode, Map<String, Object> param);
+
+	/**
+	 * 瀵煎嚭鍖哄垝鏁版嵁
+	 *
+	 * @param queryWrapper
+	 * @return
+	 */
+	List<RegionExcel> exportRegion(@Param("ew") Wrapper<Region> queryWrapper);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMapper.java
new file mode 100644
index 0000000..adb4fa1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMapper.java
@@ -0,0 +1,67 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.system.entity.Role;
+import com.vci.ubcs.system.vo.RoleVO;
+
+import java.util.List;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface RoleMapper extends BaseMapper<Role> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param role
+	 * @return
+	 */
+	List<RoleVO> selectRolePage(IPage page, RoleVO role);
+
+	/**
+	 * 鑾峰彇鏍戝舰鑺傜偣
+	 *
+	 * @param tenantId
+	 * @param excludeRole
+	 * @return
+	 */
+	List<RoleVO> tree(String tenantId, String excludeRole);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚�
+	 *
+	 * @param ids
+	 * @return
+	 */
+	List<String> getRoleNames(Long[] ids);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚�
+	 *
+	 * @param ids
+	 * @return
+	 */
+	List<String> getRoleAliases(Long[] ids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMenuMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMenuMapper.java
new file mode 100644
index 0000000..22df822
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMenuMapper.java
@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.system.entity.RoleMenu;
+import com.vci.ubcs.system.vo.RoleMenuVO;
+
+import java.util.List;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 * @param page
+	 * @param roleMenu
+	 * @return
+	 */
+	List<RoleMenuVO> selectRoleMenuPage(IPage page, RoleMenuVO roleMenu);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleScopeMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleScopeMapper.java
new file mode 100644
index 0000000..08d9108
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleScopeMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.RoleScope;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface RoleScopeMapper extends BaseMapper<RoleScope> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java
new file mode 100644
index 0000000..ca2b3b5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java
@@ -0,0 +1,52 @@
+package com.vci.ubcs.system.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import com.vci.ubcs.system.entity.Strategy;
+
+import java.util.List;
+
+/**
+ * 瀵嗙爜绛栫暐(PlSysStrategy)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2023-03-20 15:16:15
+ */
+public interface StrategyMapper extends BaseMapper<Strategy> {
+
+	/**
+	 * 鏌ヨ鎸囧畾琛屾暟鎹�
+	 *
+	 * @param page 鍒嗛〉瀵硅薄
+	 * @return 瀵硅薄鍒楄〃
+	 */
+	List<Strategy> queryAllByPage(IPage page);
+
+	/**
+	 * 缁熻鎬昏鏁�
+	 *
+	 * @param plSysStrategy 鏌ヨ鏉′欢
+	 * @return 鎬昏鏁�
+	 */
+	long count(Strategy plSysStrategy);
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛鍚嶄互鍙婄鎴稩D鏌ヨ瀵嗙爜绛栫暐
+	 * @return
+	 */
+	Strategy queryByNameAndTenantId(@Param("tenantId") String tenantId,@Param("name") String name);
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛id杩涜鏌ヨ
+	 *
+	 * @param userId 鐢ㄦ埛id
+	 * @return 瀵硅薄
+	 */
+	Strategy queryByUserId(@Param("userId") Long userId);
+
+	Strategy queryByIsDefault();
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantMapper.java
new file mode 100644
index 0000000..69435f1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantMapper.java
@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.system.entity.Tenant;
+
+import java.util.List;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface TenantMapper extends BaseMapper<Tenant> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param tenant
+	 * @return
+	 */
+	List<Tenant> selectTenantPage(IPage page, Tenant tenant);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantPackageMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantPackageMapper.java
new file mode 100644
index 0000000..8be9b49
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantPackageMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.TenantPackage;
+
+/**
+ * 绉熸埛浜у搧琛� Mapper 鎺ュ彛
+ *
+ * @author BladeX
+ */
+public interface TenantPackageMapper extends BaseMapper<TenantPackage> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuMapper.java
new file mode 100644
index 0000000..08a4d65
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.TopMenu;
+
+/**
+ * 椤堕儴鑿滃崟琛� Mapper 鎺ュ彛
+ *
+ * @author BladeX
+ */
+public interface TopMenuMapper extends BaseMapper<TopMenu> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuSettingMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuSettingMapper.java
new file mode 100644
index 0000000..50da342
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuSettingMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.TopMenuSetting;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface TopMenuSettingMapper extends BaseMapper<TopMenuSetting> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/UserPwdstrategyMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/UserPwdstrategyMapper.java
new file mode 100644
index 0000000..2c6eae0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/UserPwdstrategyMapper.java
@@ -0,0 +1,41 @@
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.entity.UserPwdstrategy;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛瀵嗙爜绛栫暐绠$悊琛�(UserPwdstrategy)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2023-03-22 15:24:46
+ */
+public interface UserPwdstrategyMapper  extends BaseMapper<UserPwdstrategy> {
+
+	/**
+	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	UserPwdstrategy queryById(Long id);
+
+	/**
+	 * 淇敼鏁版嵁
+	 *
+	 * @param UserPwdstrategy 瀹炰緥瀵硅薄
+	 * @return 褰卞搷琛屾暟
+	 */
+	int update(UserPwdstrategy UserPwdstrategy);
+
+	/**
+	 * 閫氳繃鐢ㄦ埛id杩涜鍒犻櫎鏁版嵁
+	 *
+	 * @param userIds 鐢ㄦ埛id
+	 * @return 褰卞搷琛屾暟
+	 */
+	int deleteByUserIds(List<Long> userIds);
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ValueRangeMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ValueRangeMapper.java
new file mode 100644
index 0000000..41cdb0f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ValueRangeMapper.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import com.vci.ubcs.system.entity.ValueRange;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * (ValueRannge)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2023-03-20 15:23:25
+ */
+public interface ValueRangeMapper extends BaseMapper<ValueRange> {
+
+	/**
+	 * 鏌ヨ鎸囧畾琛屾暟鎹�
+	 *
+	 * @param valueRannge 鏌ヨ鏉′欢
+	 * @param pageable        鍒嗛〉瀵硅薄
+	 * @return 瀵硅薄鍒楄〃
+	 */
+	List<ValueRange> queryAllByLimit(ValueRange valueRannge, @Param("pageable") Pageable pageable);
+
+	/**
+	 * 缁熻鎬昏鏁�
+	 *
+	 * @param valueRannge 鏌ヨ鏉′欢
+	 * @return 鎬昏鏁�
+	 */
+	long count(ValueRange valueRannge);
+
+
+	/**
+	 * 鏍圭┒缁勫悎id鏌ヨ鍙栧��
+	 * @return
+	 */
+	List<String> queryByCombinationIds(@Param("combinationIds") List<String> combinationIds);
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IApiScopeService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IApiScopeService.java
new file mode 100644
index 0000000..344cc50
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IApiScopeService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.ApiScope;
+
+/**
+ *  鏈嶅姟绫�
+ *
+ * @author BladeX
+ */
+public interface IApiScopeService extends BaseService<ApiScope> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IAuthClientService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IAuthClientService.java
new file mode 100644
index 0000000..f5f9e32
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IAuthClientService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.AuthClient;
+
+/**
+ *  鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IAuthClientService extends BaseService<AuthClient> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ICombinationService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ICombinationService.java
new file mode 100644
index 0000000..a3aa8b9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ICombinationService.java
@@ -0,0 +1,71 @@
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.Combination;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2023-03-20 15:23:21
+ */
+public interface ICombinationService extends IService<Combination> {
+
+	/**
+	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	Combination queryById(Long id);
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param combination 绛涢�夋潯浠�
+	 * @param page      鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	IPage<Combination> selectCombinationPage(Combination combination, IPage<Combination> page);
+
+	/**
+	 * 鏂板鏁版嵁鍜屼慨鏀规暟鎹�
+	 *
+	 * @param combination 瀹炰緥瀵硅薄
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	boolean submit(Combination combination);
+
+	/**
+	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+	 *
+	 * @param ids
+	 * @return 鏄惁鎴愬姛
+	 */
+	boolean deleteByIds(List<String> ids);
+
+	/**
+	 * 涓嬫媺鏁版嵁婧愭煡璇�
+	 * 鏌ヨ缁勫悎id锛坘ey锛夛細缁勫悎鍚嶏紙value锛�
+	 * @return
+	 */
+	List<Map<String,Object>> selectMaps();
+
+	/**
+	 * 鏌ヨ鎷兼帴瀹屾暣鐨勬鍒�
+	 * @param combinationIds
+	 * @return
+	 */
+	String getRegex(List<String> combinationIds);
+
+	/**
+	 * 鏍规嵁缁勫悎id鏌ヨ姝e垯闆嗗悎
+	 * @param combinationIds
+	 * @return
+	 */
+	List<String> getRegexList(List<String> combinationIds);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDataScopeService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDataScopeService.java
new file mode 100644
index 0000000..64a511c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDataScopeService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.DataScope;
+
+/**
+ *  鏈嶅姟绫�
+ *
+ * @author BladeX
+ */
+public interface IDataScopeService extends BaseService<DataScope> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java
new file mode 100644
index 0000000..2dc4d02
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java
@@ -0,0 +1,119 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.Dept;
+import com.vci.ubcs.system.vo.DeptVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IDeptService extends IService<Dept> {
+
+	/**
+	 * 鎳掑姞杞介儴闂ㄥ垪琛�
+	 *
+	 * @param tenantId
+	 * @param parentId
+	 * @param param
+	 * @return
+	 */
+	List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @param tenantId
+	 * @return
+	 */
+	List<DeptVO> tree(String tenantId);
+
+	/**
+	 * 鎳掑姞杞芥爲褰㈢粨鏋�
+	 *
+	 * @param tenantId
+	 * @param parentId
+	 * @return
+	 */
+	List<DeptVO> lazyTree(String tenantId, Long parentId);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬ID
+	 *
+	 * @param tenantId
+	 * @param deptNames
+	 * @return
+	 */
+	String getDeptIds(String tenantId, String deptNames);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬ID
+	 *
+	 * @param tenantId
+	 * @param deptNames
+	 * @return
+	 */
+	String getDeptIdsByFuzzy(String tenantId, String deptNames);
+
+	/**
+	 * 鑾峰彇閮ㄩ棬鍚�
+	 *
+	 * @param deptIds
+	 * @return
+	 */
+	List<String> getDeptNames(String deptIds);
+
+	/**
+	 * 鑾峰彇瀛愰儴闂�
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	List<Dept> getDeptChild(Long deptId);
+
+	/**
+	 * 鍒犻櫎閮ㄩ棬
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeDept(String ids);
+
+	/**
+	 * 鎻愪氦
+	 *
+	 * @param dept
+	 * @return
+	 */
+	boolean submit(Dept dept);
+
+	/**
+	 * 閮ㄩ棬淇℃伅鏌ヨ
+	 *
+	 * @param deptName
+	 * @param parentId
+	 * @return
+	 */
+	List<DeptVO> search(String deptName, Long parentId);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictBizService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictBizService.java
new file mode 100644
index 0000000..18d639f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictBizService.java
@@ -0,0 +1,101 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.support.Query;
+import com.vci.ubcs.system.entity.DictBiz;
+import com.vci.ubcs.system.vo.DictBizVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IDictBizService extends IService<DictBiz> {
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<DictBizVO> tree();
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<DictBizVO> parentTree();
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	String getValue(String code, String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	List<DictBiz> getList(String code);
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dict
+	 * @return
+	 */
+	boolean submit(DictBiz dict);
+
+	/**
+	 * 鍒犻櫎瀛楀吀
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeDict(String ids);
+
+	/**
+	 * 椤剁骇鍒楄〃
+	 *
+	 * @param dict
+	 * @param query
+	 * @return
+	 */
+	IPage<DictBizVO> parentList(Map<String, Object> dict, Query query);
+
+	/**
+	 * 瀛愬垪琛�
+	 *
+	 * @param dict
+	 * @param parentId
+	 * @return
+	 */
+	List<DictBizVO> childList(Map<String, Object> dict, Long parentId);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictService.java
new file mode 100644
index 0000000..973e655
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictService.java
@@ -0,0 +1,109 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.support.Query;
+import com.vci.ubcs.system.entity.Dict;
+import com.vci.ubcs.system.vo.DictVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IDictService extends IService<Dict> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param dict
+	 * @return
+	 */
+	IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict);
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<DictVO> tree();
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<DictVO> parentTree();
+
+	/**
+	 * 鑾峰彇瀛楀吀琛ㄥ搴斾腑鏂�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey 瀛楀吀搴忓彿
+	 * @return
+	 */
+	String getValue(String code, String dictKey);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param code 瀛楀吀缂栧彿
+	 * @return
+	 */
+	List<Dict> getList(String code);
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dict
+	 * @return
+	 */
+	boolean submit(Dict dict);
+
+	/**
+	 * 鍒犻櫎瀛楀吀
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeDict(String ids);
+
+	/**
+	 * 椤剁骇鍒楄〃
+	 *
+	 * @param dict
+	 * @param query
+	 * @return
+	 */
+	IPage<DictVO> parentList(Map<String, Object> dict, Query query);
+
+	/**
+	 * 瀛愬垪琛�
+	 *
+	 * @param dict
+	 * @param parentId
+	 * @return
+	 */
+	List<DictVO> childList(Map<String, Object> dict, Long parentId);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
new file mode 100644
index 0000000..ea50eeb
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
@@ -0,0 +1,166 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.core.tool.support.Kv;
+import com.vci.ubcs.system.entity.Menu;
+import com.vci.ubcs.system.vo.MenuVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IMenuService extends IService<Menu> {
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 *
+	 * @param parentId
+	 * @param param
+	 * @return
+	 */
+	List<MenuVO> lazyList(Long parentId, Map<String, Object> param);
+
+	/**
+	 * 鎳掑姞杞借彍鍗曞垪琛�
+	 *
+	 * @param parentId
+	 * @param param
+	 * @return
+	 */
+	List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
+
+	/**
+	 * 鑿滃崟鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @param topMenuId
+	 * @return
+	 */
+	List<MenuVO> routes(String roleId, Long topMenuId);
+
+	/**
+	 * 鎸夐挳鏍戝舰缁撴瀯
+	 *
+	 * @param roleId
+	 * @return
+	 */
+	List<MenuVO> buttons(String roleId);
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+	List<TreeNode> tree();
+
+	/**
+	 * 鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @param user
+	 * @return
+	 */
+	List<TreeNode> grantTree(BladeUser user);
+
+	/**
+	 * 椤堕儴鑿滃崟鏍戝舰缁撴瀯
+	 *
+	 * @param user
+	 * @return
+	 */
+	List<TreeNode> grantTopTree(BladeUser user);
+
+	/**
+	 * 鏁版嵁鏉冮檺鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @param user
+	 * @return
+	 */
+	List<TreeNode> grantDataScopeTree(BladeUser user);
+
+	/**
+	 * 鎺ュ彛鏉冮檺鎺堟潈鏍戝舰缁撴瀯
+	 *
+	 * @param user
+	 * @return
+	 */
+	List<TreeNode> grantApiScopeTree(BladeUser user);
+
+	/**
+	 * 榛樿閫変腑鑺傜偣
+	 *
+	 * @param roleIds
+	 * @return
+	 */
+	List<String> roleTreeKeys(String roleIds);
+
+	/**
+	 * 榛樿閫変腑鑺傜偣
+	 *
+	 * @param topMenuIds
+	 * @return
+	 */
+	List<String> topTreeKeys(String topMenuIds);
+
+	/**
+	 * 榛樿閫変腑鑺傜偣
+	 *
+	 * @param roleIds
+	 * @return
+	 */
+	List<String> dataScopeTreeKeys(String roleIds);
+
+	/**
+	 * 榛樿閫変腑鑺傜偣
+	 *
+	 * @param roleIds
+	 * @return
+	 */
+	List<String> apiScopeTreeKeys(String roleIds);
+
+	/**
+	 * 鑾峰彇閰嶇疆鐨勮鑹叉潈闄�
+	 *
+	 * @param user
+	 * @return
+	 */
+	List<Kv> authRoutes(BladeUser user);
+
+	/**
+	 * 鍒犻櫎鑿滃崟
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeMenu(String ids);
+
+	/**
+	 * 鎻愪氦
+	 *
+	 * @param menu
+	 * @return
+	 */
+	boolean submit(Menu menu);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IParamService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IParamService.java
new file mode 100644
index 0000000..8f95585
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IParamService.java
@@ -0,0 +1,37 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.Param;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IParamService extends BaseService<Param> {
+
+	/**
+	 * 鑾峰彇鍙傛暟鍊�
+	 *
+	 * @param paramKey 鍙傛暟key
+	 * @return String
+	 */
+	String getValue(String paramKey);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IPostService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IPostService.java
new file mode 100644
index 0000000..a41f327
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IPostService.java
@@ -0,0 +1,68 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.Post;
+import com.vci.ubcs.system.vo.PostVO;
+
+import java.util.List;
+
+/**
+ * 宀椾綅琛� 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IPostService extends BaseService<Post> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param post
+	 * @return
+	 */
+	IPage<PostVO> selectPostPage(IPage<PostVO> page, PostVO post);
+
+	/**
+	 * 鑾峰彇宀椾綅ID
+	 *
+	 * @param tenantId
+	 * @param postNames
+	 * @return
+	 */
+	String getPostIds(String tenantId, String postNames);
+
+	/**
+	 * 鑾峰彇宀椾綅ID
+	 *
+	 * @param tenantId
+	 * @param postNames
+	 * @return
+	 */
+	String getPostIdsByFuzzy(String tenantId, String postNames);
+
+	/**
+	 * 鑾峰彇宀椾綅鍚�
+	 *
+	 * @param postIds
+	 * @return
+	 */
+	List<String> getPostNames(String postIds);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRegionService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRegionService.java
new file mode 100644
index 0000000..57718cd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRegionService.java
@@ -0,0 +1,86 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.excel.RegionExcel;
+import com.vci.ubcs.system.entity.Region;
+import com.vci.ubcs.system.vo.RegionVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 琛屾斂鍖哄垝琛� 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IRegionService extends IService<Region> {
+
+	/**
+	 * 鎻愪氦
+	 *
+	 * @param region
+	 * @return
+	 */
+	boolean submit(Region region);
+
+	/**
+	 * 鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	boolean removeRegion(String id);
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 *
+	 * @param parentCode
+	 * @param param
+	 * @return
+	 */
+	List<RegionVO> lazyList(String parentCode, Map<String, Object> param);
+
+	/**
+	 * 鎳掑姞杞藉垪琛�
+	 *
+	 * @param parentCode
+	 * @param param
+	 * @return
+	 */
+	List<RegionVO> lazyTree(String parentCode, Map<String, Object> param);
+
+	/**
+	 * 瀵煎叆鍖哄垝鏁版嵁
+	 *
+	 * @param data
+	 * @param isCovered
+	 * @return
+	 */
+	void importRegion(List<RegionExcel> data, Boolean isCovered);
+
+	/**
+	 * 瀵煎嚭鍖哄垝鏁版嵁
+	 *
+	 * @param queryWrapper
+	 * @return
+	 */
+	List<RegionExcel> exportRegion(Wrapper<Region> queryWrapper);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleMenuService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleMenuService.java
new file mode 100644
index 0000000..00ce0e1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleMenuService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.RoleMenu;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IRoleMenuService extends IService<RoleMenu> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleScopeService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleScopeService.java
new file mode 100644
index 0000000..75264ea
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleScopeService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.RoleScope;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IRoleScopeService extends IService<RoleScope> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java
new file mode 100644
index 0000000..d335036
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java
@@ -0,0 +1,112 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.Role;
+import com.vci.ubcs.system.vo.RoleVO;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IRoleService extends IService<Role> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param role
+	 * @return
+	 */
+	IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role);
+
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @param tenantId
+	 * @return
+	 */
+	List<RoleVO> tree(String tenantId);
+
+	/**
+	 * 鏉冮檺閰嶇疆
+	 *
+	 * @param roleIds      瑙掕壊id闆嗗悎
+	 * @param menuIds      鑿滃崟id闆嗗悎
+	 * @param dataScopeIds 鏁版嵁鏉冮檺id闆嗗悎
+	 * @param apiScopeIds  鎺ュ彛鏉冮檺id闆嗗悎
+	 * @return 鏄惁鎴愬姛
+	 */
+	boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds);
+
+	/**
+	 * 鑾峰彇瑙掕壊ID
+	 *
+	 * @param tenantId
+	 * @param roleNames
+	 * @return
+	 */
+	String getRoleIds(String tenantId, String roleNames);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚�
+	 *
+	 * @param roleIds
+	 * @return
+	 */
+	List<String> getRoleNames(String roleIds);
+
+	/**
+	 * 鑾峰彇瑙掕壊鍚�
+	 *
+	 * @param roleIds
+	 * @return
+	 */
+	List<String> getRoleAliases(String roleIds);
+
+	/**
+	 * 鎻愪氦
+	 *
+	 * @param role
+	 * @return
+	 */
+	boolean submit(Role role);
+
+	/**
+	 * 瑙掕壊淇℃伅鏌ヨ
+	 *
+	 * @param roleName
+	 * @param parentId
+	 * @return
+	 */
+	List<RoleVO> search(String roleName, Long parentId);
+
+	/**
+	 * 鍒犻櫎瑙掕壊
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeRole(String ids);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java
new file mode 100644
index 0000000..432935d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.support.Query;
+import com.vci.ubcs.system.entity.Strategy;
+import org.springframework.data.domain.PageImpl;
+
+import java.util.List;
+
+/**
+ * 瀵嗙爜绛栫暐(PlSysStrategy)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2023-03-20 15:16:18
+ */
+public interface IStrategyService extends IService<Strategy> {
+
+	/**
+	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	Strategy queryById(String id);
+
+	/**
+	 * 鏌ヨ榛樿瀵嗙爜绛栫暐
+	 *
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	Strategy queryByIsDefault();
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param query 鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	PageImpl<Strategy> queryAllByPage(Query query);
+
+	/**
+	 * 鏂板鏁版嵁鎴栦慨鏀规暟鎹�
+	 *
+	 * @param strategy 瀹炰緥瀵硅薄
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	boolean submit(Strategy strategy);
+
+	/**
+	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鏄惁鎴愬姛
+	 */
+	boolean deleteByIds(List<String> ids);
+
+	/**
+	 * 閫氳繃绉熸埛id浠ュ強鐢ㄦ埛鍚嶆煡璇㈠瘑鐮佺瓥鐣�
+	 * @param tenantId
+	 * @param name
+	 * @return
+	 */
+	Strategy queryByNameAndTenantId(String tenantId, String name);
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐
+	 * @param userId
+	 * @return
+	 */
+	Strategy queryByUserId(Long userId);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantPackageService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantPackageService.java
new file mode 100644
index 0000000..cb07af1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantPackageService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.TenantPackage;
+
+/**
+ * 绉熸埛浜у搧琛� 鏈嶅姟绫�
+ *
+ * @author BladeX
+ */
+public interface ITenantPackageService extends BaseService<TenantPackage> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantService.java
new file mode 100644
index 0000000..ef98b4a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantService.java
@@ -0,0 +1,90 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.Tenant;
+import com.vci.ubcs.system.vo.TenantVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface ITenantService extends BaseService<Tenant> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param tenant
+	 * @return
+	 */
+	IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant);
+
+	/**
+	 * 鏍规嵁绉熸埛缂栧彿鑾峰彇瀹炰綋
+	 *
+	 * @param tenantId
+	 * @return
+	 */
+	Tenant getByTenantId(String tenantId);
+
+	/**
+	 * 鏂板
+	 *
+	 * @param tenant
+	 * @return
+	 */
+	boolean submitTenant(TenantVO tenant);
+
+	/**
+	 * 鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeTenant(List<Long> ids);
+
+	/**
+	 * 閰嶇疆绉熸埛鎺堟潈
+	 *
+	 * @param accountNumber
+	 * @param expireTime
+	 * @param ids
+	 * @return
+	 */
+	//boolean setting(Integer accountNumber, Date expireTime, String ids);
+
+	/**
+	 * 鏌ヨ绉熸埛id锛坘ey锛夛細绉熸埛鍚嶏紙value锛�
+	 * @return
+	 */
+	List<Map<String,Object>> selectMaps();
+
+	/**
+	 * 鏌ヨ鏄惁閰嶇疆鏈夐粯璁ゅ繀椤诲紑鍚笁鍛樼鐞�
+	 *
+	 * @return
+	 */
+	boolean findIsOpen();
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuService.java
new file mode 100644
index 0000000..9999858
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuService.java
@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import org.springblade.core.mp.base.BaseService;
+import com.vci.ubcs.system.entity.TopMenu;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 椤堕儴鑿滃崟琛� 鏈嶅姟绫�
+ *
+ * @author BladeX
+ */
+public interface ITopMenuService extends BaseService<TopMenu> {
+
+	/**
+	 * 椤堕儴鑿滃崟閰嶇疆
+	 *
+	 * @param topMenuIds 椤堕儴鑿滃崟id闆嗗悎
+	 * @param menuIds    鑿滃崟id闆嗗悎
+	 * @return 鏄惁鎴愬姛
+	 */
+	boolean grant(@NotEmpty List<Long> topMenuIds, @NotEmpty List<Long> menuIds);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuSettingService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuSettingService.java
new file mode 100644
index 0000000..d621189
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuSettingService.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.TopMenuSetting;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface ITopMenuSettingService extends IService<TopMenuSetting> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IUserPwdstrategyService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IUserPwdstrategyService.java
new file mode 100644
index 0000000..dd899be
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IUserPwdstrategyService.java
@@ -0,0 +1,34 @@
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.UserPwdstrategy;
+import com.vci.ubcs.system.vo.UserPwdstrategyVO;
+
+/**
+ * 鐢ㄦ埛瀵嗙爜绛栫暐绠$悊琛�(UserPwdstrategy)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2023-03-22 15:24:54
+ */
+public interface IUserPwdstrategyService extends IService<UserPwdstrategy> {
+
+	/**
+	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	UserPwdstrategy queryById(Long id);
+
+	/**
+	 * 鏂板鎴栦慨鏀规暟鎹�
+	 *
+	 * @param userPwdstrategyVO 瀹炰緥瀵硅薄
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	Boolean submit(UserPwdstrategyVO userPwdstrategyVO);
+
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IValueRangeService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IValueRangeService.java
new file mode 100644
index 0000000..823854d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IValueRangeService.java
@@ -0,0 +1,56 @@
+package com.vci.ubcs.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.entity.ValueRange;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+
+import java.util.List;
+
+/**
+ * (ValueRange)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2023-03-20 15:23:27
+ */
+public interface IValueRangeService extends IService<ValueRange> {
+
+	/**
+	 * 鍏ㄦ煡璇�
+	 * @return
+	 */
+	List<ValueRange> queryByAll();
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param valueRange 绛涢�夋潯浠�
+	 * @param pageRequest     鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	Page<ValueRange> queryByPage(ValueRange valueRange, PageRequest pageRequest);
+
+	/**
+	 * 鏂板鏁版嵁鎴栦慨鏀规暟鎹�
+	 *
+	 * @param valueRange 瀹炰緥瀵硅薄
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	boolean submit(ValueRange valueRange);
+
+	/**
+	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鏄惁鎴愬姛
+	 */
+	boolean deleteByIds(List<String> ids);
+
+	/**
+	 * 鑾峰彇鍙栧��
+	 *
+	 * @return 鏄惁鎴愬姛
+	 */
+	List<String> getByAllString(List<String> combinationIds);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ApiScopeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ApiScopeServiceImpl.java
new file mode 100644
index 0000000..9138cd5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ApiScopeServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.vci.ubcs.system.mapper.ApiScopeMapper;
+import com.vci.ubcs.system.service.IApiScopeService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import com.vci.ubcs.system.entity.ApiScope;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author BladeX
+ */
+@Service
+public class ApiScopeServiceImpl extends BaseServiceImpl<ApiScopeMapper, ApiScope> implements IApiScopeService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/AuthClientServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/AuthClientServiceImpl.java
new file mode 100644
index 0000000..d8fe46f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/AuthClientServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.vci.ubcs.system.mapper.AuthClientMapper;
+import com.vci.ubcs.system.service.IAuthClientService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import com.vci.ubcs.system.entity.AuthClient;
+import org.springframework.stereotype.Service;
+
+/**
+ *  鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class AuthClientServiceImpl extends BaseServiceImpl<AuthClientMapper, AuthClient> implements IAuthClientService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java
new file mode 100644
index 0000000..26da663
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java
@@ -0,0 +1,127 @@
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.CombinationMapper;
+import com.vci.ubcs.system.service.ICombinationService;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Combination;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 瀵嗙爜缁勫悎鏂瑰紡琛�(PlSysCombination)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2023-03-20 15:23:22
+ */
+@Service
+@Validated
+//@AllArgsConstructor
+public class CombinationServiceImpl extends ServiceImpl<CombinationMapper,Combination> implements ICombinationService {
+
+	@Resource
+	private CombinationMapper combinationMapper;
+
+	/**
+	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	@Override
+	public Combination queryById(Long id) {
+		Combination combination = this.getOne(Wrappers.<Combination>query().lambda().eq(Combination::getId, id));
+		return combination;
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param combination 绛涢�夋潯浠�
+	 * @param page      鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public IPage<Combination> selectCombinationPage(Combination combination, IPage<Combination> page) {
+		return page.setRecords(combinationMapper.selectCombinationPage(page,combination));
+	}
+
+	/**
+	 * 鏂板鏁版嵁鍜屼慨鏀规暟鎹�
+	 *
+	 * @param combination 瀹炰緥瀵硅薄
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	@Override
+	public boolean submit(Combination combination) {
+		//鍒ゆ柇鏄惁鎼哄甫id
+		if(Func.isEmpty(combination.getId())){
+			//鏂板
+			Combination dbcombination = this.getOne(Wrappers.<Combination>query().lambda().eq(Combination::getName, combination.getName()));
+			//濡傛灉鏁版嵁搴撲腑瀛樺湪杩欐潯缁勫悎鍚嶇О鐨勮褰曠洿鎺ヨ繑鍥�
+			if(!Func.isEmpty(dbcombination)){
+				throw new ServiceException("缁勫悎鍚嶇О宸插瓨鍦�!");
+			}
+			if(Func.isEmpty(combination.getCreateTime())){
+				combination.setCreateTime(new Date());
+			}
+			if(Func.isEmpty(combination.getUpdateTime())){
+				combination.setUpdateTime(new Date());
+			}
+			boolean temp = saveOrUpdate(combination);
+			return temp;
+		}else {
+			if(Func.isEmpty(combination.getUpdateTime())){
+				combination.setUpdateTime(new Date());
+			}
+			CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+			return saveOrUpdate(combination);
+		}
+	}
+
+	/**
+	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鏄惁鎴愬姛
+	 */
+	@Override
+	public boolean deleteByIds(List<String> ids) {
+		boolean tenantTemp = this.removeBatchByIds(ids);
+		return tenantTemp;
+	}
+
+	/**
+	 * 鏌ヨ瀵嗙爜缁勫悎id锛氱粍鍚堝悕锛岄敭鍊煎
+	 *
+	 * @return 閿�煎
+	 */
+	@Override
+	public List<Map<String, Object>> selectMaps() {
+		List<Map<String, Object>> maps = listMaps(new QueryWrapper<Combination>().select("ID", "NAME"));
+		return maps;
+	}
+
+	@Override
+	public String getRegex(List<String> combinationIds) {
+		return combinationMapper.queryRegex(combinationIds);
+	}
+
+	@Override
+	public List<String> getRegexList(List<String> combinationIds) {
+		return combinationMapper.queryRegexList(combinationIds);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DataScopeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DataScopeServiceImpl.java
new file mode 100644
index 0000000..9165716
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DataScopeServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.vci.ubcs.system.mapper.DataScopeMapper;
+import com.vci.ubcs.system.service.IDataScopeService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import com.vci.ubcs.system.entity.DataScope;
+import org.springframework.stereotype.Service;
+
+/**
+ *  鏈嶅姟瀹炵幇绫�
+ *
+ * @author BladeX
+ */
+@Service
+public class DataScopeServiceImpl extends BaseServiceImpl<DataScopeMapper, DataScope> implements IDataScopeService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java
new file mode 100644
index 0000000..b17f24f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java
@@ -0,0 +1,173 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.DeptMapper;
+import com.vci.ubcs.system.service.IDeptService;
+import com.vci.ubcs.system.wrapper.DeptWrapper;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.entity.Dept;
+import com.vci.ubcs.system.vo.DeptVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
+
+	private static final String TENANT_ID = "tenantId";
+	private static final String PARENT_ID = "parentId";
+
+	@Override
+	public List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param) {
+		// 璁剧疆绉熸埛ID
+		if (AuthUtil.isAdministrator()) {
+			tenantId = StringPool.EMPTY;
+		}
+		String paramTenantId = Func.toStr(param.get(TENANT_ID));
+		if (Func.isNotEmpty(paramTenantId) && AuthUtil.isAdministrator()) {
+			tenantId = paramTenantId;
+		}
+		// 鍒ゆ柇鐐瑰嚮鎼滅储浣嗘槸娌℃湁鏌ヨ鏉′欢鐨勬儏鍐�
+		if (Func.isEmpty(param.get(PARENT_ID)) && param.size() == 1) {
+			parentId = 0L;
+		}
+		// 鍒ゆ柇鏁版嵁鏉冮檺鎺у埗,闈炶秴绠¤鑹插彧鍙湅鍒版湰绾у強浠ヤ笅鏁版嵁
+		if (Func.toLong(parentId) == 0L && !AuthUtil.isAdministrator()) {
+			Long deptId = Func.firstLong(AuthUtil.getDeptId());
+			Dept dept = SysCache.getDept(deptId);
+			if (dept.getParentId() != 0) {
+				parentId = dept.getParentId();
+			}
+		}
+		// 鍒ゆ柇鐐瑰嚮鎼滅储甯︽湁鏌ヨ鏉′欢鐨勬儏鍐�
+		if (Func.isEmpty(param.get(PARENT_ID)) && param.size() > 1 && Func.toLong(parentId) == 0L) {
+			parentId = null;
+		}
+		return baseMapper.lazyList(tenantId, parentId, param);
+	}
+
+
+	@Override
+	public List<DeptVO> tree(String tenantId) {
+		return ForestNodeMerger.merge(baseMapper.tree(tenantId));
+	}
+
+	@Override
+	public List<DeptVO> lazyTree(String tenantId, Long parentId) {
+		if (AuthUtil.isAdministrator()) {
+			tenantId = StringPool.EMPTY;
+		}
+		return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
+	}
+
+	@Override
+	public String getDeptIds(String tenantId, String deptNames) {
+		List<Dept> deptList = baseMapper.selectList(Wrappers.<Dept>query().lambda().eq(Dept::getTenantId, tenantId).in(Dept::getDeptName, Func.toStrList(deptNames)));
+		if (deptList != null && deptList.size() > 0) {
+			return deptList.stream().map(dept -> Func.toStr(dept.getId())).distinct().collect(Collectors.joining(","));
+		}
+		return null;
+	}
+
+	@Override
+	public String getDeptIdsByFuzzy(String tenantId, String deptNames) {
+		LambdaQueryWrapper<Dept> queryWrapper = Wrappers.<Dept>query().lambda().eq(Dept::getTenantId, tenantId);
+		queryWrapper.and(wrapper -> {
+			List<String> names = Func.toStrList(deptNames);
+			names.forEach(name -> wrapper.like(Dept::getDeptName, name).or());
+		});
+		List<Dept> deptList = baseMapper.selectList(queryWrapper);
+		if (deptList != null && deptList.size() > 0) {
+			return deptList.stream().map(dept -> Func.toStr(dept.getId())).distinct().collect(Collectors.joining(","));
+		}
+		return null;
+	}
+
+	@Override
+	public List<String> getDeptNames(String deptIds) {
+		return baseMapper.getDeptNames(Func.toLongArray(deptIds));
+	}
+
+	@Override
+	public List<Dept> getDeptChild(Long deptId) {
+		return baseMapper.selectList(Wrappers.<Dept>query().lambda().like(Dept::getAncestors, deptId));
+	}
+
+	@Override
+	public boolean removeDept(String ids) {
+		Long cnt = baseMapper.selectCount(Wrappers.<Dept>query().lambda().in(Dept::getParentId, Func.toLongList(ids)));
+		if (cnt > 0L) {
+			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
+		}
+		return removeByIds(Func.toLongList(ids));
+	}
+
+	@Override
+	public boolean submit(Dept dept) {
+		if (Func.isEmpty(dept.getParentId())) {
+			dept.setTenantId(AuthUtil.getTenantId());
+			dept.setParentId(BladeConstant.TOP_PARENT_ID);
+			dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+		}
+		if (dept.getParentId() > 0) {
+			Dept parent = getById(dept.getParentId());
+			if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
+				throw new ServiceException("鐖惰妭鐐逛笉鍙�夋嫨鑷韩!");
+			}
+			dept.setTenantId(parent.getTenantId());
+			String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
+			dept.setAncestors(ancestors);
+		}
+		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return saveOrUpdate(dept);
+	}
+
+	@Override
+	public List<DeptVO> search(String deptName, Long parentId) {
+		String tenantId = AuthUtil.getTenantId();
+		LambdaQueryWrapper<Dept> queryWrapper = Wrappers.<Dept>query().lambda();
+		if (Func.isNotEmpty(tenantId)) {
+			queryWrapper.eq(Dept::getTenantId, tenantId);
+		}
+		if (Func.isNotEmpty(deptName)) {
+			queryWrapper.like(Dept::getDeptName, deptName);
+		}
+		if (Func.isNotEmpty(parentId) && parentId > 0L) {
+			queryWrapper.eq(Dept::getParentId, parentId);
+		}
+		List<Dept> deptList = baseMapper.selectList(queryWrapper);
+		return DeptWrapper.build().listNodeVO(deptList);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictBizServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictBizServiceImpl.java
new file mode 100644
index 0000000..7cbd967
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictBizServiceImpl.java
@@ -0,0 +1,119 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.DictBizMapper;
+import com.vci.ubcs.system.service.IDictBizService;
+import com.vci.ubcs.system.wrapper.DictBizWrapper;
+import com.vci.ubcs.common.constant.CommonConstant;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.cache.DictBizCache;
+import com.vci.ubcs.system.entity.DictBiz;
+import com.vci.ubcs.system.vo.DictBizVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class DictBizServiceImpl extends ServiceImpl<DictBizMapper, DictBiz> implements IDictBizService {
+
+	@Override
+	public List<DictBizVO> tree() {
+		return ForestNodeMerger.merge(baseMapper.tree());
+	}
+
+	@Override
+	public List<DictBizVO> parentTree() {
+		return ForestNodeMerger.merge(baseMapper.parentTree());
+	}
+
+	@Override
+	public String getValue(String code, String dictKey) {
+		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
+	}
+
+	@Override
+	public List<DictBiz> getList(String code) {
+		return baseMapper.getList(code);
+	}
+
+	@Override
+	public boolean submit(DictBiz dict) {
+		LambdaQueryWrapper<DictBiz> lqw = Wrappers.<DictBiz>query().lambda().eq(DictBiz::getCode, dict.getCode()).eq(DictBiz::getDictKey, dict.getDictKey());
+		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBiz::getId, dict.getId()));
+		if (cnt > 0L) {
+			throw new ServiceException("褰撳墠瀛楀吀閿�煎凡瀛樺湪!");
+		}
+		// 淇敼椤剁骇瀛楀吀鍚庡悓姝ユ洿鏂颁笅灞炲瓧鍏哥殑缂栧彿
+		if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
+			DictBiz parent = DictBizCache.getById(dict.getId());
+			this.update(Wrappers.<DictBiz>update().lambda().set(DictBiz::getCode, dict.getCode()).eq(DictBiz::getCode, parent.getCode()).ne(DictBiz::getParentId, BladeConstant.TOP_PARENT_ID));
+		}
+		if (Func.isEmpty(dict.getParentId())) {
+			dict.setParentId(BladeConstant.TOP_PARENT_ID);
+		}
+		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		CacheUtil.clear(DICT_CACHE);
+		return saveOrUpdate(dict);
+	}
+
+	@Override
+	public boolean removeDict(String ids) {
+		Long cnt = baseMapper.selectCount(Wrappers.<DictBiz>query().lambda().in(DictBiz::getParentId, Func.toLongList(ids)));
+		if (cnt > 0L) {
+			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
+		}
+		return removeByIds(Func.toLongList(ids));
+	}
+
+	@Override
+	public IPage<DictBizVO> parentList(Map<String, Object> dict, Query query) {
+		IPage<DictBiz> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBiz.class).lambda().eq(DictBiz::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictBiz::getSort));
+		return DictBizWrapper.build().pageVO(page);
+	}
+
+	@Override
+	public List<DictBizVO> childList(Map<String, Object> dict, Long parentId) {
+		if (parentId < 0) {
+			return new ArrayList<>();
+		}
+		dict.remove("parentId");
+		DictBiz parentDict = DictBizCache.getById(parentId);
+		List<DictBiz> list = this.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().ne(DictBiz::getId, parentId).eq(DictBiz::getCode, parentDict.getCode()).orderByAsc(DictBiz::getSort));
+		return DictBizWrapper.build().listNodeVO(list);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictServiceImpl.java
new file mode 100644
index 0000000..c0a8a02
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictServiceImpl.java
@@ -0,0 +1,125 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.DictMapper;
+import com.vci.ubcs.system.service.IDictService;
+import com.vci.ubcs.system.wrapper.DictWrapper;
+import com.vci.ubcs.common.constant.CommonConstant;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.entity.Dict;
+import com.vci.ubcs.system.vo.DictVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
+
+	@Override
+	public IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict) {
+		return page.setRecords(baseMapper.selectDictPage(page, dict));
+	}
+
+	@Override
+	public List<DictVO> tree() {
+		return ForestNodeMerger.merge(baseMapper.tree());
+	}
+
+	@Override
+	public List<DictVO> parentTree() {
+		return ForestNodeMerger.merge(baseMapper.parentTree());
+	}
+
+	@Override
+	public String getValue(String code, String dictKey) {
+		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
+	}
+
+	@Override
+	public List<Dict> getList(String code) {
+		return baseMapper.getList(code);
+	}
+
+	@Override
+	public boolean submit(Dict dict) {
+		LambdaQueryWrapper<Dict> lqw = Wrappers.<Dict>query().lambda().eq(Dict::getCode, dict.getCode()).eq(Dict::getDictKey, dict.getDictKey());
+		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(Dict::getId, dict.getId()));
+		if (cnt > 0L) {
+			throw new ServiceException("褰撳墠瀛楀吀閿�煎凡瀛樺湪!");
+		}
+		// 淇敼椤剁骇瀛楀吀鍚庡悓姝ユ洿鏂颁笅灞炲瓧鍏哥殑缂栧彿
+		if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
+			Dict parent = DictCache.getById(dict.getId());
+			this.update(Wrappers.<Dict>update().lambda().set(Dict::getCode, dict.getCode()).eq(Dict::getCode, parent.getCode()).ne(Dict::getParentId, BladeConstant.TOP_PARENT_ID));
+		}
+		if (Func.isEmpty(dict.getParentId())) {
+			dict.setParentId(BladeConstant.TOP_PARENT_ID);
+		}
+		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
+		return saveOrUpdate(dict);
+	}
+
+	@Override
+	public boolean removeDict(String ids) {
+		Long cnt = baseMapper.selectCount(Wrappers.<Dict>query().lambda().in(Dict::getParentId, Func.toLongList(ids)));
+		if (cnt > 0L) {
+			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
+		}
+		return removeByIds(Func.toLongList(ids));
+	}
+
+	@Override
+	public IPage<DictVO> parentList(Map<String, Object> dict, Query query) {
+		IPage<Dict> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, Dict.class).lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(Dict::getSort));
+		return DictWrapper.build().pageVO(page);
+	}
+
+	@Override
+	public List<DictVO> childList(Map<String, Object> dict, Long parentId) {
+		if (parentId < 0) {
+			return new ArrayList<>();
+		}
+		dict.remove("parentId");
+		Dict parentDict = DictCache.getById(parentId);
+		List<Dict> list = this.list(Condition.getQueryWrapper(dict, Dict.class).lambda().ne(Dict::getId, parentId).eq(Dict::getCode, parentDict.getCode()).orderByAsc(Dict::getSort));
+		return DictWrapper.build().listNodeVO(list);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
new file mode 100644
index 0000000..b926374
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -0,0 +1,297 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.dto.MenuDTO;
+import com.vci.ubcs.system.entity.*;
+import com.vci.ubcs.system.vo.MenuVO;
+import com.vci.ubcs.system.mapper.MenuMapper;
+import com.vci.ubcs.system.service.IMenuService;
+import com.vci.ubcs.system.service.IRoleMenuService;
+import com.vci.ubcs.system.service.IRoleScopeService;
+import com.vci.ubcs.system.service.ITopMenuSettingService;
+import com.vci.ubcs.system.wrapper.MenuWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.ubcs.common.constant.CommonConstant.API_SCOPE_CATEGORY;
+import static com.vci.ubcs.common.constant.CommonConstant.DATA_SCOPE_CATEGORY;
+import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
+
+	private final IRoleMenuService roleMenuService;
+	private final IRoleScopeService roleScopeService;
+	private final ITopMenuSettingService topMenuSettingService;
+	private final static String PARENT_ID = "parentId";
+	private final static Integer MENU_CATEGORY = 1;
+
+	@Override
+	public List<MenuVO> lazyList(Long parentId, Map<String, Object> param) {
+		if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
+			parentId = null;
+		}
+		return baseMapper.lazyList(parentId, param);
+	}
+
+	@Override
+	public List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param) {
+		if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
+			parentId = null;
+		}
+		return baseMapper.lazyMenuList(parentId, param);
+	}
+
+
+	@Override
+	public List<MenuVO> routes(String roleId, Long topMenuId) {
+		if (StringUtil.isBlank(roleId)) {
+			return null;
+		}
+		List<Menu> allMenus = baseMapper.allMenu();
+		List<Menu> roleMenus;
+		// 瓒呯骇绠$悊鍛樺苟涓斾笉鏄《閮ㄨ彍鍗曡姹傚垯杩斿洖鍏ㄩ儴鑿滃崟
+		if (AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
+			roleMenus = allMenus;
+		}
+		// 闈炶秴绾х鐞嗗憳骞朵笖涓嶆槸椤堕儴鑿滃崟璇锋眰鍒欒繑鍥炲搴旇鑹叉潈闄愯彍鍗�
+		else if (!AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
+			roleMenus = tenantPackageMenu(baseMapper.roleMenuByRoleId(Func.toLongList(roleId)));
+		}
+		// 椤堕儴鑿滃崟璇锋眰杩斿洖瀵瑰簲瑙掕壊鏉冮檺鑿滃崟
+		else {
+			// 瑙掕壊閰嶇疆瀵瑰簲鑿滃崟
+			List<Menu> roleIdMenus = baseMapper.roleMenuByRoleId(Func.toLongList(roleId));
+			// 鍙嶅悜閫掑綊瑙掕壊鑿滃崟鎵�鏈夌埗绾�
+			List<Menu> routes = new LinkedList<>(roleIdMenus);
+			roleIdMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu));
+			// 椤堕儴閰嶇疆瀵瑰簲鑿滃崟
+			List<Menu> topIdMenus = baseMapper.roleMenuByTopMenuId(topMenuId);
+			// 绛涢�夊尮閰嶈鑹插搴旂殑鏉冮檺鑿滃崟
+			roleMenus = topIdMenus.stream().filter(x ->
+				routes.stream().anyMatch(route -> route.getId().longValue() == x.getId().longValue())
+			).collect(Collectors.toList());
+		}
+		return buildRoutes(allMenus, roleMenus);
+	}
+
+	private List<MenuVO> buildRoutes(List<Menu> allMenus, List<Menu> roleMenus) {
+		List<Menu> routes = new LinkedList<>(roleMenus);
+		roleMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu));
+		routes.sort(Comparator.comparing(Menu::getSort));
+		MenuWrapper menuWrapper = new MenuWrapper();
+		List<Menu> collect = routes.stream().filter(x -> Func.equals(x.getCategory(), 1)).collect(Collectors.toList());
+		return menuWrapper.listNodeVO(collect);
+	}
+
+	private void recursion(List<Menu> allMenus, List<Menu> routes, Menu roleMenu) {
+		Optional<Menu> menu = allMenus.stream().filter(x -> Func.equals(x.getId(), roleMenu.getParentId())).findFirst();
+		if (menu.isPresent() && !routes.contains(menu.get())) {
+			routes.add(menu.get());
+			recursion(allMenus, routes, menu.get());
+		}
+	}
+
+	@Override
+	public List<MenuVO> buttons(String roleId) {
+		List<Menu> buttons = (AuthUtil.isAdministrator()) ? baseMapper.allButtons() : baseMapper.buttons(Func.toLongList(roleId));
+		MenuWrapper menuWrapper = new MenuWrapper();
+		return menuWrapper.listNodeVO(buttons);
+	}
+
+	@Override
+	public List<TreeNode> tree() {
+		return ForestNodeMerger.merge(baseMapper.tree());
+	}
+
+	@Override
+	public List<TreeNode> grantTree(BladeUser user) {
+		List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTree() : baseMapper.grantTreeByRole(Func.toLongList(user.getRoleId()));
+		return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
+	}
+
+	@Override
+	public List<TreeNode> grantTopTree(BladeUser user) {
+		List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTopTree() : baseMapper.grantTopTreeByRole(Func.toLongList(user.getRoleId()));
+		return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
+	}
+
+	/**
+	 * 绉熸埛鑿滃崟鏉冮檺鑷畾涔夌瓫閫�
+	 */
+	private List<TreeNode> tenantPackageTree(List<TreeNode> menuTree, String tenantId) {
+		TenantPackage tenantPackage = SysCache.getTenantPackage(tenantId);
+		if (!AuthUtil.isAdministrator() && Func.isNotEmpty(tenantPackage) && tenantPackage.getId() > 0L) {
+			List<Long> menuIds = Func.toLongList(tenantPackage.getMenuId());
+			// 绛涢�夊嚭涓よ�呰彍鍗曚氦闆嗛泦鍚�
+			List<TreeNode> collect = menuTree.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList());
+			// 鍒涘缓閫掑綊鍩虹闆嗗悎
+			List<TreeNode> packageTree = new LinkedList<>(collect);
+			// 閫掑綊绛涢�夊嚭鑿滃崟闆嗗悎鎵�鏈夌埗绾�
+			collect.forEach(treeNode -> recursionParent(menuTree, packageTree, treeNode));
+			// 閫掑綊绛涢�夊嚭鑿滃崟闆嗗悎鎵�鏈夊瓙绾�
+			collect.forEach(treeNode -> recursionChild(menuTree, packageTree, treeNode));
+			// 鍚堝苟鍦ㄤ竴璧疯繑鍥炴渶缁堥泦鍚�
+			return packageTree;
+		}
+		return menuTree;
+	}
+
+	/**
+	 * 鐖惰妭鐐归�掑綊
+	 */
+	public void recursionParent(List<TreeNode> menuTree, List<TreeNode> packageTree, TreeNode treeNode) {
+		Optional<TreeNode> node = menuTree.stream().filter(x -> Func.equals(x.getId(), treeNode.getParentId())).findFirst();
+		if (node.isPresent() && !packageTree.contains(node.get())) {
+			packageTree.add(node.get());
+			recursionParent(menuTree, packageTree, node.get());
+		}
+	}
+
+	/**
+	 * 瀛愯妭鐐归�掑綊
+	 */
+	public void recursionChild(List<TreeNode> menuTree, List<TreeNode> packageTree, TreeNode treeNode) {
+		List<TreeNode> nodes = menuTree.stream().filter(x -> Func.equals(x.getParentId(), treeNode.getId())).collect(Collectors.toList());
+		nodes.forEach(node -> {
+			if (!packageTree.contains(node)) {
+				packageTree.add(node);
+				recursionChild(menuTree, packageTree, node);
+			}
+		});
+	}
+
+	/**
+	 * 绉熸埛鑿滃崟鏉冮檺鑷畾涔夌瓫閫�
+	 */
+	private List<Menu> tenantPackageMenu(List<Menu> menu) {
+		TenantPackage tenantPackage = SysCache.getTenantPackage(AuthUtil.getTenantId());
+		if (Func.isNotEmpty(tenantPackage) && tenantPackage.getId() > 0L) {
+			List<Long> menuIds = Func.toLongList(tenantPackage.getMenuId());
+			menu = menu.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList());
+		}
+		return menu;
+	}
+
+	@Override
+	public List<TreeNode> grantDataScopeTree(BladeUser user) {
+		return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantDataScopeTree() : baseMapper.grantDataScopeTreeByRole(Func.toLongList(user.getRoleId())));
+	}
+
+	@Override
+	public List<TreeNode> grantApiScopeTree(BladeUser user) {
+		return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantApiScopeTree() : baseMapper.grantApiScopeTreeByRole(Func.toLongList(user.getRoleId())));
+	}
+
+	@Override
+	public List<String> roleTreeKeys(String roleIds) {
+		List<RoleMenu> roleMenus = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().in(RoleMenu::getRoleId, Func.toLongList(roleIds)));
+		return roleMenus.stream().map(roleMenu -> Func.toStr(roleMenu.getMenuId())).collect(Collectors.toList());
+	}
+
+	@Override
+	public List<String> topTreeKeys(String topMenuIds) {
+		List<TopMenuSetting> settings = topMenuSettingService.list(Wrappers.<TopMenuSetting>query().lambda().in(TopMenuSetting::getTopMenuId, Func.toLongList(topMenuIds)));
+		return settings.stream().map(setting -> Func.toStr(setting.getMenuId())).collect(Collectors.toList());
+	}
+
+	@Override
+	public List<String> dataScopeTreeKeys(String roleIds) {
+		List<RoleScope> roleScopes = roleScopeService.list(Wrappers.<RoleScope>query().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, Func.toLongList(roleIds)));
+		return roleScopes.stream().map(roleScope -> Func.toStr(roleScope.getScopeId())).collect(Collectors.toList());
+	}
+
+	@Override
+	public List<String> apiScopeTreeKeys(String roleIds) {
+		List<RoleScope> roleScopes = roleScopeService.list(Wrappers.<RoleScope>query().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, Func.toLongList(roleIds)));
+		return roleScopes.stream().map(roleScope -> Func.toStr(roleScope.getScopeId())).collect(Collectors.toList());
+	}
+
+	@Override
+	@Cacheable(cacheNames = MENU_CACHE, key = "'auth:routes:' + #user.roleId")
+	public List<Kv> authRoutes(BladeUser user) {
+		List<MenuDTO> routes = baseMapper.authRoutes(Func.toLongList(user.getRoleId()));
+		List<Kv> list = new ArrayList<>();
+		routes.forEach(route -> list.add(Kv.create().set(route.getPath(), Kv.create().set("authority", Func.toStrArray(route.getAlias())))));
+		return list;
+	}
+
+	@Override
+	public boolean removeMenu(String ids) {
+		Long cnt = baseMapper.selectCount(Wrappers.<Menu>query().lambda().in(Menu::getParentId, Func.toLongList(ids)));
+		if (cnt > 0L) {
+			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
+		}
+		return removeByIds(Func.toLongList(ids));
+	}
+
+	@Override
+	public boolean submit(Menu menu) {
+		LambdaQueryWrapper<Menu> menuQueryWrapper = Wrappers.lambdaQuery();
+		if (menu.getId() == null) {
+			menuQueryWrapper.eq(Menu::getCode, menu.getCode()).or(
+				wrapper -> wrapper.eq(Menu::getName, menu.getName()).eq(Menu::getCategory, MENU_CATEGORY)
+			);
+		} else {
+			menuQueryWrapper.ne(Menu::getId, menu.getId()).and(
+				wrapper -> wrapper.eq(Menu::getCode, menu.getCode()).or(
+					o -> o.eq(Menu::getName, menu.getName()).eq(Menu::getCategory, MENU_CATEGORY)
+				)
+			);
+		}
+		Long cnt = baseMapper.selectCount(menuQueryWrapper);
+		if (cnt > 0L) {
+			throw new ServiceException("鑿滃崟鍚嶆垨缂栧彿宸插瓨鍦�!");
+		}
+		if (menu.getParentId() == null && menu.getId() == null) {
+			menu.setParentId(BladeConstant.TOP_PARENT_ID);
+		}
+		if (menu.getParentId() != null && menu.getId() == null) {
+			Menu parentMenu = baseMapper.selectById(menu.getParentId());
+			if (parentMenu != null && parentMenu.getCategory() != 1) {
+				throw new ServiceException("鐖惰妭鐐瑰彧鍙�夋嫨鑿滃崟绫诲瀷!");
+			}
+		}
+		menu.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return saveOrUpdate(menu);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ParamServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ParamServiceImpl.java
new file mode 100644
index 0000000..6cec8c6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ParamServiceImpl.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.system.mapper.ParamMapper;
+import com.vci.ubcs.system.service.IParamService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import com.vci.ubcs.system.entity.Param;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class ParamServiceImpl extends BaseServiceImpl<ParamMapper, Param> implements IParamService {
+
+	@Override
+	public String getValue(String paramKey) {
+		Param param = this.getOne(Wrappers.<Param>query().lambda().eq(Param::getParamKey, paramKey));
+		return param.getParamValue();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/PostServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/PostServiceImpl.java
new file mode 100644
index 0000000..ac4abaa
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/PostServiceImpl.java
@@ -0,0 +1,74 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.system.mapper.PostMapper;
+import com.vci.ubcs.system.service.IPostService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Post;
+import com.vci.ubcs.system.vo.PostVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 宀椾綅琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class PostServiceImpl extends BaseServiceImpl<PostMapper, Post> implements IPostService {
+
+	@Override
+	public IPage<PostVO> selectPostPage(IPage<PostVO> page, PostVO post) {
+		return page.setRecords(baseMapper.selectPostPage(page, post));
+	}
+
+	@Override
+	public String getPostIds(String tenantId, String postNames) {
+		List<Post> postList = baseMapper.selectList(Wrappers.<Post>query().lambda().eq(Post::getTenantId, tenantId).in(Post::getPostName, Func.toStrList(postNames)));
+		if (postList != null && postList.size() > 0) {
+			return postList.stream().map(post -> Func.toStr(post.getId())).distinct().collect(Collectors.joining(","));
+		}
+		return null;
+	}
+
+	@Override
+	public String getPostIdsByFuzzy(String tenantId, String postNames) {
+		LambdaQueryWrapper<Post> queryWrapper = Wrappers.<Post>query().lambda().eq(Post::getTenantId, tenantId);
+		queryWrapper.and(wrapper -> {
+			List<String> names = Func.toStrList(postNames);
+			names.forEach(name -> wrapper.like(Post::getPostName, name).or());
+		});
+		List<Post> postList = baseMapper.selectList(queryWrapper);
+		if (postList != null && postList.size() > 0) {
+			return postList.stream().map(post -> Func.toStr(post.getId())).distinct().collect(Collectors.joining(","));
+		}
+		return null;
+	}
+
+	@Override
+	public List<String> getPostNames(String postIds) {
+		return baseMapper.getPostNames(Func.toLongArray(postIds));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RegionServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RegionServiceImpl.java
new file mode 100644
index 0000000..0bb766a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RegionServiceImpl.java
@@ -0,0 +1,120 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.RegionMapper;
+import com.vci.ubcs.system.service.IRegionService;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import com.vci.ubcs.system.entity.Region;
+import com.vci.ubcs.system.excel.RegionExcel;
+import com.vci.ubcs.system.vo.RegionVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.ubcs.system.cache.RegionCache.*;
+
+
+/**
+ * 琛屾斂鍖哄垝琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService {
+
+	@Override
+	public boolean submit(Region region) {
+		Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getCode, region.getCode()));
+		if (cnt > 0L) {
+			return this.updateById(region);
+		}
+		// 璁剧疆绁栧尯鍒掔紪鍙�
+		Region parent = getByCode(region.getParentCode());
+		if (Func.isNotEmpty(parent) || Func.isNotEmpty(parent.getCode())) {
+			String ancestors = parent.getAncestors() + StringPool.COMMA + parent.getCode();
+			region.setAncestors(ancestors);
+		}
+		// 璁剧疆鐪併�佸競銆佸尯銆侀晣銆佹潙
+		Integer level = region.getRegionLevel();
+		String code = region.getCode();
+		String name = region.getName();
+		if (level == PROVINCE_LEVEL) {
+			region.setProvinceCode(code);
+			region.setProvinceName(name);
+		} else if (level == CITY_LEVEL) {
+			region.setCityCode(code);
+			region.setCityName(name);
+		} else if (level == DISTRICT_LEVEL) {
+			region.setDistrictCode(code);
+			region.setDistrictName(name);
+		} else if (level == TOWN_LEVEL) {
+			region.setTownCode(code);
+			region.setTownName(name);
+		} else if (level == VILLAGE_LEVEL) {
+			region.setVillageCode(code);
+			region.setVillageName(name);
+		}
+		return this.save(region);
+	}
+
+	@Override
+	public boolean removeRegion(String id) {
+		Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getParentCode, id));
+		if (cnt > 0L) {
+			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
+		}
+		return removeById(id);
+	}
+
+	@Override
+	public List<RegionVO> lazyList(String parentCode, Map<String, Object> param) {
+		return baseMapper.lazyList(parentCode, param);
+	}
+
+	@Override
+	public List<RegionVO> lazyTree(String parentCode, Map<String, Object> param) {
+		return baseMapper.lazyTree(parentCode, param);
+	}
+
+	@Override
+	public void importRegion(List<RegionExcel> data, Boolean isCovered) {
+		List<Region> list = new ArrayList<>();
+		data.forEach(regionExcel -> {
+			Region region = BeanUtil.copy(regionExcel, Region.class);
+			list.add(region);
+		});
+		if (isCovered) {
+			this.saveOrUpdateBatch(list);
+		} else {
+			this.saveBatch(list);
+		}
+	}
+
+	@Override
+	public List<RegionExcel> exportRegion(Wrapper<Region> queryWrapper) {
+		return baseMapper.exportRegion(queryWrapper);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java
new file mode 100644
index 0000000..a29ea7c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.entity.RoleMenu;
+import com.vci.ubcs.system.mapper.RoleMenuMapper;
+import com.vci.ubcs.system.service.IRoleMenuService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements IRoleMenuService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleScopeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleScopeServiceImpl.java
new file mode 100644
index 0000000..9e973ab
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleScopeServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.entity.RoleScope;
+import com.vci.ubcs.system.mapper.RoleScopeMapper;
+import com.vci.ubcs.system.service.IRoleScopeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class RoleScopeServiceImpl extends ServiceImpl<RoleScopeMapper, RoleScope> implements IRoleScopeService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java
new file mode 100644
index 0000000..d822084
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java
@@ -0,0 +1,230 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.RoleMapper;
+import com.vci.ubcs.system.service.IRoleMenuService;
+import com.vci.ubcs.system.service.IRoleScopeService;
+import com.vci.ubcs.system.service.IRoleService;
+import com.vci.ubcs.system.wrapper.RoleWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.constant.RoleConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Role;
+import com.vci.ubcs.system.entity.RoleMenu;
+import com.vci.ubcs.system.entity.RoleScope;
+import com.vci.ubcs.system.vo.RoleVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.vci.ubcs.common.constant.CommonConstant.API_SCOPE_CATEGORY;
+import static com.vci.ubcs.common.constant.CommonConstant.DATA_SCOPE_CATEGORY;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@Validated
+@AllArgsConstructor
+public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
+
+	private final IRoleMenuService roleMenuService;
+	private final IRoleScopeService roleScopeService;
+
+	@Override
+	public IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role) {
+		return page.setRecords(baseMapper.selectRolePage(page, role));
+	}
+
+	@Override
+	public List<RoleVO> tree(String tenantId) {
+		String userRole = AuthUtil.getUserRole();
+		String excludeRole = null;
+		if (!CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMIN) && !CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMINISTRATOR)) {
+			excludeRole = RoleConstant.ADMINISTRATOR;
+		}
+		return ForestNodeMerger.merge(baseMapper.tree(tenantId, excludeRole));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds) {
+		return grantRoleMenu(roleIds, menuIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds);
+	}
+
+	private boolean grantRoleMenu(List<Long> roleIds, List<Long> menuIds) {
+		// 闃叉瓒婃潈閰嶇疆瓒呯瑙掕壊
+		Long administratorCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMINISTRATOR).in(Role::getId, roleIds));
+		if (!AuthUtil.isAdministrator() && administratorCount > 0L) {
+			throw new ServiceException("鏃犳潈閰嶇疆瓒呯瑙掕壊!");
+		}
+		// 闃叉瓒婃潈閰嶇疆绠$悊鍛樿鑹�
+		Long adminCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMIN).in(Role::getId, roleIds));
+		if (!AuthUtil.isAdmin() && adminCount > 0L) {
+			throw new ServiceException("鏃犳潈閰嶇疆绠$悊鍛樿鑹�!");
+		}
+		// 鍒犻櫎瑙掕壊閰嶇疆鐨勮彍鍗曢泦鍚�
+		roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().in(RoleMenu::getRoleId, roleIds));
+		// 缁勮閰嶇疆
+		List<RoleMenu> roleMenus = new ArrayList<>();
+		roleIds.forEach(roleId -> menuIds.forEach(menuId -> {
+			RoleMenu roleMenu = new RoleMenu();
+			roleMenu.setRoleId(roleId);
+			roleMenu.setMenuId(menuId);
+			roleMenus.add(roleMenu);
+		}));
+		// 鏂板閰嶇疆
+		roleMenuService.saveBatch(roleMenus);
+		// 閫掑綊璁剧疆涓嬪睘瑙掕壊鑿滃崟闆嗗悎
+		recursionRoleMenu(roleIds, menuIds);
+		return true;
+	}
+
+	private void recursionRoleMenu(List<Long> roleIds, List<Long> menuIds) {
+		roleIds.forEach(roleId -> baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getParentId, roleId)).forEach(role -> {
+			List<RoleMenu> roleMenuList = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().eq(RoleMenu::getRoleId, role.getId()));
+			// 瀛愯妭鐐硅繃婊ゅ嚭鐖惰妭鐐瑰垹闄ょ殑鑿滃崟闆嗗悎
+			List<Long> collectRoleMenuIds = roleMenuList.stream().map(RoleMenu::getMenuId).filter(menuId -> !menuIds.contains(menuId)).collect(Collectors.toList());
+			if (collectRoleMenuIds.size() > 0) {
+				// 鍒犻櫎瀛愯妭鐐规潈闄愬鐨勮彍鍗曢泦鍚�
+				roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().eq(RoleMenu::getRoleId, role.getId()).in(RoleMenu::getMenuId, collectRoleMenuIds));
+				// 閫掑綊璁剧疆涓嬪睘瑙掕壊鑿滃崟闆嗗悎
+				recursionRoleMenu(Collections.singletonList(role.getId()), menuIds);
+			}
+		}));
+	}
+
+	private boolean grantDataScope(List<Long> roleIds, List<Long> dataScopeIds) {
+		// 鍒犻櫎瑙掕壊閰嶇疆鐨勬暟鎹潈闄愰泦鍚�
+		roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
+		// 缁勮閰嶇疆
+		List<RoleScope> roleDataScopes = new ArrayList<>();
+		roleIds.forEach(roleId -> dataScopeIds.forEach(scopeId -> {
+			RoleScope roleScope = new RoleScope();
+			roleScope.setScopeCategory(DATA_SCOPE_CATEGORY);
+			roleScope.setRoleId(roleId);
+			roleScope.setScopeId(scopeId);
+			roleDataScopes.add(roleScope);
+		}));
+		// 鏂板閰嶇疆
+		roleScopeService.saveBatch(roleDataScopes);
+		return true;
+	}
+
+	private boolean grantApiScope(List<Long> roleIds, List<Long> apiScopeIds) {
+		// 鍒犻櫎瑙掕壊閰嶇疆鐨勬帴鍙f潈闄愰泦鍚�
+		roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
+		// 缁勮閰嶇疆
+		List<RoleScope> roleApiScopes = new ArrayList<>();
+		roleIds.forEach(roleId -> apiScopeIds.forEach(scopeId -> {
+			RoleScope roleScope = new RoleScope();
+			roleScope.setScopeCategory(API_SCOPE_CATEGORY);
+			roleScope.setScopeId(scopeId);
+			roleScope.setRoleId(roleId);
+			roleApiScopes.add(roleScope);
+		}));
+		// 鏂板閰嶇疆
+		roleScopeService.saveBatch(roleApiScopes);
+		return true;
+	}
+
+	@Override
+	public String getRoleIds(String tenantId, String roleNames) {
+		List<Role> roleList = baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getTenantId, tenantId).in(Role::getRoleName, Func.toStrList(roleNames)));
+		if (roleList != null && roleList.size() > 0) {
+			return roleList.stream().map(role -> Func.toStr(role.getId())).distinct().collect(Collectors.joining(","));
+		}
+		return null;
+	}
+
+	@Override
+	public List<String> getRoleNames(String roleIds) {
+		return baseMapper.getRoleNames(Func.toLongArray(roleIds));
+	}
+
+	@Override
+	public List<String> getRoleAliases(String roleIds) {
+		return baseMapper.getRoleAliases(Func.toLongArray(roleIds));
+	}
+
+	@Override
+	public boolean submit(Role role) {
+		if (!AuthUtil.isAdministrator()) {
+			if (Func.toStr(role.getRoleAlias()).equals(RoleConstant.ADMINISTRATOR)) {
+				throw new ServiceException("鏃犳潈闄愬垱寤鸿秴绠¤鑹诧紒");
+			}
+		}
+		if (Func.isEmpty(role.getParentId())) {
+			role.setTenantId(AuthUtil.getTenantId());
+			role.setParentId(BladeConstant.TOP_PARENT_ID);
+		}
+		if (role.getParentId() > 0) {
+			Role parent = getById(role.getParentId());
+			if (Func.toLong(role.getParentId()) == Func.toLong(role.getId())) {
+				throw new ServiceException("鐖惰妭鐐逛笉鍙�夋嫨鑷韩!");
+			}
+			role.setTenantId(parent.getTenantId());
+		}
+		role.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return saveOrUpdate(role);
+	}
+
+	@Override
+	public List<RoleVO> search(String roleName, Long parentId) {
+		String tenantId = AuthUtil.getTenantId();
+		LambdaQueryWrapper<Role> queryWrapper = Wrappers.<Role>query().lambda();
+		if (Func.isNotEmpty(roleName)) {
+			queryWrapper.like(Role::getRoleName, roleName);
+		}
+		if (Func.isNotEmpty(parentId) && parentId > 0L) {
+			queryWrapper.eq(Role::getParentId, parentId);
+		}
+		if (Func.isNotEmpty(tenantId)) {
+			queryWrapper.eq(Role::getTenantId, tenantId);
+		}
+		List<Role> roleList = baseMapper.selectList(queryWrapper);
+		return RoleWrapper.build().listNodeVO(roleList);
+	}
+
+	@Override
+	public boolean removeRole(String ids) {
+		Long cnt = baseMapper.selectCount(Wrappers.<Role>query().lambda().in(Role::getParentId, Func.toLongList(ids)));
+		if (cnt > 0L) {
+			throw new ServiceException("璇峰厛鍒犻櫎瀛愯妭鐐�!");
+		}
+		return removeByIds(Func.toLongList(ids));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java
new file mode 100644
index 0000000..8673d59
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java
@@ -0,0 +1,177 @@
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.common.constant.CommonConstant;
+import com.vci.ubcs.system.mapper.StrategyMapper;
+import com.vci.ubcs.system.service.IStrategyService;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.Strategy;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 瀵嗙爜绛栫暐(Strategy)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2023-03-20 15:25:05
+ */
+@Service
+public class StrategyServiceImpl extends ServiceImpl<StrategyMapper, Strategy> implements IStrategyService {
+
+	@Resource
+	private StrategyMapper strategyMapper;
+
+	/**
+	 * 閫氳繃ID鏌ヨ鍗曟潯鏁版嵁
+	 *
+	 * @param id 涓婚敭
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	@Override
+	public Strategy queryById(String id) {
+		return this.getById(id);
+	}
+
+	/**
+	 * 鏌ヨ榛樿瀵嗙爜绛栫暐
+	 * @return
+	 */
+	@Override
+	public Strategy queryByIsDefault() {
+		return this.strategyMapper.queryByIsDefault();
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param query 鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public PageImpl<Strategy> queryAllByPage(Query query) {
+		Page<Strategy> strategyPage = new Page<>(query.getCurrent(), query.getSize());
+		return new PageImpl<>(this.strategyMapper.queryAllByPage(strategyPage));
+	}
+
+	/**
+	 * 鏂板鏁版嵁鎴栬�呬慨鏀规暟鎹�
+	 *
+	 * @param strategy 瀹炰緥瀵硅薄
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	@Override
+	public boolean submit(Strategy strategy) {
+		//鍒ゆ柇鏄惁鎼哄甫id
+		if(Func.isEmpty(strategy.getId())){
+			//鎵ц鏂板
+			Strategy dbstrategy = this.getOne(Wrappers.<Strategy>query().lambda()
+				.eq(Strategy::getStrategyName, strategy.getStrategyName()));
+			//濡傛灉鏁版嵁搴撲腑瀛樺湪杩欐潯缁勫悎鍚嶇О鐨勮褰曠洿鎺ヨ繑鍥�
+			if(!Func.isEmpty(dbstrategy)){
+				throw new ServiceException("璇ュ瘑鐮佺瓥鐣ュ凡瀛樺湪!");
+			}
+			//濡傛灉褰撳墠鏂板璁剧疆涓洪粯璁ゅ瘑鐮佺瓥鐣ワ紝闇�瑕佸皢宸插瓨鍦ㄩ粯璁ゅ瘑鐮佺瓥鐣ヤ慨鏀逛负闈為粯璁�
+			if(strategy.getIsDefault().equals("1") || strategy.getIsDefault() == 1){
+				this.update(Wrappers.<Strategy>update().lambda()
+					.set(Strategy::getIsDefault, CommonConstant.NOT_SEALED_ID)
+					.eq(Strategy::getIsDefault, CommonConstant.DATA_SCOPE_CATEGORY));
+			}
+			if(strategy.getRequiredType() > 0){
+				throw new ServiceException("蹇呭~绉嶇被涓嶈兘灏忎簬绛変簬0!");
+			}
+			if(strategy.getRequiredType() > strategy.getCombinationIds().split(",").length){
+				throw new ServiceException("蹇呭~绉嶇被涓嶈兘澶т簬鎵�閫夋嫨鐨勫瘑鐮佺粍鍚堟柟寮忕殑涓暟!");
+			}
+			if(strategy.getMaxPwdLen() > strategy.getMinPwdLen()){
+				throw new ServiceException("瀵嗙爜鏈�澶ч暱搴︿笉鑳藉皬浜庢渶灏忛暱搴�!");
+			}
+			if(strategy.getMinPwdLen() < strategy.getCombinationIds().split(",").length || strategy.getMaxPwdLen() < strategy.getCombinationIds().split(",").length){
+				throw new ServiceException("瀵嗙爜鏈�灏忛暱搴︿笉鑳藉皬浜庣瀵嗙瓥鐣ョ殑鍊�!");
+			}
+			if(Func.isEmpty(strategy.getCreateTime())){
+				strategy.setCreateTime(new Date());
+			}
+			if(Func.isEmpty(strategy.getUpdateTime())){
+				strategy.setUpdateTime(new Date());
+			}
+			boolean temp = super.saveOrUpdate(strategy);
+			return temp;
+		}else {
+			//濡傛灉褰撳墠淇敼璁剧疆涓洪粯璁ゅ瘑鐮佺瓥鐣ワ紝闇�瑕佸皢宸插瓨鍦ㄩ粯璁ゅ瘑鐮佺瓥鐣ヤ慨鏀逛负闈為粯璁�
+			if(strategy.getIsDefault().equals("1") || strategy.getIsDefault() == 1){
+				this.update(Wrappers.<Strategy>update().lambda()
+					.set(Strategy::getIsDefault,CommonConstant.NOT_SEALED_ID)
+					.eq(Strategy::getIsDefault,CommonConstant.DATA_SCOPE_CATEGORY));
+			}else {
+				if(Func.isEmpty(queryByIsDefault())){
+					throw new ServiceException("榛樿瀵嗙爜绛栫暐蹇呴』鏈変笖浠呮湁涓�鏉�!");
+				}
+			}
+			if(Func.isEmpty(strategy.getUpdateTime())){
+				strategy.setUpdateTime(new Date());
+			}
+			CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+			return super.saveOrUpdate(strategy);
+		}
+	}
+
+	/**
+	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鏄惁鎴愬姛
+	 */
+	@Override
+	public boolean deleteByIds(List<String> ids) {
+		Strategy strategy = this.getOne(Wrappers.<Strategy>query().lambda()
+			.in(Strategy::getId,ids)
+			.eq(Strategy::getIsDefault, CommonConstant.DATA_SCOPE_CATEGORY));
+		//濡傛灉瀛樺湪榛樿绛栫暐鐨刬d锛屽氨涓嶈兘鐩存帴鍒犻櫎缁欏嚭鎻愮ず
+		if(!Func.isEmpty(strategy)){
+			throw new ServiceException("涓嶈兘鍒犻櫎榛樿瀵嗙爜绛栫暐!");
+		}
+		boolean tenantTemp = this.removeBatchByIds(ids);
+		return tenantTemp;
+	}
+
+	/**
+	 * 閫氳繃绉熸埛id浠ュ強鐢ㄦ埛鍚嶆煡璇㈠瘑鐮佺瓥鐣�
+	 * @param tenantId
+	 * @param name
+	 * @return
+	 */
+	@Override
+	public Strategy queryByNameAndTenantId(String tenantId, String name) {
+		Strategy strategy = this.strategyMapper.queryByNameAndTenantId(tenantId,name);
+		if(!Func.isEmpty(strategy)){
+			return strategy;
+		}
+		return queryByIsDefault();
+	}
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛id鏌ヨ瀵嗙爜绛栫暐
+	 * @param userId
+	 * @return
+	 */
+	@Override
+	public Strategy queryByUserId(Long userId) {
+		Strategy strategy = this.strategyMapper.queryByUserId(userId);
+		if(!Func.isEmpty(strategy)){
+			return strategy;
+		}
+		return queryByIsDefault();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantPackageServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantPackageServiceImpl.java
new file mode 100644
index 0000000..6c77129
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantPackageServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.vci.ubcs.system.mapper.TenantPackageMapper;
+import com.vci.ubcs.system.service.ITenantPackageService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import com.vci.ubcs.system.entity.TenantPackage;
+import org.springframework.stereotype.Service;
+
+/**
+ * 绉熸埛浜у搧琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author BladeX
+ */
+@Service
+public class TenantPackageServiceImpl extends BaseServiceImpl<TenantPackageMapper, TenantPackage> implements ITenantPackageService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantServiceImpl.java
new file mode 100644
index 0000000..b4b22d4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantServiceImpl.java
@@ -0,0 +1,337 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.system.entity.*;
+import com.vci.ubcs.system.mapper.TenantMapper;
+import com.vci.ubcs.system.service.*;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.enums.UserEnum;
+import com.vci.ubcs.system.user.feign.IUserClient;
+import lombok.RequiredArgsConstructor;
+import com.vci.ubcs.common.constant.CommonConstant;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tenant.TenantId;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import com.vci.ubcs.system.cache.ParamCache;
+
+import com.vci.ubcs.system.vo.TenantVO;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.ubcs.common.constant.TenantConstant.*;
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@RequiredArgsConstructor
+public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> implements ITenantService {
+
+	private final TenantId tenantId;
+	private final IRoleService roleService;
+	private final IMenuService menuService;
+	private final IDeptService deptService;
+	private final IPostService postService;
+	private final IRoleMenuService roleMenuService;
+	private final IDictBizService dictBizService;
+	private final IUserClient userClient;
+	private final IStrategyService strategyService;
+	private final IUserPwdstrategyService userPwdstrategyService;
+
+	/**
+	 * 鑾峰彇鏄惁鍏佽鑷鎺у埗涓夊憳鏄惁寮�鍚�
+	 */
+	@Value("${ssa.ssa-enable}")
+	private Boolean ssaEnable;
+	/**
+	 * 鑾峰彇榛樿涓夊憳绠$悊鍛樼殑鍚嶇О
+	 */
+	@Value("#{'${ssa.ssa-names}'.split(',')}")
+	private List<String> ssaNames;
+	/**
+	 * 涓夊憳绠$悊鑿滃崟閰嶇疆
+	 */
+	@Value("#{'${ssa.sys-menus}'.split(',')}")
+	private List<String> sysMenus;
+	@Value("#{'${ssa.sec-menus}'.split(',')}")
+	private List<String> secMenus;
+	@Value("#{'${ssa.audit-menus}'.split(',')}")
+	private List<String> auditMenus;
+
+	@Override
+	public IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant) {
+		return page.setRecords(baseMapper.selectTenantPage(page, tenant));
+	}
+
+	@Override
+	public Tenant getByTenantId(String tenantId) {
+		return getOne(Wrappers.<Tenant>query().lambda().eq(Tenant::getTenantId, tenantId));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean submitTenant(TenantVO tenant) {
+		if (Func.isEmpty(tenant.getId())) {
+			// 鑾峰彇鍒版湭鍒犻櫎绉熸埛鎬绘暟锛岀敓鎴愭柊鐨勭鎴穒d
+			List<Tenant> tenants = baseMapper.selectList(Wrappers.<Tenant>query().lambda().eq(Tenant::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+			List<String> codes = tenants.stream().map(Tenant::getTenantId).collect(Collectors.toList());
+			String tenantId = getTenantId(codes);
+			tenant.setTenantId(tenantId);
+			// 閰嶇疆涓篺alse锛屽苟涓斿墠绔紶杈撶殑鍙傛暟涓�1(鏈�夋嫨寮�鍚�)灏变笉闇�瑕佸垱寤轰笁鍛�
+			if(!this.ssaEnable && tenant.getSsaEnable()==1){
+				// 涓嶅紑鍚笁鍛樼鐞嗘椂鐩存帴鍒涘缓涓�涓渶楂樻潈闄愮殑绠$悊鍛�
+				Role role = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瓒呯骇绠$悊鍛�",1,"admin",BladeConstant.DB_NOT_DELETED);
+				roleService.save(role);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄�
+				saveRoleMenus(role, MENU_CODES);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂�
+				Dept dept = generateDept(tenantId, tenant);
+				deptService.save(dept);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣�
+				Post postInfo = generatePost(tenantId, 1, "admin", "绠$悊鍛�", 1);
+				postService.save(postInfo);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏�
+				LinkedList<DictBiz> dictBizs = new LinkedList<>();
+				List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
+				dictBizService.saveBatch(dictBizList);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤
+				User user = generateUser(tenantId, role, dept, postInfo);
+				// 鍏堜繚瀛樼鎴�
+				boolean temp = super.saveOrUpdate(tenant);
+				// 鍒涘缓鐢ㄦ埛
+				R<Boolean> result = userClient.saveUser(user);
+				//鐢熸垚鐢ㄦ埛瀵嗙爜绛栫暐绠$悊璁板綍
+				if (!result.isSuccess()) {
+					throw new ServiceException(result.getMsg());
+				}
+				return temp;
+			}else {
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁よ鑹�
+				List<Role> roles = new ArrayList<>();
+				Role roleSys = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"绯荤粺绠$悊鍛�",1,this.ssaNames.get(0),BladeConstant.DB_NOT_DELETED);
+				Role roleSec = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹夊叏绠$悊鍛�",2,this.ssaNames.get(1),BladeConstant.DB_NOT_DELETED);
+				Role roleAudit = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹¤绠$悊鍛�",3,this.ssaNames.get(2),BladeConstant.DB_NOT_DELETED);
+				roles.add(roleSys);
+				roles.add(roleSec);
+				roles.add(roleAudit);
+				roleService.saveBatch(roles);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄�
+				saveRoleMenus(roleSys,this.sysMenus); //绯荤粺绠$悊鍛樿鑹茶彍鍗曟潈闄�
+				saveRoleMenus(roleSec,this.secMenus); //瀹夊叏绠$悊鍛樿鑹茶彍鍗曟潈闄�
+				saveRoleMenus(roleAudit,this.auditMenus); //瀹¤绠$悊鍛樿鑹茶彍鍗曟潈闄�
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂�
+				Dept dept = generateDept(tenantId, tenant);
+				deptService.save(dept);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣�
+				Post postSys = generatePost(tenantId, 1, this.ssaNames.get(0), "绯荤粺绠$悊鍛�", 1);
+				Post postSec = generatePost(tenantId,1,this.ssaNames.get(1),"瀹夊叏绠$悊鍛�",4);
+				Post postAudit = generatePost(tenantId,1,this.ssaNames.get(2),"瀹¤绠$悊鍛�",5);
+				postService.saveBatch(Arrays.asList(postSys,postSec,postAudit));
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏�
+				LinkedList<DictBiz> dictBizs = new LinkedList<>();
+				List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
+				dictBizService.saveBatch(dictBizList);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴�
+				User userSys = generateUser(tenantId, roleSys, dept, postSys);
+				User userSec = generateUser(tenantId,roleSec,dept,postSec);
+				User userAudit = generateUser(tenantId,roleAudit,dept,postAudit);
+				// 鍏堜繚瀛樼鎴�
+				boolean temp = super.saveOrUpdate(tenant);
+				// 鍒涘缓鐢ㄦ埛
+				R<Boolean> result = userClient.saveUserList(Arrays.asList(userSys,userSec,userAudit));
+				if (!result.isSuccess()) {
+					throw new ServiceException(result.getMsg());
+				}
+				return temp;
+			}
+		} else {
+			CacheUtil.clear(SYS_CACHE, tenant.getTenantId());
+			return super.saveOrUpdate(tenant);
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean removeTenant(List<Long> ids) {
+		List<String> tenantIds = this.list(Wrappers.<Tenant>query().lambda().in(Tenant::getId, ids))
+			.stream().map(tenant -> Func.toStr(tenant.getTenantId())).distinct().collect(Collectors.toList());
+		CacheUtil.clear(SYS_CACHE, tenantIds);
+		if (tenantIds.contains(BladeConstant.ADMIN_TENANT_ID)) {
+			throw new ServiceException("涓嶅彲鍒犻櫎绠$悊绉熸埛!");
+		}
+		boolean tenantTemp = this.deleteLogic(ids);
+		R<Boolean> result = userClient.removeUser(StringUtil.join(tenantIds));
+		if (!result.isSuccess()) {
+			throw new ServiceException(result.getMsg());
+		}
+		return tenantTemp;
+	}
+
+	@Override
+	public List<Map<String,Object>> selectMaps(){
+		List<Map<String, Object>> maps = listMaps(new QueryWrapper<Tenant>().select("TENANT_ID", "TENANT_NAME"));
+		return maps;
+	}
+
+	@Override
+	public boolean findIsOpen() {
+		return this.ssaEnable;
+	}
+
+	/**
+	 * 鍒涘缓绉熸埛涓嬬殑榛樿宀椾綅
+	 * @param tenantId
+	 * @param sort
+	 */
+	private Post generatePost(String tenantId,Integer categ,String postCode,String postName,Integer sort){
+		Post post = new Post();
+		post.setTenantId(tenantId);
+		post.setCategory(categ);
+		post.setPostCode(postCode);
+		post.setPostName(postName);
+		post.setSort(sort);
+		return post;
+	}
+
+	/**
+	 * 鍒涘缓榛樿鐢ㄦ埛锛屽苟杩涜鐩稿叧鏉冮檺璁剧疆
+	 */
+	private User generateUser(String tenantId, Role role, Dept dept, Post post){
+		User user = new User();
+		user.setTenantId(tenantId);
+		user.setName(role.getRoleAlias());
+		user.setRealName(role.getRoleName());
+		user.setAccount(role.getRoleAlias());
+		user.setStrategyUpdateStatus(CommonConstant.TOP_PARENT_ID);
+		user.setPwdUpdateTime(new Date());
+		// 鑾峰彇鍙傛暟閰嶇疆鐨勫瘑鐮�
+		String password = Func.toStr(ParamCache.getValue(PASSWORD_KEY), DEFAULT_PASSWORD);
+		user.setPassword(password);
+		user.setRoleId(String.valueOf(role.getId()));
+		user.setDeptId(String.valueOf(dept.getId()));
+		user.setPostId(String.valueOf(post.getId()));
+		user.setBirthday(new Date());
+		user.setSex(1);
+		user.setUserType(UserEnum.WEB.getCategory());
+		user.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return user;
+	}
+
+	/**
+	 * 淇濆瓨鐢ㄦ埛瀵瑰簲鐨勫叧鑱斾俊鎭�
+	 * @param role
+	 */
+	private void saveRoleMenus(Role role,List<String> stringMenus){
+		LinkedList<Menu> userMenus = new LinkedList<>();
+		// 鑾峰彇鍙傛暟閰嶇疆鐨勯粯璁よ彍鍗曢泦鍚堬紝閫楀彿闅斿紑
+		//List<String> menuCodes = Func.toStrList(ParamCache.getValue(ACCOUNT_MENU_CODE_KEY));
+		List<Menu> menus = getMenus((stringMenus), userMenus);
+		List<RoleMenu> roleMenus = new ArrayList<>();
+		//鍒涘缓鎵�鏈夎彍鍗曡鑹插叧鑱斿璞�
+		menus.forEach(menu -> {
+			roleMenus.add(new RoleMenu(menu.getId(),role.getId()));
+		});
+		roleMenuService.saveBatch(roleMenus);
+	}
+
+	/**
+	 * 鍒涘缓榛樿閮ㄩ棬
+	 * @param tenantId
+	 * @param tenant
+	 */
+	private Dept generateDept(String tenantId,Tenant tenant){
+		Dept dept = new Dept();
+		dept.setTenantId(tenantId);
+		dept.setParentId(BladeConstant.TOP_PARENT_ID);
+		dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+		dept.setDeptName(tenant.getTenantName());
+		dept.setFullName(tenant.getTenantName());
+		dept.setDeptCategory(1);
+		dept.setSort(2);
+		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return dept;
+	}
+
+	private String getTenantId(List<String> codes) {
+		String code = tenantId.generate();
+		if (codes.contains(code)) {
+			return getTenantId(codes);
+		}
+		return code;
+	}
+
+	private List<Menu> getMenus(List<String> codes, LinkedList<Menu> menus) {
+		codes.forEach(code -> {
+			Menu menu = menuService.getOne(Wrappers.<Menu>query().lambda().eq(Menu::getCode, code).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+			if (menu != null) {
+				menus.add(menu);
+				recursionMenu(menu.getId(), menus);
+			}
+		});
+		return menus;
+	}
+
+	private void recursionMenu(Long parentId, LinkedList<Menu> menus) {
+		List<Menu> menuList = menuService.list(Wrappers.<Menu>query().lambda().eq(Menu::getParentId, parentId).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+		menus.addAll(menuList);
+		menuList.forEach(menu -> recursionMenu(menu.getId(), menus));
+	}
+
+	private List<DictBiz> getDictBizs(String tenantId, LinkedList<DictBiz> dictBizs) {
+		List<DictBiz> dictBizList = dictBizService.list(Wrappers.<DictBiz>query().lambda().eq(DictBiz::getParentId, BladeConstant.TOP_PARENT_ID).eq(DictBiz::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+		dictBizList.forEach(dictBiz -> {
+			Long oldParentId = dictBiz.getId();
+			Long newParentId = IdWorker.getId();
+			dictBiz.setId(newParentId);
+			dictBiz.setTenantId(tenantId);
+			dictBizs.add(dictBiz);
+			recursionDictBiz(tenantId, oldParentId, newParentId, dictBizs);
+		});
+		return dictBizs;
+	}
+
+	private void recursionDictBiz(String tenantId, Long oldParentId, Long newParentId, LinkedList<DictBiz> dictBizs) {
+		List<DictBiz> dictBizList = dictBizService.list(Wrappers.<DictBiz>query().lambda().eq(DictBiz::getParentId, oldParentId).eq(DictBiz::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+		dictBizList.forEach(dictBiz -> {
+			Long oldSubParentId = dictBiz.getId();
+			Long newSubParentId = IdWorker.getId();
+			dictBiz.setId(newSubParentId);
+			dictBiz.setTenantId(tenantId);
+			dictBiz.setParentId(newParentId);
+			dictBizs.add(dictBiz);
+			recursionDictBiz(tenantId, oldSubParentId, newSubParentId, dictBizs);
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuServiceImpl.java
new file mode 100644
index 0000000..a01263a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuServiceImpl.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.system.mapper.TopMenuMapper;
+import com.vci.ubcs.system.service.ITopMenuService;
+import com.vci.ubcs.system.service.ITopMenuSettingService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import com.vci.ubcs.system.entity.TopMenu;
+import com.vci.ubcs.system.entity.TopMenuSetting;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 椤堕儴鑿滃崟琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author BladeX
+ */
+@Service
+@AllArgsConstructor
+public class TopMenuServiceImpl extends BaseServiceImpl<TopMenuMapper, TopMenu> implements ITopMenuService {
+
+	private final ITopMenuSettingService topMenuSettingService;
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean grant(@NotEmpty List<Long> topMenuIds, @NotEmpty List<Long> menuIds) {
+		// 鍒犻櫎椤堕儴鑿滃崟閰嶇疆鐨勮彍鍗曢泦鍚�
+		topMenuSettingService.remove(Wrappers.<TopMenuSetting>update().lambda().in(TopMenuSetting::getTopMenuId, topMenuIds));
+		// 缁勮閰嶇疆
+		List<TopMenuSetting> menuSettings = new ArrayList<>();
+		topMenuIds.forEach(topMenuId -> menuIds.forEach(menuId -> {
+			TopMenuSetting menuSetting = new TopMenuSetting();
+			menuSetting.setTopMenuId(topMenuId);
+			menuSetting.setMenuId(menuId);
+			menuSettings.add(menuSetting);
+		}));
+		// 鏂板閰嶇疆
+		topMenuSettingService.saveBatch(menuSettings);
+		return true;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuSettingServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuSettingServiceImpl.java
new file mode 100644
index 0000000..27b8932
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuSettingServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.entity.TopMenuSetting;
+import com.vci.ubcs.system.mapper.TopMenuSettingMapper;
+import com.vci.ubcs.system.service.ITopMenuSettingService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class TopMenuSettingServiceImpl extends ServiceImpl<TopMenuSettingMapper, TopMenuSetting> implements ITopMenuSettingService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/UserPwdstrategyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/UserPwdstrategyServiceImpl.java
new file mode 100644
index 0000000..685d265
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/UserPwdstrategyServiceImpl.java
@@ -0,0 +1,67 @@
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.UserPwdstrategyMapper;
+import com.vci.ubcs.system.service.IUserPwdstrategyService;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.feign.IUserClient;
+import lombok.RequiredArgsConstructor;
+import com.vci.ubcs.common.constant.CommonConstant;
+import com.vci.ubcs.system.entity.UserPwdstrategy;
+import com.vci.ubcs.system.vo.UserPwdstrategyVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛瀵嗙爜绛栫暐绠$悊琛�(UserPwdstrategy)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2023-03-22 15:24:55
+ */
+@Service
+@RequiredArgsConstructor
+public class UserPwdstrategyServiceImpl extends ServiceImpl<UserPwdstrategyMapper,UserPwdstrategy> implements IUserPwdstrategyService {
+
+	@Resource
+	private UserPwdstrategyMapper userPwdstrategyMapper;
+
+	/**
+	 * user鏈嶅姟璋冪敤绫�
+	 */
+	private final IUserClient userClient;
+
+	@Override
+	public UserPwdstrategy queryById(Long id) {
+		return this.getById(id);
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 * @param userPwdstrategyVO 瀹炰緥瀵硅薄
+	 * @return
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean submit(UserPwdstrategyVO userPwdstrategyVO) {
+		//鍏堝垹闄�
+		int eft = this.userPwdstrategyMapper.deleteByUserIds(userPwdstrategyVO.getUserIds());
+		//鍦ㄦ柊澧�
+		List<UserPwdstrategy> userPwdstrategyList = new ArrayList<>();
+		userPwdstrategyVO.getUserIds().forEach(id->{
+			boolean temp = userPwdstrategyList.add(new UserPwdstrategy(id, userPwdstrategyVO.getPwdstrategyId()));
+			if(temp){
+				//瀵嗙爜绛栫暐鏀瑰姩鎴愬姛涔嬪悗淇敼鐢ㄦ埛鐘舵��
+				User user = new User();
+				user.setId(id);
+				user.setStrategyUpdateStatus(CommonConstant.TOP_PARENT_ID);
+				userClient.updateUser(user);
+			}
+		});
+		return this.saveBatch(userPwdstrategyList);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ValueRangeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ValueRangeServiceImpl.java
new file mode 100644
index 0000000..d15ba65
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ValueRangeServiceImpl.java
@@ -0,0 +1,115 @@
+package com.vci.ubcs.system.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.mapper.ValueRangeMapper;
+import com.vci.ubcs.system.service.IValueRangeService;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.entity.ValueRange;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * (PlSysValueRange)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2023-03-20 15:23:59
+ */
+@Service
+public class ValueRangeServiceImpl extends ServiceImpl<ValueRangeMapper,ValueRange> implements IValueRangeService {
+
+	@Resource
+	private ValueRangeMapper valueRangeMapper;
+
+	/**
+	 * 鍏ㄦ煡璇�
+	 *
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<ValueRange> queryByAll() {
+		return valueRangeMapper.selectList(null);
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 *
+	 * @param valueRange 绛涢�夋潯浠�
+	 * @param pageRequest     鍒嗛〉瀵硅薄
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public Page<ValueRange> queryByPage(ValueRange valueRange, PageRequest pageRequest) {
+		long total = this.valueRangeMapper.count(valueRange);
+		return new PageImpl<>(this.valueRangeMapper.queryAllByLimit(valueRange, pageRequest), pageRequest, total);
+	}
+
+	/**
+	 * 鏂板鏁版嵁
+	 *
+	 * @param valueRange 瀹炰緥瀵硅薄
+	 * @return 瀹炰緥瀵硅薄
+	 */
+	@Override
+	public boolean submit(ValueRange valueRange) {
+		//鍒ゆ柇鏄惁鎼哄甫id
+		if(Func.isEmpty(valueRange.getId())){
+			//鏂板
+			ValueRange dbValueRange = this.getOne(Wrappers.<ValueRange>query().lambda()
+				.eq(ValueRange::getCombinationId,valueRange.getCombinationId())
+				.eq(ValueRange::getValue, valueRange.getValue()));
+			//鍚屼竴缁勫悎鏂瑰紡涓嬩笉鑳藉嚭鐜扮浉鍚岀殑鍙栧�艰寖鍥�
+			if(!Func.isEmpty(dbValueRange)){
+				throw new ServiceException("璇ョ粍鍚堟柟寮忎笅宸插瓨鍦ㄧ浉鍚屽彇鍊艰寖鍥�!");
+			}
+			if(Func.isEmpty(valueRange.getCreateTime())){
+				valueRange.setCreateTime(new Date());
+			}
+			if(Func.isEmpty(valueRange.getUpdateTime())){
+				valueRange.setUpdateTime(new Date());
+			}
+			boolean temp = saveOrUpdate(valueRange);
+			return temp;
+		}else {
+			if(Func.isEmpty(valueRange.getUpdateTime())){
+				valueRange.setUpdateTime(new Date());
+			}
+			CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+			return saveOrUpdate(valueRange);
+		}
+	}
+
+	/**
+	 * 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+	 *
+	 * @param ids 涓婚敭
+	 * @return 鏄惁鎴愬姛
+	 */
+	@Override
+	public boolean deleteByIds(List<String> ids) {
+		boolean tenantTemp = this.removeBatchByIds(ids);
+		return tenantTemp;
+	}
+
+	/**
+	 * 鑾峰彇鍙栧��
+	 *
+	 * @return 鏄惁鎴愬姛
+	 */
+	@Override
+	public List<String> getByAllString(List<String> combinationIds) {
+		List<String> list = valueRangeMapper.queryByCombinationIds(combinationIds);
+		return list;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/ApiScopeWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/ApiScopeWrapper.java
new file mode 100644
index 0000000..ee05382
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/ApiScopeWrapper.java
@@ -0,0 +1,48 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.entity.ApiScope;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.vo.ApiScopeVO;
+
+import java.util.Objects;
+
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class ApiScopeWrapper extends BaseEntityWrapper<ApiScope, ApiScopeVO> {
+
+	public static ApiScopeWrapper build() {
+		return new ApiScopeWrapper();
+	}
+
+	@Override
+	public ApiScopeVO entityVO(ApiScope dataScope) {
+		ApiScopeVO apiScopeVO = Objects.requireNonNull(BeanUtil.copy(dataScope, ApiScopeVO.class));
+		String scopeTypeName = DictCache.getValue(DictEnum.API_SCOPE_TYPE, dataScope.getScopeType());
+		apiScopeVO.setScopeTypeName(scopeTypeName);
+		return apiScopeVO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DataScopeWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DataScopeWrapper.java
new file mode 100644
index 0000000..9535e76
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DataScopeWrapper.java
@@ -0,0 +1,48 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.entity.DataScope;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.vo.DataScopeVO;
+
+import java.util.Objects;
+
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class DataScopeWrapper extends BaseEntityWrapper<DataScope, DataScopeVO> {
+
+	public static DataScopeWrapper build() {
+		return new DataScopeWrapper();
+	}
+
+	@Override
+	public DataScopeVO entityVO(DataScope dataScope) {
+		DataScopeVO dataScopeVO = Objects.requireNonNull(BeanUtil.copy(dataScope, DataScopeVO.class));
+		String scopeTypeName = DictCache.getValue(DictEnum.DATA_SCOPE_TYPE, dataScope.getScopeType());
+		dataScopeVO.setScopeTypeName(scopeTypeName);
+		return dataScopeVO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java
new file mode 100644
index 0000000..f1d71a2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java
@@ -0,0 +1,78 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.entity.Dept;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.vo.DeptVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class DeptWrapper extends BaseEntityWrapper<Dept, DeptVO> {
+
+	public static DeptWrapper build() {
+		return new DeptWrapper();
+	}
+
+	@Override
+	public DeptVO entityVO(Dept dept) {
+		DeptVO deptVO = Objects.requireNonNull(BeanUtil.copy(dept, DeptVO.class));
+		if (Func.equals(dept.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+			deptVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			Dept parent = SysCache.getDept(dept.getParentId());
+			deptVO.setParentName(parent.getDeptName());
+		}
+		String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
+		deptVO.setDeptCategoryName(category);
+		return deptVO;
+	}
+
+
+	public List<DeptVO> listNodeVO(List<Dept> list) {
+		List<DeptVO> collect = list.stream().map(dept -> {
+			DeptVO deptVO = BeanUtil.copy(dept, DeptVO.class);
+			String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
+			Objects.requireNonNull(deptVO).setDeptCategoryName(category);
+			return deptVO;
+		}).collect(Collectors.toList());
+		return ForestNodeMerger.merge(collect);
+	}
+
+	public List<DeptVO> listNodeLazyVO(List<DeptVO> list) {
+		List<DeptVO> collect = list.stream().peek(dept -> {
+			String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
+			Objects.requireNonNull(dept).setDeptCategoryName(category);
+		}).collect(Collectors.toList());
+		return ForestNodeMerger.merge(collect);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictBizWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictBizWrapper.java
new file mode 100644
index 0000000..c537453
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictBizWrapper.java
@@ -0,0 +1,61 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.DictBizCache;
+import com.vci.ubcs.system.entity.DictBiz;
+import com.vci.ubcs.system.vo.DictBizVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class DictBizWrapper extends BaseEntityWrapper<DictBiz, DictBizVO> {
+
+	public static DictBizWrapper build() {
+		return new DictBizWrapper();
+	}
+
+	@Override
+	public DictBizVO entityVO(DictBiz dict) {
+		DictBizVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictBizVO.class));
+		if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+			dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			DictBiz parent = DictBizCache.getById(dict.getParentId());
+			dictVO.setParentName(parent.getDictValue());
+		}
+		return dictVO;
+	}
+
+	public List<DictBizVO> listNodeVO(List<DictBiz> list) {
+		List<DictBizVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictBizVO.class)).collect(Collectors.toList());
+		return ForestNodeMerger.merge(collect);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictWrapper.java
new file mode 100644
index 0000000..06f2fe5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictWrapper.java
@@ -0,0 +1,60 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.entity.Dict;
+import com.vci.ubcs.system.vo.DictVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class DictWrapper extends BaseEntityWrapper<Dict, DictVO> {
+
+	public static DictWrapper build() {
+		return new DictWrapper();
+	}
+
+	@Override
+	public DictVO entityVO(Dict dict) {
+		DictVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictVO.class));
+		if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+			dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			Dict parent = DictCache.getById(dict.getParentId());
+			dictVO.setParentName(parent.getDictValue());
+		}
+		return dictVO;
+	}
+
+	public List<DictVO> listNodeVO(List<Dict> list) {
+		List<DictVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictVO.class)).collect(Collectors.toList());
+		return ForestNodeMerger.merge(collect);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java
new file mode 100644
index 0000000..638cdd6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java
@@ -0,0 +1,72 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.entity.Menu;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.vo.MenuVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class MenuWrapper extends BaseEntityWrapper<Menu, MenuVO> {
+
+	public static MenuWrapper build() {
+		return new MenuWrapper();
+	}
+
+	@Override
+	public MenuVO entityVO(Menu menu) {
+		MenuVO menuVO = Objects.requireNonNull(BeanUtil.copy(menu, MenuVO.class));
+		if (Func.equals(menu.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+			menuVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			Menu parent = SysCache.getMenu(menu.getParentId());
+			menuVO.setParentName(parent.getName());
+		}
+		String category = DictCache.getValue(DictEnum.MENU_CATEGORY, Func.toInt(menuVO.getCategory()));
+		String action = DictCache.getValue(DictEnum.BUTTON_FUNC, Func.toInt(menuVO.getAction()));
+		String open = DictCache.getValue(DictEnum.YES_NO, Func.toInt(menuVO.getIsOpen()));
+		menuVO.setCategoryName(category);
+		menuVO.setActionName(action);
+		menuVO.setIsOpenName(open);
+		return menuVO;
+	}
+
+	public List<MenuVO> listNodeVO(List<Menu> list) {
+		List<MenuVO> collect = list.stream().map(menu -> BeanUtil.copy(menu, MenuVO.class)).collect(Collectors.toList());
+		return ForestNodeMerger.merge(collect);
+	}
+
+	public List<MenuVO> listNodeLazyVO(List<MenuVO> list) {
+		return ForestNodeMerger.merge(list);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/PostWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/PostWrapper.java
new file mode 100644
index 0000000..db67386
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/PostWrapper.java
@@ -0,0 +1,47 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.entity.Post;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.vo.PostVO;
+
+import java.util.Objects;
+
+/**
+ * 宀椾綅琛ㄥ寘瑁呯被,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class PostWrapper extends BaseEntityWrapper<Post, PostVO> {
+
+	public static PostWrapper build() {
+		return new PostWrapper();
+	}
+
+	@Override
+	public PostVO entityVO(Post post) {
+		PostVO postVO = Objects.requireNonNull(BeanUtil.copy(post, PostVO.class));
+		String categoryName = DictCache.getValue(DictEnum.POST_CATEGORY, post.getCategory());
+		postVO.setCategoryName(categoryName);
+		return postVO;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RegionWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RegionWrapper.java
new file mode 100644
index 0000000..572b935
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RegionWrapper.java
@@ -0,0 +1,52 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.system.cache.RegionCache;
+import com.vci.ubcs.system.entity.Region;
+import com.vci.ubcs.system.vo.RegionVO;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class RegionWrapper extends BaseEntityWrapper<Region, RegionVO> {
+
+	public static RegionWrapper build() {
+		return new RegionWrapper();
+	}
+
+	@Override
+	public RegionVO entityVO(Region region) {
+		RegionVO regionVO = Objects.requireNonNull(BeanUtil.copy(region, RegionVO.class));
+		Region parentRegion = RegionCache.getByCode(region.getParentCode());
+		regionVO.setParentName(parentRegion.getName());
+		return regionVO;
+	}
+
+	public List<RegionVO> listNodeLazyVO(List<RegionVO> list) {
+		return ForestNodeMerger.merge(list);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java
new file mode 100644
index 0000000..39da219
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java
@@ -0,0 +1,61 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.entity.Role;
+import com.vci.ubcs.system.vo.RoleVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class RoleWrapper extends BaseEntityWrapper<Role, RoleVO> {
+
+	public static RoleWrapper build() {
+		return new RoleWrapper();
+	}
+
+	@Override
+	public RoleVO entityVO(Role role) {
+		RoleVO roleVO = Objects.requireNonNull(BeanUtil.copy(role, RoleVO.class));
+		if (Func.equals(role.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+			roleVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			Role parent = SysCache.getRole(role.getParentId());
+			roleVO.setParentName(parent.getRoleName());
+		}
+		return roleVO;
+	}
+
+
+	public List<RoleVO> listNodeVO(List<Role> list) {
+		List<RoleVO> collect = list.stream().map(this::entityVO).collect(Collectors.toList());
+		return ForestNodeMerger.merge(collect);
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-service/blade-system/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-system/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-service/blade-system/src/main/resources/application-test.yml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-system/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ApiScopeMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ApiScopeMapper.xml
new file mode 100644
index 0000000..6dad00c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ApiScopeMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.ApiScopeMapper">
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/AuthClientMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/AuthClientMapper.xml
new file mode 100644
index 0000000..c99c573
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/AuthClientMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.AuthClientMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="clientResultMap" type="com.vci.ubcs.system.entity.AuthClient">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="client_id" property="clientId"/>
+        <result column="client_secret" property="clientSecret"/>
+        <result column="resources_ids" property="resourceIds"/>
+        <result column="scope" property="scope"/>
+        <result column="authorized_grant_types" property="authorizedGrantTypes"/>
+        <result column="web_server_redirect_uri" property="webServerRedirectUri"/>
+        <result column="authorities" property="authorities"/>
+        <result column="access_token_validity" property="accessTokenValidity"/>
+        <result column="refresh_token_validity" property="refreshTokenValidity"/>
+        <result column="additional_information" property="additionalInformation"/>
+        <result column="autoapprove" property="autoapprove"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/CombinationMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/CombinationMapper.xml
new file mode 100644
index 0000000..71feaf0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/CombinationMapper.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.CombinationMapper">
+
+    <resultMap type="com.vci.ubcs.system.entity.Combination" id="CombinationMap">
+        <result property="id" column="ID" jdbcType="VARCHAR"/>
+        <result property="name" column="NAME" jdbcType="VARCHAR"/>
+        <result property="desc" column="DESC" jdbcType="VARCHAR"/>
+        <result property="createTime" column="CREATETIME" jdbcType="TIMESTAMP"/>
+        <result property="createUser" column="CREATEUSER" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="UPDATETIME" jdbcType="TIMESTAMP"/>
+        <result property="updateUser" column="UPDATEUSER" jdbcType="VARCHAR"/>
+        <result property="licensors" column="LICENSORS" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <!--鏌ヨ鍗曚釜-->
+    <select id="queryById" resultMap="CombinationMap">
+        select ID,
+               NAME, DESC, CREATETIME, CREATEUSER, UPDATETIME, UPDATEUSER, LICENSORS
+        from PL_SYS_COMBINATION
+        where ID = #{id}
+    </select>
+
+    <!--缁熻鎬昏鏁�-->
+    <select id="count" resultType="java.lang.Long">
+        select count(1)
+        from PL_SYS_COMBINATION
+        <where>
+            <if test="id != null and id != ''">
+                and ID = #{id}
+            </if>
+            <if test="name != null and name != ''">
+                and NAME = #{name}
+            </if>
+            <if test="desc != null and desc != ''">
+                and DESC = #{desc}
+            </if>
+            <if test="createtime != null">
+                and CREATETIME = #{createtime}
+            </if>
+            <if test="createuser != null and createuser != ''">
+                and CREATEUSER = #{createuser}
+            </if>
+            <if test="updatetime != null">
+                and UPDATETIME = #{updatetime}
+            </if>
+            <if test="updateuser != null and updateuser != ''">
+                and UPDATEUSER = #{updateuser}
+            </if>
+            <if test="licensors != null and licensors != ''">
+                and LICENSORS = #{licensors}
+            </if>
+        </where>
+    </select>
+
+    <!--鍒嗛〉鏌ヨ-->
+    <select id="selectCombinationPage" resultMap="CombinationMap">
+        select
+        ID, NAME, DESC, CREATETIME, CREATEUSER, UPDATETIME, UPDATEUSER, LICENSORS
+        from PL_SYS_COMBINATION
+        <where>
+            <if test="id != null and id != ''">
+                and ID = #{id}
+            </if>
+            <if test="name != null and name != ''">
+                and NAME = #{name}
+            </if>
+            <if test="desc != null and desc != ''">
+                and DESC = #{desc}
+            </if>
+            <if test="createtime != null">
+                and CREATETIME = #{createtime}
+            </if>
+            <if test="createuser != null and createuser != ''">
+                and CREATEUSER = #{createuser}
+            </if>
+            <if test="updatetime != null">
+                and UPDATETIME = #{updatetime}
+            </if>
+            <if test="updateuser != null and updateuser != ''">
+                and UPDATEUSER = #{updateuser}
+            </if>
+            <if test="licensors != null and licensors != ''">
+                and LICENSORS = #{licensors}
+            </if>
+        </where>
+        limit #{pageable.offset}, #{pageable.pageSize}
+    </select>
+
+    <select id="queryRegex" resultType="java.lang.String">
+        SELECT CONCAT(REPLACE(WM_CONCAT(psc.REGEX),',[',''),']') FROM PL_SYS_COMBINATION psc
+        WHERE psc.ID IN (
+        <foreach collection="combinationIds" item="id" separator=",">
+            #{id}
+        </foreach>
+        )
+    </select>
+
+    <select id="queryRegexList" resultType="java.lang.String">
+        SELECT concat(psc.REGEX,']{1,}') from PL_SYS_COMBINATION psc
+        WHERE psc.ID IN (
+        <foreach collection="combinationIds" item="id" separator=",">
+            #{id}
+        </foreach>
+        )
+    </select>
+
+</mapper>
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DataScopeMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DataScopeMapper.xml
new file mode 100644
index 0000000..060c2c9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DataScopeMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.DataScopeMapper">
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DeptMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DeptMapper.xml
new file mode 100644
index 0000000..8272ac3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DeptMapper.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.DeptMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="deptResultMap" type="com.vci.ubcs.system.entity.Dept">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="dept_name" property="deptName"/>
+        <result column="full_name" property="fullName"/>
+        <result column="ancestors" property="ancestors"/>
+        <result column="dept_category" property="deptCategory"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="deptVOResultMap" type="com.vci.ubcs.system.vo.DeptVO">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="dept_name" property="deptName"/>
+        <result column="full_name" property="fullName"/>
+        <result column="ancestors" property="ancestors"/>
+        <result column="dept_category" property="deptCategory"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="has_children" property="hasChildren"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+        <result column="has_children" property="hasChildren"/>
+    </resultMap>
+
+    <select id="lazyList" resultMap="deptVOResultMap">
+        SELECT
+            dept.* ,
+            (
+                SELECT
+                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+                FROM
+                    pl_org_dept
+                WHERE
+                    parent_id = dept.id and is_deleted = 0
+            ) AS "has_children"
+        FROM
+            pl_org_dept dept
+        WHERE dept.is_deleted = 0
+        <if test="param1!=null and param1!=''">
+            and dept.tenant_id = #{param1}
+        </if>
+        <if test="param2!=null">
+            and dept.parent_id = #{param2}
+        </if>
+        <if test="param3.deptName!=null and param3.deptName!=''">
+            and dept.dept_name like concat(concat('%', #{param3.deptName}),'%')
+        </if>
+        <if test="param3.fullName!=null and param3.fullName!=''">
+            and dept.full_name like concat(concat('%', #{param3.fullName}),'%')
+        </if>
+        ORDER BY dept.sort
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, dept_name as title, id as "value", id as "key" from pl_org_dept where is_deleted = 0
+        <if test="_parameter!=null and _parameter!=''">
+            and tenant_id = #{_parameter}
+        </if>
+        ORDER BY sort
+    </select>
+
+    <select id="lazyTree" resultMap="treeNodeResultMap" >
+        SELECT
+            dept.id,
+            dept.parent_id,
+            dept.dept_name AS title,
+            dept.id AS "value",
+            dept.id AS "key",
+            (
+                SELECT
+                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+                FROM
+                    pl_org_dept
+                WHERE
+                    parent_id = dept.id and is_deleted = 0
+            ) AS "has_children"
+        FROM
+                pl_org_dept dept
+        WHERE
+            dept.parent_id = #{param2} AND dept.is_deleted = 0
+        <if test="param1!=null and param1!=''">
+            and dept.tenant_id = #{param1}
+        </if>
+        ORDER BY dept.sort
+    </select>
+
+    <select id="getDeptNames" resultType="java.lang.String">
+        SELECT
+        dept_name
+        FROM
+        pl_org_dept
+        WHERE
+        id IN
+        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+            #{ids}
+        </foreach>
+        and is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictBizMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictBizMapper.xml
new file mode 100644
index 0000000..d0c99e3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictBizMapper.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.DictBizMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="dictResultMap" type="com.vci.ubcs.system.entity.DictBiz">
+        <id column="id" property="id"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="code" property="code"/>
+        <result column="dict_key" property="dictKey"/>
+        <result column="dict_value" property="dictValue"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+    </resultMap>
+
+    <select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from pl_sys_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
+    </select>
+
+    <!-- oracle 鐗堟湰 -->
+    <!--<select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from pl_sys_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
+    </select>-->
+
+    <select id="getList" resultMap="dictResultMap">
+        select id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict_biz where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0
+    </select>
+
+    <select id="parentTree" resultMap="treeNodeResultMap">
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0 and parent_id = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictMapper.xml
new file mode 100644
index 0000000..c9fcfe1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictMapper.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.DictMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="dictResultMap" type="com.vci.ubcs.system.entity.Dict">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="code" property="code"/>
+        <result column="dict_key" property="dictKey"/>
+        <result column="dict_value" property="dictValue"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+    </resultMap>
+
+    <select id="selectDictPage" resultMap="dictResultMap">
+        select * from pl_sys_dict where is_deleted = 0
+    </select>
+
+    <select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from pl_sys_dict where code = #{param1} and dict_key = #{param2} and is_deleted = 0
+    </select>
+
+    <!-- oracle 鐗堟湰 -->
+    <!--<select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from pl_sys_dict where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
+    </select>-->
+
+    <select id="getList" resultMap="dictResultMap">
+        select id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict where is_deleted = 0
+    </select>
+
+    <select id="parentTree" resultMap="treeNodeResultMap">
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict where is_deleted = 0 and parent_id = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
new file mode 100644
index 0000000..bda18b0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
@@ -0,0 +1,478 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.MenuMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="menuResultMap" type="com.vci.ubcs.system.entity.Menu">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="name" property="name"/>
+        <result column="alias" property="alias"/>
+        <result column="path" property="path"/>
+        <result column="source" property="source"/>
+        <result column="sort" property="sort"/>
+        <result column="category" property="category"/>
+        <result column="action" property="action"/>
+        <result column="is_open" property="isOpen"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="menuVOResultMap" type="com.vci.ubcs.system.vo.MenuVO">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="name" property="name"/>
+        <result column="alias" property="alias"/>
+        <result column="path" property="path"/>
+        <result column="source" property="source"/>
+        <result column="sort" property="sort"/>
+        <result column="category" property="category"/>
+        <result column="action" property="action"/>
+        <result column="is_open" property="isOpen"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="has_children" property="hasChildren"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+    </resultMap>
+
+    <select id="lazyList"  resultMap="menuVOResultMap">
+        SELECT
+            menu.*,
+            (
+                SELECT
+                    CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
+            FROM
+                pl_sys_menu
+            WHERE
+                parent_id = menu.id AND is_deleted = 0
+        ) AS "has_children"
+        FROM
+            pl_sys_menu menu
+        WHERE menu.is_deleted = 0
+        <if test="param1!=null">
+            and menu.parent_id = #{param1}
+        </if>
+        <if test="param2.name!=null and param2.name!=''">
+            and menu.name like concat(concat('%', #{param2.name}),'%')
+        </if>
+        <if test="param2.code!=null and param2.code!=''">
+            and menu.code like concat(concat('%', #{param2.code}),'%')
+        </if>
+        <if test="param2.alias!=null and param2.alias!=''">
+            and menu.alias like concat(concat('%', #{param2.alias}),'%')
+        </if>
+        ORDER BY menu.sort
+    </select>
+
+    <select id="lazyMenuList" resultMap="menuVOResultMap">
+        SELECT
+            menu.*,
+            (
+                SELECT
+                    CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
+        FROM
+                pl_sys_menu
+        WHERE
+        parent_id = menu.id AND is_deleted = 0  AND category = 1
+        ) AS "has_children"
+        FROM
+            pl_sys_menu menu
+        WHERE menu.is_deleted = 0 AND menu.category = 1
+        <if test="param1!=null">
+            and menu.parent_id = #{param1}
+        </if>
+        <if test="param2.name!=null and param2.name!=''">
+            and menu.name like concat(concat('%', #{param2.name}),'%')
+        </if>
+        <if test="param2.code!=null and param2.code!=''">
+            and menu.code like concat(concat('%', #{param2.code}),'%')
+        </if>
+        <if test="param2.alias!=null and param2.alias!=''">
+            and menu.alias like concat(concat('%', #{param2.alias}),'%')
+        </if>
+        ORDER BY menu.sort
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0 and category = 1
+    </select>
+
+    <select id="allMenu" resultMap="menuResultMap">
+        select * from pl_sys_menu where is_deleted = 0 and category = 1
+    </select>
+
+    <select id="roleMenu" resultMap="menuResultMap">
+        select * from pl_sys_menu where is_deleted = 0 and id IN
+        ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
+        <foreach collection="param1" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        )
+        <if test="param2!=null and param2>0">
+            AND id IN
+            (
+            SELECT menu_id FROM pl_sys_top_menu_setting WHERE top_menu_id = #{param2}
+            )
+        </if>
+    </select>
+
+    <select id="roleMenuByRoleId" resultMap="menuResultMap">
+        select * from pl_sys_menu where is_deleted = 0 and id IN
+            ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
+                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            )
+    </select>
+
+    <select id="roleMenuByTopMenuId" resultMap="menuResultMap">
+        select * from pl_sys_menu where is_deleted = 0 and id IN
+              (
+                  SELECT menu_id FROM pl_sys_top_menu_setting WHERE top_menu_id = #{param1}
+              )
+    </select>
+
+    <select id="routes" resultMap="menuResultMap">
+        SELECT
+            *
+        FROM
+            pl_sys_menu
+        WHERE
+            is_deleted = 0 and category = 1
+            and id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
+                        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                            #{item}
+                        </foreach> )
+    </select>
+
+    <select id="allButtons" resultMap="menuResultMap">
+        SELECT
+            id,
+            parent_id,
+            CODE,
+            NAME,
+            alias,
+            path,
+            source,
+            action,
+            sort
+        FROM
+            pl_sys_menu
+        WHERE
+            (
+                category = 2 OR id IN ( SELECT parent_id FROM pl_sys_menu WHERE is_deleted = 0 AND category = 2 )
+            )
+          AND is_deleted = 0
+        ORDER BY sort
+    </select>
+
+    <select id="buttons" resultMap="menuResultMap">
+        SELECT * FROM (
+            SELECT
+                id,
+                parent_id,
+                code,
+                name,
+                alias,
+                path,
+                source,
+                action,
+                sort
+            FROM
+                pl_sys_menu
+            WHERE
+                is_deleted = 0 and id IN (
+                  SELECT parent_id FROM pl_sys_menu
+                  WHERE ( category = 2 AND id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
+                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                  ) ) )
+
+            UNION ALL
+
+            SELECT
+                id,
+                parent_id,
+                code,
+                name,
+                alias,
+                path,
+                source,
+                action,
+                sort
+            FROM
+                pl_sys_menu
+            WHERE
+                is_deleted = 0 and  category = 2 AND id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
+                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>)
+        ) menu ORDER BY sort
+    </select>
+
+    <select id="grantTree" resultMap="treeNodeResultMap">
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0 order by sort
+    </select>
+
+    <select id="grantTreeByRole" resultMap="treeNodeResultMap">
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0
+        and id in ( select menu_id from pl_org_role_menu where role_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach> )
+        or id in (
+            select parent_id from pl_sys_menu where is_deleted = 0
+            and id in ( select menu_id from pl_org_role_menu where role_id in
+            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach> )
+          )
+        order by sort
+    </select>
+
+    <select id="grantTopTree" resultMap="treeNodeResultMap">
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where category = 1 and is_deleted = 0 order by sort
+    </select>
+
+    <select id="grantTopTreeByRole" resultMap="treeNodeResultMap">
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where category = 1 and is_deleted = 0
+        and id in ( select menu_id from pl_org_role_menu where role_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach> )
+        or id in (
+        select parent_id from pl_sys_menu where is_deleted = 0
+        and id in ( select menu_id from pl_org_role_menu where role_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach> )
+        )
+        order by sort
+    </select>
+
+    <select id="grantDataScopeTree" resultMap="treeNodeResultMap">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    id,
+                    parent_id,
+                    NAME AS title,
+                    id AS "value",
+                    id AS "key"
+                FROM
+                    pl_sys_menu
+                WHERE
+                    category = 1
+                  AND is_deleted = 0
+                  AND id IN ( SELECT menu_id FROM pl_auth_scope_data WHERE is_deleted = 0 AND menu_id IS NOT NULL )
+            ) menu
+
+        UNION ALL
+
+        SELECT
+            id,
+            menu_id AS parent_id,
+            scope_name AS title,
+            id AS "value",
+            id AS "key"
+        FROM
+            pl_auth_scope_data
+        WHERE
+            is_deleted = 0
+          AND menu_id IS NOT NULL
+    </select>
+
+    <select id="grantApiScopeTree" resultMap="treeNodeResultMap">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    id,
+                    parent_id,
+                    NAME AS title,
+                    id AS "value",
+                    id AS "key"
+                FROM
+                    pl_sys_menu
+                WHERE
+                    category = 1
+                  AND is_deleted = 0
+                  AND id IN ( SELECT menu_id FROM pl_auth_scope_api WHERE is_deleted = 0 AND menu_id IS NOT NULL )
+            ) menu
+
+        UNION ALL
+
+        SELECT
+            id,
+            menu_id AS parent_id,
+            scope_name AS title,
+            id AS "value",
+            id AS "key"
+        FROM
+            pl_auth_scope_api
+        WHERE
+            is_deleted = 0
+          AND menu_id IS NOT NULL
+    </select>
+
+    <select id="grantDataScopeTreeByRole" resultMap="treeNodeResultMap">
+        SELECT
+        *
+        FROM
+        (
+            SELECT
+                id,
+                parent_id,
+                NAME AS title,
+                id AS "value",
+                id AS "key"
+            FROM
+                pl_sys_menu
+            WHERE
+                category = 1
+            AND is_deleted = 0
+            AND id IN ( SELECT menu_id FROM pl_auth_scope_data WHERE is_deleted = 0 AND menu_id IS NOT NULL )
+            AND (
+                id IN (
+                    select menu_id from pl_org_role_menu where role_id in
+                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                )
+                OR id IN (
+                    select parent_id from pl_sys_menu where is_deleted = 0
+                    and id in ( select menu_id from pl_org_role_menu where role_id in
+                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach> )
+                )
+            )
+        ) menu
+
+        UNION ALL
+
+        SELECT
+            id,
+            menu_id AS parent_id,
+            scope_name AS title,
+            id AS "value",
+            id AS "key"
+        FROM
+            pl_auth_scope_data
+        WHERE
+            is_deleted = 0
+        AND (
+            menu_id IN (
+                select menu_id from pl_org_role_menu where role_id in
+                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            )
+            OR menu_id IN (
+                select parent_id from pl_sys_menu where is_deleted = 0
+                and id in ( select menu_id from pl_org_role_menu where role_id in
+                <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach> )
+            )
+        )
+        AND menu_id IS NOT NULL
+    </select>
+
+    <select id="grantApiScopeTreeByRole" resultMap="treeNodeResultMap">
+        SELECT
+        *
+        FROM
+        (
+            SELECT
+                id,
+                parent_id,
+                NAME AS title,
+                id AS "value",
+                id AS "key"
+            FROM
+                pl_sys_menu
+            WHERE
+                category = 1
+            AND is_deleted = 0
+            AND id IN ( SELECT menu_id FROM pl_auth_scope_api WHERE is_deleted = 0 AND menu_id IS NOT NULL )
+            AND (
+                id IN (
+                    select menu_id from pl_org_role_menu where role_id in
+                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                )
+                OR id IN (
+                    select parent_id from pl_sys_menu where is_deleted = 0
+                    and id in (
+                        select menu_id from pl_org_role_menu where role_id in
+                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach> )
+                )
+            )
+        ) menu
+
+        UNION ALL
+
+        SELECT
+            id,
+            menu_id AS parent_id,
+            scope_name AS title,
+            id AS "value",
+            id AS "key"
+        FROM
+            pl_auth_scope_api
+        WHERE
+            is_deleted = 0
+        AND
+            (
+                menu_id IN (
+                    select menu_id from pl_org_role_menu where role_id in
+                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                )
+            OR menu_id IN (
+                    select parent_id from pl_sys_menu where is_deleted = 0
+                    and id in ( select menu_id from pl_org_role_menu where role_id in
+                    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach> )
+                )
+        )
+        AND menu_id IS NOT NULL
+    </select>
+
+    <select id="authRoutes" resultType="com.vci.ubcs.system.dto.MenuDTO">
+        SELECT
+            GROUP_CONCAT(r.role_alias) as alias,
+            m.path
+        FROM
+            pl_org_role_menu rm
+            LEFT JOIN pl_sys_menu m ON rm.menu_id = m.id
+            LEFT JOIN pl_org_role r ON rm.role_id = r.id
+        WHERE
+            rm.role_id IN
+            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            AND m.path IS NOT NULL and m.is_deleted = 0
+        GROUP BY m.path
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ParamMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ParamMapper.xml
new file mode 100644
index 0000000..95133ac
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ParamMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.ParamMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="paramResultMap" type="com.vci.ubcs.system.entity.Param">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="param_name" property="paramName"/>
+        <result column="param_key" property="paramKey"/>
+        <result column="param_value" property="paramValue"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/PostMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/PostMapper.xml
new file mode 100644
index 0000000..f1077de
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/PostMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.PostMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="postResultMap" type="com.vci.ubcs.system.entity.Post">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="category" property="category"/>
+        <result column="post_code" property="postCode"/>
+        <result column="post_name" property="postName"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+
+    <select id="selectPostPage" resultMap="postResultMap">
+        select * from pl_org_post where is_deleted = 0
+    </select>
+
+    <select id="getPostNames" resultType="java.lang.String">
+        SELECT
+            post_name
+        FROM
+            pl_org_post
+        WHERE
+            id IN
+            <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+                #{ids}
+            </foreach>
+            and is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RegionMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RegionMapper.xml
new file mode 100644
index 0000000..1c1a64e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RegionMapper.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.RegionMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="regionResultMap" type="com.vci.ubcs.system.entity.Region">
+        <id column="code" property="code"/>
+        <result column="parent_code" property="parentCode"/>
+        <result column="ancestors" property="ancestors"/>
+        <result column="name" property="name"/>
+        <result column="province_code" property="provinceCode"/>
+        <result column="province_name" property="provinceName"/>
+        <result column="city_code" property="cityCode"/>
+        <result column="city_name" property="cityName"/>
+        <result column="district_code" property="districtCode"/>
+        <result column="district_name" property="districtName"/>
+        <result column="town_code" property="townCode"/>
+        <result column="town_name" property="townName"/>
+        <result column="village_code" property="villageCode"/>
+        <result column="village_name" property="villageName"/>
+        <result column="level" property="regionLevel"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+    <resultMap id="regionVOResultMap" type="com.vci.ubcs.system.vo.RegionVO">
+        <id column="code" property="code"/>
+        <result column="parent_code" property="parentCode"/>
+        <result column="ancestors" property="ancestors"/>
+        <result column="name" property="name"/>
+        <result column="province_code" property="provinceCode"/>
+        <result column="province_name" property="provinceName"/>
+        <result column="city_code" property="cityCode"/>
+        <result column="city_name" property="cityName"/>
+        <result column="district_code" property="districtCode"/>
+        <result column="district_name" property="districtName"/>
+        <result column="town_code" property="townCode"/>
+        <result column="town_name" property="townName"/>
+        <result column="village_code" property="villageCode"/>
+        <result column="village_name" property="villageName"/>
+        <result column="level" property="regionLevel"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="has_children" property="hasChildren"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+        <result column="has_children" property="hasChildren"/>
+    </resultMap>
+
+    <select id="lazyList" resultMap="regionVOResultMap">
+        SELECT
+            region.*,
+            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM pl_sys_region WHERE parent_code = region.code ) AS "has_children"
+        FROM
+            pl_sys_region region
+        <where>
+            <if test="param1!=null">
+                and region.parent_code = #{param1}
+            </if>
+            <if test="param2.code!=null and param2.code!=''">
+                and region.code like concat(concat('%', #{param2.code}),'%')
+            </if>
+            <if test="param2.name!=null and param2.name!=''">
+                and region.name like concat(concat('%', #{param2.name}),'%')
+            </if>
+        </where>
+    </select>
+
+    <select id="lazyTree" resultMap="treeNodeResultMap">
+        SELECT
+            region.code AS "id",
+            region.parent_code AS "parent_id",
+            region.name AS "title",
+            region.code AS "value",
+            region.code AS "key",
+            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM pl_sys_region WHERE parent_code = region.code ) AS "has_children"
+        FROM
+            pl_sys_region region
+        <where>
+            <if test="param1!=null">
+                and region.parent_code = #{param1}
+            </if>
+            <if test="param2.code!=null and param2.code!=''">
+                and region.code like concat(concat('%', #{param2.code}),'%')
+            </if>
+            <if test="param2.name!=null and param2.name!=''">
+                and region.name like concat(concat('%', #{param2.name}),'%')
+            </if>
+        </where>
+        ORDER BY region.code
+    </select>
+
+    <select id="exportRegion" resultType="com.vci.ubcs.system.excel.RegionExcel">
+        SELECT * FROM pl_sys_region ${ew.customSqlSegment}
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMapper.xml
new file mode 100644
index 0000000..051c4d9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMapper.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.RoleMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="roleResultMap" type="com.vci.ubcs.system.entity.Role">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="role_name" property="roleName"/>
+        <result column="sort" property="sort"/>
+        <result column="role_alias" property="roleAlias"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+    </resultMap>
+
+    <select id="selectRolePage" resultMap="roleResultMap">
+        select * from pl_org_role where is_deleted = 0
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, role_name as title, id as "value", id as "key" from pl_org_role where is_deleted = 0
+        <if test="param1!=null">
+            and tenant_id = #{param1}
+        </if>
+        <if test="param2!=null">
+            and role_alias &lt;&gt; #{param2}
+        </if>
+    </select>
+
+    <select id="getRoleNames" resultType="java.lang.String">
+        SELECT
+        role_name
+        FROM
+        pl_org_role
+        WHERE
+        id IN
+        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+            #{ids}
+        </foreach>
+        and is_deleted = 0
+    </select>
+
+    <select id="getRoleAliases" resultType="java.lang.String">
+        SELECT
+        role_alias
+        FROM
+        pl_org_role
+        WHERE
+        id IN
+        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+            #{ids}
+        </foreach>
+        and is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMenuMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMenuMapper.xml
new file mode 100644
index 0000000..960daab
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMenuMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.RoleMenuMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="roleMenuResultMap" type="com.vci.ubcs.system.entity.RoleMenu">
+        <id column="id" property="id"/>
+        <result column="menu_id" property="menuId"/>
+        <result column="role_id" property="roleId"/>
+    </resultMap>
+
+    <select id="selectRoleMenuPage" resultMap="roleMenuResultMap">
+        select * from pl_org_role_menu where is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleScopeMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleScopeMapper.xml
new file mode 100644
index 0000000..d0bd20c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleScopeMapper.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.RoleScopeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="roleMenuResultMap" type="com.vci.ubcs.system.entity.RoleScope">
+        <id column="id" property="id"/>
+        <result column="scope_id" property="scopeId"/>
+        <result column="role_id" property="roleId"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/StrategyMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/StrategyMapper.xml
new file mode 100644
index 0000000..83969fb
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/StrategyMapper.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.StrategyMapper">
+
+    <resultMap type="com.vci.ubcs.system.entity.Strategy" id="StrategyMap">
+        <result property="id" column="ID" jdbcType="VARCHAR"/>
+        <result property="strategyName" column="STRATEGY_NAME" jdbcType="VARCHAR"/>
+        <result property="minPwdLen" column="MIN_PWD_LEN" jdbcType="VARCHAR"/>
+        <result property="maxPwdLen" column="MAX_PWD_LEN" jdbcType="VARCHAR"/>
+        <result property="combinationIds" column="COMBINATION_IDS" jdbcType="VARCHAR"/>
+        <result property="requiredType" column="REQUIRED_TYPE" jdbcType="VARCHAR"/>
+        <result property="expirationTime" column="EXPIRATION_TIME" jdbcType="TIMESTAMP"/>
+        <result property="reminderTime" column="REMINDER_TIME" jdbcType="TIMESTAMP"/>
+        <result property="lockingNum" column="LOCKING_NUM" jdbcType="VARCHAR"/>
+        <result property="lockingTime" column="LOCKING_TIME" jdbcType="TIMESTAMP"/>
+        <result property="desc" column="DESC" jdbcType="VARCHAR"/>
+        <result property="isDefault" column="IS_DEFAULT" jdbcType="VARCHAR"/>
+        <result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
+        <result property="createUser" column="CREATE_USER" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="UPDATE_TIME" jdbcType="TIMESTAMP"/>
+        <result property="updateUser" column="UPDATE_USER" jdbcType="TIMESTAMP"/>
+        <result property="combinationNames" column="COMBINATIONNAMES"/>
+    </resultMap>
+
+    <!--鏌ヨ鎸囧畾琛屾暟鎹�-->
+    <select id="queryAllByPage" resultMap="StrategyMap">
+        select pss.*,
+               (select WM_CONCAT(psc.NAME)
+                from PL_SYS_COMBINATION psc
+                where instr(pss.COMBINATION_IDS,psc.ID) > 0) COMBINATIONNAMES
+        from PL_SYS_PWDSTRATEGY pss
+    </select>
+
+    <!--缁熻鎬昏鏁�-->
+    <select id="count" resultType="java.lang.Long">
+        select count(1)
+        from PL_SYS_PWDSTRATEGY
+        <where>
+            <if test="id != null and id != ''">
+                and ID = #{id}
+            </if>
+            <if test="strategyName != null and strategyName != ''">
+                and STRATEGY_NAME = #{strategyName}
+            </if>
+            <if test="minPwdLen != null and minPwdLen != ''">
+                and MIN_PWD_LEN = #{minPwdLen}
+            </if>
+            <if test="maxPwdLen != null and maxPwdLen != ''">
+                and MAX_PWD_LEN = #{maxPwdLen}
+            </if>
+            <if test="combination  != null and combination  != ''">
+                and COMBINATION  = #{combination }
+            </if>
+            <if test="requiredType != null and requiredType != ''">
+                and REQUIRED_TYPE = #{requiredType}
+            </if>
+            <if test="expirationTime != null">
+                and EXPIRATION_TIME = #{expirationTime}
+            </if>
+            <if test="reminderTime != null">
+                and REMINDER_TIME = #{reminderTime}
+            </if>
+            <if test="lockingNum != null and lockingNum != ''">
+                and LOCKING_NUM = #{lockingNum}
+            </if>
+            <if test="lockingTime != null">
+                and LOCKING_TIME = #{lockingTime}
+            </if>
+            <if test="desc != null and desc != ''">
+                and DESC = #{desc}
+            </if>
+            <if test="isDefault != null and isDefault != ''">
+                and IS_DEFAULT = #{isDefault}
+            </if>
+            <if test="createDate != null">
+                and CREATE_DATE = #{createDate}
+            </if>
+            <if test="createUser != null">
+                and CREATE_USER = #{createUser}
+            </if>
+            <if test="updateDate != null">
+                and UPDATE_DATE = #{updateDate}
+            </if>
+            <if test="updateUser != null">
+                and UPDATE_USER = #{updateUser}
+            </if>
+        </where>
+    </select>
+
+
+    <select id="queryByNameAndTenantId" resultMap="StrategyMap">
+        SELECT PSS.*,(select WM_CONCAT(psc.NAME)
+                      from PL_SYS_COMBINATION psc
+                      where instr(pss.COMBINATION_IDS,psc.ID) > 0) COMBINATIONNAMES
+        FROM PL_SYS_PWDSTRATEGY PSS
+              LEFT JOIN PL_SYS_USER_PWDSTRATEGY PSUP ON PSS.ID=PSUP.PWDSTRATEGY_ID
+              LEFT JOIN PL_ORG_USER POU ON POU.ID=PSUP.USER_ID
+        WHERE POU.TENANT_ID = #{tenantId} AND POU.NAME=#{name};
+    </select>
+
+    <select id="queryByUserId" resultMap="StrategyMap">
+        SELECT PSS.*,(select WM_CONCAT(psc.NAME)
+                      from PL_SYS_COMBINATION psc
+                      where instr(pss.COMBINATION_IDS,psc.ID) > 0) COMBINATIONNAMES
+        FROM PL_SYS_PWDSTRATEGY PSS LEFT JOIN PL_SYS_USER_PWDSTRATEGY PSUP ON PSS.ID=psup.PWDSTRATEGY_ID
+        WHERE PSUP.USER_ID = #{userId}
+    </select>
+
+    <select id="queryByIsDefault" resultType="com.vci.ubcs.system.entity.Strategy">
+        SELECT PSS.*,(SELECT WM_CONCAT(psc.NAME)
+                      FROM PL_SYS_COMBINATION psc
+                      WHERE instr(pss.COMBINATION_IDS, psc.ID) > 0) COMBINATIONNAMES
+        FROM PL_SYS_PWDSTRATEGY PSS
+        WHERE is_default = 1
+    </select>
+
+</mapper>
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantMapper.xml
new file mode 100644
index 0000000..f1f75f3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantMapper.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.TenantMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="tenantResultMap" type="com.vci.ubcs.system.entity.Tenant">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="tenant_name" property="tenantName"/>
+        <result column="full_name" property="fullName"/>
+        <result column="domain_url" property="domainUrl"/>
+        <result column="background_url" property="backgroundUrl"/>
+        <result column="linkman" property="linkman"/>
+        <result column="contact_number" property="contactNumber"/>
+        <result column="address" property="address"/>
+        <result column="license_key" property="licenseKey"/>
+    </resultMap>
+
+
+    <select id="selectTenantPage" resultMap="tenantResultMap">
+        select * from pl_org_tenant where is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantPackageMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantPackageMapper.xml
new file mode 100644
index 0000000..f5389b0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantPackageMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.TenantPackageMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="tenantPackageResultMap" type="com.vci.ubcs.system.entity.TenantPackage">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="package_name" property="packageName"/>
+        <result column="menu_id" property="menuId"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuMapper.xml
new file mode 100644
index 0000000..95663dd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.TopMenuMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="topMenuResultMap" type="com.vci.ubcs.system.entity.TopMenu">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="code" property="code"/>
+        <result column="name" property="name"/>
+        <result column="source" property="source"/>
+        <result column="sort" property="sort"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuSettingMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuSettingMapper.xml
new file mode 100644
index 0000000..cdb9453
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuSettingMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.TopMenuSettingMapper">
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/UserPwdstrategyMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/UserPwdstrategyMapper.xml
new file mode 100644
index 0000000..f02776f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/UserPwdstrategyMapper.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.UserPwdstrategyMapper">
+
+    <resultMap type="com.vci.ubcs.system.entity.UserPwdstrategy" id="UserPwdstrategyMap">
+        <result property="id" column="ID" jdbcType="INTEGER"/>
+        <result property="userId" column="USER_ID" jdbcType="INTEGER"/>
+        <result property="pwdstrategyId" column="PWDSTRATEGY_ID" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!--鏌ヨ鍗曚釜-->
+    <select id="queryById" resultMap="UserPwdstrategyMap">
+        select ID,
+               USER_ID,
+               PWDSTRATEGY_ID
+        from PL_SYS_USER_PWDSTRATEGY
+        where ID = #{id}
+    </select>
+
+    <!--缁熻鎬昏鏁�-->
+    <select id="count" resultType="java.lang.Long">
+        select count(1)
+        from PL_SYS_USER_PWDSTRATEGY
+        <where>
+            <if test="id != null">
+                and ID = #{id}
+            </if>
+            <if test="userId != null">
+                and USER_ID = #{userId}
+            </if>
+            <if test="pwdstrategyId != null">
+                and PWDSTRATEGY_ID = #{pwdstrategyId}
+            </if>
+        </where>
+    </select>
+
+    <!--閫氳繃涓婚敭淇敼鏁版嵁-->
+    <update id="update">
+        update PL_SYS_USER_PWDSTRATEGY
+        <set>
+            <if test="userId != null">
+                USER_ID = #{userId},
+            </if>
+            <if test="pwdstrategyId != null">
+                PWDSTRATEGY_ID = #{pwdstrategyId},
+            </if>
+        </set>
+        where ID = #{id}
+    </update>
+
+    <delete id="deleteByUserIds">
+        DELETE FROM PL_SYS_USER_PWDSTRATEGY WHERE USER_ID IN (
+        <foreach collection="userIds" item="uId" separator=",">
+            #{uId}
+        </foreach>
+        )
+    </delete>
+
+</mapper>
+
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ValueRangeMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ValueRangeMapper.xml
new file mode 100644
index 0000000..ca9c542
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ValueRangeMapper.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.mapper.ValueRangeMapper">
+
+    <resultMap type="com.vci.ubcs.system.entity.ValueRange" id="ValueRangeMap">
+        <result property="id" column="ID" jdbcType="VARCHAR"/>
+        <result property="value" column="VALUE" jdbcType="VARCHAR"/>
+        <result property="combinationId" column="COMBINATION_ID" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="CREATEUSER" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="UPDATETIME" jdbcType="TIMESTAMP"/>
+        <result property="createUser" column="UPDATEUSER" jdbcType="VARCHAR"/>
+        <result property="createTime" column="CREATETIME" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <!--鏌ヨ鎸囧畾琛屾暟鎹�-->
+    <select id="queryAllByLimit" resultMap="ValueRangeMap">
+        select
+          ID, VALUE, COMBINATION_ID, CREATEUSER, UPDATETIME, UPDATEUSER, CREATETIME
+        from PL_SYS_VALUE_RANGE
+        <where>
+            <if test="id != null and id != ''">
+                and ID = #{id}
+            </if>
+            <if test="value != null and value != ''">
+                and VALUE = #{value}
+            </if>
+            <if test="combinationId != null and combinationId != ''">
+                and COMBINATION_ID = #{combinationId}
+            </if>
+            <if test="createuser != null and createuser != ''">
+                and CREATEUSER = #{createuser}
+            </if>
+            <if test="updatetime != null">
+                and UPDATETIME = #{updatetime}
+            </if>
+            <if test="updateuser != null and updateuser != ''">
+                and UPDATEUSER = #{updateuser}
+            </if>
+            <if test="createtime != null">
+                and CREATETIME = #{createtime}
+            </if>
+        </where>
+        limit #{pageable.offset}, #{pageable.pageSize}
+    </select>
+
+    <!--缁熻鎬昏鏁�-->
+    <select id="count" resultType="java.lang.Long">
+        select count(1)
+        from PL_SYS_VALUE_RANGE
+        <where>
+            <if test="id != null and id != ''">
+                and ID = #{id}
+            </if>
+            <if test="value != null and value != ''">
+                and VALUE = #{value}
+            </if>
+            <if test="combinationId != null and combinationId != ''">
+                and COMBINATION_ID = #{combinationId}
+            </if>
+            <if test="createuser != null and createuser != ''">
+                and CREATEUSER = #{createuser}
+            </if>
+            <if test="updatetime != null">
+                and UPDATETIME = #{updatetime}
+            </if>
+            <if test="updateuser != null and updateuser != ''">
+                and UPDATEUSER = #{updateuser}
+            </if>
+            <if test="createtime != null">
+                and CREATETIME = #{createtime}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryByCombinationIds" resultType="java.util.List">
+        SELECT "VALUE" FROM PL_SYS_VALUE_RANGE PSVR
+        WHERE PSVR.COMBINATION_ID IN (
+            <foreach collection="combinationIds" item="id" separator=",">
+                #{id}
+            </foreach>
+        )
+    </select>
+
+</mapper>
+
diff --git a/Source/BladeX/blade-service/blade-user/Dockerfile b/Source/UBCS/ubcs-service/ubcs-user/Dockerfile
similarity index 100%
rename from Source/BladeX/blade-service/blade-user/Dockerfile
rename to Source/UBCS/ubcs-service/ubcs-user/Dockerfile
diff --git a/Source/UBCS/ubcs-service/ubcs-user/pom.xml b/Source/UBCS/ubcs-service/ubcs-user/pom.xml
new file mode 100644
index 0000000..e5c532d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/pom.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ubcs-service</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ubcs-user</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-excel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-user-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>ubcs-system-api</artifactId>
+            <version>${bladex.project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/UserApplication.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/UserApplication.java
new file mode 100644
index 0000000..85b1d3e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/UserApplication.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user;
+
+import org.springblade.core.cloud.client.UbcsCloudApplication;
+import org.springblade.core.launch.UbcsApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * 鐢ㄦ埛鍚姩鍣�
+ *
+ * @author Chill
+ */
+@UbcsCloudApplication
+public class UserApplication {
+
+	public static void main(String[] args) {
+		UbcsApplication.run(AppConstant.APPLICATION_USER_NAME, UserApplication.class, args);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/controller/UserController.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/controller/UserController.java
new file mode 100644
index 0000000..7d66724
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/controller/UserController.java
@@ -0,0 +1,345 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.excel.UserExcel;
+import com.vci.ubcs.system.user.excel.UserImporter;
+import com.vci.ubcs.system.user.wrapper.UserWrapper;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import com.vci.ubcs.common.cache.CacheNames;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import com.vci.ubcs.system.user.service.IUserService;
+import com.vci.ubcs.system.user.vo.UserVO;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
+
+/**
+ * 鎺у埗鍣�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@RequestMapping
+@AllArgsConstructor
+public class UserController {
+
+	private final IUserService userService;
+	private final BladeRedis bladeRedis;
+
+	/**
+	 * 鏌ヨ鍗曟潯
+	 */
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆id")
+	@GetMapping("/detail")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<UserVO> detail(User user) {
+		User detail = userService.getOne(Condition.getQueryWrapper(user));
+		return R.data(UserWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鏌ヨ鍗曟潯
+	 */
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆id")
+	@GetMapping("/info")
+	public R<UserVO> info(BladeUser user) {
+		User detail = userService.getById(user.getUserId());
+		return R.data(UserWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 鐢ㄦ埛鍒楄〃
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "account", value = "璐﹀彿鍚�", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "realName", value = "濮撳悕", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆account鍜宺ealName")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<IPage<UserVO>> list(@ApiIgnore @RequestParam Map<String, Object> user, Query query, BladeUser bladeUser) {
+		QueryWrapper<User> queryWrapper = Condition.getQueryWrapper(user, User.class);
+		IPage<User> pages = userService.page(Condition.getPage(query), (!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+		return R.data(UserWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 鑷畾涔夌敤鎴峰垪琛�
+	 */
+	@GetMapping("/page")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "account", value = "璐﹀彿鍚�", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "realName", value = "濮撳悕", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆account鍜宺ealName")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<IPage<UserVO>> page(@ApiIgnore User user, Query query, Long deptId, BladeUser bladeUser) {
+		IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()));
+		return R.data(UserWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆User")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R submit(@Valid @RequestBody User user) {
+		CacheUtil.clear(USER_CACHE);
+		return R.status(userService.submit(user));
+	}
+
+	/**
+	 * 淇敼
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆User")
+	public R update(@Valid @RequestBody User user) {
+		CacheUtil.clear(USER_CACHE);
+		return R.status(userService.updateUser(user));
+	}
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆id闆嗗悎")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R remove(@RequestParam String ids) {
+		CacheUtil.clear(USER_CACHE);
+		return R.status(userService.removeUser(ids));
+	}
+
+	/**
+	 * 璁剧疆鑿滃崟鏉冮檺
+	 */
+	@PostMapping("/grant")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "鏉冮檺璁剧疆", notes = "浼犲叆roleId闆嗗悎浠ュ強menuId闆嗗悎")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R grant(@ApiParam(value = "userId闆嗗悎", required = true) @RequestParam String userIds,
+				   @ApiParam(value = "roleId闆嗗悎", required = true) @RequestParam String roleIds) {
+		boolean temp = userService.grant(userIds, roleIds);
+		return R.status(temp);
+	}
+
+	/**
+	 * 瀵嗙爜閲嶅埗
+	 */
+	@PostMapping("/reset-password")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鍒濆鍖栧瘑鐮�", notes = "浼犲叆userId闆嗗悎")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R resetPassword(@ApiParam(value = "userId闆嗗悎", required = true) @RequestParam String userIds) {
+		boolean temp = userService.resetPassword(userIds);
+		return R.status(temp);
+	}
+
+	/**
+	 * 淇敼瀵嗙爜
+	 */
+	@PostMapping("/update-password")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "淇敼瀵嗙爜", notes = "浼犲叆瀵嗙爜")
+	public R updatePassword(BladeUser user, @ApiParam(value = "鏃у瘑鐮�", required = true) @RequestParam String oldPassword,
+							@ApiParam(value = "鏂板瘑鐮�", required = true) @RequestParam String newPassword,
+							@ApiParam(value = "鏂板瘑鐮�", required = true) @RequestParam String newPassword1) {
+		boolean temp = userService.updatePassword(user.getUserId(), oldPassword, newPassword, newPassword1);
+		return R.status(temp);
+	}
+
+	/**
+	 * 淇敼鍩烘湰淇℃伅
+	 */
+	@PostMapping("/update-info")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "淇敼鍩烘湰淇℃伅", notes = "浼犲叆User")
+	public R updateInfo(@Valid @RequestBody User user) {
+		CacheUtil.clear(USER_CACHE);
+		return R.status(userService.updateUserInfo(user));
+	}
+
+	/**
+	 * 鐢ㄦ埛鍒楄〃
+	 */
+	@GetMapping("/user-list")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "鐢ㄦ埛鍒楄〃", notes = "浼犲叆user")
+	public R<List<User>> userList(User user, BladeUser bladeUser) {
+		QueryWrapper<User> queryWrapper = Condition.getQueryWrapper(user);
+		List<User> list = userService.list((!AuthUtil.isAdministrator()) ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+		return R.data(list);
+	}
+
+	/**
+	 * 瀵煎叆鐢ㄦ埛
+	 */
+	@PostMapping("import-user")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "瀵煎叆鐢ㄦ埛", notes = "浼犲叆excel")
+	public R importUser(MultipartFile file, Integer isCovered) {
+		UserImporter userImporter = new UserImporter(userService, isCovered == 1);
+		ExcelUtil.save(file, userImporter, UserExcel.class);
+		return R.success("鎿嶄綔鎴愬姛");
+	}
+
+	/**
+	 * 瀵煎嚭鐢ㄦ埛
+	 */
+	@GetMapping("export-user")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "瀵煎嚭鐢ㄦ埛", notes = "浼犲叆user")
+	public void exportUser(@ApiIgnore @RequestParam Map<String, Object> user, BladeUser bladeUser, HttpServletResponse response) {
+		QueryWrapper<User> queryWrapper = Condition.getQueryWrapper(user, User.class);
+		if (!AuthUtil.isAdministrator()) {
+			queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId());
+		}
+		queryWrapper.lambda().eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+		List<UserExcel> list = userService.exportUser(queryWrapper);
+		ExcelUtil.export(response, "鐢ㄦ埛鏁版嵁" + DateUtil.time(), "鐢ㄦ埛鏁版嵁琛�", list, UserExcel.class);
+	}
+
+	/**
+	 * 瀵煎嚭妯℃澘
+	 */
+	@GetMapping("export-template")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "瀵煎嚭妯℃澘")
+	public void exportUser(HttpServletResponse response) {
+		List<UserExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "鐢ㄦ埛鏁版嵁妯℃澘", "鐢ㄦ埛鏁版嵁琛�", list, UserExcel.class);
+	}
+
+
+	/**
+	 * 绗笁鏂规敞鍐岀敤鎴�
+	 */
+	@PostMapping("/register-guest")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "绗笁鏂规敞鍐岀敤鎴�", notes = "浼犲叆user")
+	public R registerGuest(User user, Long oauthId) {
+		return R.status(userService.registerGuest(user, oauthId));
+	}
+
+
+	/**
+	 * 閰嶇疆鐢ㄦ埛骞冲彴淇℃伅
+	 */
+	@PostMapping("/update-platform")
+	@ApiOperationSupport(order = 16)
+	@ApiOperation(value = "閰嶇疆鐢ㄦ埛骞冲彴淇℃伅", notes = "浼犲叆user")
+	public R updatePlatform(Long userId, Integer userType, String userExt) {
+		return R.status(userService.updatePlatform(userId, userType, userExt));
+	}
+
+	/**
+	 * 鏌ョ湅骞冲彴璇︽儏
+	 */
+	@ApiOperationSupport(order = 17)
+	@ApiOperation(value = "鏌ョ湅骞冲彴璇︽儏", notes = "浼犲叆id")
+	@GetMapping("/platform-detail")
+	//@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
+	public R<UserVO> platformDetail(User user) {
+		return R.data(userService.platformDetail(user));
+	}
+
+
+	/**
+	 * 鐢ㄦ埛鍒楄〃鏌ヨ
+	 */
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "name", value = "浜哄憳濮撳悕", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "deptName", value = "閮ㄩ棬鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "postName", value = "鑱屼綅鍚嶇О", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "current", value = "褰撳墠椤垫暟", paramType = "query", dataType = "int"),
+		@ApiImplicitParam(name = "size", value = "姣忛〉鏁伴噺", paramType = "query", dataType = "int")
+	})
+	@ApiOperationSupport(order = 18)
+	@ApiOperation(value = "鐢ㄦ埛鍒楄〃鏌ヨ", notes = "鐢ㄦ埛鍒楄〃鏌ヨ")
+	@GetMapping("/search/user")
+	public R<IPage<UserVO>> userSearch(@ApiIgnore UserVO user, @ApiIgnore Query query) {
+		return R.data(userService.selectUserSearch(user, query));
+	}
+
+	/**
+	 * 鐢ㄦ埛瑙i攣
+	 */
+	@PostMapping("/unlock")
+	@ApiOperationSupport(order = 19)
+	@ApiOperation(value = "璐﹀彿瑙i攣", notes = "浼犲叆id")
+	public R unlock(String userIds) {
+		if (StringUtil.isBlank(userIds)) {
+			return R.fail("璇疯嚦灏戦�夋嫨涓�涓敤鎴�");
+		}
+		List<User> userList = userService.list(Wrappers.<User>lambdaQuery().in(User::getId, Func.toLongList(userIds)));
+		userList.forEach(user -> bladeRedis.del(CacheNames.tenantKey(user.getTenantId(), CacheNames.USER_FAIL_KEY, user.getAccount())));
+		return R.success("鎿嶄綔鎴愬姛");
+	}
+
+	/**
+	 * 鐢ㄦ埛瑙i攣
+	 */
+	@PostMapping("/check-renexpr")
+	@ApiOperationSupport(order = 20)
+	@ApiOperation(value = "鏌ヨ鐢ㄦ埛瀵嗙爜绛栫暐鏄惁闇�瑕佹彁閱�", notes = "浼犲叆id")
+	public R<Long> checkRenAndExpr(BladeUser user) {
+		System.out.println("==============================="+user.getUserId());
+		Long res = userService.checkRenAndExpr(user.getUserId());
+		return R.data(res);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserExcel.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserExcel.java
new file mode 100644
index 0000000..df657e8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserExcel.java
@@ -0,0 +1,97 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.excel;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * UserExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class UserExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ColumnWidth(15)
+	@ExcelProperty("绉熸埛缂栧彿")
+	private String tenantId;
+
+	@ExcelIgnore
+	@ExcelProperty("鐢ㄦ埛骞冲彴")
+	private String userType;
+
+	@ColumnWidth(20)
+	@ExcelProperty("鐢ㄦ埛骞冲彴鍚嶇О")
+	private String userTypeName;
+
+	@ColumnWidth(15)
+	@ExcelProperty("璐︽埛")
+	private String account;
+
+	@ColumnWidth(10)
+	@ExcelProperty("鏄电О")
+	private String name;
+
+	@ColumnWidth(10)
+	@ExcelProperty("濮撳悕")
+	private String realName;
+
+	@ExcelProperty("閭")
+	private String email;
+
+	@ColumnWidth(15)
+	@ExcelProperty("鎵嬫満")
+	private String phone;
+
+	@ExcelIgnore
+	@ExcelProperty("瑙掕壊ID")
+	private String roleId;
+
+	@ExcelIgnore
+	@ExcelProperty("閮ㄩ棬ID")
+	private String deptId;
+
+	@ExcelIgnore
+	@ExcelProperty("宀椾綅ID")
+	private String postId;
+
+	@ExcelProperty("瑙掕壊鍚嶇О")
+	private String roleName;
+
+	@ExcelProperty("閮ㄩ棬鍚嶇О")
+	private String deptName;
+
+	@ExcelProperty("宀椾綅鍚嶇О")
+	private String postName;
+
+	@ColumnWidth(20)
+	@ExcelProperty("鐢熸棩")
+	private Date birthday;
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserImporter.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserImporter.java
new file mode 100644
index 0000000..99dd30a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserImporter.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.excel;
+
+import com.vci.ubcs.system.user.service.IUserService;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鏁版嵁瀵煎叆绫�
+ *
+ * @author Chill
+ */
+@RequiredArgsConstructor
+public class UserImporter implements ExcelImporter<UserExcel> {
+
+	private final IUserService service;
+	private final Boolean isCovered;
+
+	@Override
+	public void save(List<UserExcel> data) {
+		service.importUser(data, isCovered);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserClient.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserClient.java
new file mode 100644
index 0000000..36c05a4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserClient.java
@@ -0,0 +1,102 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.feign;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.entity.UserInfo;
+import com.vci.ubcs.system.user.entity.UserOauth;
+import com.vci.ubcs.system.user.enums.UserEnum;
+import com.vci.ubcs.system.user.service.IUserService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+public class UserClient implements IUserClient {
+
+	private final IUserService service;
+
+	@Override
+	@GetMapping(USER_INFO_BY_ID)
+	public R<User> userInfoById(Long userId) {
+		return R.data(service.getById(userId));
+	}
+
+	@Override
+	@GetMapping(USER_INFO_BY_ACCOUNT)
+	public R<User> userByAccount(String tenantId, String account) {
+		return R.data(service.userByAccount(tenantId, account));
+	}
+
+	@Override
+	@GetMapping(USER_INFO)
+	public R<UserInfo> userInfo(String tenantId, String account) {
+		return R.data(service.userInfo(tenantId, account));
+	}
+
+	@Override
+	@GetMapping(USER_INFO_BY_TYPE)
+	public R<UserInfo> userInfo(String tenantId, String account, String userType) {
+		return R.data(service.userInfo(tenantId, account, UserEnum.of(userType)));
+	}
+
+	@Override
+	@PostMapping(USER_AUTH_INFO)
+	public R<UserInfo> userAuthInfo(@RequestBody UserOauth userOauth) {
+		return R.data(service.userInfo(userOauth));
+	}
+
+	@Override
+	@PostMapping(SAVE_USER)
+	public R<Boolean> saveUser(@RequestBody User user) {
+		return R.data(service.submit(user));
+	}
+
+	@Override
+	@PostMapping(SAVE_USER_LIST)
+	public R<Boolean> saveUserList(List<User> users) {
+		return R.data(service.submitList(users));
+	}
+
+	@Override
+	@PostMapping(REMOVE_USER)
+	public R<Boolean> removeUser(String tenantIds) {
+		return R.data(service.remove(Wrappers.<User>query().lambda().in(User::getTenantId, Func.toStrList(tenantIds))));
+	}
+
+	@Override
+	@PostMapping(UPDATE_USER)
+	public R<Boolean> updateUser(@RequestBody User user) {
+		return R.data(service.updateUser(user));
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserSearchClient.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserSearchClient.java
new file mode 100644
index 0000000..1ae8177
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserSearchClient.java
@@ -0,0 +1,65 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.feign;
+
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.service.IUserSearchService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鏌ヨ鏈嶅姟Feign瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+public class UserSearchClient implements IUserSearchClient {
+
+	private final IUserSearchService service;
+
+	@Override
+	@GetMapping(LIST_BY_USER)
+	public R<List<User>> listByUser(String userId) {
+		return R.data(service.listByUser(Func.toLongList(userId)));
+	}
+
+	@Override
+	@GetMapping(LIST_BY_DEPT)
+	public R<List<User>> listByDept(String deptId) {
+		return R.data(service.listByDept(Func.toLongList(deptId)));
+	}
+
+	@Override
+	@GetMapping(LIST_BY_POST)
+	public R<List<User>> listByPost(String postId) {
+		return R.data(service.listByPost(Func.toLongList(postId)));
+	}
+
+	@Override
+	@GetMapping(LIST_BY_ROLE)
+	public R<List<User>> listByRole(String roleId) {
+		return R.data(service.listByRole(Func.toLongList(roleId)));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserAppMapper.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserAppMapper.java
new file mode 100644
index 0000000..7abe486
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserAppMapper.java
@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.user.entity.UserApp;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface UserAppMapper extends BaseMapper<UserApp> {
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserDeptMapper.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserDeptMapper.java
new file mode 100644
index 0000000..de70920
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserDeptMapper.java
@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.user.entity.UserDept;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface UserDeptMapper extends BaseMapper<UserDept> {
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserMapper.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserMapper.java
new file mode 100644
index 0000000..0d21766
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserMapper.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.excel.UserExcel;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface UserMapper extends BaseMapper<User> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param user
+	 * @param deptIdList
+	 * @param tenantId
+	 * @return
+	 */
+	List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);
+
+	/**
+	 * 鑾峰彇鐢ㄦ埛
+	 *
+	 * @param tenantId
+	 * @param account
+	 * @return
+	 */
+	User getUser(String tenantId, String account);
+
+	/**
+	 * 鑾峰彇瀵煎嚭鐢ㄦ埛鏁版嵁
+	 *
+	 * @param queryWrapper
+	 * @return
+	 */
+	List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOauthMapper.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOauthMapper.java
new file mode 100644
index 0000000..56cb484
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOauthMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.user.entity.UserOauth;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface UserOauthMapper extends BaseMapper<UserOauth> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOtherMapper.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOtherMapper.java
new file mode 100644
index 0000000..3192249
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOtherMapper.java
@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.user.entity.UserOther;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface UserOtherMapper extends BaseMapper<UserOther> {
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserWebMapper.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserWebMapper.java
new file mode 100644
index 0000000..b25a854
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserWebMapper.java
@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.system.user.entity.UserWeb;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author Chill
+ */
+public interface UserWebMapper extends BaseMapper<UserWeb> {
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserDeptService.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserDeptService.java
new file mode 100644
index 0000000..6e030e2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserDeptService.java
@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.user.entity.UserDept;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IUserDeptService extends IService<UserDept> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserOauthService.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserOauthService.java
new file mode 100644
index 0000000..3fb3bcd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserOauthService.java
@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.system.user.entity.UserOauth;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IUserOauthService extends IService<UserOauth> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserSearchService.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserSearchService.java
new file mode 100644
index 0000000..6bb4860
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserSearchService.java
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service;
+
+
+import com.vci.ubcs.system.user.entity.User;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鏌ヨ鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IUserSearchService extends BaseService<User> {
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param userId 鐢ㄦ埛ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	List<User> listByUser(List<Long> userId);
+
+    /**
+	 * 鏍规嵁閮ㄩ棬ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param deptId 閮ㄩ棬ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	List<User> listByDept(List<Long> deptId);
+
+    /**
+	 * 鏍规嵁宀椾綅ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param postId 宀椾綅ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	List<User> listByPost(List<Long> postId);
+
+    /**
+	 * 鏍规嵁瑙掕壊ID鏌ヨ鐢ㄦ埛鍒楄〃
+	 *
+	 * @param roleId 瑙掕壊ID
+	 * @return 鐢ㄦ埛鍒楄〃
+	 */
+	List<User> listByRole(List<Long> roleId);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserService.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserService.java
new file mode 100644
index 0000000..1f84fc8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserService.java
@@ -0,0 +1,223 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.entity.UserInfo;
+import com.vci.ubcs.system.user.entity.UserOauth;
+import com.vci.ubcs.system.user.enums.UserEnum;
+import com.vci.ubcs.system.user.excel.UserExcel;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
+import com.vci.ubcs.system.user.vo.UserVO;
+
+import java.util.List;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author Chill
+ */
+public interface IUserService extends BaseService<User> {
+
+	/**
+	 * 鏂板鐢ㄦ埛
+	 *
+	 * @param user
+	 * @return
+	 */
+	boolean submit(User user);
+
+	/**
+	 * 鎵归噺鏂板鐢ㄦ埛
+	 *
+	 * @param users
+	 * @return
+	 */
+	boolean submitList(List<User> users);
+
+	/**
+	 * 淇敼鐢ㄦ埛
+	 *
+	 * @param user
+	 * @return
+	 */
+	boolean updateUser(User user);
+
+	/**
+	 * 淇敼鐢ㄦ埛鍩烘湰淇℃伅
+	 *
+	 * @param user
+	 * @return
+	 */
+	boolean updateUserInfo(User user);
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param user
+	 * @param deptId
+	 * @param tenantId
+	 * @return
+	 */
+	IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId);
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param user
+	 * @param query
+	 * @return
+	 */
+	IPage<UserVO> selectUserSearch(UserVO user, Query query);
+
+
+	/**
+	 * 鐢ㄦ埛淇℃伅
+	 *
+	 * @param userId
+	 * @return
+	 */
+	UserInfo userInfo(Long userId);
+
+	/**
+	 * 鐢ㄦ埛淇℃伅
+	 *
+	 * @param tenantId
+	 * @param account
+	 * @return
+	 */
+	UserInfo userInfo(String tenantId, String account);
+
+	/**
+	 * 鐢ㄦ埛淇℃伅
+	 *
+	 * @param tenantId
+	 * @param account
+	 * @param userEnum
+	 * @return
+	 */
+	UserInfo userInfo(String tenantId, String account, UserEnum userEnum);
+
+	/**
+	 * 鐢ㄦ埛淇℃伅
+	 *
+	 * @param userOauth
+	 * @return
+	 */
+	UserInfo userInfo(UserOauth userOauth);
+
+	/**
+	 * 鏍规嵁璐﹀彿鑾峰彇鐢ㄦ埛
+	 *
+	 * @param tenantId
+	 * @param account
+	 * @return
+	 */
+	User userByAccount(String tenantId, String account);
+
+	/**
+	 * 缁欑敤鎴疯缃鑹�
+	 *
+	 * @param userIds
+	 * @param roleIds
+	 * @return
+	 */
+	boolean grant(String userIds, String roleIds);
+
+	/**
+	 * 鍒濆鍖栧瘑鐮�
+	 *
+	 * @param userIds
+	 * @return
+	 */
+	boolean resetPassword(String userIds);
+
+	/**
+	 * 淇敼瀵嗙爜
+	 *
+	 * @param userId
+	 * @param oldPassword
+	 * @param newPassword
+	 * @param newPassword1
+	 * @return
+	 */
+	boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1);
+
+	/**
+	 * 鍒犻櫎鐢ㄦ埛
+	 *
+	 * @param userIds
+	 * @return
+	 */
+	boolean removeUser(String userIds);
+
+	/**
+	 * 瀵煎叆鐢ㄦ埛鏁版嵁
+	 *
+	 * @param data
+	 * @param isCovered
+	 * @return
+	 */
+	void importUser(List<UserExcel> data, Boolean isCovered);
+
+	/**
+	 * 瀵煎嚭鐢ㄦ埛鏁版嵁
+	 *
+	 * @param queryWrapper
+	 * @return
+	 */
+	List<UserExcel> exportUser(Wrapper<User> queryWrapper);
+
+	/**
+	 * 娉ㄥ唽鐢ㄦ埛
+	 *
+	 * @param user
+	 * @param oauthId
+	 * @return
+	 */
+	boolean registerGuest(User user, Long oauthId);
+
+	/**
+	 * 閰嶇疆鐢ㄦ埛骞冲彴
+	 *
+	 * @param userId
+	 * @param userType
+	 * @param userExt
+	 * @return
+	 */
+	boolean updatePlatform(Long userId, Integer userType, String userExt);
+
+	/**
+	 * 鐢ㄦ埛璇︾粏淇℃伅
+	 *
+	 * @param user
+	 * @return
+	 */
+	UserVO platformDetail(User user);
+
+	/**
+	 * 妫�鏌ョ敤鎴锋槸鍚﹀埌浜嗘彁閱掔敤鎴蜂慨鏀瑰瘑鐮佹垨鑰呭瘑鐮佽繃鏈熺殑鏃堕棿
+	 *
+	 */
+	Long checkRenAndExpr(Long userId);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserDeptServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserDeptServiceImpl.java
new file mode 100644
index 0000000..4ede9f3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserDeptServiceImpl.java
@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.user.entity.UserDept;
+import com.vci.ubcs.system.user.mapper.UserDeptMapper;
+import com.vci.ubcs.system.user.service.IUserDeptService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+public class UserDeptServiceImpl extends ServiceImpl<UserDeptMapper, UserDept> implements IUserDeptService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserOauthServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserOauthServiceImpl.java
new file mode 100644
index 0000000..9d130a4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserOauthServiceImpl.java
@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.system.user.entity.UserOauth;
+import lombok.AllArgsConstructor;
+import com.vci.ubcs.system.user.mapper.UserOauthMapper;
+import com.vci.ubcs.system.user.service.IUserOauthService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class UserOauthServiceImpl extends ServiceImpl<UserOauthMapper, UserOauth> implements IUserOauthService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserSearchServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserSearchServiceImpl.java
new file mode 100644
index 0000000..3b1bfd4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserSearchServiceImpl.java
@@ -0,0 +1,65 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.system.user.entity.User;
+import com.vci.ubcs.system.user.service.IUserSearchService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import com.vci.ubcs.system.user.mapper.UserMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鏌ヨ鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class UserSearchServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserSearchService {
+
+	@Override
+	public List<User> listByUser(List<Long> userId) {
+		return this.list(Wrappers.<User>lambdaQuery().in(User::getId, userId));
+	}
+
+	@Override
+	public List<User> listByDept(List<Long> deptId) {
+		LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
+		deptId.forEach(id -> queryWrapper.like(User::getDeptId, id).or());
+		return this.list(queryWrapper);
+	}
+
+	@Override
+	public List<User> listByPost(List<Long> postId) {
+		LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
+		postId.forEach(id -> queryWrapper.like(User::getPostId, id).or());
+		return this.list(queryWrapper);
+	}
+
+	@Override
+	public List<User> listByRole(List<Long> roleId) {
+		LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
+		roleId.forEach(id -> queryWrapper.like(User::getRoleId, id).or());
+		return this.list(queryWrapper);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..6e31f40
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java
@@ -0,0 +1,517 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.cache.ParamCache;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.entity.Strategy;
+import com.vci.ubcs.system.entity.Tenant;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.feign.ISysClient;
+import com.vci.ubcs.common.constant.CommonConstant;
+import com.vci.ubcs.system.user.cache.UserCache;
+import com.vci.ubcs.system.user.entity.*;
+import com.vci.ubcs.system.user.enums.UserEnum;
+import com.vci.ubcs.system.user.excel.UserExcel;
+import com.vci.ubcs.system.user.mapper.UserMapper;
+import com.vci.ubcs.system.user.service.IUserDeptService;
+import com.vci.ubcs.system.user.service.IUserOauthService;
+import com.vci.ubcs.system.user.service.IUserService;
+import com.vci.ubcs.system.user.vo.UserVO;
+import com.vci.ubcs.system.user.wrapper.UserWrapper;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tenant.BladeTenantProperties;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.DigestUtils;
+
+import java.util.*;
+
+import static com.vci.ubcs.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@RequiredArgsConstructor
+public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserService {
+	private static final String GUEST_NAME = "guest";
+
+	private final IUserDeptService userDeptService;
+	private final IUserOauthService userOauthService;
+	private final ISysClient sysClient;
+	private final BladeTenantProperties tenantProperties;
+	//鎷垮埌閰嶇疆鐨勮秴绠d
+	@Value("${user-info.id}")
+	private String adminUserId;
+
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean submit(User user) {
+		if (StringUtil.isBlank(user.getTenantId())) {
+			user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
+		}
+		String tenantId = user.getTenantId();
+		//Tenant tenant = SysCache.getTenant(tenantId);
+		if (Func.isNotEmpty(user.getPassword())) {
+			user.setPassword(DigestUtil.encrypt(user.getPassword()));
+		}
+		Long userCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount()));
+		if (userCount > 0L && Func.isEmpty(user.getId())) {
+			throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
+		}
+		return save(user) && submitUserDept(user);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean submitList(List<User> users) {
+		Boolean flag = true;
+		for (User user : users){
+			if (StringUtil.isBlank(user.getTenantId())) {
+				user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
+			}
+			String tenantId = user.getTenantId();
+			if (Func.isNotEmpty(user.getPassword())) {
+				user.setPassword(DigestUtil.encrypt(user.getPassword()));
+			}
+			Long userCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount()));
+			if (userCount > 0L && Func.isEmpty(user.getId())) {
+				throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
+			}
+			flag = save(user) && submitUserDept(user);
+
+		}
+		return flag;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean updateUser(User user) {
+		String tenantId = user.getTenantId();
+		Long userCount = baseMapper.selectCount(
+			Wrappers.<User>query().lambda()
+				.eq(User::getTenantId, tenantId)
+				.eq(User::getAccount, user.getAccount())
+				.notIn(User::getId, user.getId())
+		);
+		if (userCount > 0L) {
+			throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
+		}
+		return updateUserInfo(user) && submitUserDept(user);
+	}
+
+	@Override
+	public boolean updateUserInfo(User user) {
+		user.setPassword(null);
+		return updateById(user);
+	}
+
+	private boolean submitUserDept(User user) {
+		List<Long> deptIdList = Func.toLongList(user.getDeptId());
+		List<UserDept> userDeptList = new ArrayList<>();
+		deptIdList.forEach(deptId -> {
+			UserDept userDept = new UserDept();
+			userDept.setUserId(user.getId());
+			userDept.setDeptId(deptId);
+			userDeptList.add(userDept);
+		});
+		userDeptService.remove(Wrappers.<UserDept>update().lambda().eq(UserDept::getUserId, user.getId()));
+		return userDeptService.saveBatch(userDeptList);
+	}
+
+	@Override
+	public IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId) {
+		List<Long> deptIdList = SysCache.getDeptChildIds(deptId);
+		return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId));
+	}
+
+	@Override
+	public IPage<UserVO> selectUserSearch(UserVO user, Query query) {
+		LambdaQueryWrapper<User> queryWrapper = Wrappers.<User>query().lambda();
+		String tenantId = AuthUtil.getTenantId();
+		if (StringUtil.isNotBlank(tenantId)) {
+			queryWrapper.eq(User::getTenantId, tenantId);
+		}
+		if (StringUtil.isNotBlank(user.getName())) {
+			queryWrapper.like(User::getName, user.getName());
+		}
+		if (StringUtil.isNotBlank(user.getDeptName())) {
+			String deptIds = SysCache.getDeptIdsByFuzzy(AuthUtil.getTenantId(), user.getDeptName());
+			if (StringUtil.isNotBlank(deptIds)) {
+				queryWrapper.and(wrapper -> {
+					List<String> ids = Func.toStrList(deptIds);
+					ids.forEach(id -> wrapper.like(User::getDeptId, id).or());
+				});
+			}
+		}
+		if (StringUtil.isNotBlank(user.getPostName())) {
+			String postIds = SysCache.getPostIdsByFuzzy(AuthUtil.getTenantId(), user.getPostName());
+			if (StringUtil.isNotBlank(postIds)) {
+				queryWrapper.and(wrapper -> {
+					List<String> ids = Func.toStrList(postIds);
+					ids.forEach(id -> wrapper.like(User::getPostId, id).or());
+				});
+			}
+		}
+		IPage<User> pages = this.page(Condition.getPage(query), queryWrapper);
+		return UserWrapper.build().pageVO(pages);
+	}
+
+	@Override
+	public User userByAccount(String tenantId, String account) {
+		return baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, account).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+	}
+
+	@Override
+	public UserInfo userInfo(Long userId) {
+		User user = baseMapper.selectById(userId);
+		return buildUserInfo(user);
+	}
+
+	@Override
+	public UserInfo userInfo(String tenantId, String account) {
+		User user = baseMapper.getUser(tenantId, account);
+		return buildUserInfo(user);
+	}
+
+	@Override
+	public UserInfo userInfo(String tenantId, String account, UserEnum userEnum) {
+		User user = baseMapper.getUser(tenantId, account);
+		return buildUserInfo(user, userEnum);
+	}
+
+	private UserInfo buildUserInfo(User user) {
+		return buildUserInfo(user, UserEnum.WEB);
+	}
+
+	private UserInfo buildUserInfo(User user, UserEnum userEnum) {
+		if (ObjectUtil.isEmpty(user)) {
+			return null;
+		}
+		UserInfo userInfo = new UserInfo();
+		userInfo.setUser(user);
+		if (Func.isNotEmpty(user)) {
+			R<List<String>> result = sysClient.getRoleAliases(user.getRoleId());
+			if (result.isSuccess()) {
+				List<String> roleAlias = result.getData();
+				userInfo.setRoles(roleAlias);
+			}
+		}
+		// 鏍规嵁姣忎釜鐢ㄦ埛骞冲彴锛屽缓绔嬪搴旂殑detail琛紝閫氳繃鏌ヨ灏嗙粨鏋滈泦鍐欏叆鍒癲etail瀛楁
+		Kv detail = Kv.create().set("type", userEnum.getName());
+		if (userEnum == UserEnum.WEB) {
+			UserWeb userWeb = new UserWeb();
+			UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, user.getId()));
+			if (ObjectUtil.isNotEmpty(query)) {
+				detail.set("ext", query.getUserExt());
+			}
+		} else if (userEnum == UserEnum.APP) {
+			UserApp userApp = new UserApp();
+			UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, user.getId()));
+			if (ObjectUtil.isNotEmpty(query)) {
+				detail.set("ext", query.getUserExt());
+			}
+		} else {
+			UserOther userOther = new UserOther();
+			UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
+			if (ObjectUtil.isNotEmpty(query)) {
+				detail.set("ext", query.getUserExt());
+			}
+		}
+		userInfo.setDetail(detail);
+		return userInfo;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public UserInfo userInfo(UserOauth userOauth) {
+		UserOauth uo = userOauthService.getOne(Wrappers.<UserOauth>query().lambda().eq(UserOauth::getUuid, userOauth.getUuid()).eq(UserOauth::getSource, userOauth.getSource()));
+		UserInfo userInfo;
+		if (Func.isNotEmpty(uo) && Func.isNotEmpty(uo.getUserId())) {
+			userInfo = this.userInfo(uo.getUserId());
+			userInfo.setOauthId(Func.toStr(uo.getId()));
+		} else {
+			userInfo = new UserInfo();
+			if (Func.isEmpty(uo)) {
+				userOauthService.save(userOauth);
+				userInfo.setOauthId(Func.toStr(userOauth.getId()));
+			} else {
+				userInfo.setOauthId(Func.toStr(uo.getId()));
+			}
+			User user = new User();
+			user.setAccount(userOauth.getUsername());
+			user.setTenantId(userOauth.getTenantId());
+			userInfo.setUser(user);
+			userInfo.setRoles(Collections.singletonList(GUEST_NAME));
+		}
+		return userInfo;
+	}
+
+	@Override
+	public boolean grant(String userIds, String roleIds) {
+		User user = new User();
+		user.setRoleId(roleIds);
+		return this.update(user, Wrappers.<User>update().lambda().in(User::getId, Func.toLongList(userIds)));
+	}
+
+	@Override
+	public boolean resetPassword(String userIds) {
+		User user = new User();
+		user.setPassword(DigestUtil.encrypt(CommonConstant.DEFAULT_PASSWORD));
+		user.setUpdateTime(DateUtil.now());
+		return this.update(user, Wrappers.<User>update().lambda().in(User::getId, Func.toLongList(userIds)));
+	}
+
+	@Override
+	public boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1) {
+		User user = getById(userId);
+		if (!newPassword.equals(newPassword1)) {
+			throw new ServiceException("璇疯緭鍏ユ纭殑纭瀵嗙爜!");
+		}
+		if (!user.getPassword().equals(DigestUtil.hex(oldPassword))) {
+			throw new ServiceException("鍘熷瘑鐮佷笉姝g‘!");
+		}
+		//鑾峰彇鐢ㄦ埛閲囩敤鐨勫瘑鐮佺瓥鐣�
+		Strategy strategy = sysClient.getByUserId(userId).getData();
+		//瀵嗙爜闀垮害鏍¢獙
+		if(newPassword1.length() < strategy.getMinPwdLen() || newPassword1.length() > strategy.getMaxPwdLen()){
+			throw new ServiceException("瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠瀵嗙爜缁勫悎鏂瑰紡锛屼笖瀵嗙爜闀垮害蹇呴』鍦ㄣ��"+strategy.getMinPwdLen()+"-"+strategy.getMaxPwdLen()+"銆戣寖鍥村唴");
+		}
+		List<String> regexs = sysClient.getRegexByList(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
+		//鍒ゆ柇鏄惁婊¤冻缁勫悎鏂瑰紡涓殑蹇呭~绉嶇被鏁�
+		int reqType = 0;
+		for (int i = 0; i < regexs.size(); i++) {
+			if(reqType>=strategy.getRequiredType()){
+				break;
+			}
+			if(!Func.isEmpty(RegexUtil.findResult(regexs.get(i),newPassword1))){
+				reqType++;
+			}
+		}
+		String resException = "瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠绫诲瀷锛岃閲嶆柊杈撳叆瀵嗙爜锛�";
+		if(reqType<strategy.getRequiredType()){
+			throw new ServiceException(resException);
+		}
+		// 鏄惁灞炰簬缁勫悎鏂瑰紡涓殑绫诲瀷
+		String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
+		regex = "^"+regex+"{"+strategy.getRequiredType()+",}$";
+		boolean result = RegexUtil.find(regex, newPassword1);
+		if(!result){
+			throw new ServiceException(resException);
+		}
+		//淇敼瀵嗙爜鍚屾椂锛屾敼鍙樼敤鎴蜂俊鎭腑鐨勫瘑鐮佷慨鏀圭姸鎬佸瓧娈�,瀵嗙爜淇敼鏃堕棿
+		return this.update(Wrappers.<User>update().lambda()
+			.set(User::getPassword, DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes())))
+			.set(User::getStrategyUpdateStatus,CommonConstant.TOP_PARENT_ID)
+			.set(User::getPwdUpdateTime,new Date())
+			.eq(User::getId, userId));
+	}
+
+	@Override
+	public boolean removeUser(String userIds) {
+		if (Func.contains(Func.toLongArray(userIds), AuthUtil.getUserId())) {
+			throw new ServiceException("涓嶈兘鍒犻櫎鏈处鍙�!");
+		}
+		return deleteLogic(Func.toLongList(userIds));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void importUser(List<UserExcel> data, Boolean isCovered) {
+		data.forEach(userExcel -> {
+			User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class));
+			// 璁剧疆鐢ㄦ埛骞冲彴
+			user.setUserType(Func.toInt(DictCache.getKey(DictEnum.USER_TYPE, userExcel.getUserTypeName()), 1));
+			// 璁剧疆閮ㄩ棬ID
+			user.setDeptId(Func.toStrWithEmpty(SysCache.getDeptIds(userExcel.getTenantId(), userExcel.getDeptName()), StringPool.EMPTY));
+			// 璁剧疆宀椾綅ID
+			user.setPostId(Func.toStrWithEmpty(SysCache.getPostIds(userExcel.getTenantId(), userExcel.getPostName()), StringPool.EMPTY));
+			// 璁剧疆瑙掕壊ID
+			user.setRoleId(Func.toStrWithEmpty(SysCache.getRoleIds(userExcel.getTenantId(), userExcel.getRoleName()), StringPool.EMPTY));
+			// 璁剧疆绉熸埛ID
+			if (!AuthUtil.isAdministrator() || StringUtil.isBlank(user.getTenantId())) {
+				user.setTenantId(AuthUtil.getTenantId());
+			}
+			// 瑕嗙洊鏁版嵁
+			if (isCovered) {
+				// 鏌ヨ鐢ㄦ埛鏄惁瀛樺湪
+				User oldUser = UserCache.getUser(userExcel.getTenantId(), userExcel.getAccount());
+				if (oldUser != null && oldUser.getId() != null) {
+					user.setId(oldUser.getId());
+					this.updateUser(user);
+					return;
+				}
+			}
+			// 鑾峰彇榛樿瀵嗙爜閰嶇疆
+			String initPassword = ParamCache.getValue(DEFAULT_PARAM_PASSWORD);
+			user.setPassword(initPassword);
+			this.submit(user);
+		});
+	}
+
+	@Override
+	public List<UserExcel> exportUser(Wrapper<User> queryWrapper) {
+		List<UserExcel> userList = baseMapper.exportUser(queryWrapper);
+		userList.forEach(user -> {
+			user.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
+			user.setRoleName(StringUtil.join(SysCache.getRoleNames(user.getRoleId())));
+			user.setDeptName(StringUtil.join(SysCache.getDeptNames(user.getDeptId())));
+			user.setPostName(StringUtil.join(SysCache.getPostNames(user.getPostId())));
+		});
+		return userList;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean registerGuest(User user, Long oauthId) {
+		Tenant tenant = SysCache.getTenant(user.getTenantId());
+		if (tenant == null || tenant.getId() == null) {
+			throw new ServiceException("绉熸埛淇℃伅閿欒!");
+		}
+		UserOauth userOauth = userOauthService.getById(oauthId);
+		if (userOauth == null || userOauth.getId() == null) {
+			throw new ServiceException("绗笁鏂圭櫥闄嗕俊鎭敊璇�!");
+		}
+		user.setRealName(user.getName());
+		user.setAvatar(userOauth.getAvatar());
+		user.setRoleId(StringPool.MINUS_ONE);
+		user.setDeptId(StringPool.MINUS_ONE);
+		user.setPostId(StringPool.MINUS_ONE);
+		boolean userTemp = this.submit(user);
+		userOauth.setUserId(user.getId());
+		userOauth.setTenantId(user.getTenantId());
+		boolean oauthTemp = userOauthService.updateById(userOauth);
+		return (userTemp && oauthTemp);
+	}
+	@Override
+	public boolean updatePlatform(Long userId, Integer userType, String userExt) {
+		if (userType.equals(UserEnum.WEB.getCategory())) {
+			UserWeb userWeb = new UserWeb();
+			UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, userId));
+			if (ObjectUtil.isNotEmpty(query)) {
+				userWeb.setId(query.getId());
+			}
+			userWeb.setUserId(userId);
+			userWeb.setUserExt(userExt);
+			return userWeb.insertOrUpdate();
+		} else if (userType.equals(UserEnum.APP.getCategory())) {
+			UserApp userApp = new UserApp();
+			UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, userId));
+			if (ObjectUtil.isNotEmpty(query)) {
+				userApp.setId(query.getId());
+			}
+			userApp.setUserId(userId);
+			userApp.setUserExt(userExt);
+			return userApp.insertOrUpdate();
+		} else {
+			UserOther userOther = new UserOther();
+			UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, userId));
+			if (ObjectUtil.isNotEmpty(query)) {
+				userOther.setId(query.getId());
+			}
+			userOther.setUserId(userId);
+			userOther.setUserExt(userExt);
+			return userOther.insertOrUpdate();
+		}
+	}
+
+	@Override
+	public UserVO platformDetail(User user) {
+		User detail = baseMapper.selectOne(Condition.getQueryWrapper(user));
+		UserVO userVO = UserWrapper.build().entityVO(detail);
+		if (userVO.getUserType().equals(UserEnum.WEB.getCategory())) {
+			UserWeb userWeb = new UserWeb();
+			UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, user.getId()));
+			if (ObjectUtil.isNotEmpty(query)) {
+				userVO.setUserExt(query.getUserExt());
+			}
+		} else if (userVO.getUserType().equals(UserEnum.APP.getCategory())) {
+			UserApp userApp = new UserApp();
+			UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, user.getId()));
+			if (ObjectUtil.isNotEmpty(query)) {
+				userVO.setUserExt(query.getUserExt());
+			}
+		} else {
+			UserOther userOther = new UserOther();
+			UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
+			if (ObjectUtil.isNotEmpty(query)) {
+				userVO.setUserExt(query.getUserExt());
+			}
+		}
+		return userVO;
+	}
+
+	@Override
+	public Long checkRenAndExpr(Long userId) {
+		//瓒呯骇绠$悊鍛樼洿鎺ヨ繑鍥炰笉闇�瑕佹彁閱掑瘑鐮佷慨鏀�
+		if(adminUserId.equals(userId)){
+			return 0L;
+		}
+		//鑾峰彇鍒板瘑鐮佷慨鏀规椂闂�
+		Date pwdUpdateTime = this.getOne(Wrappers.<User>query().eq("ID", userId)).getPwdUpdateTime();
+		Long pwdupdateday = 0L;
+		if(!Func.isEmpty(pwdUpdateTime)){
+			pwdupdateday = dateToDay(pwdUpdateTime);
+		}
+		Strategy strategy = sysClient.getByUserId(userId).getData();
+		//鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=0灏辨彁閱掑繀椤讳慨鏀瑰瘑鐮�
+		long reminder = pwdupdateday+strategy.getExpirationTime()-dateToDay(new Date());
+		//鎻愰啋鐢ㄦ埛蹇呴』淇敼瀵嗙爜
+		if(reminder<=0){
+			return -1L;
+		}
+		//鎻愰啋鐢ㄦ埛杩樻湁澶氫箙杩囨湡
+		if(reminder<=strategy.getReminderTime()){
+			long res = (strategy.getReminderTime()+pwdupdateday)-dateToDay(new Date());
+			return res;
+		}
+		//浠h〃姝e父鐘舵�佽繕鏈埌鎻愰啋涓庤繃鏈熸椂闂达紝鏃笉鎻愰啋涔熶笉瑕佹眰淇敼
+		return 0L;
+	}
+
+	/**
+	 * 鏃堕棿鏍煎紡杞ぉ
+	 * @param date
+	 * @return
+	 */
+	private Long dateToDay(Date date){
+		long time = date.getTime();
+		return time/(1000 * 60 * 60 * 24);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/wrapper/UserWrapper.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/wrapper/UserWrapper.java
new file mode 100644
index 0000000..a72b04d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/wrapper/UserWrapper.java
@@ -0,0 +1,59 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.system.user.wrapper;
+
+import com.vci.ubcs.system.user.entity.User;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.cache.SysCache;
+import com.vci.ubcs.system.entity.Tenant;
+import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.system.user.vo.UserVO;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author Chill
+ */
+public class UserWrapper extends BaseEntityWrapper<User, UserVO> {
+
+	public static UserWrapper build() {
+		return new UserWrapper();
+	}
+
+	@Override
+	public UserVO entityVO(User user) {
+		UserVO userVO = Objects.requireNonNull(BeanUtil.copy(user, UserVO.class));
+		Tenant tenant = SysCache.getTenant(user.getTenantId());
+		List<String> roleName = SysCache.getRoleNames(user.getRoleId());
+		List<String> deptName = SysCache.getDeptNames(user.getDeptId());
+		List<String> postName = SysCache.getPostNames(user.getPostId());
+		userVO.setTenantName(tenant.getTenantName());
+		userVO.setRoleName(Func.join(roleName));
+		userVO.setDeptName(Func.join(deptName));
+		userVO.setPostName(Func.join(postName));
+		userVO.setSexName(DictCache.getValue(DictEnum.SEX, user.getSex()));
+		userVO.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
+		return userVO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-dev.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml
rename to Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-dev.yml
diff --git a/Source/BladeX/blade-service/blade-user/src/main/resources/application-prod.yml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-prod.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-user/src/main/resources/application-prod.yml
rename to Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-prod.yml
diff --git a/Source/BladeX/blade-service/blade-user/src/main/resources/application-test.yml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-test.yml
similarity index 100%
rename from Source/BladeX/blade-service/blade-user/src/main/resources/application-test.yml
rename to Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-test.yml
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserAppMapper.xml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserAppMapper.xml
new file mode 100644
index 0000000..caa20be
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserAppMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.user.mapper.UserAppMapper">
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserDeptMapper.xml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserDeptMapper.xml
new file mode 100644
index 0000000..d89f21b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserDeptMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.user.mapper.UserDeptMapper">
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserMapper.xml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserMapper.xml
new file mode 100644
index 0000000..4843a28
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserMapper.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.user.mapper.UserMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="userResultMap" type="com.vci.ubcs.system.user.entity.User">
+        <result column="id" property="id"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="code" property="code"/>
+        <result column="user_type" property="userType"/>
+        <result column="account" property="account"/>
+        <result column="password" property="password"/>
+        <result column="name" property="name"/>
+        <result column="real_name" property="realName"/>
+        <result column="email" property="email"/>
+        <result column="phone" property="phone"/>
+        <result column="birthday" property="birthday"/>
+        <result column="sex" property="sex"/>
+        <result column="role_id" property="roleId"/>
+        <result column="dept_id" property="deptId"/>
+        <result column="post_id" property="postId"/>
+        <result column="strategy_name" property="pwdStrategy"/>
+        <result column="pwd_update_time" property="pwdUpdateTime"/>
+        <result column="secretgrade" property="secretgrade"/>
+        <result column="strategy_update_status" property="strategyUpdateStatus"/>
+    </resultMap>
+
+
+    <select id="selectUserPage" resultMap="userResultMap">
+        SELECT
+            pou.*,nvl(pss.STRATEGY_NAME,(SELECT STRATEGY_NAME FROM PL_SYS_PWDSTRATEGY WHERE IS_DEFAULT=1)) strategy_name
+        FROM pl_org_user pou
+            LEFT JOIN PL_SYS_USER_PWDSTRATEGY plup on plup.USER_ID=pou.ID
+            LEFT JOIN PL_SYS_PWDSTRATEGY pss on pss.ID=plup.PWDSTRATEGY_ID
+        WHERE is_deleted = 0
+        <if test="tenantId!=null and tenantId != ''">
+            and tenant_id = #{tenantId}
+        </if>
+        <if test="user.tenantId!=null and user.tenantId != ''">
+            and tenant_id = #{user.tenantId}
+        </if>
+        <if test="user.account!=null and user.account != ''">
+            and account = #{user.account}
+        </if>
+        <if test="user.realName!=null and user.realName != ''">
+            and real_name = #{user.realName}
+        </if>
+        <if test="user.userType!=null and user.userType != ''">
+            and user_type = #{user.userType}
+        </if>
+        <if test="deptIdList!=null and deptIdList.size>0">
+            and pou.id in (
+            SELECT
+            user_id
+            FROM
+            pl_org_user_dept poud
+            WHERE
+            dept_id IN
+            <foreach collection="deptIdList" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            )
+        </if>
+        ORDER BY pou.id
+    </select>
+
+    <select id="getUser" resultMap="userResultMap">
+        SELECT
+            pou.*,nvl(pss.STRATEGY_NAME,(SELECT STRATEGY_NAME FROM PL_SYS_PWDSTRATEGY WHERE IS_DEFAULT=1)) strategy_name
+        FROM pl_org_user pou
+            LEFT JOIN PL_SYS_USER_PWDSTRATEGY plup on plup.USER_ID=pou.ID
+            LEFT JOIN PL_SYS_PWDSTRATEGY pss on pss.ID=plup.PWDSTRATEGY_ID
+        WHERE
+            tenant_id = #{param1} and account = #{param2} and is_deleted = 0
+    </select>
+
+    <select id="exportUser" resultType="com.vci.ubcs.system.user.excel.UserExcel">
+        SELECT
+            pou.*,nvl(pss.STRATEGY_NAME,(SELECT STRATEGY_NAME FROM PL_SYS_PWDSTRATEGY WHERE IS_DEFAULT=1)) strategy_name
+        FROM pl_org_user pou
+            LEFT JOIN PL_SYS_USER_PWDSTRATEGY plup on plup.USER_ID=pou.ID
+            LEFT JOIN PL_SYS_PWDSTRATEGY pss on pss.ID=plup.PWDSTRATEGY_ID
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="selectByIdUser" resultType="com.vci.ubcs.system.user.entity.User">
+        select id, code, user_type, account, password , name, real_name, avatar, email, phone , birthday, sex, role_id, dept_id, post_id , pwd_update_time, secretgrade, strategy_update_status, tenant_id, create_user , create_dept, create_time, update_user, update_time, status , is_deleted
+        from pl_org_user
+            where id = #{userId} and is_deleted = 0
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOauthMapper.xml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOauthMapper.xml
new file mode 100644
index 0000000..1150a6f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOauthMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.user.mapper.UserOauthMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="userResultMap" type="com.vci.ubcs.system.user.entity.UserOauth">
+        <result column="id" property="id"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="user_id" property="userId"/>
+        <result column="username" property="username"/>
+        <result column="nickname" property="nickname"/>
+        <result column="avatar" property="avatar"/>
+        <result column="blog" property="blog"/>
+        <result column="company" property="company"/>
+        <result column="location" property="location"/>
+        <result column="email" property="email"/>
+        <result column="remark" property="remark"/>
+        <result column="gender" property="gender"/>
+        <result column="source" property="source"/>
+    </resultMap>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOtherMapper.xml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOtherMapper.xml
new file mode 100644
index 0000000..8366c69
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOtherMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.user.mapper.UserOtherMapper">
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserWebMapper.xml b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserWebMapper.xml
new file mode 100644
index 0000000..fe47994
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserWebMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.system.user.mapper.UserWebMapper">
+
+</mapper>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..b8c792f
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+blade-core-cloud-3.0.1.RELEASE.pom>blade-release=
+blade-core-cloud-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..ca2fb58
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123335467
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-core-cloud\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123333256
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122995772
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123164840
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123336626
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-core-cloud\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..dd6cc63
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+e956fb4c93b55ef7353dad174f75aacb3efa5357
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..98ebbb6
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom"
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-core-cloud</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+
+    <dependencies>
+        <!-- Blade -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-launch</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-auth</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-loadbalancer</artifactId>
+        </dependency>
+        <!-- Admin -->
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-starter-client</artifactId>
+        </dependency>
+        <!-- Sentinel -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+        </dependency>
+        <!-- Auto -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..6c9c03e
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:23:44 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677122623940
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-core-cloud\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677122623718
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122581626
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677122602670
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677122624062
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-core-cloud\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..68d3a56
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+4cb260d07c322ac3580f451a49142a416a25297f
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..9686b95
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Wed Mar 29 17:08:22 CST 2023
+blade-core-launch-3.0.1.RELEASE.jar>blade-release=
+blade-core-launch-3.0.1.RELEASE.pom>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..37aedd9
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,17 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Wed Mar 29 17:08:22 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1680080901972
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-core-launch\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123333264
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122996066
+http\://dev.yunkeruida.top\:9000/repository/maven-public/.error=
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123164849
+http\://dev.yunkeruida.top\:9000/repository/maven-releases/.error=
+http\://dev.yunkeruida.top\:9000/repository/maven-releases/.lastUpdated=1680080901721
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://dev.yunkeruida.top\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-core-launch\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://dev.yunkeruida.top\:9000/repository/maven-snapshots/)\: transfer failed for http\://dev.yunkeruida.top\:9000/repository/maven-snapshots/org/springblade/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar, status\: 400 Repository version policy\: SNAPSHOT does not allow version\: 3.0.1.RELEASE
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://dev.yunkeruida.top\:9000/repository/maven-snapshots/.lastUpdated=1680080901733
+http\://dev.yunkeruida.top\:9000/repository/maven-public/.lastUpdated=1680080901706
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1680080902163
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-core-launch\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..f3e5a6d
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+eaee3834a22f32690641142f78cdceabd2f0fe1a
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..b7ae3b8
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom"
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-core-launch</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Spring-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-undertow</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bootstrap</artifactId>
+        </dependency>
+        <!-- Auto -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..fb8d856
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:12:10 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677121929907
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-core-launch\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677121929673
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677121887602
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677121908646
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677121930096
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-core-launch\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..50fb4d5
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+d981c483f7b61c8247a18265cd3428551e8857ef
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..f45debc
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+blade-starter-auth-3.0.1.RELEASE.pom>blade-release=
+blade-starter-auth-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..029e83d
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123335473
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-auth\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123333262
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122995996
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123164848
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123336636
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-auth\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..bcda2f7
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+758eb877040f8f89cbf455155ea7114512f8016b
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..bb1611b
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom"
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-starter-auth</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-tool</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-jwt</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..ed069f5
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:21:26 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677122486736
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-auth\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677122486500
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122444378
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677122465435
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677122486860
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-auth\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..12ec305
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+ef0f81d271a95012c061774f2f73ad75039db939
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..f5638a1
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:37:46 CST 2023
+blade-starter-datascope-3.0.1.RELEASE.pom>blade-release=
+blade-starter-datascope-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..fd94b95
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:37:46 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123466193
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-datascope\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123464951
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677123422859
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123443916
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123466378
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-datascope\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..96c9bd7
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+a5e39063a45b7285f9f7cef22c62512b475cf911
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..fbb2ea3
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom"
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-starter-datascope</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-cache</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-mybatis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..9f0dccc
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:37:02 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123422052
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-datascope\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123421824
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677123379755
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123400785
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123422179
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-datascope\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..46379c9
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+bac0fbfd4f08286bad189e568ed8c6ac859169f9
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..87d01c6
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+blade-starter-develop-3.0.1.RELEASE.pom>blade-release=
+blade-starter-develop-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..4f59dab
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123335469
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-develop\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123333258
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122995881
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123164843
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123336631
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-develop\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..b7f98a6
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+3b08792ab553a8ce80944619f178dde8b8c1a5bf
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..55aaec2
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom"
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-starter-develop</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-tool</artifactId>
+        </dependency>
+        <!--Mybatis-Plus-Generator-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+        </dependency>
+        <!--Beetl-->
+        <dependency>
+            <groupId>com.ibeetl</groupId>
+            <artifactId>beetl</artifactId>
+            <version>3.10.0.Antlr4.5-RELEASE</version>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..cc4221d
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:26:56 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677122816677
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-develop\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677122816438
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122774348
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677122795391
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677122816777
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-develop\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..128c414
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+7d3c53a288747a979f24dc9262edfeb94ecb5e63
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..4a58e41
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+blade-starter-log-3.0.1.RELEASE.pom>blade-release=
+blade-starter-log-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..9a0ce33
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123335466
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-log\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123333254
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122995771
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123164839
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123336625
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-log\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..a2659ad
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+d3f1812ab562f6fc94cedf75933433354c02c7b2
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..feb9f9a
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom"
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-starter-log</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-cloud</artifactId>
+        </dependency>
+        <!--Mybatis-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus</artifactId>
+        </dependency>
+        <!-- Logstash -->
+        <dependency>
+            <groupId>net.logstash.logback</groupId>
+            <artifactId>logstash-logback-encoder</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.janino</groupId>
+            <artifactId>janino</artifactId>
+        </dependency>
+        <!-- validator -->
+        <dependency>
+            <artifactId>hibernate-validator</artifactId>
+            <groupId>org.hibernate.validator</groupId>
+        </dependency>
+        <!-- Auto -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..b06bc20
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:25:28 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677122728345
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-log\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677122728000
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122685899
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677122706960
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677122728467
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-log\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..89e1dfb
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+e787bdf67f89561f905492ac4c64251ad5a9c562
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..3a72064
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+blade-starter-mybatis-3.0.1.RELEASE.pom>blade-release=
+blade-starter-mybatis-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..98847ec
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123335478
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-mybatis\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123333267
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122996289
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123164853
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123336645
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-mybatis\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..a4cef50
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+85a8bef4008eddcfcdf3ece801a016b7dfef2b18
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..5079a08
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom"
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-starter-mybatis</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Mybatis-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis-typehandlers-jsr310</artifactId>
+        </dependency>
+        <!--Jdbc-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>tomcat-jdbc</artifactId>
+                    <groupId>org.apache.tomcat</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!-- Druid -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-auth</artifactId>
+        </dependency>
+        <!-- Auto -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..de4fbe0
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:26:13 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677122773212
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-mybatis\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677122772991
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122730885
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677122751946
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677122773354
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-mybatis\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..890ec97
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+2ca12f5cb2f8ab265d90aca6d5e5ed78bfab48bd
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..255bb74
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 14:12:14 CST 2023
+blade-starter-report-3.0.1.RELEASE.pom>blade-release=
+blade-starter-report-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..0fd002f
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,5 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 14:12:14 CST 2023
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677132734005
+https\://repo1.maven.org/maven2/.error=
+https\://repo1.maven.org/maven2/.lastUpdated=1677132733789
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..b8a965d
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+a2409e6bf5fb66326b327ad530d96f27b59d3288
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..69cbe04
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom"
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-starter-report</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-mybatis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.bstek.ureport</groupId>
+            <artifactId>ureport2-console</artifactId>
+            <version>2.2.9</version>
+        </dependency>
+        <!-- Auto -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..d26e7a9
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,5 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 14:07:37 CST 2023
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677132457350
+https\://repo1.maven.org/maven2/.error=
+https\://repo1.maven.org/maven2/.lastUpdated=1677132457249
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..6776177
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+8e917ccd830e2211cc3dfd44ddc820a6128654ba
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/_remote.repositories" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/_remote.repositories"
new file mode 100644
index 0000000..467ebcc
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/_remote.repositories"
@@ -0,0 +1,4 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+blade-starter-tenant-3.0.1.RELEASE.pom>blade-release=
+blade-starter-tenant-3.0.1.RELEASE.jar>blade-release=
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.lastUpdated"
new file mode 100644
index 0000000..256ab81
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:35:36 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677123335477
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-tenant\:jar\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677123333266
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122996288
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677123164852
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677123336644
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-tenant\:jar\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.sha1"
new file mode 100644
index 0000000..99caacf
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.sha1"
@@ -0,0 +1 @@
+606be9f92b69a6f0c853367668ee651767b04365
\ No newline at end of file
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom"
new file mode 100644
index 0000000..eb3b02c
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom"
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Tool</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-starter-tenant</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${project.parent.version}</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--Blade-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-mybatis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-cache</artifactId>
+        </dependency>
+        <!-- Druid -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <!--Dynamic-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+        </dependency>
+        <!-- Auto -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-auto</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.lastUpdated" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.lastUpdated"
new file mode 100644
index 0000000..a6e6527
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.lastUpdated"
@@ -0,0 +1,11 @@
+#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
+#Thu Feb 23 11:28:31 CST 2023
+https\://maven.aliyun.com/repository/public/.lastUpdated=1677122911677
+http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.error=Could not transfer artifact org.springblade\:blade-starter-tenant\:pom\:3.0.1.RELEASE from/to rdc-snapshots (http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/org/springblade/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-snapshots-http\://nexus.vci-tech.com\:9000/repository/maven-snapshots/.lastUpdated=1677122911449
+http\://maven.aliyun.com/nexus/content/groups/public/.lastUpdated=1677122869379
+1b0ab2d5def7c89c2e68c0f5006ba682a66fe006@default-rdc-releases-http\://nexus.vci-tech.com\:9000/repository/maven-releases/.lastUpdated=1677122890399
+http\://maven.aliyun.com/nexus/content/groups/public/.error=
+http\://nexus.javablade.com/repository/maven-releases/.lastUpdated=1677122911777
+https\://maven.aliyun.com/repository/public/.error=
+http\://nexus.vci-tech.com\:9000/repository/maven-releases/.error=Could not transfer artifact org.springblade\:blade-starter-tenant\:pom\:3.0.1.RELEASE from/to rdc-releases (http\://nexus.vci-tech.com\:9000/repository/maven-releases/)\: Transfer failed for http\://nexus.vci-tech.com\:9000/repository/maven-releases/org/springblade/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom
diff --git "a/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.sha1" "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.sha1"
new file mode 100644
index 0000000..2d73049
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\350\277\207\347\232\204jar\345\214\205/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.sha1"
@@ -0,0 +1 @@
+153436de5b16c068ea5e1d559d59a17a12744a69
\ No newline at end of file

--
Gitblit v1.9.3