更改项目名称,命名空间,上传更改过的jar包,更改服务名,项目中的类引用路径
已添加953个文件
已重命名260个文件
已删除898个文件
232228 ■■■■ 文件已修改
Source/BladeX/blade-auth/pom.xml 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeResourceServerConfiguration.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/JwtTokenStoreConfiguration.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/SecurityConfiguration.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeSocialEndpoint.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeTokenEndPoint.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java 322 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeNoOpPasswordEncoder.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoder.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoderFactories.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/resources/application.yml 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/pom.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/cache/CacheNames.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/config/BladeCommonConfiguration.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/pom.xml 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/ErrorHandlerConfiguration.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteService.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteServiceListener.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayFilter.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayPredicate.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayRoute.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalResponseLogFilter.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/RequestFilter.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/handler/ErrorExceptionHandler.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/props/AuthProperties.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthSecure.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/BasicSecure.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/ResponseProvider.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/SignSecure.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/BladeFlow.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/FlowEntity.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClient.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClientFallback.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/TaskUtil.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/pom.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/enums/SmsCodeEnum.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClient.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClientFallback.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/utils/SmsUtil.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/AttachVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/OssVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/SmsVO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/pom.xml 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/pom.xml 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/AdminApplication.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/AdminConfiguration.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/DingTalkConfiguration.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/SecurityConfiguration.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkNotifier.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkService.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/MonitorProperties.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/security/InternalAuthorizationManager.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/pom.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/DevelopApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/CodeController.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/DatasourceController.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelController.java 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelPrototypeController.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/dto/ModelDTO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/ICodeService.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IDatasourceService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelPrototypeService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/CodeServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/DatasourceServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelPrototypeServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/pom.xml 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/FlowApplication.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/FlowClient.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java 333 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowModel.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java 559 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/utils/FlowCache.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/BladeTest.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/launch/LauncherTestServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/pom.xml 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/LogApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogErrorController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogUsualController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/feign/LogClient.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogErrorService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogUsualService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogErrorServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogUsualServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-report/pom.xml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/ReportApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/config/BladeReportConfiguration.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/Dockerfile 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/pom.xml 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/ResourceApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/MinioOssBuilder.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/AliSmsBuilder.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/QiniuSmsBuilder.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/SmsBuilder.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/TencentSmsBuilder.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/YunpianSmsBuilder.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeOssConfiguration.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeSmsConfiguration.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/AttachController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/OssController.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/SmsController.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/SmsClient.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IAttachService.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IOssService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/ISmsService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/AttachServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/OssServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/SmsServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/OssWrapper.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/SmsWrapper.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-swagger/pom.xml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/doc/XXL-JOB官方文档.md 1740 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/JobAdminApplication.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/UserController.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java 1666 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/LoginService.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java 372 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/i18n/message_en.properties 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob/pom.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/JobApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/config/XxlJobConfig.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/controller/TestController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/jobhandler/SampleXxlJob.java 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/pom.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/pom.xml 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java 669 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java 1053 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java 664 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java 651 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java 1071 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java 263 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ConfigAttrMappingVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DataResembleVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingDataVO.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingLogeVO.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataInfoVO.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataVO.java 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrMappingVO.java 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrRangeVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingTaskVO.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/MdmUIInfoVO.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntAuthorityVO.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntBaseVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntHeaderVO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntInfoVO.java 746 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntParamVO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-desk-api/pom.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/feign/INoticeClient.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/vo/NoticeVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictBizCache.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/constant/DictConstant.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/dto/DictDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictEnum.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClient.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClientFallback.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClient.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClientFallback.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictBizVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-omd-api/pom.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/cache/DictBizCache.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/entity/DictBizM.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/enums/DictBizEnum.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClient.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClientFallback.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/vo/DictBizMVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/pom.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/ApiScopeCache.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/DataScopeCache.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/config/ScopeConfiguration.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClient.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClientFallback.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClient.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClientFallback.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/ApiScopePermissionHandler.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/DataScopeModelHandler.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/ParamCache.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/RegionCache.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/SysCache.java 373 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/DeptDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/MenuDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/ParamDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/PostDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleMenuDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Combination.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Strategy.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/UserPwdstrategy.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ValueRange.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ApiScopeVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DataScopeVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DeptVO.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantTreeVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/MenuVO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ParamVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/PostVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RegionVO.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleMenuVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/UserPwdstrategyVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/cache/UserCache.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserSearchClient.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/pom.xml 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/pom.xml 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java 294 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingLogeDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataInfoDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrMappingDaoI.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrRangeDaoI.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingTaskDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntAuthorityDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntBaseDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntHeaderDaoI.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntInfoDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntParamDaoI.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java 518 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java 319 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationDataFlowTypeEnum.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestMethodEnum.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestTypeEnum.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/sysIntegrationPushTypeEnum.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java 728 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java 858 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingLogeDO.java 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataDO.java 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataInfoDO.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrMappingDO.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrRangeDO.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingTaskDO.java 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntAuthorityDO.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntBaseDO.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntHeaderDO.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntInfoDO.java 656 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntParamDO.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/TaskDuckingDO.java 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataServiceI.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreAttrMappingSeviceI.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmEngineServiceI.java 361 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmIOServiceI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmProductCodeServiceI.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntAuthorityServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntBaseServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntInfoServiceI.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/UniversalInterfaceI.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java 834 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java 322 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java 357 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java 1022 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java 726 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java 380 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java 1084 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java 479 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java 1103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java 636 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java 375 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java 299 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java 683 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java 507 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataServiceImpl.java 1116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreAttrMappingSeviceImpl.java 529 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmEngineServiceImpl.java 2753 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmIOServiceImpl.java 4012 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmProductCodeServiceImpl.java 741 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntAuthorityServiceImpl.java 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntBaseServiceImpl.java 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntInfoServiceImpl.java 1091 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/UniversalInterfaceImpl.java 913 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java 527 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java 770 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/pom.xml 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/DashBoardController.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/feign/NoticeClient.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/INoticeService.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/NoticeServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/pom.xml 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/OmdApplication.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/controller/DictBizOmdController.java 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/feign/DictBizClient.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/IDictBizService.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/impl/DictBizServiceImpl.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/wrapper/DictBizWrapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/pom.xml 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ApiScopeController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/AuthClientController.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/CombinationController.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DataScopeController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictBizController.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamController.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/PostController.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/SearchController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/StrategyController.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantPackageController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TopMenuController.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/UserPwdstrategyController.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ValueRangeController.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionImporter.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/ApiScopeClient.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DataScopeClient.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictBizClient.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictClient.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.xml 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml 478 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.xml 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.xml 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.xml 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IApiScopeService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IAuthClientService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ICombinationService.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDataScopeService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictBizService.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IParamService.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IPostService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleMenuService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleScopeService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IStrategyService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantPackageService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuSettingService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IUserPwdstrategyService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IValueRangeService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CombinationServiceImpl.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/StrategyServiceImpl.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/UserPwdstrategyServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ValueRangeServiceImpl.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DeptWrapper.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictWrapper.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/PostWrapper.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RegionWrapper.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RoleWrapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/pom.xml 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/UserApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserImporter.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserSearchClient.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserDeptService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserOauthService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserSearchService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java 517 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/pom.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/pom.xml 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/service-start.sh 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/service-stop.sh 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/.editorconfig 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/.gitignore 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/LICENSE 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/docker/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/mvn/mvn命令.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/nacos/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/nacos/blade-dev.yaml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/nacos/blade-prod.yaml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/nacos/blade-test.yaml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/nacos/blade.yaml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/nacos/routes/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/nacos/routes/blade-gateway-dev.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/other/env.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/other/http-code.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/db/database-info.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/dm/bladex-flowable-dameng.dmp 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/dm/bladex-saber-dameng.dmp 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/dm/bladex-sword-dameng.dmp 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/mysql/bladex-flowable-mysql.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/mysql/bladex-saber-mysql.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/mysql/bladex-sword-mysql.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/oracle/bladex-flowable-oracle.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/oracle/bladex-saber-oracle.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/oracle/bladex-sword-oracle.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/postgresql/bladex-flowable-postgresql.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/postgresql/bladex-saber-postgresql.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/postgresql/bladex-sword-postgresql.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/sqlserver/bladex-flowable-sqlserver.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/sqlserver/bladex-saber-sqlserver.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/sqlserver/bladex-sword-sqlserver.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/update/bladex-update-dameng-3.0.0~3.0.1.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/update/bladex-update-mysql-3.0.0~3.0.1.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/update/bladex-update-oracle-3.0.0~3.0.1.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/update/bladex-update-postgresql-3.0.0~3.0.1.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/doc/sql/update/bladex-update-sqlserver-3.0.0~3.0.1.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/pom.xml 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/.env 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/deploy.sh 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/docker-compose.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/nacos/init.d/custom.properties 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/nginx/api/nginx.conf 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/nginx/web/html/index.html 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/nginx/web/nginx.conf 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/config/alert_rules.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/config/alertmanager.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/config/dingtalk.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/config/grafana.ini 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/config/prometheus.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/config/wechat.tmpl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-docker.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-jvm.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-linux.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-mysql.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-nacos.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/deploy.sh 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/docker-compose.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/es-master.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/es-slave1.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/es-slave2.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/filebeat.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/kibana.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/logstash-filebeat.conf 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/logstash.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/docker/elk/undeploy.sh 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/fatjar/service.cmd 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/script/fatjar/service.sh 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/service-start.sh 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/service-stop.sh 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/pom.xml 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/AuthApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeAuthorizationServerConfiguration.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/BladeResourceServerConfiguration.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/JwtTokenStoreConfiguration.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/config/SecurityConfiguration.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/constant/AuthConstant.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeSocialEndpoint.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/endpoint/BladeTokenEndPoint.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/BladeTokenGranter.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/CaptchaTokenGranter.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/granter/SocialTokenGranter.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeClientDetailsServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetails.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java 322 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeJwtTokenEnhancer.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladeNoOpPasswordEncoder.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoder.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/support/BladePasswordEncoderFactories.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/utils/TokenUtil.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/application.yml 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/static/css/bootstrap.min.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-style.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-theme.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/static/js/bootstrap.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/static/js/jquery.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/static/js/md5.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/static/js/popper.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/templates/confirm.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-auth/src/main/resources/templates/login.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/pom.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/cache/CacheNames.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/config/BladeCommonConfiguration.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/CommonConstant.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/TenantConstant.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/launch/LauncherServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/resources/banner.txt 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/pom.xml 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/GateWayApplication.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/ErrorHandlerConfiguration.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/config/RouterFunctionConfiguration.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteService.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/DynamicRouteServiceListener.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayFilter.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayPredicate.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/dynamic/GatewayRoute.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/AuthFilter.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalRequestLogFilter.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/GlobalResponseLogFilter.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/filter/RequestFilter.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/handler/ErrorExceptionHandler.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/props/AuthProperties.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthProvider.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/AuthSecure.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/BasicSecure.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/RequestProvider.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/ResponseProvider.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/java/com/vci/ubcs/gateway/provider/SignSecure.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/src/main/resources/bootstrap.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/pom.xml 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/constant/ProcessConstant.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/FlowEntity.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/enums/FlowModeEnum.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClient.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/feign/IFlowClientFallback.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/FlowUtil.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/utils/TaskUtil.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/pom.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Attach.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Oss.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/entity/Sms.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/enums/SmsCodeEnum.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClient.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/feign/ISmsClientFallback.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/utils/SmsUtil.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/AttachVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/OssVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops-api/ubcs-resource-api/src/main/java/com/vci/ubcs/resource/vo/SmsVO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/pom.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/pom.xml 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/AdminApplication.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/AdminConfiguration.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/DingTalkConfiguration.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/SecurityConfiguration.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkNotifier.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/DingTalkService.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/dingtalk/MonitorProperties.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/InternalAuthorizationManager.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/resources/bootstrap.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/pom.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/DevelopApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/CodeController.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/DatasourceController.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelController.java 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/controller/ModelPrototypeController.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/dto/ModelDTO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Code.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Datasource.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/Model.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/entity/ModelPrototype.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/CodeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/DatasourceMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/mapper/ModelPrototypeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/ICodeService.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IDatasourceService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelPrototypeService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/IModelService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/CodeServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/DatasourceServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelPrototypeServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/java/com/vci/ubcs/develop/service/impl/ModelServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/CodeMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/DatasourceMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/mapper/ModelPrototypeMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/templates/code.properties 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/test/java/com/vci/test/CodeGenerator.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-develop/src/test/resources/templates/code.properties 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/doc/nacos/blade-flow-dev.yaml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/pom.xml 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/FlowApplication.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/feign/FlowClient.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/FlowBusinessService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java 333 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/config/FlowableConfiguration.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowFollowController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowExecution.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowModel.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowProcess.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java 559 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/utils/FlowCache.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/BladeTest.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/pom.xml 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/LogApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogApiController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogErrorController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/controller/LogUsualController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/feign/LogClient.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogApiMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogErrorMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/mapper/LogUsualMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogApiService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogErrorService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/ILogUsualService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogApiServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogErrorServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/core/log/service/impl/LogUsualServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogApiMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogErrorMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/mapper/LogUsualMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/pom.xml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/ReportApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/src/main/java/com/vci/ubcs/report/config/BladeReportConfiguration.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/Dockerfile 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/pom.xml 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/ResourceApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/AliOssBuilder.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/MinioOssBuilder.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/OssBuilder.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/QiniuOssBuilder.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/oss/TencentOssBuilder.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/AliSmsBuilder.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/QiniuSmsBuilder.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/SmsBuilder.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/TencentSmsBuilder.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/builder/sms/YunpianSmsBuilder.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeOssConfiguration.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/config/BladeSmsConfiguration.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/AttachController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/OssController.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/controller/SmsController.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/OssEndpoint.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/endpoint/SmsEndpoint.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/feign/SmsClient.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/AttachMapper.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/OssMapper.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/mapper/SmsMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IAttachService.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/IOssService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/ISmsService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/AttachServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/OssServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/service/impl/SmsServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/OssWrapper.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/java/com/vci/ubcs/resource/wrapper/SmsWrapper.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/AttachMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/OssMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/mapper/SmsMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/pom.xml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/java/com/vci/ubcs/swagger/SwaggerApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/banner.txt 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB官方文档.md 1740 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB架构图.pptx 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/db/tables_xxl_job.sql 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/nacos/blade-xxljob-admin-dev.yaml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/pom.xml 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/IndexController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobApiController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobCodeController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobGroupController.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobInfoController.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/JobLogController.java 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/UserController.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/annotation/PermissionLimit.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/CookieInterceptor.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/PermissionInterceptor.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/interceptor/WebMvcConfig.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/controller/resolver/WebExceptionResolver.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/conf/XxlJobAdminConfig.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/cron/CronExpression.java 1666 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/exception/XxlJobException.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobGroup.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobInfo.java 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLog.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogGlue.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogReport.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobRegistry.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobUser.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/RemoteHttpJobBean.java 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobDynamicScheduler.java 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobThreadPool.java 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouter.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/scheduler/XxlJobScheduler.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobFailMonitorHelper.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobLogReportHelper.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobScheduleHelper.java 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobTriggerPoolHelper.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/TriggerTypeEnum.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/XxlJobTrigger.java 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/CookieUtil.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/FtlUtil.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/I18nUtil.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/JacksonUtil.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/LocalCacheUtil.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobGroupDao.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobInfoDao.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogDao.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogGlueDao.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogReportDao.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobRegistryDao.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobUserDao.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/LoginService.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/XxlJobService.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/AdminBizImpl.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/XxlJobServiceImpl.java 372 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application.yml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message.properties 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message_en.properties 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/logback.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.css.map 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/common.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/index.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobcode.index.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobgroup.index.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobinfo.index.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.detail.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.index.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/login.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/user.index.1.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/layer.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/layer.css 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.exception.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.macro.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/help.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/index.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobcode/jobcode.index.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.detail.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.index.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/login.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/user/user.index.ftl 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/pom.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/config/XxlJobConfig.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/controller/TestController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/jobhandler/SampleXxlJob.java 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/application.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/logback.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-plugin-api/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-plugin-api/pom.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-plugin/README.md 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-plugin/pom.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/pom.xml 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeClassifyFullInfoBO.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java 669 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeButtonDTO.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyProcessTempDTO.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTempMapItemDTO.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java 1053 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateDTO.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateMapDTO.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCompPreviewDTO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeDeleteBatchDTO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeExportAttrDTO.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeImprotDataDTO.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeKeyAttrRepeatRuleDTO.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderSecDTO.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodePhaseAttrDTO.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeResembleRuleDTO.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeRuleDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeSynonymDTO.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDTO.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataDTO.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataInfoDTO.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrMappingDTO.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrRangeDTO.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingTaskDTO.java 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntAuthorityDTO.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntBaseDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntHeaderDTO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoBseDTO.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoDTO.java 664 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntParamDTO.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/UpdateSysInfoStatusDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/JsonRootDataDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/classfy.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/data.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/data.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/result.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultJsonDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java 651 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeButtonVO.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyAttributeVO.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTempMapItemVO.java 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java 1071 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateMapVO.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateVO.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java 263 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImProtRusultVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotParmaDatVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotResembleVO.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotSaveDatVO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodePhaseAttrVO.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeResembleRuleVO.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSynonymVO.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ColumnVO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ConfigAttrMappingVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DataResembleVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingLogeVO.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataInfoVO.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataVO.java 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrMappingVO.java 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrRangeVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingTaskVO.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntAuthorityVO.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntBaseVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntHeaderVO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntInfoVO.java 746 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntParamVO.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDataVO.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDatasVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfyVO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfysVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/InterParameterVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ProppertyVO.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/RootDataVO.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionsVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/UserVO.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataAttributeVO.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataObjectVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/GeneralMappingUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryClsfDO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryDO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/RowDatas.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/appcode.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/clsfAttrMap.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/tt.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxx.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxxxxxxxx.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ClassifyVO.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/LibraryVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryClassifyVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryData.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryLibraryVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultClassifyVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultData.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/classify.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/xxx.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionVO.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionsVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataCondtionsVO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataObjectVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/PropertyVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultDataVO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/result.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/xx.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfyVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfysVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultSystemVO.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/tt.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultClassfyVO.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultSystemVO.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-desk-api/pom.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/entity/Notice.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/feign/INoticeClient.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/vo/NoticeVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictBizCache.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictCache.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/constant/DictConstant.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/dto/DictDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/Dict.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/DictBiz.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictBizEnum.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictEnum.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClientFallback.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClient.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClientFallback.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictBizVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/DictBizCache.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/DictBizM.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/DictBizEnum.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClient.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClientFallback.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/DictBizMVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/pom.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/ApiScopeCache.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/DataScopeCache.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/config/ScopeConfiguration.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClient.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClientFallback.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClient.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClientFallback.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/ApiScopePermissionHandler.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/DataScopeModelHandler.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/ParamCache.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/RegionCache.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/SysCache.java 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/DeptDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/MenuDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/ParamDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/PostDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleMenuDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ApiScope.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/AuthClient.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Combination.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/DataScope.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Dept.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Menu.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Param.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Post.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Region.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Role.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleMenu.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleScope.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Strategy.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Tenant.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TenantPackage.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenu.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenuSetting.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/UserPwdstrategy.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ValueRange.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ApiScopeVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/CheckedTreeVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DataScopeVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DeptVO.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantTreeVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/MenuVO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ParamVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/PostVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RegionVO.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleMenuVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/TenantVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/UserPwdstrategyVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/cache/UserCache.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/User.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserApp.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserDept.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserInfo.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOauth.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOther.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserWeb.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/enums/UserEnum.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserClient.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserSearchClient.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/vo/UserVO.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/pom.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/pom.xml 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingScheduling.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMap.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMapMethod.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmDuckingConstant.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEnumIdConstant.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLifeCycleConstant.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLinkTypeConstant.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySyncController.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTempMapItemController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateController.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateMapController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeDuckingController.java 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatRuleController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeAllCodeDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeBasicSecDaoI.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeButtonDaoI.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyDaoI.java 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyProcessTempDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTempMapItemDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateAttrDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateButtonDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateDaoI.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateMapDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyValueDaoI.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeFixedValueDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeKeyAttrRepeatRuleDaoI.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodePhaseAttrDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeResembleRuleDaoI.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeRuleDaoI.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSerialValueDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSynonymDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeTemplatePhaseDaoI.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingDataDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingLogeDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataInfoDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrMappingDaoI.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrRangeDaoI.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingTaskDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntAuthorityDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntBaseDaoI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntHeaderDaoI.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntInfoDaoI.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntParamDaoI.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeAllCodeDaoImpl.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeBasicSecDaoImpl.java 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeButtonDaoImpl.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyDaoImpl.java 520 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyProcessTempDaoImpl.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateDaoImpl.java 321 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyValueDaoImpl.java 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeFixedValueDaoImpl.java 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodePhaseAttrDaoImpl.java 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeResembleRuleDaoImpl.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeRuleDaoImpl.java 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSerialValueDaoImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSynonymDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeTemplatePhaseDaoImpl.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingDataDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingLogeDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataDaoImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrMappingDaoImpl.java 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrRangeDaoImpl.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingTaskDaoImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntAuthorityDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntBaseDaoImpl.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntHeaderDaoImpl.java 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntInfoDaoImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntParamDaoImpl.java 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeAllCodeLC.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeClassifyTemplateLC.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeDefaultLC.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeALlCodeMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeAllCodeMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeAllCodeDO.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeBasicSecDO.java 728 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeButtonDO.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyDO.java 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessPhaseDO.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessTempDO.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTempMapItemDO.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateAttrDO.java 858 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateButtonDO.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateDO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateMapDO.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyValueDO.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeFixedValueDO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeImprotDataGridVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeKeyAttrRepeatRuleDO.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodePhaseAttrDO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeResembleRuleDO.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeRuleDO.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSerialValueDO.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSynonymDO.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeTemplatePhaseDO.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingDataDO.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingLogeDO.java 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataDO.java 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataInfoDO.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrMappingDO.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrRangeDO.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingTaskDO.java 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntAuthorityDO.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntBaseDO.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntHeaderDO.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntInfoDO.java 656 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntParamDO.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/TaskDuckingDO.java 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeBasicSecServiceI.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeButtonServiceI.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyProcessTempServiceI.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyServiceI.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTempMapItemServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateAttrServiceI.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateButtonServiceI.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateMapServiceI.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateServiceI.java 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyValueServiceI.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingServiceI.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingSyncServiceI.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeFixedValueServiceI.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeKeyAttrRepeatRuleServiceI.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodePhaseAttrServiceI.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeResembleRuleServiceI.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeRuleServiceI.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSerialAlgorithmServiceI.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSynonymServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeTemplatePhaseServiceI.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataInfoServiceI.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataServiceI.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreAttrMappingSeviceI.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineServiceI.java 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOServiceI.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeServiceI.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntAuthorityServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntBaseServiceI.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntInfoServiceI.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java 836 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java 359 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java 1024 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTempMapItemServiceImpl.java 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java 728 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java 382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateMapServiceImpl.java 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateServiceImpl.java 1091 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java 481 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingServiceImpl.java 1111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 636 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java 377 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java 301 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java 685 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSynonymServiceImpl.java 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTemplatePhaseServiceImpl.java 509 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataInfoServiceImpl.java 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataServiceImpl.java 1119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreAttrMappingSeviceImpl.java 531 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 2758 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 4016 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 743 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntAuthorityServiceImpl.java 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntBaseServiceImpl.java 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntInfoServiceImpl.java 1097 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 920 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/tt.xml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/update.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/AttributeMapConfig.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/BackXml.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/DateUtils.java 527 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/EnumVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/HttpUtils.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Json2XmlUtil.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/PatternUtil.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Pro.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsAxis2ClientUtil.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsErpClientUtil.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlData.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlUtil.java 770 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/gennerAttrMapUtil.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/pom.xml 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/DeskApplication.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/DashBoardController.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/LeaveController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/NoticeController.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/entity/ProcessLeave.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/feign/NoticeClient.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/LeaveMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/NoticeMapper.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/ILeaveService.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/INoticeService.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/LeaveServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/NoticeServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/wrapper/NoticeWrapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/LeaveMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/NoticeMapper.xml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/pom.xml 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/OmdApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictBizOmdController.java 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/DictBizClient.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/DictBizMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IDictBizService.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/DictBizServiceImpl.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/DictBizWrapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/DictBizMapper.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/pom.xml 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/SystemApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ApiScopeController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/AuthClientController.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/CombinationController.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DataScopeController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictBizController.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictController.java 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ParamController.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/PostController.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RegionController.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/SearchController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantController.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantPackageController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TopMenuController.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ValueRangeController.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionExcel.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionImporter.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/ApiScopeClient.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DataScopeClient.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictBizClient.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictClient.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ApiScopeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/AuthClientMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/CombinationMapper.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DataScopeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictBizMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictMapper.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ParamMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/PostMapper.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RegionMapper.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMapper.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMenuMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleScopeMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantPackageMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuSettingMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/UserPwdstrategyMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ValueRangeMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IApiScopeService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IAuthClientService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ICombinationService.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDataScopeService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictBizService.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictService.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IParamService.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IPostService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRegionService.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleMenuService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleScopeService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantPackageService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantService.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuSettingService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IUserPwdstrategyService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IValueRangeService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ApiScopeServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/AuthClientServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DataScopeServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictBizServiceImpl.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictServiceImpl.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ParamServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/PostServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RegionServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleScopeServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantPackageServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantServiceImpl.java 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuSettingServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/UserPwdstrategyServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ValueRangeServiceImpl.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/ApiScopeWrapper.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DataScopeWrapper.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictBizWrapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictWrapper.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/PostWrapper.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RegionWrapper.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ApiScopeMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/AuthClientMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/CombinationMapper.xml 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DataScopeMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DeptMapper.xml 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictBizMapper.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictMapper.xml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml 478 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ParamMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/PostMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RegionMapper.xml 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMapper.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMenuMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleScopeMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/StrategyMapper.xml 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantPackageMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuSettingMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/UserPwdstrategyMapper.xml 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ValueRangeMapper.xml 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/Dockerfile 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/pom.xml 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/UserApplication.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/controller/UserController.java 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserExcel.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserImporter.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserClient.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserSearchClient.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserAppMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserDeptMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserMapper.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOauthMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOtherMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserWebMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserDeptService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserOauthService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserSearchService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserService.java 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserDeptServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserOauthServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserSearchServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java 517 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/wrapper/UserWrapper.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-prod.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-test.yml 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserAppMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserDeptMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserMapper.xml 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOauthMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOtherMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserWebMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.lastUpdated 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.lastUpdated 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.lastUpdated 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/_remote.repositories 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.lastUpdated 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.sha1 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeResourceServerConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/JwtTokenStoreConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/SecurityConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeSocialEndpoint.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/endpoint/BladeTokenEndPoint.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladeNoOpPasswordEncoder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/support/BladePasswordEncoderFactories.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-auth/src/main/resources/application.yml
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/src/main/java/org/springblade/common/cache/CacheNames.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/src/main/java/org/springblade/common/config/BladeCommonConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/ErrorHandlerConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/DynamicRouteServiceListener.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayFilter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayPredicate.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/dynamic/GatewayRoute.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalResponseLogFilter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/filter/RequestFilter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/handler/ErrorExceptionHandler.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/props/AuthProperties.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthSecure.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/BasicSecure.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/ResponseProvider.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-gateway/src/main/java/org/springblade/gateway/provider/SignSecure.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/constant/ProcessConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/entity/FlowEntity.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/TaskUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/enums/SmsCodeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/ISmsClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/utils/SmsUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/AttachVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/OssVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/SmsVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/AdminApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/AdminConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/DingTalkConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/config/SecurityConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkNotifier.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/DingTalkService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/dingtalk/MonitorProperties.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-admin/src/main/java/org/springblade/admin/security/InternalAuthorizationManager.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/DevelopApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/CodeController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/DatasourceController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/controller/ModelPrototypeController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/dto/ModelDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/CodeMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/ModelPrototypeMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/ICodeService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IDatasourceService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelPrototypeService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/IModelService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/CodeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/DatasourceServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelPrototypeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/service/impl/ModelServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/FlowApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/FlowClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/FlowBusinessService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/config/FlowableConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/constant/FlowEngineConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowExecution.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowModel.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/mapper/FlowMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/utils/FlowCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/BladeTest.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-flow/src/test/java/org/springblade/flow/test/launch/LauncherTestServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/LogApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogErrorController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogUsualController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/feign/LogClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogApiMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogErrorMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/mapper/LogUsualMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogErrorService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogUsualService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogErrorServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogUsualServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-report/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/ReportApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-report/src/main/java/org/springblade/report/config/BladeReportConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/Dockerfile
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/ResourceApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/MinioOssBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/AliSmsBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/QiniuSmsBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/SmsBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/TencentSmsBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/sms/YunpianSmsBuilder.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeOssConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/config/BladeSmsConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/AttachController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/OssController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/controller/SmsController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/SmsClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/AttachMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IAttachService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/IOssService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/ISmsService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/AttachServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/OssServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/service/impl/SmsServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/OssWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/wrapper/SmsWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-swagger/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/doc/XXL-JOB¹Ù·½Îĵµ.md
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/JobAdminApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/UserController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/LoginService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/i18n/message_en.properties
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/JobApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/config/XxlJobConfig.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/controller/TestController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/blade-xxljob/src/main/java/org/springblade/job/executor/jobhandler/SampleXxlJob.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-ops/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ConfigAttrMappingVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DataResembleVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingLogeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataInfoVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrMappingVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrRangeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingTaskVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/MdmUIInfoVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntAuthorityVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntBaseVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntHeaderVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntInfoVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntParamVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-desk-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/feign/INoticeClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/vo/NoticeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictBizCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/cache/DictCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/constant/DictConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/dto/DictDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/enums/DictEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictBizClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/feign/IDictClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictBizVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/vo/DictVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-omd-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/cache/DictBizCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/entity/DictBizM.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/enums/DictBizEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/feign/IDictBizClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-omd-api/src/main/java/org/springblade/omd/vo/DictBizMVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/ApiScopeCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/cache/DataScopeCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/config/ScopeConfiguration.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IApiScopeClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/feign/IDataScopeClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/ApiScopePermissionHandler.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-scope-api/src/main/java/org/springblade/system/handler/DataScopeModelHandler.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/ParamCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/RegionCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/cache/SysCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/DeptDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/MenuDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/ParamDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/PostDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/dto/RoleMenuDTO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Combination.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Strategy.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/UserPwdstrategy.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ValueRange.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ApiScopeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DataScopeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DeptVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantTreeVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/MenuVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/ParamVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/PostVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RegionVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleMenuVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/UserPwdstrategyVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/cache/UserCache.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/enums/UserEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserSearchClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service-api/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingLogeDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataInfoDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrMappingDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrRangeDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingTaskDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntAuthorityDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntBaseDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntHeaderDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntInfoDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntParamDaoI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationDataFlowTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestMethodEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/sysIntegrationPushTypeEnum.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingLogeDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataInfoDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrMappingDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrRangeDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingTaskDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntAuthorityDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntBaseDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntHeaderDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntInfoDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntParamDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/TaskDuckingDO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreAttrMappingSeviceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmEngineServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmIOServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmProductCodeServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntAuthorityServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntBaseServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntInfoServiceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/UniversalInterfaceI.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreAttrMappingSeviceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmEngineServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmIOServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmProductCodeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntAuthorityServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntBaseServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntInfoServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/UniversalInterfaceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/DashBoardController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/controller/NoticeController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/feign/NoticeClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/LeaveMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/ILeaveService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/INoticeService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/LeaveServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/service/impl/NoticeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/wrapper/NoticeWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/OmdApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/controller/DictBizOmdController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/feign/DictBizClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/mapper/DictBizMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/IDictBizService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/service/impl/DictBizServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-omd/src/main/java/org/springblade/omd/wrapper/DictBizWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/SystemApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ApiScopeController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/AuthClientController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/CombinationController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DataScopeController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictBizController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/PostController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/SearchController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/StrategyController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantPackageController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TopMenuController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/UserPwdstrategyController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/ValueRangeController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionImporter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/ApiScopeClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DataScopeClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictBizClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/DictClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/CombinationMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/StrategyMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserPwdstrategyMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/ValueRangeMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IApiScopeService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IAuthClientService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ICombinationService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDataScopeService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictBizService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IMenuService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IParamService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IPostService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleMenuService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleScopeService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IStrategyService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantPackageService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITopMenuSettingService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IUserPwdstrategyService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IValueRangeService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CombinationServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/StrategyServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/UserPwdstrategyServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ValueRangeServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DeptWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/DictWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/PostWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RegionWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/RoleWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/UserApplication.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserImporter.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserSearchClient.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserDeptService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserOauthService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserSearchService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java
ÎļþÒÑɾ³ý
Source/BladeX/blade-service/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/pom.xml
ÎļþÒÑɾ³ý
Source/BladeX/service-start.sh
ÎļþÒÑɾ³ý
Source/BladeX/service-stop.sh
ÎļþÒÑɾ³ý
Source/UBCS/.editorconfig
Source/UBCS/.gitignore
Source/UBCS/LICENSE
Source/UBCS/README.md
Source/UBCS/doc/docker/README.md
Source/UBCS/doc/mvn/mvnÃüÁî.md
Source/UBCS/doc/nacos/README.md
Source/UBCS/doc/nacos/blade-dev.yaml
Source/UBCS/doc/nacos/blade-prod.yaml
Source/UBCS/doc/nacos/blade-test.yaml
Source/UBCS/doc/nacos/blade.yaml
Source/UBCS/doc/nacos/routes/README.md
Source/UBCS/doc/nacos/routes/blade-gateway-dev.json
Source/UBCS/doc/other/env.md
Source/UBCS/doc/other/http-code.md
Source/UBCS/doc/sql/db/database-info.md
Source/UBCS/doc/sql/dm/bladex-flowable-dameng.dmp
Binary files differ
Source/UBCS/doc/sql/dm/bladex-saber-dameng.dmp
Binary files differ
Source/UBCS/doc/sql/dm/bladex-sword-dameng.dmp
Binary files differ
Source/UBCS/doc/sql/mysql/bladex-flowable-mysql.sql
Source/UBCS/doc/sql/mysql/bladex-saber-mysql.sql
Source/UBCS/doc/sql/mysql/bladex-sword-mysql.sql
Source/UBCS/doc/sql/oracle/bladex-flowable-oracle.sql
Source/UBCS/doc/sql/oracle/bladex-saber-oracle.sql
Source/UBCS/doc/sql/oracle/bladex-sword-oracle.sql
Source/UBCS/doc/sql/postgresql/bladex-flowable-postgresql.sql
Source/UBCS/doc/sql/postgresql/bladex-saber-postgresql.sql
Source/UBCS/doc/sql/postgresql/bladex-sword-postgresql.sql
Source/UBCS/doc/sql/sqlserver/bladex-flowable-sqlserver.sql
Source/UBCS/doc/sql/sqlserver/bladex-saber-sqlserver.sql
Source/UBCS/doc/sql/sqlserver/bladex-sword-sqlserver.sql
Source/UBCS/doc/sql/update/bladex-update-dameng-3.0.0~3.0.1.sql
Source/UBCS/doc/sql/update/bladex-update-mysql-3.0.0~3.0.1.sql
Source/UBCS/doc/sql/update/bladex-update-oracle-3.0.0~3.0.1.sql
Source/UBCS/doc/sql/update/bladex-update-postgresql-3.0.0~3.0.1.sql
Source/UBCS/doc/sql/update/bladex-update-sqlserver-3.0.0~3.0.1.sql
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>
Source/UBCS/script/docker/app/.env
Source/UBCS/script/docker/app/deploy.sh
Source/UBCS/script/docker/app/docker-compose.yml
Source/UBCS/script/docker/app/nacos/init.d/custom.properties
Source/UBCS/script/docker/app/nginx/api/nginx.conf
Source/UBCS/script/docker/app/nginx/web/html/index.html
Source/UBCS/script/docker/app/nginx/web/nginx.conf
Source/UBCS/script/docker/app/prometheus/config/alert_rules.yml
Source/UBCS/script/docker/app/prometheus/config/alertmanager.yml
Source/UBCS/script/docker/app/prometheus/config/dingtalk.yml
Source/UBCS/script/docker/app/prometheus/config/grafana.ini
Source/UBCS/script/docker/app/prometheus/config/prometheus.yml
Source/UBCS/script/docker/app/prometheus/config/wechat.tmpl
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-docker.json
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-jvm.json
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-linux.json
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-mysql.json
Source/UBCS/script/docker/app/prometheus/dashboard/bladex-nacos.json
Source/UBCS/script/docker/elk/README.md
Source/UBCS/script/docker/elk/deploy.sh
Source/UBCS/script/docker/elk/docker-compose.yml
Source/UBCS/script/docker/elk/es-master.yml
Source/UBCS/script/docker/elk/es-slave1.yml
Source/UBCS/script/docker/elk/es-slave2.yml
Source/UBCS/script/docker/elk/filebeat.yml
Source/UBCS/script/docker/elk/kibana.yml
Source/UBCS/script/docker/elk/logstash-filebeat.conf
Source/UBCS/script/docker/elk/logstash.yml
Source/UBCS/script/docker/elk/undeploy.sh
Source/UBCS/script/fatjar/service.cmd
Source/UBCS/script/fatjar/service.sh
Source/UBCS/service-start.sh
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
#服务生成镜像,并运行
start(){
  #先清空target并打包
 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
  #启动工作流flow服务
 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
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
Source/UBCS/ubcs-auth/Dockerfile
Source/UBCS/ubcs-auth/README.md
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>-->
        <!-- è§£å†³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>
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);
    }
}
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) {
        //获取自定义tokenGranter
        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);
        }
    }
    /**
     * é…ç½®å®¢æˆ·ç«¯ä¿¡æ¯
     * æœåŠ¡å¯åŠ¨æ—¶åŠ è½½sql
     * ä½œç”¨ï¼šæŸ¥è¯¢client信息
     */
    @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()");
    }
}
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();
    }
}
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);
    }
}
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");
    }
}
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 = ?";
}
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());
    }
}
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));
        // å°†key和base64返回给前端
        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保存的token
        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");
    }
}
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;
/**
 * è‡ªå®šä¹‰æ‹“展TokenGranter
 *
 * @author Chill
 */
public class BladeTokenGranter {
    /**
     * è‡ªå®šä¹‰tokenGranter
     */
    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);
    }
}
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;
/**
 * éªŒè¯ç TokenGranter
 *
 * @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);
    }
}
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);
    }
}
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 å®¢æˆ·ç«¯id
     */
    @Override
    public ClientDetails loadClientByClientId(String clientId) {
        try {
            return super.loadClientByClientId(clientId);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}
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;
    /**
     * ç¬¬ä¸‰æ–¹è®¤è¯ID
     */
    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;
    }
}
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("当前登录用户的租户Id为:"+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比对后get抛出异常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;
            // æ ¹æ®ä¸åŒç”¨æˆ·ç±»åž‹è°ƒç”¨å¯¹åº”的接口返回数据,用户可自行拓展
            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());
            }
        }
    }
    /**
     * èŽ·å–å®¢æˆ·ç«¯ip,客户端可能经过代理,也可能没经过代理
     * å¦‚开启虚拟机的情况也可能导致获取到的是虚拟机的ip
     * @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)) {
            // å¤šæ¬¡åå‘代理后会有多个ip值,第一个ip才是真实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);
        }
        //如果没取到ip,返回""
        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;
    }
}
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;
    }
}
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() {
    }
}
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));
    }
}
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() {
    }
}
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 = "验证码不正确";
    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 = "该IP地址无访问权限,请配置IP白名单";
    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;
    }
    /**
     * è§£ç 
     */
    @SneakyThrows
    public static String[] extractAndDecodeHeader() {
        String header = WebUtil.getRequest().getHeader(TokenUtil.HEADER_KEY);
        if (header == null || !header.startsWith(TokenUtil.HEADER_PREFIX)) {
            throw new UnapprovedClientAuthenticationException("请求头中无client信息");
        }
        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;
    }
}
Source/UBCS/ubcs-auth/src/main/resources/application-dev.yml
Source/UBCS/ubcs-auth/src/main/resources/application-prod.yml
Source/UBCS/ubcs-auth/src/main/resources/application-test.yml
Source/UBCS/ubcs-auth/src/main/resources/application.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
# åœ¨ä½¿ç”¨Spring默认数据源Hikari的情况下配置以下配置项
spring:
  datasource:
    hikari:
      # è‡ªåŠ¨æäº¤ä»Žæ± ä¸­è¿”å›žçš„è¿žæŽ¥
      auto-commit: true
      # è¿žæŽ¥æ± ä¸­ç»´æŠ¤çš„æœ€å°ç©ºé—²è¿žæŽ¥æ•°
      minimum-idle: 10
      # è¿žæŽ¥æ± ä¸­å…è®¸çš„æœ€å¤§è¿žæŽ¥æ•°ã€‚缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
      maximum-pool-size: 60
      # ç©ºé—²è¿žæŽ¥è¶…时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
      # åªæœ‰ç©ºé—²è¿žæŽ¥æ•°å¤§äºŽæœ€å¤§è¿žæŽ¥æ•°ä¸”空闲时间超过该值,才会被释放
      idle-timeout: 30000
      # è¿žæŽ¥æœ€å¤§å­˜æ´»æ—¶é—´.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
      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
Source/UBCS/ubcs-auth/src/main/resources/static/css/bootstrap.min.css
Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-style.css
Source/UBCS/ubcs-auth/src/main/resources/static/css/iofrm-theme.css
Source/UBCS/ubcs-auth/src/main/resources/static/js/bootstrap.min.js
Source/UBCS/ubcs-auth/src/main/resources/static/js/jquery.min.js
Source/UBCS/ubcs-auth/src/main/resources/static/js/md5.js
Source/UBCS/ubcs-auth/src/main/resources/static/js/popper.min.js
Source/UBCS/ubcs-auth/src/main/resources/templates/confirm.ftl
Source/UBCS/ubcs-auth/src/main/resources/templates/login.ftl
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>
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);
    }
    /**
     * è¿”回租户格式的key
     *
     * @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);
    }
    /**
     * éªŒè¯ç key
     */
    String CAPTCHA_KEY = "blade:auth::blade:captcha:";
    /**
     * ç™»å½•失败key
     */
    String USER_FAIL_KEY = "blade:user::blade:fail:";
}
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 {
}
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";
    /**
     * é¡¶çº§çˆ¶èŠ‚ç‚¹id
     */
    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;
}
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);
    }
    /**
     * åŠ¨æ€èŽ·å–nacos地址
     *
     * @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;
        }
    }
    /**
     * åŠ¨æ€èŽ·å–sentinel地址
     *
     * @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;
        }
    }*/
    /**
     * åŠ¨æ€èŽ·å–seata地址
     *
     * @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;
        }
    }
    /**
     * åŠ¨æ€èŽ·å–zipkin地址
     *
     * @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;
        }
    }
    /**
     * åŠ¨æ€èŽ·å–elk地址
     *
     * @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;
        }
    }
}
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"
    );
}
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");
        // å¼€å¯elk日志
        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));
    }
}
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 {
}
Source/UBCS/ubcs-common/src/main/resources/banner.txt
Source/UBCS/ubcs-gateway/Dockerfile
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>
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);
    }
}
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);
    }
}
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 {
    /**
     * è¿™é‡Œä¸ºæ”¯æŒçš„请求头,如果有自定义的header字段请自己添加
     */
    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);
        };
    }
}
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";
        }
    }
}
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();
        }
    }
}
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<>();
}
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 {
    /**
     * æ–­è¨€å¯¹åº”çš„Name
     */
    private String name;
    /**
     * é…ç½®çš„æ–­è¨€è§„则
     */
    private Map<String, String> args = new LinkedHashMap<>();
}
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 {
    /**
     * è·¯ç”±çš„id
     */
    private String id;
    /**
     * è·¯ç”±æ–­è¨€é›†åˆé…ç½®
     */
    private List<GatewayPredicate> predicates = new ArrayList<>();
    /**
     * è·¯ç”±è¿‡æ»¤å™¨é›†åˆé…ç½®
     */
    private List<GatewayFilter> filters = new ArrayList<>();
    /**
     * è·¯ç”±è§„则转发的目标uri
     */
    private String uri;
    /**
     * è·¯ç”±æ‰§è¡Œçš„顺序
     */
    private int order = 0;
}
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;
    }
}
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;
    }
}
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;
    }
}
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;
    }
}
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();
    }
}
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<>();
}
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/**");
    }
    /**
     * é»˜è®¤æ— éœ€é‰´æƒçš„API
     */
    public static List<String> getDefaultSkipUrl() {
        return DEFAULT_SKIP_URL;
    }
}
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;
}
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;
}
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();
    }
}
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);
    }
    /**
     * æž„建返回的JSON数据格式
     *
     * @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;
    }
}
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;
}
Source/UBCS/ubcs-gateway/src/main/resources/application-dev.yml
Source/UBCS/ubcs-gateway/src/main/resources/bootstrap.yml
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 å¾®æœåŠ¡API集合</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>
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>
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";
    /**
     * åŒæ„ä»£å·
     */
    String PASS_ALIAS = "ok";
    /**
     * åŒæ„é»˜è®¤æ‰¹å¤
     */
    String PASS_COMMENT = "同意";
    /**
     * é©³å›žé»˜è®¤æ‰¹å¤
     */
    String NOT_PASS_COMMENT = "驳回";
    /**
     * åˆ›å»ºäººå˜é‡å
     */
    String TASK_VARIABLE_CREATE_USER = "createUser";
}
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;
    /**
     * æ˜¯å¦é€šè¿‡ä»£å·
     */
    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);
    }
}
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;
    }
}
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;
}
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);
}
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("远程调用失败");
    }
}
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);
    }
}
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();
    }
}
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>
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;
}
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;
}
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;
}
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;
}
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);
}
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("远程调用失败");
    }
}
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();
    }
}
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;
}
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;
}
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;
}
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>
Source/UBCS/ubcs-ops/ubcs-admin/Dockerfile
Source/UBCS/ubcs-ops/ubcs-admin/README.md
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>
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);
    }
}
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 {
}
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);
    }
}
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
    }
}
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>
 * æ³¨æ„ï¼šAbstractStatusChangeNotifier è¿™ä¸ªäº‹ä»¶æœ‰æ¯›ç—…
 * </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 "应用上线(IS UP)";
        } else if (status.isDown()) {
            return "应用宕机(IS DOWN)";
        } else if (status.isOffline()) {
            return "应用掉线(IS OFFLINE)";
        } else if (status.isUnknown()) {
            return "未知状态(UNKNOWN)";
        } else {
            return "异常状态";
        }
    }
}
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());
        }
    }
}
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 = "服务状态通知";
    }
}
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 ä»£è¡¨ä¸º 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);
    }
}
Source/UBCS/ubcs-ops/ubcs-admin/src/main/resources/bootstrap.yml
Source/UBCS/ubcs-ops/ubcs-develop/Dockerfile
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>
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);
    }
}
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 = "代码生成", tags = "代码生成")
//@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));
    }
    /**
     * ä»£ç ç”Ÿæˆ
     */
    @PostMapping("/gen-code")
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "代码生成", 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);
            // å¯åŠ¨ä»£ç ç”Ÿæˆ
            generator.run();
        });
        return R.success("代码生成成功");
    }
}
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);
    }
}
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与datasourceId")
    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);
    }
}
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);
    }
}
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;
/**
 * ä»£ç æ¨¡åž‹DTO
 *
 * @author Chill
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ModelDTO extends Model {
    private static final long serialVersionUID = 1L;
    /**
     * ä»£ç å»ºæ¨¡åŽŸåž‹
     */
    private List<ModelPrototype> prototypes;
}
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;
    /**
     * ä»£ç é£Žæ ¼
     */
    @ApiModelProperty(value = "代码风格")
    private String codeStyle;
    /**
     * åŽç«¯è·¯å¾„
     */
    @ApiModelProperty(value = "后端路径")
    private String apiPath;
    /**
     * å‰ç«¯è·¯å¾„
     */
    @ApiModelProperty(value = "前端路径")
    private String webPath;
    /**
     * æ˜¯å¦å·²åˆ é™¤
     */
    @TableLogic
    @ApiModelProperty(value = "是否已删除")
    private Integer isDeleted;
}
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;
}
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;
}
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;
}
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> {
}
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> {
}
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> {
}
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> {
}
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);
}
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> {
}
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);
}
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> {
}
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);
    }
}
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 {
}
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));
    }
}
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 {
}
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-dev.yml
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-prod.yml
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/application-test.yml
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>
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>
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>
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>
Source/UBCS/ubcs-ops/ubcs-develop/src/main/resources/templates/code.properties
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;
/**
 * ä»£ç ç”Ÿæˆå™¨
 *
 * @author Chill
 */
public class CodeGenerator {
    /**
     * ä»£ç ç”Ÿæˆçš„æ¨¡å—名
     */
    public static String CODE_NAME = "资源管理";
    /**
     * ä»£ç æ‰€åœ¨æœåŠ¡å
     */
    public static String SERVICE_NAME = "blade-develop";
    /**
     * ä»£ç ç”Ÿæˆçš„包名
     */
    public static String PACKAGE_NAME = "org.springblade.develop";
    /**
     * å‰ç«¯ä»£ç ç”Ÿæˆé£Žæ ¼
     */
    public static String CODE_STYLE = DevelopConstant.SABER_NAME;
    /**
     * å‰ç«¯ä»£ç ç”Ÿæˆåœ°å€
     */
    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();
    }
}
Source/UBCS/ubcs-ops/ubcs-develop/src/test/resources/templates/code.properties
Source/UBCS/ubcs-ops/ubcs-flow/Dockerfile
Source/UBCS/ubcs-ops/ubcs-flow/doc/nacos/blade-flow-dev.yaml
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>
        <!--解决不支持的字符集问题-->
        <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>
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);
    }
}
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("删除任务成功");
    }
}
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));
    }
}
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);
}
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();
    }
}
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());
    }
}
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";
}
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);
    }
}
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)));
    }
}
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));
    }
}
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   å¼€å§‹èŠ‚ç‚¹id
     * @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);
    }
}
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;
}
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;
}
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();
        }
    }
}
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);
}
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   å¼€å§‹èŠ‚ç‚¹id
     * @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);
}
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("激活ID为 [{}] çš„æµç¨‹æˆåŠŸ", 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转bpmn json
     *
     * @param xml xml
     * @return json
     */
    private String getBpmnJson(String xml) {
        return BPMN_JSON_CONVERTER.convertToJson(getBpmnModel(xml)).toString();
    }
    /**
     * xml转bpmnModel
     *
     * @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");
        }
    }
}
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]));
        }
    }
}
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-dev.yml
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-prod.yml
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application-test.yml
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/application.yml
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>
Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/processes/LeaveProcess.bpmn20.xml
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("=====数据迁移完毕=====");
    }
}
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");
    }
}
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-dev.yml
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-prod.yml
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application-test.yml
Source/UBCS/ubcs-ops/ubcs-flow/src/test/resources/application.yml
Source/UBCS/ubcs-ops/ubcs-log/Dockerfile
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>
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);
    }
}
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);
    }
}
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);
    }
}
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);
    }
}
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));
    }
}
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> {
}
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> {
}
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> {
}
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> {
}
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> {
}
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> {
}
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 {
}
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 {
}
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 {
}
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-dev.yml
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-prod.yml
Source/UBCS/ubcs-ops/ubcs-log/src/main/resources/application-test.yml
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>
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>
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>
Source/UBCS/ubcs-ops/ubcs-report/Dockerfile
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>
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);
    }
}
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);
    }
}
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-dev.yml
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-prod.yml
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application-test.yml
Source/UBCS/ubcs-ops/ubcs-report/src/main/resources/application.yml
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"]
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>
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);
    }
}
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。ClientConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
        ClientConfiguration conf = new ClientConfiguration();
        // è®¾ç½®OSSClient允许打开的最大HTTP连接数,默认为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);
    }
}
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);
    }
}
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;
                    // è‹¥é‡‡ç”¨é»˜è®¤è®¾ç½®åˆ™å¼€å¯å¤šç§Ÿæˆ·æ¨¡å¼, è‹¥æ˜¯ç”¨æˆ·è‡ªå®šä¹‰oss则不开启
                    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;
        }
    }
}
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);
    }
}
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), è¶…æ—¶, ä»£ç†ç­‰ set æ–¹æ³•, ä½¿ç”¨å¯å‚见源码或者常见问题 Java SDK éƒ¨åˆ†ã€‚
        ClientConfig clientConfig = new ClientConfig(region);
        // è®¾ç½®OSSClient允许打开的最大HTTP连接数,默认为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);
    }
}
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);
    }
}
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);
    }
}
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;
        }
    }
}
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);
    }
}
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);
    }
}
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);
    }
}
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);
    }
}
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)));
    }
}
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));
    }
}
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));
    }
}
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("操作成功");
    }
}
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);
    }
    //========== é€šç”¨çŸ­ä¿¡è‡ªå®šä¹‰å‘送(支持自定义params参数传递, æŽ¨èç”¨äºŽæµ‹è¯•, ä¸æŽ¨èç”¨äºŽç”Ÿäº§çŽ¯å¢ƒ) ==========
    /**
     * å‘送信息
     *
     * @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);
    }
}
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);
    }
}
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);
}
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);
}
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);
}
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);
}
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);
}
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);
}
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));
    }
}
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;
    }
}
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;
    }
}
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;
    }
}
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;
    }
}
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-dev.yml
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-prod.yml
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application-test.yml
Source/UBCS/ubcs-ops/ubcs-resource/src/main/resources/application.yml
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>
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>
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>
Source/UBCS/ubcs-ops/ubcs-swagger/Dockerfile
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>
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);
    }
}
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-dev.yml
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-prod.yml
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application-test.yml
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/application.yml
Source/UBCS/ubcs-ops/ubcs-swagger/src/main/resources/banner.txt
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/Dockerfile
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB¹Ù·½Îĵµ.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是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
### 1.2 ç¤¾åŒºäº¤æµ
- [社区交流](https://www.xuxueli.com/page/community.html)
### 1.3 ç‰¹æ€§
- 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
- 2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
- 3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
- 4、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA;
- 5、注册中心: æ‰§è¡Œå™¨ä¼šå‘¨æœŸæ€§è‡ªåŠ¨æ³¨å†Œä»»åŠ¡, è°ƒåº¦ä¸­å¿ƒå°†ä¼šè‡ªåŠ¨å‘çŽ°æ³¨å†Œçš„ä»»åŠ¡å¹¶è§¦å‘æ‰§è¡Œã€‚åŒæ—¶ï¼Œä¹Ÿæ”¯æŒæ‰‹åŠ¨å½•å…¥æ‰§è¡Œå™¨åœ°å€ï¼›
- 6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
- 7、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;
- 8、故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
- 9、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
- 10、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
- 11、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;
- 12、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;
- 13、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务;
- 14、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
- 15、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。
- 16、任务进度监控:支持实时监控任务进度;
- 17、Rolling实时日志:支持在线查看调度结果,并且支持以Rolling方式实时查看执行器输出的完整的执行日志;
- 18、GLUE:提供Web IDE,支持在线开发任务逻辑代码,动态发布,实时编译生效,省略部署上线的过程。支持30个版本的历史版本回溯。
- 19、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本;
- 20、命令行任务:原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可;
- 21、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, å¤šä¸ªå­ä»»åŠ¡ç”¨é€—å·åˆ†éš”ï¼›
- 22、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, ä¸€æ¬¡ä»»åŠ¡è°ƒåº¦åªä¼šè§¦å‘ä¸€æ¬¡æ‰§è¡Œï¼›
- 23、自定义任务参数:支持在线配置调度任务入参,即时生效;
- 24、调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞;
- 25、数据加密:调度中心和执行器之间的通讯进行数据加密,提升调度信息安全性;
- 26、邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件;
- 27、推送maven中央仓库: å°†ä¼šæŠŠæœ€æ–°ç¨³å®šç‰ˆæŽ¨é€åˆ°maven中央仓库, æ–¹ä¾¿ç”¨æˆ·æŽ¥å…¥å’Œä½¿ç”¨;
- 28、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
- 29、全异步:任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰,理论上支持任意时长任务的运行;
- 30、跨平台:原生提供通用HTTP任务Handler(Bean任务,"HttpJobHandler");业务方只需要提供HTTP链接即可,不限制语言、平台;
- 31、国际化:调度中心支持国际化设置,提供中文、英文两种可选语言,默认为中文;
- 32、容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产品开箱即用;
- 33、线程池隔离:调度线程池进行隔离拆分,慢任务自动降级进入"Slow"线程池,避免耗尽调度线程,提高系统稳定性;
- 34、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色;
- 35、权限控制:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;
### 1.4 å‘展
于2015年中,我在github上创建XXL-JOB项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计……
于2015-11月,XXL-JOB终于RELEASE了第一个大版本V1.0, éšåŽæˆ‘将之发布到OSCHINA,XXL-JOB在OSCHINA上获得了@红薯的热门推荐,同期分别达到了OSCHINA的“热门动弹”排行第一和git.oschina的开源软件月热度排行第一,在此特别感谢红薯,感谢大家的关注和支持。
于2015-12月,我将XXL-JOB发表到我司内部知识库,并且得到内部同事认可。
于2016-01月,我司展开XXL-JOB的内部接入和定制工作,在此感谢袁某和尹某两位同事的贡献,同时也感谢内部其他给与关注与支持的同事。
于2017-05-13,在上海举办的 "[第62期开源中国源创会](https://www.oschina.net/event/2236961)" çš„ "放码过来" çŽ¯èŠ‚ï¼Œæˆ‘ç™»å°å¯¹XXL-JOB做了演讲,台下五百位在场观众反响热烈([图文回顾](https://www.oschina.net/question/2686220_2242120) ï¼‰ã€‚
于2017-10-22,又拍云 Open Talk è”合 Spring Cloud ä¸­å›½ç¤¾åŒºä¸¾åŠžçš„ "[进击的微服务实战派上海站](https://opentalk.upyun.com/303.html)",我登台对XXL-JOB做了演讲,现场观众反响热烈并在会后与XXL-JOB用户热烈讨论交流。
于2017-12-11,XXL-JOB有幸参会《[InfoQ ArchSummit全球架构师峰会](http://bj2017.archsummit.com/)》,并被拍拍贷架构总监"杨波老师"在专题 "[微服务原理、基础架构和开源实践](http://bj2017.archsummit.com/training/2)" ä¸­çŽ°åœºä»‹ç»ã€‚
于2017-12-18,XXL-JOB参与"[2017年度最受欢迎中国开源软件](http://www.oschina.net/project/top_cn_2017?sort=1)"评比,在当时已录入的约九千个国产开源项目中角逐,最终进入了前30强。
于2018-01-15,XXL-JOB参与"[2017码云最火开源项目](https://www.oschina.net/news/92438/2017-mayun-top-50)"评比,在当时已录入的约六千五百个码云项目中角逐,最终进去了前20强。
于2018-04-14,iTechPlus在上海举办的 "[2018互联网开发者大会](http://www.itdks.com/eventlist/detail/2065)",我登台对XXL-JOB做了演讲,现场观众反响热烈并在会后与XXL-JOB用户热烈讨论交流。
于2018-05-27,在上海举办的 "[第75期开源中国源创会](https://www.oschina.net/event/2278742)" çš„ "架构" ä¸»é¢˜ä¸“场,我登台进行“基础架构与中间件图谱”主题演讲,台下上千位在场观众反响热烈([图文回顾](https://www.oschina.net/question/3802184_2280606) ï¼‰ã€‚
于2018-12-05,XXL-JOB参与"[2018年度最受欢迎中国开源软件](https://www.oschina.net/project/top_cn_2018?sort=1)"评比,在当时已录入的一万多个开源项目中角逐,最终排名第19名。
于2019-12-10,XXL-JOB参与"[2019年度最受欢迎中国开源软件](https://www.oschina.net/project/top_cn_2019)"评比,在当时已录入的一万多个开源项目中角逐,最终排名"开发框架和基础组件类"第9名。
> æˆ‘司大众点评目前已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本)。
据最新统计, è‡ª2016-01-21接入至2017-12-01期间,该系统已调度约100万次,表现优异。新接入应用推荐使用最新版本,因为经过数十个版本的更新,系统的任务模型、UI交互模型以及底层调度通讯模型都有了较大的优化和提升,核心功能更加稳定高效。
至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,截止最新统计时间为止,XXL-JOB已接入的公司包括不限于:
    - 1、大众点评【美团点评】
    - 2、山东学而网络科技有限公司;
    - 3、安徽慧通互联科技有限公司;
    - 4、人人聚财金服;
    - 5、上海棠棣信息科技股份有限公司
    - 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、湖南创发科技责任有限公司
    - 81、深圳小安时代互联网金融服务有限公司
    - 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、广州市分领网络科技有限责任公司
    - 115、浙江微能科技有限公司
    - 116、上海馨飞电子商务有限公司
    - 117、上海宝尊电子商务有限公司
    - 118、直客通科技技术有限公司
    - 119、科度科技有限公司
    - 120、上海数慧系统技术有限公司
    - 121、我的医药网
    - 122、多粉平台
    - 123、铁甲二手机
    - 124、上海海新得数据技术有限公司
    - 125、深圳市珍爱网信息技术有限公司【珍爱网】
    - 126、小蜜蜂
    - 127、吉荣数科技
    - 128、上海恺域信息科技有限公司
    - 129、广州荔支网络有限公司【荔枝FM】
    - 130、杭州闪宝科技有限公司
    - 131、北京互联新网科技发展有限公司
    - 132、誉道科技
    - 133、山西兆盛房地产开发有限公司
    - 134、北京蓝睿通达科技有限公司
    - 135、月亮小屋(中国)有限公司【蓝月亮】
    - 136、青岛国瑞信息技术有限公司
    - 137、博雅云计算(北京)有限公司
    - 138、华泰证券香港子公司
    - 139、杭州东方通信软件技术有限公司
    - 140、武汉博晟安全技术股份有限公司
    - 141、深圳市六度人和科技有限公司
    - 142、杭州趣维科技有限公司(小影)
    - 143、宁波单车侠之家科技有限公司【单车侠】
    - 144、丁丁云康信息科技(北京)有限公司
    - 145、云钱袋
    - 146、南京中兴力维
    - 147、上海矽昌通信技术有限公司
    - 148、深圳萨科科技
    - 149、中通服创立科技有限责任公司
    - 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、云知声智能科技股份有限公司
    - 258、南京坦道科技有限公司
    - 259、爱乐优(二手平台)
    - 260、猫眼电影(私有化部署)【猫眼电影】
    - 261、美团大象(私有化部署)【美团大象】
    - 262、作业帮教育科技(北京)有限公司【作业帮】
    - 263、北京小年糕互联网技术有限公司
    - 264、山东矩阵软件工程股份有限公司
    - 265、陕西国驿软件科技有限公司
    - 266、君开信息科技
    - 267、村鸟网络科技有限责任公司
    - 268、云南国际信托有限公司
    - 269、金智教育
    - 270、珠海市筑巢科技有限公司
    - 271、上海百胜软件股份有限公司
    - 272、深圳市科盾科技有限公司
    - 273、哈啰出行【哈啰】
    - 274、途虎养车【途虎】
    - 275、卡思优派人力资源集团
    - 276、南京观为智慧软件科技有限公司
    - 277、杭州城市大脑科技有限公司
    - 278、猿辅导【猿辅导】
    - 279、洛阳健创网络科技有限公司
    - 280、魔力耳朵
    - 281、亿阳信通
    - 282、上海招鲤科技有限公司
    - 283、四川商旅无忧科技服务有限公司
    - 284、UU跑腿
    - 285、北京老虎证券【老虎证券】
    - 286、悠活省吧(北京)网络科技有限公司
    - 287、F5未来商店
    - 288、深圳环阳通信息技术有限公司
    - 289、遠傳電信
    - â€¦â€¦
> æ›´å¤šæŽ¥å…¥çš„公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) ç™»è®°ï¼Œç™»è®°ä»…仅为了产品推广。
欢迎大家的关注和使用,XXL-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 åˆå§‹åŒ–“调度数据库”
请下载项目源码并解压,获取 "调度数据库初始化SQL脚本" å¹¶æ‰§è¡Œå³å¯ã€‚
"调度数据库初始化SQL脚本" ä½ç½®ä¸º:
    /xxl-job/doc/db/tables_xxl_job.sql
调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例;
如果mysql做主从,调度中心集群节点务必强制走主库;
### 2.2 ç¼–译源码
解压源码,按照maven格式将源码导入IDE, ä½¿ç”¨maven进行编译即可,源码结构如下:
    xxl-job-admin:调度中心
    xxl-job-core:公共依赖
    xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
        ï¼šxxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
        ï¼šxxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用;
        ï¼šxxl-job-executor-sample-frameless:无框架版本;
        ï¼šxxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;
        ï¼šxxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;
        ï¼šxxl-job-executor-sample-jboot:jboot版本,通过jboot管理执行器;
### 2.3 é…ç½®éƒ¨ç½²â€œè°ƒåº¦ä¸­å¿ƒâ€
    è°ƒåº¦ä¸­å¿ƒé¡¹ç›®ï¼šxxl-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
#### æ­¥éª¤äºŒï¼šéƒ¨ç½²é¡¹ç›®ï¼š
如果已经正确进行上述配置,可将项目编译打包部署。
调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)
默认登录账号 "admin/123456", ç™»å½•后运行界面如下图所示。
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_6yC0.png "在这里输入图片标题")
至此“调度中心”项目已经部署成功。
#### æ­¥éª¤ä¸‰ï¼šè°ƒåº¦ä¸­å¿ƒé›†ç¾¤ï¼ˆå¯é€‰ï¼‰ï¼š
调度中心支持集群部署,提升调度系统容灾和可用性。
调度中心集群部署时,几点要求和建议:
- DB配置保持一致;
- é›†ç¾¤æœºå™¨æ—¶é’Ÿä¿æŒä¸€è‡´ï¼ˆå•机集群忽视);
- å»ºè®®ï¼šæŽ¨èé€šè¿‡nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回调配置、调用API服务等操作均通过该域名进行。
#### å…¶ä»–:Docker é•œåƒæ–¹å¼æ­å»ºè°ƒåº¦ä¸­å¿ƒï¼š
- ä¸‹è½½é•œåƒ
```
// Docker地址:https://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 ç‰ˆæœ¬ä¸ºä¾‹ï¼Œå¯ç›´æŽ¥ä½¿ç”¨ï¼Œä¹Ÿå¯ä»¥å‚考其并将现有项目改造成执行器)
    ä½œç”¨ï¼šè´Ÿè´£æŽ¥æ”¶â€œè°ƒåº¦ä¸­å¿ƒâ€çš„调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
#### æ­¥éª¤ä¸€ï¼šmaven依赖
确认pom文件中引入了 "xxl-job-core" çš„maven依赖;
#### æ­¥éª¤äºŒï¼šæ‰§è¡Œå™¨é…ç½®
执行器配置,配置文件地址:
    /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
    ### æ‰§è¡Œå™¨AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
    xxl.job.executor.appname=xxl-job-executor-sample
    ### æ‰§è¡Œå™¨IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" å’Œ "调度中心请求并触发任务";
    xxl.job.executor.ip=
    ### æ‰§è¡Œå™¨ç«¯å£å· [选填]:小于等于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;
}
```
#### æ­¥éª¤å››ï¼šéƒ¨ç½²æ‰§è¡Œå™¨é¡¹ç›®ï¼š
如果已经正确进行上述配置,可将执行器项目编译打部署,系统提供多种执行器Sample示例项目,选择其中一个即可,各自的部署方式如下。
    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:同上
至此“执行器”项目已经部署结束。
#### æ­¥éª¤äº”:执行器集群(可选):
执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。
执行器集群部署时,几点要求和建议:
- æ‰§è¡Œå™¨å›žè°ƒåœ°å€ï¼ˆxxl.job.admin.addresses)需要保持一致;执行器根据该配置进行执行器自动注册等操作。
- åŒä¸€ä¸ªæ‰§è¡Œå™¨é›†ç¾¤å†…AppName(xxl.job.executor.appname)需要保持一致;调度中心根据该配置动态发现不同集群的在线执行器列表。
### 2.5 å¼€å‘第一个任务“Hello World”
本示例以新建一个 â€œGLUE模式(Java)” è¿è¡Œæ¨¡å¼çš„任务为例。更多有关任务的详细配置,请查看“章节三:任务详解”。
( â€œGLUE模式(Java)”的执行代码托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)
> å‰æï¼šè¯·ç¡®è®¤â€œè°ƒåº¦ä¸­å¿ƒâ€å’Œâ€œæ‰§è¡Œå™¨â€é¡¹ç›®å·²ç»æˆåŠŸéƒ¨ç½²å¹¶å¯åŠ¨ï¼›
#### æ­¥éª¤ä¸€ï¼šæ–°å»ºä»»åŠ¡ï¼š
登录调度中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_o8HQ.png "在这里输入图片标题")
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAsz.png "在这里输入图片标题")
#### æ­¥éª¤äºŒï¼šâ€œGLUE模式(Java)” ä»»åŠ¡å¼€å‘ï¼š
请点击任务右侧 â€œGLUE” æŒ‰é’®ï¼Œè¿›å…¥ â€œGLUE编辑器开发界面” ï¼Œè§ä¸‹å›¾ã€‚“GLUE模式(Java)” è¿è¡Œæ¨¡å¼çš„任务默认已经初始化了示例任务代码,即打印Hello World。
( â€œGLUE模式(Java)” è¿è¡Œæ¨¡å¼çš„任务实际上是一段继承自IJobHandler的Java类代码,它在执行器项目中运行,可使用@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 "在这里输入图片标题")
在日志控制台,可以Rolling方式实时查看任务在执行器一侧运行输出的日志信息,实时监控任务进度;
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_eYrv.png "在这里输入图片标题")
## ä¸‰ã€ä»»åŠ¡è¯¦è§£
### é…ç½®å±žæ€§è¯¦ç»†è¯´æ˜Žï¼š
    - æ‰§è¡Œå™¨ï¼šä»»åŠ¡çš„ç»‘å®šçš„æ‰§è¡Œå™¨ï¼Œä»»åŠ¡è§¦å‘è°ƒåº¦æ—¶å°†ä¼šè‡ªåŠ¨å‘çŽ°æ³¨å†ŒæˆåŠŸçš„æ‰§è¡Œå™¨, å®žçŽ°ä»»åŠ¡è‡ªåŠ¨å‘çŽ°åŠŸèƒ½; å¦ä¸€æ–¹é¢ä¹Ÿå¯ä»¥æ–¹ä¾¿çš„进行任务分组。每个任务必须绑定一个执行器, å¯åœ¨ "执行器管理" è¿›è¡Œè®¾ç½®;
    - ä»»åŠ¡æè¿°ï¼šä»»åŠ¡çš„æè¿°ä¿¡æ¯ï¼Œä¾¿äºŽä»»åŠ¡ç®¡ç†ï¼›
    - è·¯ç”±ç­–略:当执行器集群部署时,提供丰富的路由策略,包括;
        FIRST(第一个):固定选择第一个机器;
        LAST(最后一个):固定选择最后一个机器;
        ROUND(轮询):;
        RANDOM(随机):随机选择在线的机器;
        CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
        LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
        LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
        FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
        BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
        SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;
    - Cron:触发任务执行的Cron表达式;
    - è¿è¡Œæ¨¡å¼ï¼š
        BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 "JobHandler" å±žæ€§åŒ¹é…æ‰§è¡Œå™¨ä¸­ä»»åŠ¡ï¼›
        GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 "groovy" æºç æ–¹å¼ç»´æŠ¤ï¼Œå®ƒåœ¨æ‰§è¡Œå™¨é¡¹ç›®ä¸­è¿è¡Œï¼Œå¯ä½¿ç”¨@Autowired/@Autowire注入执行器里中的其他服务;
        GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "shell" è„šæœ¬ï¼›
        GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "python" è„šæœ¬ï¼›
        GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "php" è„šæœ¬ï¼›
        GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "nodejs" è„šæœ¬ï¼›
        GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "PowerShell" è„šæœ¬ï¼›
    - JobHandler:运行模式为 "BEAN模式" æ—¶ç”Ÿæ•ˆï¼Œå¯¹åº”执行器中新开发的JobHandler类“@JobHandler”注解自定义的value值;
    - é˜»å¡žå¤„理策略:调度过于密集执行器来不及处理时的处理策略;
        å•机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
        ä¸¢å¼ƒåŽç»­è°ƒåº¦ï¼šè°ƒåº¦è¯·æ±‚进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
        è¦†ç›–之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
    - å­ä»»åŠ¡ï¼šæ¯ä¸ªä»»åŠ¡éƒ½æ‹¥æœ‰ä¸€ä¸ªå”¯ä¸€çš„ä»»åŠ¡ID(任务ID可以从任务列表获取),当本任务执行结束并且执行成功时,将会触发子任务ID所对应的任务的一次主动调度。
    - ä»»åŠ¡è¶…æ—¶æ—¶é—´ï¼šæ”¯æŒè‡ªå®šä¹‰ä»»åŠ¡è¶…æ—¶æ—¶é—´ï¼Œä»»åŠ¡è¿è¡Œè¶…æ—¶å°†ä¼šä¸»åŠ¨ä¸­æ–­ä»»åŠ¡ï¼›
    - å¤±è´¥é‡è¯•次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
    - æŠ¥è­¦é‚®ä»¶ï¼šä»»åŠ¡è°ƒåº¦å¤±è´¥æ—¶é‚®ä»¶é€šçŸ¥çš„é‚®ç®±åœ°å€ï¼Œæ”¯æŒé…ç½®å¤šé‚®ç®±åœ°å€ï¼Œé…ç½®å¤šä¸ªé‚®ç®±åœ°å€æ—¶ç”¨é€—å·åˆ†éš”ï¼›
    - è´Ÿè´£äººï¼šä»»åŠ¡çš„è´Ÿè´£äººï¼›
    - æ‰§è¡Œå‚数:任务执行所需的参数;
### 3.1 BEAN模式(类形式)
基于类的Bean模式开发方式,这是比较原始的一种开发方式。
- ä¼˜ç‚¹ï¼šå…¼å®¹æ€§å¥½ã€ä¸é™åˆ¶é¡¹ç›®çŽ¯å¢ƒï¼Œå³ä½¿æ˜¯æ— æ¡†æž¶é¡¹ç›®ï¼Œå¦‚main方法直接启动的项目也可以提供支持,可以参考示例项目 "xxl-job-executor-sample-frameless";
- ç¼ºç‚¹ï¼šæ¯ä¸ªä»»åŠ¡éœ€è¦å ç”¨ä¸€ä¸ªJava类,比较浪费资源;而且,不支持自动扫描任务注入到执行器容器,需要手动注入。
#### æ­¥éª¤ä¸€ï¼šæ‰§è¡Œå™¨é¡¹ç›®ä¸­ï¼Œå¼€å‘Job类:
    - 1、开发一个继承自"com.xxl.job.core.handler.IJobHandler"的JobHandler类。
    - 2、手动通过如下方式注入到执行器容器。
    ```
    XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
    ```
#### æ­¥éª¤äºŒï¼šè°ƒåº¦ä¸­å¿ƒï¼Œæ–°å»ºè°ƒåº¦ä»»åŠ¡
后续步骤和 "3.2 BEAN模式(方法形式)"一致,可以前往参考。
### 3.2 BEAN模式(方法形式)
基于方法的Bean模式开发方式,这是比较推荐的开发方式。
- ä¼˜ç‚¹ï¼šæ¯ä¸ªä»»åŠ¡åªéœ€è¦å¼€å‘ä¸€ä¸ªæ–¹æ³•ï¼Œæ·»åŠ "@XxlJob"注解即可。更加方便、快速。会自动扫描任务注入到执行器容器。
- ç¼ºç‚¹ï¼šè¦æ±‚Spring容器环境;
>基于方法开发的任务,底层会生成JobHandler代理,和基于类的方式一样,任务也会以JobHandler的形式存在于执行器任务容器中。
#### æ­¥éª¤ä¸€ï¼šæ‰§è¡Œå™¨é¡¹ç›®ä¸­ï¼Œå¼€å‘Job方法:
    - 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"
    - 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
    - 3、执行日志:需要通过 "XxlJobLogger.log" æ‰“印执行日志;
```
// å¯å‚考Sample示例执行器中的 "com.xxl.job.executor.service.jobhandler.SampleXxlJob" ï¼Œå¦‚下:
@XxlJob("demoJobHandler")
public ReturnT<String> execute(String param) {
    XxlJobLogger.log("hello world.");
    return ReturnT.SUCCESS;
}
```
#### æ­¥éª¤äºŒï¼šè°ƒåº¦ä¸­å¿ƒï¼Œæ–°å»ºè°ƒåº¦ä»»åŠ¡
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "BEAN模式",JobHandler属性填写任务注解“@XxlJob”中定义的值;
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_ZAsz.png "在这里输入图片标题")
#### åŽŸç”Ÿå†…ç½®Bean模式任务
为方便用户参考与快速实用,示例执行器内原生提供多个Bean模式任务Handler,可以直接配置实用,如下:
- demoJobHandler:简单示例任务,任务内部模拟耗时任务逻辑,用户可在线体验Rolling Log等功能;
- shardingJobHandler:分片示例任务,任务内部模拟处理分片参数,可参考熟悉分片任务;
- httpJobHandler:通用HTTP任务Handler;业务方只需要提供HTTP链接即可,不限制语言、平台;
- commandJobHandler:通用命令行任务Handler;业务方只需要提供命令行即可;如 â€œpwd”命令;
### 3.3 GLUE模式(Java)
任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。开发流程如下:
#### æ­¥éª¤ä¸€ï¼šè°ƒåº¦ä¸­å¿ƒï¼Œæ–°å»ºè°ƒåº¦ä»»åŠ¡ï¼š
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "GLUE模式(Java)";
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_tJOq.png "在这里输入图片标题")
#### æ­¥éª¤äºŒï¼šå¼€å‘任务代码:
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)。
版本回溯功能(支持30个版本的版本回溯):在GLUE任务的Web IDE界面,选择右上角下拉框“版本回溯”,会列出该GLUE的更新历史,选择相应版本即可显示该版本代码,保存后GLUE代码即回退到对应的历史版本;
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_dNUJ.png "在这里输入图片标题")
### 3.4 GLUE模式(Shell)
#### æ­¥éª¤ä¸€ï¼šè°ƒåº¦ä¸­å¿ƒï¼Œæ–°å»ºè°ƒåº¦ä»»åŠ¡
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "GLUE模式(Shell)";
#### æ­¥éª¤äºŒï¼šå¼€å‘任务代码:
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)。
该模式的任务实际上是一段 "shell" è„šæœ¬ï¼›
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_iUw0.png "在这里输入图片标题")
### 3.4 GLUE模式(Python)
#### æ­¥éª¤ä¸€ï¼šè°ƒåº¦ä¸­å¿ƒï¼Œæ–°å»ºè°ƒåº¦ä»»åŠ¡
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "GLUE模式(Python)";
#### æ­¥éª¤äºŒï¼šå¼€å‘任务代码:
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)。
该模式的任务实际上是一段 "python" è„šæœ¬ï¼›
![输入图片说明](https://www.xuxueli.com/doc/static/xxl-job/images/img_BPLG.png "在这里输入图片标题")
### 3.5 GLUE模式(NodeJS)
#### æ­¥éª¤ä¸€ï¼šè°ƒåº¦ä¸­å¿ƒï¼Œæ–°å»ºè°ƒåº¦ä»»åŠ¡
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "GLUE模式(NodeJS)";
#### æ­¥éª¤äºŒï¼šå¼€å‘任务代码:
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在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:"右侧显示在线的"调度中心"列表, ä»»åŠ¡æ‰§è¡Œç»“æŸåŽ, å°†ä¼šä»¥failover的模式进行回调调度中心通知执行结果, é¿å…å›žè°ƒçš„单点风险;
    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代码
该操作仅针对GLUE任务。
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发。可参考章节 "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 æŸ¥çœ‹æ‰§è¡Œæ—¥å¿—
点击执行日志右侧的 â€œæ‰§è¡Œæ—¥å¿—” æŒ‰é’®ï¼Œå¯è·³è½¬è‡³æ‰§è¡Œæ—¥å¿—界面,可以查看业务代码中打印的完整日志,如下图;
![输入图片说明](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" å¼‚常。因此如果JobHandler内部catch到了该异常并消化掉的话, ä»»åŠ¡ç»ˆæ­¢åŠŸèƒ½å°†ä¸å¯ç”¨ã€‚
因此, å¦‚果遇到上述任务终止不可用的情况, éœ€è¦åœ¨JobHandler中应该针对 "InterruptedException" å¼‚常进行特殊处理 (向上抛出) , æ­£ç¡®é€»è¾‘如下:
```
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:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
    - xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
    - xxl_job_user:系统用户表;
### 5.3 æž¶æž„设计
#### 5.3.1 è®¾è®¡æ€æƒ³
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
#### 5.3.2 ç³»ç»Ÿç»„成
- **调度模块(调度中心)**:
    è´Ÿè´£ç®¡ç†è°ƒåº¦ä¿¡æ¯ï¼ŒæŒ‰ç…§è°ƒåº¦é…ç½®å‘出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
    æ”¯æŒå¯è§†åŒ–、简单且动态的管理调度信息,包括任务新建,更新,删除,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的方式对任务进行管理,从而可以避免上述问题,但是同样存在以下问题:
- é—®é¢˜ä¸€ï¼šè°ƒç”¨API的的方式操作任务,不人性化;
- é—®é¢˜äºŒï¼šéœ€è¦æŒä¹…化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。
- é—®é¢˜ä¸‰ï¼šè°ƒåº¦é€»è¾‘å’ŒQuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务;
- é—®é¢˜å››ï¼šquartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。
XXL-JOB弥补了quartz的上述不足之处。
#### 5.4.2 è‡ªç ”调度模块
XXL-JOB最终选择自研调度组件(早期调度组件基于Quartz);一方面是为了精简系统降低冗余依赖,另一方面是为了提供系统的可控度与稳定性;
XXL-JOB中“调度模块”和“任务模块”完全解耦,调度模块进行任务调度时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。这种调用模型类似RPC调用,调度中心提供调用代理的功能,而执行器提供远程服务的功能。
#### 5.4.3 è°ƒåº¦ä¸­å¿ƒHA(集群)
基于数据库的集群方案,数据库选用Mysql;集群分布式并发环境中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。
#### 5.4.4 è°ƒåº¦çº¿ç¨‹æ± 
调度采用线程池方式实现,避免单线程因阻塞而引起任务调度延迟。
#### 5.4.5 å¹¶è¡Œè°ƒåº¦
XXL-JOB调度模块默认采用并行机制,在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。
XXL-JOB的每个调度任务虽然在调度模块是并行调度执行的,但是任务调度传递到任务模块的“执行器”确实串行执行的,同时支持任务终止。
#### 5.4.6 è¿‡æœŸå¤„理策略
任务调度错过触发时间时的处理策略:
- å¯èƒ½åŽŸå› ï¼šæœåŠ¡é‡å¯ï¼›è°ƒåº¦çº¿ç¨‹è¢«é˜»å¡žï¼Œçº¿ç¨‹è¢«è€—å°½ï¼›ä¸Šæ¬¡è°ƒåº¦æŒç»­é˜»å¡žï¼Œä¸‹æ¬¡è°ƒåº¦è¢«é”™è¿‡ï¼›
- å¤„理策略:
    - è¿‡æœŸè¶…5s:本次忽略,当前时间开始计算下次触发时间
    - è¿‡æœŸ5s内:立即触发一次,当前时间开始计算下次触发时间
#### 5.4.7 æ—¥å¿—回调服务
调度模块的“调度中心”作为Web服务部署时,一方面承担调度中心功能,另一方面也为执行器提供API服务。
调度中心提供的"日志回调服务API服务"代码位置如下:
```
xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
```
“执行器”在接收到任务执行请求后,执行任务,在执行结束之后会将执行结果回调通知“调度中心”:
#### 5.4.8 ä»»åŠ¡HA(Failover)
执行器如若集群部署,调度中心将会感知到在线的所有执行器,如“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 è°ƒåº¦æ—¥å¿—
调度中心每次进行任务调度,都会记录一条任务日志,任务日志主要包括以下三部分内容:
- ä»»åŠ¡ä¿¡æ¯ï¼šåŒ…æ‹¬â€œæ‰§è¡Œå™¨åœ°å€â€ã€â€œJobHandler”和“执行参数”等属性,点击任务ID按钮可查看,根据这些参数,可以精确的定位任务执行的具体机器和任务代码;
- è°ƒåº¦ä¿¡æ¯ï¼šåŒ…括“调度时间”、“调度结果”和“调度日志”等,根据这些参数,可以了解“调度中心”发起调度请求时具体情况。
- æ‰§è¡Œä¿¡æ¯ï¼šåŒ…括“执行时间”、“执行结果”和“执行日志”等,根据这些参数,可以了解在“执行器”端任务执行的具体情况;
调度日志,针对单次调度,属性说明如下:
- æ‰§è¡Œå™¨åœ°å€ï¼šä»»åŠ¡æ‰§è¡Œçš„æœºå™¨åœ°å€ï¼›
- JobHandler:Bean模式表示任务执行的JobHandler名称;
- ä»»åŠ¡å‚æ•°ï¼šä»»åŠ¡æ‰§è¡Œçš„å…¥å‚ï¼›
- è°ƒåº¦æ—¶é—´ï¼šè°ƒåº¦ä¸­å¿ƒï¼Œå‘起调度的时间;
- è°ƒåº¦ç»“果:调度中心,发起调度的结果,SUCCESS或FAIL;
- è°ƒåº¦å¤‡æ³¨ï¼šè°ƒåº¦ä¸­å¿ƒï¼Œå‘起调度的备注信息,如地址心跳检测日志等;
- æ‰§è¡Œæ—¶é—´ï¼šæ‰§è¡Œå™¨ï¼Œä»»åŠ¡æ‰§è¡Œç»“æŸåŽå›žè°ƒçš„æ—¶é—´ï¼›
- æ‰§è¡Œç»“果:执行器,任务执行的结果,SUCCESS或FAIL;
- æ‰§è¡Œå¤‡æ³¨ï¼šæ‰§è¡Œå™¨ï¼Œä»»åŠ¡æ‰§è¡Œçš„å¤‡æ³¨ä¿¡æ¯ï¼Œå¦‚å¼‚å¸¸æ—¥å¿—ç­‰ï¼›
- æ‰§è¡Œæ—¥å¿—:任务执行过程中,业务代码中打印的完整执行日志,见“4.8 æŸ¥çœ‹æ‰§è¡Œæ—¥å¿—”;
#### 5.4.10 ä»»åŠ¡ä¾èµ–
原理:XXL-JOB中每个任务都对应有一个任务ID,同时,每个任务支持设置属性“子任务ID”,因此,通过“任务ID”可以匹配任务依赖关系。
当父任务执行结束并且执行成功时,将会根据“子任务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  å…¨å¼‚步化 & è½»é‡çº§
- å…¨å¼‚步化设计:XXL-JOB系统中业务逻辑在远程执行器执行,触发流程全异步化设计。相比直接在调度中心内部执行业务逻辑,极大的降低了调度线程占用时间;
    - å¼‚步调度:调度中心每次任务触发时仅发送一次调度请求,该调度请求首先推送“异步调度队列”,然后异步推送给远程执行器
    - å¼‚步执行:执行器会将请求存入“异步执行队列”并且立即响应调度中心,异步运行。
- è½»é‡çº§è®¾è®¡ï¼šXXL-JOB调度中心中每个JOB逻辑非常 â€œè½»â€ï¼Œåœ¨å…¨å¼‚步化的基础上,单个JOB一次运行平均耗时基本在 "10ms" ä¹‹å†…(基本为一次请求的网络开销);因此,可以保证使用有限的线程支撑大量的JOB并发运行;
得益于上述两点优化,理论上默认配置下的调度中心,单机能够支撑 5000 ä»»åŠ¡å¹¶å‘è¿è¡Œç¨³å®šè¿è¡Œï¼›
实际场景中,由于调度中心与执行器网络ping延迟不同、DB读写耗时不同、任务调度密集程度不同,会导致任务量上限会上下波动。
如若需要支撑更多的任务量,可以通过 "调大调度线程数" ã€"降低调度中心与执行器ping延迟" å’Œ "提升机器配置" å‡ ç§æ–¹å¼ä¼˜åŒ–。
#### 5.4.12 å‡è¡¡è°ƒåº¦
调度中心在集群部署时会自动进行任务平均分配,触发组件每次获取与线程池数量(调度中心支持自定义调度线程池大小)相关数量的任务,避免大量任务集中在单个调度中心集群节点;
### 5.5 ä»»åŠ¡ "运行模式" å‰–析
#### 5.5.1 "Bean模式" ä»»åŠ¡
开发步骤:可参考 "章节三" ï¼›
原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务类需要加“@JobHandler(value="名称")”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,因为“执行器”在接收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
#### 5.5.2 "GLUE模式(Java)" ä»»åŠ¡
开发步骤:可参考 "章节三" ï¼›
原理:每个 "GLUE模式(Java)" ä»»åŠ¡çš„ä»£ç ï¼Œå®žé™…ä¸Šæ˜¯â€œä¸€ä¸ªç»§æ‰¿è‡ªâ€œIJobHandler”的实现类的类代码”,“执行器”接收到“调度中心”的调度请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
#### 5.5.3 GLUE模式(Shell) + GLUE模式(Python) + GLUE模式(NodeJS)
开发步骤:可参考 "章节三" ï¼›
原理:脚本任务的源码托管在调度中心,脚本逻辑在执行器运行。当触发脚本任务时,执行器会加载脚本源码在执行器机器上生成一份脚本文件,然后通过Java代码调用该脚本;并且实时将脚本输出日志写到任务日志文件中,从而在调度中心可以实时监控脚本运行情况;
目前支持的脚本类型如下:
    - shell脚本:任务运行模式选择为 "GLUE模式(Shell)"时支持 "shell" è„šæœ¬ä»»åŠ¡ï¼›
    - python脚本:任务运行模式选择为 "GLUE模式(Python)"时支持 "python" è„šæœ¬ä»»åŠ¡ï¼›
    - nodejs脚本:务运行模式选择为 "GLUE模式(NodeJS)"时支持 "nodejs" è„šæœ¬ä»»åŠ¡ï¼›
脚本任务通过 Exit Code åˆ¤æ–­ä»»åŠ¡æ‰§è¡Œç»“æžœï¼ŒçŠ¶æ€ç å¯å‚è€ƒç« èŠ‚ "5.15 ä»»åŠ¡æ‰§è¡Œç»“æžœè¯´æ˜Ž";
#### 5.5.4 æ‰§è¡Œå™¨
执行器实际上是一个内嵌的Server,默认端口9999(配置项:xxl.job.executor.port)。
在项目启动时,执行器会通过“@JobHandler”识别Spring容器中“Bean模式任务”,以注解的value属性为key管理起来。
“执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务(注意:Glue代码中注入的Spring服务,必须存在与该“执行器”项目的Spring容器中),然后调用execute方法,执行任务逻辑。
#### 5.5.5 ä»»åŠ¡æ—¥å¿—
XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过 "XxlJobLogger.log" æ‰“印执行日志,“调度中心”查看执行日志时将会加载对应的日志文件。
(历史版本通过重写LOG4J的Appender实现,存在依赖限制,该方式在新版本已经被抛弃)
日志文件存放的位置可在“执行器”配置文件进行自定义,默认目录格式为:/data/applogs/xxl-job/jobhandler/“格式化日期”/“数据库调度日志记录的主键ID.log”。
在JobHandler中开启子线程时,子线程将会将会把日志打印在父线程即JobHandler的执行日志中,方便日志追踪。
### 5.6 é€šè®¯æ¨¡å—剖析
#### 5.6.1 ä¸€æ¬¡å®Œæ•´çš„任务调度通讯流程
    - 1、“调度中心”向“执行器”发送http调度请求: â€œæ‰§è¡Œå™¨â€ä¸­æŽ¥æ”¶è¯·æ±‚的服务,实际上是一台内嵌Server,默认端口9999;
    - 2、“执行器”执行任务逻辑;
    - 3、“执行器”http回调“调度中心”调度结果: â€œè°ƒåº¦ä¸­å¿ƒâ€ä¸­æŽ¥æ”¶å›žè°ƒçš„æœåŠ¡ï¼Œæ˜¯é’ˆå¯¹æ‰§è¡Œå™¨å¼€æ”¾ä¸€å¥—API服务;
#### 5.6.2 é€šè®¯æ•°æ®åР坆
调度中心向执行器发送的调度请求时使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, åœ¨è¿›è¡Œé€šè®¯ä¹‹å‰åº•层会将上述两个对象对象序列化,并进行数据协议以及时间戳检验,从而达到数据加密的功能;
### 5.7 ä»»åŠ¡æ³¨å†Œ, ä»»åŠ¡è‡ªåŠ¨å‘çŽ°
自v1.5版本之后, ä»»åŠ¡å–æ¶ˆäº†"任务执行机器"属性, æ”¹ä¸ºé€šè¿‡ä»»åŠ¡æ³¨å†Œå’Œè‡ªåŠ¨å‘çŽ°çš„æ–¹å¼, åŠ¨æ€èŽ·å–è¿œç¨‹æ‰§è¡Œå™¨åœ°å€å¹¶æ‰§è¡Œã€‚
    AppName: æ¯ä¸ªæ‰§è¡Œå™¨æœºå™¨é›†ç¾¤çš„唯一标示, ä»»åŠ¡æ³¨å†Œä»¥ "执行器" ä¸ºæœ€å°ç²’度进行注册; æ¯ä¸ªä»»åŠ¡é€šè¿‡å…¶ç»‘å®šçš„æ‰§è¡Œå™¨å¯æ„ŸçŸ¥å¯¹åº”çš„æ‰§è¡Œå™¨æœºå™¨åˆ—è¡¨;
    æ³¨å†Œè¡¨: è§"xxl_job_registry"表, "执行器" åœ¨è¿›è¡Œä»»åŠ¡æ³¨å†Œæ—¶å°†ä¼šå‘¨æœŸæ€§ç»´æŠ¤ä¸€æ¡æ³¨å†Œè®°å½•ï¼Œå³æœºå™¨åœ°å€å’ŒAppName的绑定关系; "调度中心" ä»Žè€Œå¯ä»¥åŠ¨æ€æ„ŸçŸ¥æ¯ä¸ªAppName在线的机器列表;
    æ‰§è¡Œå™¨æ³¨å†Œ: ä»»åŠ¡æ³¨å†ŒBeat周期默认30s; æ‰§è¡Œå™¨ä»¥ä¸€å€Beat进行执行器注册, è°ƒåº¦ä¸­å¿ƒä»¥ä¸€å€Beat进行动态任务发现; æ³¨å†Œä¿¡æ¯çš„失效时间为三倍Beat;
    æ‰§è¡Œå™¨æ³¨å†Œæ‘˜é™¤ï¼šæ‰§è¡Œå™¨é”€æ¯æ—¶ï¼Œå°†ä¼šä¸»åŠ¨ä¸ŠæŠ¥è°ƒåº¦ä¸­å¿ƒå¹¶æ‘˜é™¤å¯¹åº”çš„æ‰§è¡Œå™¨æœºå™¨ä¿¡æ¯ï¼Œæé«˜å¿ƒè·³æ³¨å†Œçš„å®žæ—¶æ€§ï¼›
为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;
### 5.8 ä»»åŠ¡æ‰§è¡Œç»“æžœ
自v1.6.2之后,任务执行结果通过 "IJobHandler" çš„返回值 "ReturnT" è¿›è¡Œåˆ¤æ–­ï¼›
当返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" æ—¶è¡¨ç¤ºä»»åŠ¡æ‰§è¡ŒæˆåŠŸï¼Œå¦åˆ™è¡¨ç¤ºä»»åŠ¡æ‰§è¡Œå¤±è´¥ï¼Œè€Œä¸”å¯ä»¥é€šè¿‡ "ReturnT.msg" å›žè°ƒé”™è¯¯ä¿¡æ¯ç»™è°ƒåº¦ä¸­å¿ƒï¼›
从而,在任务逻辑中可以方便的控制任务执行结果;
### 5.9 åˆ†ç‰‡å¹¿æ’­ & åŠ¨æ€åˆ†ç‰‡
执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;
"分片广播" ä»¥æ‰§è¡Œå™¨ä¸ºç»´åº¦è¿›è¡Œåˆ†ç‰‡ï¼Œæ”¯æŒåŠ¨æ€æ‰©å®¹æ‰§è¡Œå™¨é›†ç¾¤ä»Žè€ŒåŠ¨æ€å¢žåŠ åˆ†ç‰‡æ•°é‡ï¼ŒååŒè¿›è¡Œä¸šåŠ¡å¤„ç†ï¼›åœ¨è¿›è¡Œå¤§æ•°æ®é‡ä¸šåŠ¡æ“ä½œæ—¶å¯æ˜¾è‘—æå‡ä»»åŠ¡å¤„ç†èƒ½åŠ›å’Œé€Ÿåº¦ã€‚
"分片广播" å’Œæ™®é€šä»»åŠ¡å¼€å‘æµç¨‹ä¸€è‡´ï¼Œä¸åŒä¹‹å¤„åœ¨äºŽå¯ä»¥å¯ä»¥èŽ·å–åˆ†ç‰‡å‚æ•°ï¼ŒèŽ·å–åˆ†ç‰‡å‚æ•°è¿›è¡Œåˆ†ç‰‡ä¸šåŠ¡å¤„ç†ã€‚
- Java语言任务获取分片参数方式:BEAN、GLUE模式(Java)
```
// å¯å‚考Sample示例执行器中的示例任务"ShardingJobHandler"了解试用
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
```
- è„šæœ¬è¯­è¨€ä»»åŠ¡èŽ·å–åˆ†ç‰‡å‚æ•°æ–¹å¼ï¼šGLUE模式(Shell)、GLUE模式(Python)、GLUE模式(Nodejs)
```
// è„šæœ¬ä»»åŠ¡å…¥å‚å›ºå®šä¸ºä¸‰ä¸ªï¼Œä¾æ¬¡ä¸ºï¼šä»»åŠ¡ä¼ å‚ã€åˆ†ç‰‡åºå·ã€åˆ†ç‰‡æ€»æ•°ã€‚ä»¥Shell模式任务为例,获取分片参数代码如下
echo "分片序号 index = $2"
echo "分片总数 total = $3"
```
分片参数属性说明:
    index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
    total:总分片数,执行器集群的总机器数量;
该特性适用场景如:
- 1、分片任务场景:10个执行器的集群来处理10w条数据,每台机器只需要处理1w条数据,耗时降低10倍;
- 2、广播任务场景:广播执行器机器运行shell脚本、广播集群节点进行缓存更新等
### 5.10 è®¿é—®ä»¤ç‰Œï¼ˆAccessToken)
为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;
调度中心和执行器,可通过配置项 "xxl.job.accessToken" è¿›è¡ŒAccessToken的设置。
调度中心和执行器,如果需要正常通讯,只有两种设置;
- è®¾ç½®ä¸€ï¼šè°ƒåº¦ä¸­å¿ƒå’Œæ‰§è¡Œå™¨ï¼Œå‡ä¸è®¾ç½®AccessToken;关闭安全性校验;
- è®¾ç½®äºŒï¼šè°ƒåº¦ä¸­å¿ƒå’Œæ‰§è¡Œå™¨ï¼Œè®¾ç½®äº†ç›¸åŒçš„AccessToken;
### 5.11 è°ƒåº¦ä¸­å¿ƒAPI服务
调度中心提供了API服务,主要分为两种类型:
#### 5.11.1 æä¾›ç»™æ‰§è¡Œå™¨çš„API服务:
    1、任务结果回调服务;
    2、执行器注册服务;
    3、执行器注册摘除服务;
    4、触发任务单次执行服务,支持任务根据业务事件触发;
API服务位置:com.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服务位置:com.xxl.job.admin.controller.JobInfoController.java
API服务请求参考代码:可参考任务界面操作的ajax请求。任何ajax接口均可配置成为API服务,只需在待启用的API服务上添加 â€œ@PermissionLimit(limit = false)” æ³¨è§£å–消登陆态拦截即可;
### 5.12 æ‰§è¡Œå™¨API服务
执行器提供了API服务,供调度中心选择使用,目前提供的API服务有:
    1、心跳检测:调度中心使用
    2、忙碌检测:调度中心使用
    3、触发任务执行:调度中心使用;本地进行任务开发时,可使用该API服务模拟触发任务;
    4、获取Rolling Log:调度中心使用
    5、终止任务:调度中心使用
API服务位置:com.xxl.job.core.biz.ExecutorBiz
API服务请求参考代码:com.xxl.job.executor.ExecutorBizTest
### 5.13 æ•…障转移 & å¤±è´¥é‡è¯•
一次完整任务流程包括"调度(调度中心) + æ‰§è¡Œï¼ˆæ‰§è¡Œå™¨ï¼‰"两个阶段。
- "故障转移"发生在调度阶段,在执行器集群部署时,如果某一台执行器发生故障,该策略支持自动进行Failover切换到一台正常的执行器机器并且完成调度请求流程。
- "失败重试"发生在"调度 + æ‰§è¡Œ"两个阶段,支持通过自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
### 5.14 æ‰§è¡Œå™¨ç°åº¦ä¸Šçº¿
调度中心与业务解耦,只需部署一次后常年不需要维护。但是,执行器中托管运行着业务作业,作业上线和变更需要重启执行器,尤其是Bean模式任务。
执行器重启可能会中断运行中的任务。但是,XXL-JOB得益于自建执行器与自建注册中心,可以通过灰度上线的方式,避免因重启导致的任务中断的问题。
步骤如下:
- 1、执行器改为手动注册,下线一半机器列表(A组),线上运行另一半机器列表(B组);
- 2、等待A组机器任务运行结束并编译上线;执行器注册地址替换为A组;
- 3、等待B组机器任务运行结束并编译上线;执行器注册地址替换为A组+B组;
操作结束;
### 5.15 ä»»åŠ¡æ‰§è¡Œç»“æžœè¯´æ˜Ž
系统根据以下标准判断任务执行结果,可参考之。
-- | Bean/Glue(Java) | Glue(Shell) ç­‰è„šæœ¬ä»»åŠ¡
--- | --- | ---
成功 | IJobHandler.SUCCESS | 0
失败 | IJobHandler.FAIL | -1(非0状态码)
### 5.16 ä»»åŠ¡è¶…æ—¶æŽ§åˆ¶
支持设置任务超时时间,任务运行超时的情况下,将会主动中断任务;
需要注意的是,任务超时中断时与任务终止机制(可查看“4.9 ç»ˆæ­¢è¿è¡Œä¸­çš„任务”)类似,也是通过 "interrupt" ä¸­æ–­ä»»åŠ¡ï¼Œå› æ­¤ä¸šåŠ¡ä»£ç éœ€è¦å°† "InterruptedException" å¤–抛,否则功能不可用。
### 5.17 è·¨å¹³å° & è·¨è¯­è¨€
跨平台、跨语言主要体现在以下两个方面:
- 1、提供Java、Python、PHP……等十来种任务模式,可参考章节 â€œ5.5 ä»»åŠ¡ "运行模式" â€ï¼›ç†è®ºä¸Šå¯æ‰©å±•任意语言任务模式;
- 2、提供基于HTTP的任务Handler(Bean任务,JobHandler="HttpJobHandler");业务方只需要提供HTTP链接即可,不限制语言、平台;
### 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 å‘½ä»¤è¡Œä»»åŠ¡
原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可;
如任务参数 "pwd" å°†ä¼šæ‰§è¡Œå‘½ä»¤å¹¶è¾“出数据;
### 5.22  æ—¥å¿—自动清理
XXL-JOB日志主要包含如下两部分,均支持日志自动清理,说明如下:
- è°ƒåº¦ä¸­å¿ƒæ—¥å¿—表数据:可借助配置项 "xxl.job.logretentiondays" è®¾ç½®æ—¥å¿—表数据保存天数,过期日志自动清理;详情可查看上文配置说明;
- æ‰§è¡Œå™¨æ—¥å¿—文件数据:可借助配置项 "xxl.job.executor.logretentiondays" è®¾ç½®æ—¥å¿—文件数据保存天数,过期日志自动清理;详情可查看上文配置说明;
## å…­ã€ç‰ˆæœ¬æ›´æ–°æ—¥å¿—
### 6.1 ç‰ˆæœ¬ V1.1.x,新特性[2015-12-05]
**【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 â€œFerrari”,新接入应用推荐使用最新版本】**
- 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
- 2、动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
- 3、服务HA:任务信息持久化到mysql中,Job服务天然支持集群,保证服务HA;
- 4、任务HA:某台Job服务挂掉,任务会平滑分配给其他的某一台存活服务,即使所有服务挂掉,重启时或补偿执行丢失任务;
- 5、一个任务只会在其中一台服务器上执行;
- 6、任务串行执行;
- 7、支持自定义参数;
- 8、支持远程任务执行终止;
### 6.2 ç‰ˆæœ¬ V1.2.x,新特性[2016-01-17]
- 1、支持任务分组;
- 2、支持“本地任务”、“远程任务”;
- 3、底层通讯支持两种方式,Servlet方式 + JETTY方式;
- 4、支持“任务日志”;
- 5、支持“串行执行”,并行执行;
    è¯´æ˜Žï¼šV1.2版本将系统架构按功能拆分为:
        - è°ƒåº¦æ¨¡å—(调度中心):负责管理调度信息,按照调度配置发出调度请求;
        - æ‰§è¡Œæ¨¡å—(执行器):负责接收调度请求并执行任务逻辑;
        - é€šè®¯æ¨¡å—:负责调度模块和任务模块之间的信息通讯;
    ä¼˜ç‚¹ï¼š
        - è§£è€¦ï¼šä»»åŠ¡æ¨¡å—æä¾›ä»»åŠ¡æŽ¥å£ï¼Œè°ƒåº¦æ¨¡å—ç»´æŠ¤è°ƒåº¦ä¿¡æ¯ï¼Œä¸šåŠ¡ç›¸äº’ç‹¬ç«‹ï¼›
        - é«˜æ‰©å±•性;
        - ç¨³å®šæ€§ï¼›
### 6.3 ç‰ˆæœ¬ V1.3.0,新特性[2016-05-19]
- 1、遗弃“本地任务”模式,推荐使用“远程任务”,易于系统解耦,任务对应的JobHandler统称为“执行器”;
- 2、遗弃“servlet”方式底层系统通讯,推荐使用JETTY方式,调度+回调双向通讯,重构通讯逻辑;
- 3、UI交互优化:左侧菜单展开状态优化,菜单项选中状态优化,任务列表打开表格有压缩优化;
- 4、【重要】“执行器”细分为:BEAN、GLUE两种开发模式,简介见下文:
    â€œæ‰§è¡Œå™¨â€ æ¨¡å¼ç®€ä»‹ï¼š
        - BEAN模式执行器:每个执行器都是Spring的一个Bean实例,XXL-JOB通过注解@JobHandler识别和调度执行器;
         -GLUE模式执行器:每个执行器对应一段代码,在线Web编辑和维护,动态编译生效,执行器负责加载GLUE代码和执行;
### 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、调度逻辑进行事务包裹;
- 2、执行器异步回调执行日志;
- 3、【重要】在 â€œè°ƒåº¦ä¸­å¿ƒâ€ æ”¯æŒHA的基础上,扩展执行器的Failover支持,支持配置多执行期地址;
### 6.6 ç‰ˆæœ¬ V1.4.0 æ–°ç‰¹æ€§[2016-07-24]
- 1、任务依赖: é€šè¿‡äº‹ä»¶è§¦å‘方式实现, ä»»åŠ¡æ‰§è¡ŒæˆåŠŸå¹¶å›žè°ƒæ—¶ä¼šä¸»åŠ¨è§¦å‘ä¸€æ¬¡å­ä»»åŠ¡çš„è°ƒåº¦, å¤šä¸ªå­ä»»åŠ¡ç”¨é€—å·åˆ†éš”;
- 2、执行器底层实现代码进行重度重构, ä¼˜åŒ–底层建表脚本;
- 3、执行器中任务线程分组逻辑优化: ä¹‹å‰æ ¹æ®æ‰§è¡Œå™¨JobHandler进行线程分组,当多个任务复用Jobhanlder会导致相互阻塞。现改为根据调度中心任务进行任务线程分组,任务与任务执行相互隔离;
- 4、执行器调度通讯方案优化, é€šè¿‡Hex + HC实现建议RPC通讯协议, ä¼˜åŒ–了通讯参数的维护和解析流程;
- 5、调度中心, æ–°å»º/编辑任务, ç•Œé¢å±žæ€§è°ƒæ•´:
    - 5.1、任务新增/编辑界面中去除 "任务名JobName"属性 ,该属性改为系统自动生成: è¯¥å­—段之前主要用于在 "调度中心" å”¯ä¸€æ ‡ç¤ºä¸€ä¸ªä»»åŠ¡, çŽ°å®žæ„ä¹‰ä¸å¤§, å› æ­¤è®¡åˆ’淡化掉该字段,改为系统生成UUID,从而简化任务新建的操作;
    - 5.2、任务新增/编辑界面中去除 "GLUE模式" å¤é€‰æ¡†ä½ç½®è°ƒæ•´, æ”¹ä¸ºè´´è¿‘"JobHandler"输入框右侧;
    - 5.3、任务新增/编辑界面中去除 "报警阈值" å±žæ€§;
    - 5.4、任务新增/编辑界面中去除 "子任务Key" å±žæ€§, æ¯ä¸ªä»»åŠ¡å…¨å±€ä»»åŠ¡Key可以从任务列表获取, å½“本任务执行结束且成功后, å°†ä¼šæ ¹æ®å­ä»»åŠ¡Key匹配子任务并主动触发一次子任务执行;
- 6、问题修复:
    - 6.1、执行器jetty关闭优化,解决一处可能导致jetty无法关闭的问题;
    - 6.2、执行器任务终止时,执行队列回调优化,解决一处导致任务无法回调的问题;
    - 6.3、调度中心中列表分页参数优化,解决一处因服务器限制post长度而引起的问题;
    - 6.4、执行器Jobhandler注解优化,解决一处因事务代理导致的容器无法加载JobHandler的问题;
    - 6.5、远程调度优化,禁用retry策略,解决一处可能导致重复调用的问题;
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、项目成功推送maven中央仓库, ä¸­å¤®ä»“库地址以及依赖如下:
    ```
    <!-- 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从com.xxl改为com.xuxueli。
- 3、系统版本不在维护在项目跟pom中,各个子模块单独配置版本配置,解决子模块无法单独编译的问题;
- 4、底层RPC通讯,传输数据的字节长度统计规则优化,可节省50%数据传输量;
- 5、IJobHandler取消任务返回值,原通过返回值判断执行状态,逻辑改为:默认任务执行成功,仅在捕获异常时认定任务执行失败。
- 6、系统公共弹框功能,插件化;
- 7、底层表结构,表明统一大写;
- 8、调度中心,异常处理器JSON响应的ContentType修改,修复浏览器不识别的问题;
### 6.8 ç‰ˆæœ¬ V1.4.2 æ–°ç‰¹æ€§[2016-09-29]
- 1、推送新版本 V1.4.2 è‡³ä¸­å¤®ä»“库, å¤§ç‰ˆæœ¬ V1.4 è¿›å…¥ç»´æŠ¤é˜¶æ®µ;
- 2、任务新增时,任务列表偏移问题修复;
- 3、修复一处因bootstrap不支持模态框重叠而导致的样式错乱的问题, åœ¨ä»»åŠ¡ç¼–è¾‘æ—¶ä¼šå‡ºçŽ°è¯¥é—®é¢˜;
- 4、调度超时和Handler匹配不到时,调度状态优化;
- 5、因catch异常,导致任务不可终止的问题,给出解决方案, è§æ–‡æ¡£;
### 6.9 ç‰ˆæœ¬ V1.5.0 ç‰¹æ€§[2016-11-13]
- 1、任务注册: æ‰§è¡Œå™¨ä¼šå‘¨æœŸæ€§è‡ªåŠ¨æ³¨å†Œä»»åŠ¡, è°ƒåº¦ä¸­å¿ƒå°†ä¼šè‡ªåŠ¨å‘çŽ°æ³¨å†Œçš„ä»»åŠ¡å¹¶è§¦å‘æ‰§è¡Œã€‚
- 2、"执行器" æ–°å¢žå‚æ•° "AppName" : æ˜¯æ¯ä¸ªæ‰§è¡Œå™¨é›†ç¾¤çš„唯一标示AppName, å¹¶å‘¨æœŸæ€§ä»¥AppName为对象进行自动注册。
- 3、调度中心新增栏目 "执行器管理" : ç®¡ç†åœ¨çº¿çš„æ‰§è¡Œå™¨, é€šè¿‡å±žæ€§AppName自动发现注册的执行器。只有被管理的执行器才允许被使用;
- 4、"任务组"属性改为"执行器": æ¯ä¸ªä»»åŠ¡éœ€è¦ç»‘å®šæŒ‡å®šçš„æ‰§è¡Œå™¨, è°ƒåº¦åœ°å€é€šè¿‡ç»‘定的执行器获取;
- 5、抛弃"任务机器"属性: é€šè¿‡ä»»åŠ¡ç»‘å®šçš„æ‰§è¡Œå™¨, è‡ªåŠ¨å‘çŽ°æ³¨å†Œçš„è¿œç¨‹æ‰§è¡Œå™¨åœ°å€å¹¶è§¦å‘è°ƒåº¦è¯·æ±‚ã€‚
- 6、"公共依赖"中新增DBGlueLoader,基于原生jdbc实现GLUE源码的加载器,减少第三方依赖(mybatis,spring-orm等);精简和优化执行器测配置(针对GLUE任务),降低上手难度;
- 7、表结构调整,底层重构优化;
- 8、"调度中心"自动注册和发现,failover: è°ƒåº¦ä¸­å¿ƒå‘¨æœŸæ€§è‡ªåŠ¨æ³¨å†Œ, ä»»åŠ¡å›žè°ƒæ—¶å¯ä»¥æ„ŸçŸ¥åœ¨çº¿çš„æ‰€æœ‰è°ƒåº¦ä¸­å¿ƒåœ°å€, é€šè¿‡failover的方式进行任务回调,避免回调单点风险。
### 6.10 ç‰ˆæœ¬ V1.5.1 ç‰¹æ€§[2016-11-13]
- 1、底层代码重构和逻辑优化,POM清理以及CleanCode;
- 2、Servlet/JSP Spec设定为3.0/2.2
- 3、Spring升级至3.2.17.RELEASE版本;
- 4、Jetty升级版本至8.2.0.v20160908;
- 5、已推送V1.5.0和V1.5.1至Maven中央仓库;
### 6.10 ç‰ˆæœ¬ V1.5.2 ç‰¹æ€§[2017-02-28]
- 1、IP工具类获取IP逻辑优化,IP静态缓存;
- 2、执行器、调度中心,均支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
- 3、任务跨天执行时生成多份日志文件的问题修复;
- 4、底层日志底层日志调整,非敏感日志level调整为debug;
- 5、升级数据库连接池c3p0版本;
- 6、执行器log4j配置优化,去除无效属性;
- 7、底层代码重构和逻辑优化以及CleanCode;
- 8、GLUE依赖注入逻辑优化,支持别名注入;
### 6.11 ç‰ˆæœ¬ V1.6.0 ç‰¹æ€§[2017-03-13]
- 1、通讯方案升级,原基于HEX的通讯模型调整为基于HTTP的B-RPC的通讯模型;
- 2、执行器支持手动设置执行地址列表,提供开关切换使用注册地址还是手动设置的地址;
- 3、执行器路由规则:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
- 4、规范线程模型统一,统一线程销毁方案(通过listener或stop方法,容器销毁时销毁线程;Daemon方式有时不太理想);
- 5、规范系统配置数据,通过配置文件统一管理;
- 6、CleanCode,清理无效的历史参数;
- 7、底层扩展数据结构以及相关表结构调整;
- 8、新建任务默认为非运行状态;
- 9、GLUE模式任务实例更新逻辑优化,原根据超时时间更新改为根据版本号更新,源码变动版本号加一;
### 6.12 ç‰ˆæœ¬ V1.6.1 ç‰¹æ€§[2017-03-25]
- 1、Rolling日志;
- 2、WebIDE交互重构;
- 3、通讯增强校验,有效过滤非正常请求;
- 4、权限增强校验,采用动态登录TOKEN(推荐接入内部SSO);
- 5、数据库配置优化,解决乱码问题;
### 6.13 ç‰ˆæœ¬ V1.6.2 ç‰¹æ€§[2017-04-25]
- 1、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
- 2、JobHandler支持设置任务返回值,在任务逻辑中可以方便的控制任务执行结果;
- 3、资源路径包含空格或中文时资源文件无法加载时,无法准确查看异常信息的问题处理。
- 4、路由策越优化:循环和LFU路由策略计数器自增无上限问题和首次路由压力集中在首台机器的问题修复;
### 6.14 ç‰ˆæœ¬ V1.7.0 ç‰¹æ€§[2017-05-02]
- 1、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python和Groovy等类型脚本;
- 2、新增spring-boot类型执行器example项目;
- 3、升级jetty版本至9.2;
- 4、任务运行日志移除log4j组件依赖,改为底层自主实现,从而取消了对日志组件的依赖限制;
- 5、执行器移除GlueLoader依赖,改为推送方式实现,从而GLUE源码加载不再依赖JDBC;
- 6、登录拦截Redirect时获取项目名,解决非根据目录发布时跳转404问题;
### 6.15 ç‰ˆæœ¬ V1.7.1 ç‰¹æ€§[2017-05-08]
- 1、运行日志读写编码统一为UTF-8,解决windows环境下日志乱码问题;
- 2、通讯超时时间限定为10s,避免异常情况下调度线程占用;
- 3、执行器,server启动、销毁和注册逻辑调整;
- 4、JettyServer关闭逻辑优化,修复执行器无法正常关闭导致端口占用和频繁打印c3p0日志的问题;
- 5、JobHandler中开启子线程时,支持子线程输出执行日志并通过Rolling查看。
- 6、任务日志清理功能;
- 7、弹框组件统一替换为layer;
- 8、升级quartz版本至2.3.0;
### 6.16 ç‰ˆæœ¬ V1.7.2 ç‰¹æ€§[2017-05-17]
- 1、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
- 2、失败处理策略;调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;
- 3、通讯时间戳超时时间调整为180s;
- 4、执行器与数据库彻底解耦,但是执行器需要配置调度中心集群地址。调度中心提供API供执行器回调和心跳注册服务,取消调度中心内部jetty,心跳周期调整为30s,心跳失效为三倍心跳;
- 5、执行参数编辑时丢失问题修复;
- 6、新增任务测试Demo,方便在开发时进行任务逻辑测试;
### 6.17 ç‰ˆæœ¬ V1.8.0 ç‰¹æ€§[2017-07-17]
- 1、任务Cron更新逻辑优化,改为rescheduleJob,同时防止cron重复设置;
- 2、API回调服务失败状态码优化,方便问题排查;
- 3、XxlJobLogger的日志多参数支持;
- 4、路由策略新增 "忙碌转移" æ¨¡å¼ï¼šæŒ‰ç…§é¡ºåºä¾æ¬¡è¿›è¡Œç©ºé—²æ£€æµ‹ï¼Œç¬¬ä¸€ä¸ªç©ºé—²æ£€æµ‹æˆåŠŸçš„æœºå™¨é€‰å®šä¸ºç›®æ ‡æ‰§è¡Œå™¨å¹¶å‘èµ·è°ƒåº¦ï¼›
- 5、路由策略代码重构;
- 6、执行器重复注册问题修复;
- 7、任务线程轮空30次后自动销毁,降低低频任务的无效线程消耗。
- 8、执行器任务执行结果批量回调,降低回调频率提升执行器性能;
- 9、springboot版本执行器,取消XML配置,改为类配置方式;
- 10、执行日志,支持根据运行 "状态" ç­›é€‰æ—¥å¿—ï¼›
- 11、调度中心任务注册检测逻辑优化;
### 6.18 ç‰ˆæœ¬ V1.8.1 ç‰¹æ€§[2017-07-30]
- 1、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数处理分片任务;
- 2、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
- 3、执行器JobHandler禁止命名冲突;
- 4、执行器集群地址列表进行自然排序;
- 5、调度中心,DAO层代码精简优化并且新增测试用例覆盖;
- 6、调度中心API服务改为自研RPC形式,统一底层通讯模型;
- 7、新增调度中心API服务测试Demo,方便在调度中心API扩展和测试;
- 8、任务列表页交互优化,更换执行器分组时自动刷新任务列表,新建任务时默认定位在当前执行器位置;
- 9、访问令牌(accessToken):为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;
- 10、springboot版本执行器,升级至1.5.6.RELEASE版本;
- 11、统一maven依赖版本管理;
### 6.19 ç‰ˆæœ¬ V1.8.2 ç‰¹æ€§[2017-09-04]
- 1、项目主页搭建:提供中英文文档:https://www.xuxueli.com/xxl-job
- 2、JFinal执行器Sample示例项目;
- 3、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。
- 4、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
- 5、执行器手动设置IP时将会绑定Host;
- 6、规范项目目录,方便扩展多执行器;
- 7、解决执行器回调URL不支持配置HTTPS时问题;
- 8、执行器回调线程销毁前, æ‰¹é‡å›žè°ƒé˜Ÿåˆ—中数据,防止任务结果丢失;
- 9、调度中心任务监控线程销毁时,批量对失败任务告警,防止告警信息丢失;
- 10、任务日志文件路径时间戳格式化时SimpleDateFormat并发问题解决;
### 6.20 ç‰ˆæœ¬ V1.9.0 ç‰¹æ€§[2017-12-29]
- 1、新增Nutz执行器Sample示例项目;
- 2、新增任务运行模式 "GLUE模式(NodeJS) ",支持NodeJS脚本任务;
- 3、脚本任务Shell、Python和Nodejs等支持获取分片参数;
- 4、失败重试,完整支持:调度中心调度失败且启用"失败重试"策略时,将会自动重试一次;执行器执行失败且回调失败重试状态(新增失败重试状态返回值)时,也将会自动重试一次;
- 5、失败告警策略扩展:默认提供邮件失败告警,可扩展短信等,扩展代码位置为 "JobFailMonitorHelper.failAlarm";
- 6、执行器端口支持自动生成(小于等于0时),避免端口定义冲突;
- 7、调度报表优化,支持时间区间筛选;
- 8、Log组件支持输出异常栈信息,底层实现优化;
- 9、告警邮件样式优化,调整为表格形式,邮件组件调整为commons-email简化邮件操作;
- 10、项目依赖全量升级至较新稳定版本,如spring、jackson等等;
- 11、任务日志,记录发起调度的机器信息;
- 12、交互优化,如登陆注销;
- 13、任务Cron长度扩展支持至128位,支持负责类型Cron设置;
- 14、执行器地址录入交互优化,地址长度扩展支持至512位,支持大规模执行器集群配置;
- 15、任务参数“IJobHandler.execute”入参改为“String params”,增强入参通用性。
- 16、IJobHandler提供init/destroy方法,支持在相应任务线程初始化和销毁时进行附加操作;
- 17、任务注解调整为 â€œ@JobHandler”,与任务抽象接口统一;
- 18、修复任务监控线程被耗时任务阻塞的问题;
- 19、修复任务监控线程无法监控任务触发和执行状态均未0的问题;
- 20、执行器动态代理对象,拦截非业务方法的执行;
- 21、修复JobThread捕获Error错误不更新JobLog的问题;
- 22、修复任务列表界面左侧菜单合并时样式错乱问题;
- 23、调度中心项目日志配置改为xml文件格式;
- 24、Log地址格式兼容,支持非"/"结尾路径配置;
- 25、底层系统日志级别规范调整,清理遗留代码;
- 26、建表SQL优化,支持同步创建制定编码的库和表;
- 27、系统安全性优化,登陆Token写Cookie时进行MD5加密,同时Cookie启用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、修复脚本任务Log文件未正常close的问题;
- 8、项目依赖全量升级至较新稳定版本,如spring、jackson等等;
### 6.22 ç‰ˆæœ¬ V1.9.2 ç‰¹æ€§[2018-10-05]
- 1、任务超时控制:新增任务属性 "任务超时时间",并支持自定义,任务运行超时将会主动中断任务;
- 2、任务失败重试次数:新增任务属性 "失败重试次数",并支持自定义,当任务失败时将会按照预设的失败重试次数主动进行重试;同时收敛废弃其他失败重试策略,如调度失败、执行失败、状态码失败等;
- 3、新增任务运行模式 "GLUE模式(PHP) ",支持php脚本任务;
- 4、新增任务运行模式 "GLUE模式(PowerShell) ",支持PowerShell脚本任务;
- 5、调度全异步处理:任务触发之后,推送到调度队列,多线程并发处理调度请求,提高任务调度速率的同时,避免因网络问题导致quartz调度线程阻塞的问题;
- 6、执行器任务结果落盘优化:执行器回调失败时将任务结果写磁盘,待重启或网络恢复时重试回调任务结果,防止任务执行结果丢失;
- 7、任务日志查询速度大幅提升:百万级别数据量搜索速度提升1000倍;
- 8、调度中心提供API服务,支持通过API服务对任务进行查询、新增、更新、启停等操作;
- 9、底层自研Log组件参数占位符改为"{}",并修复打印有参日志时参数不匹配导致报错的问题;
- 10、任务回调结果优化,支持展示在Rolling log中,方便问题排查;
- 11、底层LocalCache组件兼容性优化,支持jdk9、jdk10及以上版本编译部署;
- 12、告警邮件固定使用 UTF-8 ç¼–码格式,修复由机器编码导致的邮件乱码问题;
- 13、告警邮件中展示失败告警信息;
- 14、告警邮箱支持SSL配置;
- 15、Window机器下File.separator不兼容问题修复;
- 16、脚本任务异常Log输出优化;
- 17、任务线程停止变量修饰符优化;
- 18、脚本任务Log文件流关闭优化;
- 19、任务报表成功、失败和进行中统计问题修复;
- 20、核心依赖Core内部国际化处理;
- 21、默认Quartz线程数调整为50;
- 22、新增左侧菜单"运行报表";
- 23、执行器手动设置IP时取消绑定Host的操作,该IP仅供执行器注册使用;修复指定外网IP时无法绑定执行器Host的问题;
- 24、取消父子任务不可重复的限制,支持循环任务触发等特殊场景;
- 25、任务调度备注中标注任务触发类型,如Cron触发、父任务触发、API触发等等,方便排查调度日志;
- 26、底层日志组件SimpleDateFormat线程安全问题修复;
- 27、执行器通讯线程优化,corePoolSize从256降低至32;
- 28、任务日志表状态字段类型优化;
- 29、GLUE脚本文件自动清理功能,及时清理过期脚本文件;
- 30、执行器注册方式切换优化,切换自动注册时主动同步在线机器,避免执行器为空的问题;
- 31、跨平台:除了提供Java、Python、PHP等十来种任务模式之外,新增提供基于HTTP的任务模式;
- 32、底层RPC序列化协议调整为hessian2;
- 33、修复表字段 â€œt.order”与数据库关键字冲突查询失败的问题,
- 34、任务属性枚举 "任务模式、阻塞策略" å›½é™…化优化;
- 35、分片任务失败重试优化,仅重试当前失败的分片;
- 36、任务触发时支持动态传参,调度中心与API服务均提供提供动态参数功能;
- 37、任务执行日志、调度日志字段类型调整,改为text类型并取消字数限制;
- 38、GLUE任务脚本字段类型调整,改为mediumtext类型,提高GLUE长度上限;
- 39、任务监控线程Log输出优化,运行中任务的监控Log改为debug级别,减少非核心日志量;
- 40、项目依赖全量升级至较新稳定版本,如spring、Jackson、groovy等等;
- 41、docker支持:调度中心提供 Dockerfile æ–¹ä¾¿å¿«é€Ÿæž„建docker镜像;
### 6.23 ç‰ˆæœ¬ V2.0.0 Release Notes[2018-11-04]
- 1、调度中心迁移到 springboot;
- 2、底层通讯组件迁移至 xxl-rpc;
- 3、容器化:提供官方docker镜像,并实时更新推送dockerhub(docker pull xuxueli/xxl-job-admin),进一步实现产品开箱即用;
- 4、新增无框架执行器Sample示例项目 "xxl-job-executor-sample-frameless"。不依赖第三方框架,只需main方法即可启动运行执行器;
- 5、命令行任务:原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可;
- 6、任务状态优化,仅运行状态"NORMAL"任务关联至quartz,降低quartz底层数据存储与调度压力;
- 7、任务状态规范:新增任务默认停止状态,任务更新时保持任务状态不变;
- 8、IP获取逻辑优化,优先遍历网卡来获取可用IP;
- 9、任务新增的API服务接口返回任务ID,方便调用方实用;
- 10、组件化优化,移除对 spring çš„依赖:非spring应用选用 "XxlJobExecutor" ã€spring应用选用 "XxlJobSpringExecutor" ä½œä¸ºæ‰§è¡Œå™¨ç»„ä»¶ï¼›
- 11、任务RollingLog展示逻辑优化,修复超时任务无法查看的问题;
- 12、多项UI组件升级到最新版本,如:CodeMirror、Echarts、Jquery ç­‰ï¼›
- 13、项目依赖升级 groovy è‡³è¾ƒæ–°ç¨³å®šç‰ˆæœ¬ï¼›pom清理;
- 14、子任务失败重试重试逻辑优化,子任务失败时将会按照其预设的失败重试次数主动进行重试
### 6.23 ç‰ˆæœ¬ v2.0.1 Release Notes[2018-11-09]
- 1、左侧菜单折叠动画问题修复;
- 2、调度报表日期分布图默认值统一;
- 3、freemarker对数字默认加千分位问题修复,解决日志ID被分隔导致查看日志失败问题;
- 4、底层通讯组件升级,修复通讯异常时无效等待的问题;
- 5、执行器启动之后jetty停止的问题修复;
### 6.24 ç‰ˆæœ¬ v2.0.2 Release Notes[2019-04-20]
- 1、底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为"NETTY_HTTP"方案,执行器内嵌netty-http-server提供服务,调度中心复用容器端口提供服务;
- 2、任务告警逻辑调整,改为通过扫描失败日志方式触发。一方面精确扫描失败任务,降低扫描范围;另一方面取消内存队列,降低线程内存消耗;
- 3、Quartz触发线程池废弃并替换为 "XxlJobThreadPool",降低线程切换、内存占用带来的消耗,提高调度性能;
- 4、调度线程池隔离,拆分为"Fast"和"Slow"两个线程池,1分钟窗口期内任务耗时达500ms超过10次,该窗口期内判定为慢任务,慢任务自动降级进入"Slow"线程池,避免耗尽调度线程,提高系统稳定性;
- 5、执行器热部署时JobHandler重新初始化,修复由此导致的 "jobhandler naming conflicts." é—®é¢˜ï¼›
- 6、新增Class的加载缓存,解决频繁加载Class会使jvm的方法区空间不足导致OOM的问题;
- 7、任务支持更换绑定执行器,方便任务分组转移和管理;
- 8、调度中心告警邮件发送组件改为 â€œspring-boot-starter-mail”;
- 9、记住密码功能优化,选中时永久记住;非选中时关闭浏览器即登出;
- 10、项目依赖升级至较新稳定版本,如quartz、spring、jackson、groovy、xxl-rpc等等;
- 11、精简项目,取消第三方依赖,如 commons-collections4、commons-lang3 ;
- 12、执行器回调日志落盘方案复用RPC序列化方案,并移除Jackson依赖;
- 13、底层Log调优,应用正常终止取消异常栈信息打印;
- 14、交互优化,尽量避免新开页面窗口;仅WebIDE支持新开页,并提供窗口快速关闭按钮;任务启、停、删除、触发等轻操作提示改为toast方式,
- 15、任务暂停、删除优化,避免quartz delete不完整导致任务脏数据;
- 16、任务回调、心跳注册成功日志优化,非核心常规日志调整为debug级别,降低冗余日志输出;
- 17、调整首页报表默认区间为本周,避免日志量太大查询缓慢;
- 18、LRU路由更新不及时问题修复;
- 19、任务失败告警邮件发送逻辑优化;
- 20、调度日志排序逻辑调整为按照调度时间倒序,兼容TIDB等主键不连续日志存储组件;
- 21、执行器优雅停机优化;
- 22、连接池配置优化,增强连接有效性验证;
- 23、JobHandler#msg长度限制,修复异常情况下日志超长导致内存溢出的问题;
- 24、升级xxl-rpc至较新版本,修复springboot 2.x版本兼容性问题;
### 6.25 ç‰ˆæœ¬ v2.1.0 Release Notes[2019-07-07]
- 1、自研调度组件,移除quartz依赖:一方面是为了精简系统降低冗余依赖,另一方面是为了提供系统的可控度与稳定性;
    - è§¦å‘:单节点周期性触发,运行事件如delayqueue;
    - è°ƒåº¦ï¼šé›†ç¾¤ç«žäº‰ï¼Œè´Ÿè½½æ–¹å¼ååŒå¤„理,锁竞争-更新触发信息-推送时间轮-锁释放-锁竞争;
- 2、底层表结构重构:移除11å¼ quartz相关表,并对现有表结构优化梳理;
- 3、任务日志主键调整为long数据类型,防止海量日志情况下数据溢出;
- 4、底层线程模型重构:移除Quartz线程池,降低系统线程与内存开销;
- 5、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色;
- 6、权限管理:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;
- 7、调度线程池参数调优;
- 8、注册表索引优化,缓解锁表问题;
- 9、新增Jboot执行器Sample示例项目;
- 10、任务列表优化,支持根据 "任务状态"、"负责人" å±žæ€§ç­›é€‰ä»»åŠ¡ï¼›
- 11、任务日志列表交互优化,操作按钮合并为分割按钮;
- 12、项目依赖升级至较新稳定版本,如spring、springboot、groovy、xxl-rpc等等;并清理冗余POM;
- 13、升级xxl-rpc至较新版本,修复代理服务初始化时远程服务不可用导致长连冗余创建的问题;
- 14、首页调度报表的日期排序在TIDB下乱序问题修复;
- 15、调度中心与执行器双向通讯超时时间调整为3s;
- 16、调度组件销毁流程优化,先停止调度线程,然后等待时间轮内存量任务处理完成,最终销毁时间轮线程;
- 17、执行器回调线程优化,回调地址为空时销毁问题修复;
- 18、HttpJobHandler优化,响应数据指定UTF-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、 è°ƒåº¦ä¸­å¿ƒæ–°å¢žåº”用健康检查功能,借助“spring-boot-starter-actuator”,相对地址 â€œ/actuator/health”;
- 6、 DB脚本默认编码改为utf8mb4,修复字符乱码问题(建议Mysql版本5.7+);
- 7、 è°ƒåº¦ä¸­å¿ƒä»»åŠ¡å¹³å‡åˆ†é…ï¼Œè§¦å‘ç»„ä»¶æ¯æ¬¡èŽ·å–ä¸Žçº¿ç¨‹æ± æ•°é‡ç›¸å…³æ•°é‡çš„ä»»åŠ¡ï¼Œé¿å…å¤§é‡ä»»åŠ¡é›†ä¸­åœ¨å•ä¸ªè°ƒåº¦ä¸­å¿ƒé›†ç¾¤èŠ‚ç‚¹ï¼›
- 8、 ä»»åŠ¡è§¦å‘ç»„ä»¶ä¼˜åŒ–ï¼Œé¢„åŠ è½½é¢‘çŽ‡æ­£å¸¸1s一次,当预加载轮空时主动休眠一个加载周期,动态降低加载频率从而降低DB压力;
- 9、 è°ƒåº¦ç»„件优化:针对永远不会触发的Cron禁止配置和启动;任务Cron最后一次触发后再也不会触发时,比如一次性任务,主动停止相关任务;
- 10、DB重连优化,修复DB宕机重连后任务调度停止的问题,重连后自动加入调度集群触发任务调度;
- 11、注册监控线程优化,降低死锁几率;
- 12、调度中心日志删除优化,改为分页获取ID并根据ID删除的方式,避免批量删除海量日志导致死锁问题;
- 13、任务重试时参数丢失的问题修复;
- 14、调度中心移除SQL中的 "now()" å‡½æ•°ï¼›é›†ç¾¤éƒ¨ç½²æ—¶ä¸å†ä¾èµ–DB时钟,仅需要保证调度中心应用节点时钟一致即可;
- 15、任务触发组件加载顺序调整,避免小概率情况下组件随机加载顺序导致的I18N的NPE问题;
- 16、JobThread自销毁优化,避免并发触发导致triggerQueue中任务丢失问题;
- 17、调度中心密码限制18位,修复修改密码超过18位无法登陆的问题;
- 18、任务告警组件分页参数无效问题修复;
- 19、升级xxl-rpc版本:服务端线程优化,降低线程内存开销;IpUtil优化:增加连通性校,过滤明确非法的网卡;
- 20、调度中心回调API服务改为restful方式;
- 21、UI优化,任务列表和日志列表数据表格宽度比例调整,避免数据换行提升体验;
- 22、登录界面取消默认填写的登录账号密码;
- 23、执行器表属性调整,"顺序" å±žæ€§è°ƒæ•´ä¸ºæ•´åž‹ï¼Œè§£å†³æ‰§è¡Œå™¨æ•°æ®è¾ƒå¤šæ—¶æ— æ³•正确排序的问题;
- 24、任务列表交互优化,支持查看任务所属执行器的注册节点;
- 25、项目依赖升级至较新稳定版本,如spring、spring-boot、mybatis、slf4j、groovy等等;
### 6.27 ç‰ˆæœ¬ v2.1.2 Release Notes[2019-12-12]
- 1、方法任务支持:由原来基于JobHandler类任务开发方式,优化为支持基于方法的任务开发方式;因此,可以支持单个类中开发多个任务方法,进行类复用
```
@XxlJob("demoJobHandler")
public ReturnT<String> execute(String param) {
    XxlJobLogger.log("hello world");
    return ReturnT.SUCCESS;
}
```
- 2、移除commons-exec,采用原生方式实现,降低第三方依赖;
- 3、执行器回调乱码问题修复;
- 4、调度中心dispatcher servlet加载顺序优化;
- 5、执行器回调地址https兼容支持;
- 6、多个项目依赖升级至较新稳定版本;
- æ³¨æ„ï¼šæœ€æ–°ç‰ˆæœ¬ "XxlJobSpringExecutor" é€»è¾‘有调整,历史项目中该组件的配置方式请参考Sample示例项目进行调整,尤其注意需要移除组件的init和destroy方法;
### TODO LIST
- 1、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定;
- 2、任务单机多线程:提升任务单机并行处理能力;
- 3、调度任务优先级;
- 4、多数据库支持,在重写并移除Quartz的基础上,DAO层通过JPA实现,不限制数据库类型;
- 5、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件;
- 6、任务自动注册:Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;待考虑,因为任务自动注册将会导致任务难以管理控制;
- 7、API事件触发类型任务(更类似MQ消息)支持"动态传参、延时消费";该类型任务不走调度组件,单独建立MQ消息表,调度中心竞争触发;待定,该功能与 XXL-MQ å†²çªï¼Œè¯¥åœºæ™¯å»ºè®®ç”¨åŽè€…ï¼›
- 8、调度线程池改为协程方式实现,大幅降低系统内存消耗;
- 9、任务、执行器数据全量本地缓存;新增消息表广播通知;
- 10、忙碌转移优化,全部机器忙碌时不再直接失败;
- 11、失败重试间隔;
- 12、SimpleTrigger:除Cron外,支持设置固定时间间隔触发;
- 13、调度日志列表加上执行时长列,并支持排序;
- 14、DAG流程任务:替换子任务,支持参数传递:配置并列的"a-b、b-c"路径列表,构成串行、并行、dag任务流程,"dagre-d3"绘图;任务依赖,流程图,子任务+会签任务,各节点日志;支持根据成功、失败选择分支;
- 15、日期过滤:支持多个时间段排除;
- 16、告警邮件内容,支持自定义模板配置;
- 17、暂停状态,支持Cron ä¸ºç©ºï¼›
- 18、新增任务运行模式 "GLUE模式(GO) ",支持GO任务;
- 19、注册中心优化,实时性注册发现:心跳注册间隔10s,refresh失败则首次注册并立即更新注册信息,心跳类似;30s过期销毁;
- 20、提供执行器Docker镜像;
- 21、脚本任务,支持数据参数,新版本仅支持单参数不支持需要兼容;
- 22、GLUE æ¨¡å¼ Web Ide ç‰ˆæœ¬å¯¹æ¯”功能;
- 23、批量调度:调度请求入queue,调度线程批量获取调度请求并发起远程调度;提高线程效率;
- 24、多语言执行器:约定跨语言通讯方案,以及通讯接口;
- 25、移除commons-exec,采用原生实现;
- 26、调度中心JDK版本调整为JDK8,从而升级至最新版本SpringBoot;
- 27、执行器服务端口与注册端口分离,支持docker动态随机端口;
- 28、执行器端口复用,复用容器端口提供通讯服务;
- 29、自定义失败重试时间间隔;
- 30、分片任务全部成功后触发子任务;
- 31、任务复制功能;点击复制是弹出新建任务弹框,并初始化被复制任务信息;
- 32、AccessToken按照执行器维度设置;控制调度、回调;
- 33、任务执行一次的时候指定IP;
- 34、通讯调整;双向HTTP,回调和其他API自定义AccessToken,Restful,执行器复用容器端口;
- 35、父子任务参数传递;流程任务等,透传动态参数;
- 36、新增执行器描述、任务描述属性;
## ä¸ƒã€å…¶ä»–
### 7.1 é¡¹ç›®è´¡çŒ®
欢迎参与项目贡献!比如提交PR修复一个bug,或者新建 [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 )
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/XXL-JOB¼Ü¹¹Í¼.pptx
Binary files differ
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/db/tables_xxl_job.sql
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/doc/nacos/blade-xxljob-admin-dev.yaml
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:mybatis + mybatis-spring + tomcat-jdbc(default) -->
        <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>
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);
    }
}
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));
    }
}
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 ----------------------
}
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;
    }
}
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);
    }
}
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);
    }
}
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;
    }
}
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;
    }
}
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;
}
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);
    }
}
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);
    }
}
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);
    }
}
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;
        }
    }
}
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;
    }
}
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;
}
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);
    }
}
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;
    }
}
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;        // æ‰§è¡Œå™¨ä¸»é”®ID
    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;        // å­ä»»åŠ¡ID,多个逗号分隔
    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;
    }
}
在上述文件截断后对比
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLog.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogGlue.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobLogReport.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobRegistry.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/model/XxlJobUser.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/RemoteHttpJobBean.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobDynamicScheduler.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/old/XxlJobThreadPool.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/ExecutorRouter.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/scheduler/XxlJobScheduler.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobFailMonitorHelper.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobLogReportHelper.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobScheduleHelper.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/thread/JobTriggerPoolHelper.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/TriggerTypeEnum.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/trigger/XxlJobTrigger.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/CookieUtil.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/FtlUtil.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/I18nUtil.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/JacksonUtil.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/core/util/LocalCacheUtil.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobGroupDao.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobInfoDao.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogDao.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogGlueDao.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobLogReportDao.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobRegistryDao.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/dao/XxlJobUserDao.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/LoginService.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/XxlJobService.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/AdminBizImpl.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/service/impl/XxlJobServiceImpl.java Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-dev.yml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-prod.yml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application-test.yml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/application.yml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message.properties Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/i18n/message_en.properties Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/logback.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.css.map Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/favicon.ico Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/common.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/index.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobcode.index.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobgroup.index.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/jobinfo.index.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.detail.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/joblog.index.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/login.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/js/user.index.1.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/layer.js Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/icon.png Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/layer.css Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.exception.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/common/common.macro.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/help.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/index.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobcode/jobcode.index.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.detail.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/joblog/joblog.index.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/login.ftl Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/resources/templates/user/user.index.ftl Source/UBCS/ubcs-ops/ubcs-xxljob/Dockerfile Source/UBCS/ubcs-ops/ubcs-xxljob/pom.xml Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/config/XxlJobConfig.java Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/controller/TestController.java Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/jobhandler/SampleXxlJob.java Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/application.yml Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/resources/logback.xml Source/UBCS/ubcs-plugin-api/README.md Source/UBCS/ubcs-plugin-api/pom.xml Source/UBCS/ubcs-plugin/README.md Source/UBCS/ubcs-plugin/pom.xml Source/UBCS/ubcs-service-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeClassifyFullInfoBO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeButtonDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyProcessTempDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTempMapItemDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateMapDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCompPreviewDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeDeleteBatchDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeExportAttrDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeImprotDataDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeKeyAttrRepeatRuleDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderSecDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodePhaseAttrDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeResembleRuleDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeRuleDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeSynonymDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingLogeDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreApplyDataInfoDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrMappingDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingPreAttrRangeDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingTaskDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntAuthorityDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntBaseDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntHeaderDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoBseDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntInfoDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/SysIntParamDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/UpdateSysInfoStatusDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/JsonRootDataDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/classfy.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/data.xml Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/data.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/result.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultJsonDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeButtonVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyAttributeVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTempMapItemVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateMapVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImProtRusultVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotParmaDatVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotResembleVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotSaveDatVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodePhaseAttrVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeResembleRuleVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSynonymVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ColumnVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/ConfigAttrMappingVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DataResembleVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingLogeVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataInfoVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreApplyDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrMappingVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingPreAttrRangeVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingTaskVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntAuthorityVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntBaseVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntHeaderVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntInfoVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SysIntParamVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ApplyDatasVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ClassfysVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/InterParameterVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/ProppertyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/RootDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/SectionsVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/apply/UserVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataAttributeVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/DataObjectVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/GeneralMappingUtil.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryClsfDO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/LibraryDO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/RowDatas.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/appcode.xml Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/clsfAttrMap.xml Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/tt.xml Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxx.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/attrmap/xxxxxxxxx.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ClassifyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/LibraryVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryClassifyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryData.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/QueryLibraryVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultClassifyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/ResultData.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/classify.xml Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/classify/xxx.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/CondtionsVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataCondtionsVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/DataObjectVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/PropertyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/ResultVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/result.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/data/xx.xml Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultClassfysVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/JSONResultSystemVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/json/tt.json Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultClassfyVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultDataVO.java Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/universalInter/result/xml/XMLResultSystemVO.java Source/UBCS/ubcs-service-api/ubcs-desk-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/entity/Notice.java Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/feign/INoticeClient.java Source/UBCS/ubcs-service-api/ubcs-desk-api/src/main/java/com/vci/ubcs/desk/vo/NoticeVO.java Source/UBCS/ubcs-service-api/ubcs-dict-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictBizCache.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/cache/DictCache.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/constant/DictConstant.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/dto/DictDTO.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/Dict.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/entity/DictBiz.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictBizEnum.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/enums/DictEnum.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClientFallback.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClient.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictClientFallback.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictBizVO.java Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/vo/DictVO.java Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/DictBizCache.java Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/DictBizM.java Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/DictBizEnum.java Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClient.java Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictBizClientFallback.java Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/DictBizMVO.java Source/UBCS/ubcs-service-api/ubcs-scope-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/ApiScopeCache.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/cache/DataScopeCache.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/config/ScopeConfiguration.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClient.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IApiScopeClientFallback.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClient.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/feign/IDataScopeClientFallback.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/ApiScopePermissionHandler.java Source/UBCS/ubcs-service-api/ubcs-scope-api/src/main/java/com/vci/ubcs/system/handler/DataScopeModelHandler.java Source/UBCS/ubcs-service-api/ubcs-system-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/ParamCache.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/RegionCache.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/SysCache.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/DeptDTO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/MenuDTO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/ParamDTO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/PostDTO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleDTO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/dto/RoleMenuDTO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ApiScope.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/AuthClient.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Combination.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/DataScope.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Dept.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Menu.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Param.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Post.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Region.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Role.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleMenu.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/RoleScope.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Strategy.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/Tenant.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TenantPackage.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenu.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/TopMenuSetting.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/UserPwdstrategy.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ValueRange.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ApiScopeVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/CheckedTreeVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DataScopeVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/DeptVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantTreeVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/GrantVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/MenuVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ParamVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/PostVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RegionVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleMenuVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/RoleVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/TenantVO.java Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/UserPwdstrategyVO.java Source/UBCS/ubcs-service-api/ubcs-user-api/pom.xml Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/cache/UserCache.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/User.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserApp.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserDept.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserInfo.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOauth.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserOther.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/entity/UserWeb.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/enums/UserEnum.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserClient.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/feign/IUserSearchClient.java Source/UBCS/ubcs-service-api/ubcs-user-api/src/main/java/com/vci/ubcs/system/user/vo/UserVO.java Source/UBCS/ubcs-service/pom.xml Source/UBCS/ubcs-service/ubcs-code/pom.xml Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingClassSyncScheduling.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingDataSyncScheduling.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/DockingScheduling.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMap.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmIntegrationMapMethod.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmDuckingConstant.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEnumIdConstant.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLifeCycleConstant.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmLinkTypeConstant.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySyncController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTempMapItemController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateMapController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeDuckingController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatRuleController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeAllCodeDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeBasicSecDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeButtonDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyProcessTempDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTempMapItemDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateAttrDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateButtonDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyTemplateMapDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeClassifyValueDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeFixedValueDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeKeyAttrRepeatRuleDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodePhaseAttrDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeResembleRuleDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeRuleDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSerialValueDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeSynonymDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/CodeTemplatePhaseDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingDataDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingLogeDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreApplyDataInfoDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrMappingDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingPreAttrRangeDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/DockingTaskDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntAuthorityDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntBaseDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntHeaderDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntInfoDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/SysIntParamDaoI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeAllCodeDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeBasicSecDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeButtonDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyProcessTempDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeClassifyValueDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeFixedValueDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodePhaseAttrDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeResembleRuleDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeRuleDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSerialValueDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeSynonymDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/CodeTemplatePhaseDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingDataDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingLogeDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrMappingDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingPreAttrRangeDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/DockingTaskDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntAuthorityDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntBaseDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntHeaderDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntInfoDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/dao/impl/SysIntParamDaoImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeAllCodeLC.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeClassifyTemplateLC.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeDefaultLC.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeALlCodeMapper.xml Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeAllCodeMapper.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeAllCodeDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeBasicSecDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeButtonDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessPhaseDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyProcessTempDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTempMapItemDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateAttrDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateButtonDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyTemplateMapDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeClassifyValueDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeFixedValueDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeImprotDataGridVO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeKeyAttrRepeatRuleDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodePhaseAttrDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeResembleRuleDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeRuleDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSerialValueDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeSynonymDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/CodeTemplatePhaseDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingDataDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingLogeDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreApplyDataInfoDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrMappingDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingPreAttrRangeDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/DockingTaskDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntAuthorityDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntBaseDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntHeaderDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntInfoDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/SysIntParamDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/model/TaskDuckingDO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeBasicSecServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeButtonServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyProcessTempServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTempMapItemServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateAttrServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateButtonServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateMapServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyTemplateServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeClassifyValueServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeDuckingSyncServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeFixedValueServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeKeyAttrRepeatRuleServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodePhaseAttrServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeResembleRuleServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeRuleServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSerialAlgorithmServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeSynonymServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/CodeTemplatePhaseServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataInfoServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreApplyDataServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/DockingPreAttrMappingSeviceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntAuthorityServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntBaseServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/SysIntInfoServiceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTempMapItemServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateMapServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSynonymServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTemplatePhaseServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataInfoServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreApplyDataServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingPreAttrMappingSeviceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntAuthorityServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntBaseServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/SysIntInfoServiceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/tt.xml Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/update.json Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/AttributeMapConfig.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/BackXml.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/DateUtils.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/EnumVO.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/HttpUtils.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Json2XmlUtil.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/PatternUtil.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/Pro.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsAxis2ClientUtil.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/WsErpClientUtil.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlData.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/XmlUtil.java Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/utils/gennerAttrMapUtil.java Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-dev.yml Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-prod.yml Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application-test.yml Source/UBCS/ubcs-service/ubcs-code/src/main/resources/application.yml Source/UBCS/ubcs-service/ubcs-desk/Dockerfile Source/UBCS/ubcs-service/ubcs-desk/pom.xml Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/DeskApplication.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/DashBoardController.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/LeaveController.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/controller/NoticeController.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/entity/ProcessLeave.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/feign/NoticeClient.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/LeaveMapper.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/mapper/NoticeMapper.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/ILeaveService.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/INoticeService.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/LeaveServiceImpl.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/service/impl/NoticeServiceImpl.java Source/UBCS/ubcs-service/ubcs-desk/src/main/java/com/vci/ubcs/desk/wrapper/NoticeWrapper.java Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-dev.yml Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-prod.yml Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/application-test.yml Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/LeaveMapper.xml Source/UBCS/ubcs-service/ubcs-desk/src/main/resources/mapper/NoticeMapper.xml Source/UBCS/ubcs-service/ubcs-omd/pom.xml Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/OmdApplication.java Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictBizOmdController.java Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/DictBizClient.java Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/DictBizMapper.java Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IDictBizService.java Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/DictBizServiceImpl.java Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/DictBizWrapper.java Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-dev.yml Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-prod.yml Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/application-test.yml Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/DictBizMapper.xml Source/UBCS/ubcs-service/ubcs-system/Dockerfile Source/UBCS/ubcs-service/ubcs-system/pom.xml Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/SystemApplication.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ApiScopeController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/AuthClientController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/CombinationController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DataScopeController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictBizController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DictController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ParamController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/PostController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RegionController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/SearchController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TenantPackageController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/TopMenuController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ValueRangeController.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionExcel.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/excel/RegionImporter.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/ApiScopeClient.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DataScopeClient.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictBizClient.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/DictClient.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ApiScopeMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/AuthClientMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/CombinationMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DataScopeMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictBizMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DictMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ParamMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/PostMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RegionMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleMenuMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/RoleScopeMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TenantPackageMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/TopMenuSettingMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/UserPwdstrategyMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ValueRangeMapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IApiScopeService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IAuthClientService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ICombinationService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDataScopeService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictBizService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDictService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IParamService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IPostService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRegionService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleMenuService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleScopeService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantPackageService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITenantService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/ITopMenuSettingService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IUserPwdstrategyService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IValueRangeService.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ApiScopeServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/AuthClientServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DataScopeServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictBizServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DictServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ParamServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/PostServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RegionServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleScopeServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantPackageServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TenantServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/TopMenuSettingServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/UserPwdstrategyServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ValueRangeServiceImpl.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/ApiScopeWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DataScopeWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictBizWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DictWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/PostWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RegionWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-dev.yml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-prod.yml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/application-test.yml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ApiScopeMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/AuthClientMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/CombinationMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DataScopeMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DeptMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictBizMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/DictMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ParamMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/PostMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RegionMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleMenuMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/RoleScopeMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/StrategyMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TenantPackageMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/TopMenuSettingMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/UserPwdstrategyMapper.xml Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/ValueRangeMapper.xml Source/UBCS/ubcs-service/ubcs-user/Dockerfile Source/UBCS/ubcs-service/ubcs-user/pom.xml Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/UserApplication.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/controller/UserController.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserExcel.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/excel/UserImporter.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserClient.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/feign/UserSearchClient.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserAppMapper.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserDeptMapper.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserMapper.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOauthMapper.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserOtherMapper.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/mapper/UserWebMapper.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserDeptService.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserOauthService.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserSearchService.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/IUserService.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserDeptServiceImpl.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserOauthServiceImpl.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserSearchServiceImpl.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/wrapper/UserWrapper.java Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-dev.yml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-prod.yml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/application-test.yml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserAppMapper.xml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserDeptMapper.xml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserMapper.xml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOauthMapper.xml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserOtherMapper.xml Source/UBCS/ubcs-service/ubcs-user/src/main/resources/mapper/UserWebMapper.xml Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-core-cloud/3.0.1.RELEASE/blade-core-cloud-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-core-launch/3.0.1.RELEASE/blade-core-launch-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-starter-auth/3.0.1.RELEASE/blade-starter-auth-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-starter-datascope/3.0.1.RELEASE/blade-starter-datascope-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-starter-develop/3.0.1.RELEASE/blade-starter-develop-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-starter-log/3.0.1.RELEASE/blade-starter-log-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-starter-mybatis/3.0.1.RELEASE/blade-starter-mybatis-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-starter-report/3.0.1.RELEASE/blade-starter-report-3.0.1.RELEASE.pom.sha1 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/_remote.repositories Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.lastUpdated Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.jar.sha1 Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.lastUpdated Source/更改过的jar包/blade-starter-tenant/3.0.1.RELEASE/blade-starter-tenant-3.0.1.RELEASE.pom.sha1