From 859b99731e2dd66d7753724c863aa2090d523c3e Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=88=98=E6=B4=AA=E9=9D=92?= Date: Tue, 20 Aug 2019 15:43:48 +0800 Subject: [PATCH] =?utf8?q?feat,=20docs:=20=E5=AE=8C=E5=96=84=E6=A1=86?= =?utf8?q?=E6=9E=B6=E4=BB=A3=E7=A0=81=EF=BC=8C=E7=A4=BA=E4=BE=8B=E4=BB=A3?= =?utf8?q?=E7=A0=81=EF=BC=8C=E4=BD=BF=E7=94=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- bff/admin/pom.xml | 6 + .../backend/admin/bff/Application.java | 7 +- .../backend/admin/bff/apis/model/biz/Biz.java | 37 + .../remote/biz/BizRemoteFallbackFactory.java | 61 ++ .../apis/remote/biz/BizRemoteFeignClient.java | 49 ++ .../bff/apis/service/biz/BizService.java | 30 + .../biz/data/BizQueryResponseData.java | 45 ++ .../bff/configuration/Swagger2Config.java | 114 +++ .../admin/bff/remote/FallbackError.java | 21 + bff/admin/src/main/resources/application.yml | 3 +- biz/api/pom.xml | 5 + .../biz/api/v1/admin/AdminBizController.java | 175 +++++ .../biz/api/vo/request/BizCreateRequest.java | 16 + .../biz/api/vo/request/BizQueryRequest.java | 44 ++ .../biz/api/vo/request/BizUpdateRequest.java | 23 + .../vo/response/BizCreateResponseData.java | 34 + .../api/vo/response/BizLoadResponseData.java | 34 + .../api/vo/response/BizQueryResponseData.java | 80 ++ .../vo/response/BizRemoveResponseData.java | 34 + .../vo/response/BizUpdateResponseData.java | 34 + .../backend/biz/domain/entity/Biz.java | 43 ++ .../biz/domain/exception/BizException.java | 12 + .../biz/domain/repo/BizRepository.java | 114 +++ .../biz/domain/service/BizService.java | 21 + common/core/pom.xml | 1 + .../core/transmit/user/UserContext.java | 12 + common/framework/pom.xml | 5 + .../framework/exception/BaseException.java | 18 +- .../EnableCustomExceptionHandler.java | 17 + .../framework/exception/ErrorResponse.java | 38 + .../exception/ExceptionConfiguration.java | 14 + .../exception/GlobalExceptionHandler.java | 30 + .../common/framework/modal/ABaseModal.java | 10 - .../common/framework/modal/IModal.java | 7 - .../common/framework/model/ABaseModel.java | 10 + .../common/framework/model/IModel.java | 7 + ...itoryImpl.java => ABaseJpaRepository.java} | 32 +- .../framework/repo/BaseJpaRepository.java | 9 +- .../IgnoreCaseResultTransformer.java | 111 +-- .../vo/response/AbstractApiResponse.java | 12 - .../vo/response/DefaultApiResponse.java | 23 - .../framework/vo/response/IApiResponse.java | 5 - .../response/data/IApiQueryResponseData.java | 5 +- .../backend/common/util/MapBeanUtils.java | 142 ++-- doc/USAGE.md | 688 ++++++++++++++++++ sa/admin/pom.xml | 11 +- .../backend/admin/sa/Application.java | 2 + system/api/pom.xml | 5 + .../api/v1/admin/AdminConfigController.java | 14 +- .../institute/backend/system/api/vo/.gitkeep | 0 .../api}/vo/request/ConfigCreateRequest.java | 2 +- .../api}/vo/request/ConfigQueryRequest.java | 2 +- .../api}/vo/request/ConfigUpdateRequest.java | 2 +- .../vo/response/ConfigCreateResponseData.java | 2 +- .../vo/response/ConfigLoadResponseData.java | 2 +- .../vo/response/ConfigQueryResponseData.java | 4 +- .../vo/response/ConfigRemoveResponseData.java | 2 +- .../vo/response/ConfigUpdateResponseData.java | 2 +- .../backend/system/domain/entity/.gitkeep | 0 .../backend/system/domain/exception/.gitkeep | 0 .../backend/system/domain/model/.gitkeep | 0 .../backend/system/domain/repo/.gitkeep | 0 .../backend/system/domain/service/.gitkeep | 0 63 files changed, 2056 insertions(+), 232 deletions(-) create mode 100644 bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java create mode 100644 bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFallbackFactory.java create mode 100644 bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFeignClient.java create mode 100644 bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java create mode 100644 bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/response/biz/data/BizQueryResponseData.java create mode 100644 bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java create mode 100644 bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/remote/FallbackError.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/v1/admin/AdminBizController.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizCreateRequest.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizQueryRequest.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizUpdateRequest.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizCreateResponseData.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizLoadResponseData.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizQueryResponseData.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizRemoveResponseData.java create mode 100644 biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizUpdateResponseData.java create mode 100644 biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/entity/Biz.java create mode 100644 biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/exception/BizException.java create mode 100644 biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/repo/BizRepository.java create mode 100644 biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/service/BizService.java create mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/EnableCustomExceptionHandler.java create mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ErrorResponse.java create mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ExceptionConfiguration.java create mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/GlobalExceptionHandler.java delete mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/ABaseModal.java delete mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/IModal.java create mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/ABaseModel.java create mode 100644 common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/IModel.java rename common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/{ABaseJpaRepositoryImpl.java => ABaseJpaRepository.java} (67%) create mode 100644 doc/USAGE.md create mode 100644 system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/.gitkeep rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/request/ConfigCreateRequest.java (88%) rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/request/ConfigQueryRequest.java (91%) rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/request/ConfigUpdateRequest.java (90%) rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/response/ConfigCreateResponseData.java (92%) rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/response/ConfigLoadResponseData.java (92%) rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/response/ConfigQueryResponseData.java (92%) rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/response/ConfigRemoveResponseData.java (92%) rename system/{domain/src/main/java/com/supwisdom/institute/backend/system/domain => api/src/main/java/com/supwisdom/institute/backend/system/api}/vo/response/ConfigUpdateResponseData.java (92%) create mode 100644 system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/.gitkeep create mode 100644 system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/exception/.gitkeep create mode 100644 system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/model/.gitkeep create mode 100644 system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/.gitkeep create mode 100644 system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/.gitkeep diff --git a/bff/admin/pom.xml b/bff/admin/pom.xml index 5bc267a..ecd5261 100644 --- a/bff/admin/pom.xml +++ b/bff/admin/pom.xml @@ -49,6 +49,12 @@ + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.boot spring-boot-starter-webflux diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java index 364ed0b..942b082 100644 --- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java @@ -2,22 +2,27 @@ package com.supwisdom.institute.backend.admin.bff; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; //import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; + + //import com.supwisdom.infras.online.doc.configuration.EnableInfrasOnlineDoc; import com.supwisdom.infras.security.configure.basic.EnableInfrasBasicApi; import com.supwisdom.infras.security.configure.cas.EnableInfrasCasSecurity; import com.supwisdom.infras.security.configure.jwt.EnableInfrasJWTApi; import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit; +import com.supwisdom.institute.backend.common.framework.exception.EnableCustomExceptionHandler; @SpringBootApplication -//@EnableFeignClients +@EnableFeignClients @EnableSimpleUserTransmit +@EnableCustomExceptionHandler //@EnableInfrasOnlineDoc diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java new file mode 100644 index 0000000..f1d904e --- /dev/null +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java @@ -0,0 +1,37 @@ +package com.supwisdom.institute.backend.admin.bff.apis.model.biz; + +import java.util.Date; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.common.framework.model.ABaseModel; + +public class Biz extends ABaseModel { + + /** + * + */ + private static final long serialVersionUID = 8755876583168251137L; + + @Getter + @Setter + private String id; + + @Getter + @Setter + private String name; + + @Getter + @Setter + private Boolean bool; + + @Getter + @Setter + private Date date; + + @Getter + @Setter + private Integer num; + +} diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFallbackFactory.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFallbackFactory.java new file mode 100644 index 0000000..30d312d --- /dev/null +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFallbackFactory.java @@ -0,0 +1,61 @@ +package com.supwisdom.institute.backend.admin.bff.apis.remote.biz; + +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; +import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz; +import com.supwisdom.institute.backend.admin.bff.remote.FallbackError; + +import feign.hystrix.FallbackFactory; + +@Component +public class BizRemoteFallbackFactory implements FallbackFactory { + + @Override + public BizRemoteFeignClient create(Throwable cause) { + return new BizRemoteFeignClient() { + + @Override + public JSONObject query(boolean loadAll, int pageIndex, int pageSize) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject load(String id) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject create(Biz biz) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject update(String id, Biz biz) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject delete(String id) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + }; + } + +} diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFeignClient.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFeignClient.java new file mode 100644 index 0000000..cccdd8a --- /dev/null +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFeignClient.java @@ -0,0 +1,49 @@ +package com.supwisdom.institute.backend.admin.bff.apis.remote.biz; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.alibaba.fastjson.JSONObject; +import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz; + +@FeignClient( + name = "biz-biz-remote-feign-client", + url = "${sw-backend-biz-api.uri}/v1/admin/biz", + fallbackFactory = BizRemoteFallbackFactory.class +) +public interface BizRemoteFeignClient { + + @RequestMapping(method = RequestMethod.GET) + JSONObject query( + @RequestParam(name = "loadAll") boolean loadAll, + @RequestParam(name = "pageIndex") int pageIndex, + @RequestParam(name = "pageSize") int pageSize + + ); + + @RequestMapping(method = RequestMethod.GET, path = "/{id}") + JSONObject load( + @PathVariable(name = "id") String id + ); + + @RequestMapping(method = RequestMethod.POST) + JSONObject create( + @RequestBody Biz biz + ); + + @RequestMapping(method = RequestMethod.PUT, path = "/{id}") + JSONObject update( + @PathVariable(name = "id") String id, + @RequestBody Biz biz + ); + + @RequestMapping(method = RequestMethod.DELETE, path = "/{id}") + JSONObject delete( + @PathVariable(name = "id") String id + ); + +} diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java new file mode 100644 index 0000000..7c6b8a7 --- /dev/null +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java @@ -0,0 +1,30 @@ +package com.supwisdom.institute.backend.admin.bff.apis.service.biz; + +import org.springframework.beans.factory.annotation.Autowired; + +import com.alibaba.fastjson.JSONObject; +import com.supwisdom.institute.backend.admin.bff.apis.remote.biz.BizRemoteFeignClient; +import com.supwisdom.institute.backend.admin.bff.apis.vo.response.biz.data.BizQueryResponseData; + +public class BizService { + + @Autowired + private BizRemoteFeignClient bizRemote; + + public BizQueryResponseData query(boolean loadAll, int pageIndex, int pageSize) { + + JSONObject jsonObject = bizRemote.query(loadAll, pageIndex, pageSize); + if (jsonObject == null) { + return null; + } + + if (jsonObject.getIntValue("code") == 0) { + JSONObject data = jsonObject.getJSONObject("data"); + + return data.toJavaObject(BizQueryResponseData.class); + } + + return null; + } + +} diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/response/biz/data/BizQueryResponseData.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/response/biz/data/BizQueryResponseData.java new file mode 100644 index 0000000..3699ff7 --- /dev/null +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/response/biz/data/BizQueryResponseData.java @@ -0,0 +1,45 @@ +package com.supwisdom.institute.backend.admin.bff.apis.vo.response.biz.data; + +import java.util.List; +import java.util.Map; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData; + +public class BizQueryResponseData implements IApiQueryResponseData { + + /** + * + */ + private static final long serialVersionUID = -380945463584664943L; + + @Getter + private boolean loadAll; + @Getter + private int pageIndex; + @Getter + private int pageSize; + @Getter + private Map mapBean; + @Getter + private Map orderBy; + + @Getter + @Setter + private int pageCount; + @Getter + @Setter + private long recordCount; + + @Getter + @Setter + private int currentItemCount; + + @Getter + @Setter + private List items; + +} diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java new file mode 100644 index 0000000..9559532 --- /dev/null +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java @@ -0,0 +1,114 @@ +package com.supwisdom.institute.backend.admin.bff.configuration; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.AuthorizationScopeBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.AuthorizationScope; +import springfox.documentation.service.BasicAuth; +import springfox.documentation.service.Contact; +import springfox.documentation.service.SecurityReference; +import springfox.documentation.service.SecurityScheme; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger.web.UiConfiguration; +import springfox.documentation.swagger.web.UiConfigurationBuilder; +import springfox.documentation.swagger2.annotations.EnableSwagger2; +import static com.google.common.collect.Lists.*; + + +//@Configuration +//@EnableSwagger2 +public class Swagger2Config { + + @Value("${swagger2.apis.basePackage:com.supwisdom.institute}") + private String basePackage; + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage(basePackage)) + .paths(PathSelectors.any()) + .build() + ; + } + + private ApiInfo apiInfo() { + Contact contact = new Contact("Backend Admin BFF", "https://sw-backend-api.supwisdom.com/swagger-ui.html", ""); // name, url, email + return new ApiInfoBuilder() + .title("Backend Admin BFF APIs") + .description("管理后台 - 后端接口") + .termsOfServiceUrl("http://www.supwisdom.com/") + .contact(contact) + .version("1.0") + .build(); + } + + private List securitySchemes() { + return newArrayList(new BasicAuth("sample")); + } + + private List securityContexts() { + AuthorizationScope[] authScopes = new AuthorizationScope[1]; + authScopes[0] = new AuthorizationScopeBuilder() + .scope("read") + .description("read access") + .build(); + SecurityReference securityReference = SecurityReference.builder() + .reference("sample") + .scopes(authScopes) + .build(); + + return newArrayList(SecurityContext.builder().securityReferences(newArrayList(securityReference)).build()); + } + + @Bean + public UiConfiguration uiConfig() { + + return UiConfigurationBuilder.builder().build(); + +// return new UiConfiguration(null, // url +// "none", // docExpansion => none | list +// "alpha", // apiSorter => alpha +// "schema", // defaultModelRendering => schema +// UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, +// false, // enableJsonEditor => true || false +// true, // showRequestHeaders => true | false +// 60000L); // requestTimeout => in milliseconds, defaults to null +// // (uses jquery xh timeout) + } + + +// @Bean +// public SecurityConfiguration oauth2() { +// return SecurityConfigurationBuilder.builder() +// .clientId("common") +// .clientSecret("secret") +// .scopeSeparator(" ") +// .useBasicAuthenticationWithAccessCodeGrant(true) +// .build(); +// } +// +// @Bean +// public SecurityConfiguration basic() { +// return SecurityConfigurationBuilder.builder() +// .clientId("common") +// .clientSecret("secret") +// .scopeSeparator(" ") +// .useBasicAuthenticationWithAccessCodeGrant(true) +// .build(); +// } + +} diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/remote/FallbackError.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/remote/FallbackError.java new file mode 100644 index 0000000..d46aa8d --- /dev/null +++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/remote/FallbackError.java @@ -0,0 +1,21 @@ +package com.supwisdom.institute.backend.admin.bff.remote; + +import com.alibaba.fastjson.JSONObject; + +public class FallbackError { + + private FallbackError() { + + } + + public static JSONObject defaultErrorJson(Throwable cause) { + JSONObject error = new JSONObject(); + + error.put("code", -1); + error.put("message", cause.getMessage()); + error.put("error", cause.getMessage()); + + return error; + } + +} diff --git a/bff/admin/src/main/resources/application.yml b/bff/admin/src/main/resources/application.yml index d93888b..815040b 100644 --- a/bff/admin/src/main/resources/application.yml +++ b/bff/admin/src/main/resources/application.yml @@ -111,4 +111,5 @@ cas.server.host.url: https://cas.supwisdom.com/cas ## # server url for feign # -sw-backend-api-admin.server.url: http://localhost:8081 +sw-backend-system-api.uri: http://localhost:8081 +sw-backend-biz-api.uri: http://localhost:8081 diff --git a/biz/api/pom.xml b/biz/api/pom.xml index bcc67f2..2c5af3b 100644 --- a/biz/api/pom.xml +++ b/biz/api/pom.xml @@ -37,6 +37,11 @@ org.springframework.boot spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/v1/admin/AdminBizController.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/v1/admin/AdminBizController.java new file mode 100644 index 0000000..aa324c6 --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/v1/admin/AdminBizController.java @@ -0,0 +1,175 @@ +package com.supwisdom.institute.backend.biz.api.v1.admin; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; +import org.springframework.util.MimeTypeUtils; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import com.supwisdom.institute.backend.biz.api.vo.request.BizCreateRequest; +import com.supwisdom.institute.backend.biz.api.vo.request.BizQueryRequest; +import com.supwisdom.institute.backend.biz.api.vo.request.BizUpdateRequest; +import com.supwisdom.institute.backend.biz.api.vo.response.BizCreateResponseData; +import com.supwisdom.institute.backend.biz.api.vo.response.BizLoadResponseData; +import com.supwisdom.institute.backend.biz.api.vo.response.BizQueryResponseData; +import com.supwisdom.institute.backend.biz.api.vo.response.BizRemoveResponseData; +import com.supwisdom.institute.backend.biz.api.vo.response.BizUpdateResponseData; +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.biz.domain.exception.BizException; +import com.supwisdom.institute.backend.biz.domain.service.BizService; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; +import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse; + +@Api(value = "BizAdminBiz", tags = { "BizAdminBiz" }, description = "Biz示例接口") +@RestController +@RequestMapping("/v1/admin/biz") +public class AdminBizController { + + @Autowired + private BizService bizService; + + /** + * @param bizQueryRequest + * @return + */ + @ApiOperation(value = "查询配置列表", notes = "查询配置列表", nickname = "systemAdminBizQuery") + @ApiImplicitParams({ + @ApiImplicitParam(name = "loadAll", value = "是否加载全部", required = true, dataType = "boolean", paramType = "query", defaultValue = "false"), + @ApiImplicitParam(name = "pageIndex", value = "分页 - 页码", required = true, dataType = "int", paramType = "query", defaultValue = "0", example = "0"), + @ApiImplicitParam(name = "pageSize", value = "分页 - 每页记录数", required = true, dataType = "int", paramType = "query", defaultValue = "20", example = "20"), + @ApiImplicitParam(name = "mapBean[deleted]", value = "查询条件 - 删除状态 (精确)", required = false, dataType = "boolean", paramType = "query"), + @ApiImplicitParam(name = "mapBean[categoryCode]", value = "查询条件 - 分类代码 (精确)", required = false, dataType = "string", paramType = "query"), + @ApiImplicitParam(name = "mapBean[categoryName]", value = "查询条件 - 分类名称 (模糊)", required = false, dataType = "string", paramType = "query"), + @ApiImplicitParam(name = "mapBean[name]", value = "查询条件 - 名称 (模糊)", required = false, dataType = "string", paramType = "query"), + @ApiImplicitParam(name = "mapBean[description]", value = "查询条件 - 描述 (模糊)", required = false, dataType = "string", paramType = "query"), + @ApiImplicitParam(name = "mapBean[bizKey]", value = "查询条件 - 配置Key (精确)", required = false, dataType = "string", paramType = "query"), + }) + @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse query(BizQueryRequest bizQueryRequest) { + + Page page = bizService.selectPageList( + bizQueryRequest.isLoadAll(), + bizQueryRequest.getPageIndex(), + bizQueryRequest.getPageSize(), + bizQueryRequest.getMapBean(), + bizQueryRequest.getOrderBy()); + + BizQueryResponseData resp = BizQueryResponseData.of(bizQueryRequest).build(page); + + return new DefaultApiResponse(resp); + } + + /** + * @param id + * @return + */ + @ApiOperation(value = "根据ID获取配置项", notes = "根据ID获取配置项", nickname="systemAdminBizLoad") + @RequestMapping(method = RequestMethod.GET, path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse load( + @PathVariable("id") String id) { + + if (id == null || id.length() == 0) { + throw BizException.newInstance("exception.get.id.must.not.empty"); + } + + Biz biz = bizService.selectById(id); + + if (biz == null) { + throw BizException.newInstance("exception.get.domain.not.exist"); + } + + BizLoadResponseData resp = BizLoadResponseData.of(biz); + + return new DefaultApiResponse(resp); + } + + /** + * @param bizCreateRequest + * @return + */ + @ApiOperation(value = "创建配置项", notes = "创建配置项", nickname = "systemAdminBizCreate") + @RequestMapping(method = RequestMethod.POST, produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.CREATED) + @ResponseBody + public DefaultApiResponse create( + @RequestBody BizCreateRequest bizCreateRequest) { + + // FIXME: 验证数据有效性 + + Biz entity = EntityUtils.copy(bizCreateRequest, new Biz()); + + Biz ret = bizService.insert(entity); + + BizCreateResponseData resp = BizCreateResponseData.of(ret); + + return new DefaultApiResponse(resp); + } + + @ApiOperation(value = "更新", notes = "更新", nickname = "systemAdminBizUpdate") + @RequestMapping(method = RequestMethod.PUT, path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse update( + @PathVariable("id") String id, + @RequestBody BizUpdateRequest bizUpdateRequest) { + + if (id == null || id.length() == 0) { + throw BizException.newInstance("exception.update.id.must.not.empty"); + } + + Biz tmp = bizService.selectById(id); + if (tmp == null) { + throw BizException.newInstance("exception.update.domain.not.exist"); + } + + Biz entity = EntityUtils.copy(bizUpdateRequest, new Biz()); + entity.setId(id); + + entity = EntityUtils.merge(tmp, entity); + + Biz ret = bizService.update(entity); + + BizUpdateResponseData resp = BizUpdateResponseData.of(ret); + + return new DefaultApiResponse(resp); + } + + @ApiOperation(value = "删除", notes = "删除", nickname = "systemAdminBizRemove") + @RequestMapping(method = RequestMethod.DELETE, path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE) + @ResponseStatus(value = HttpStatus.OK) + @ResponseBody + public DefaultApiResponse remove( + @PathVariable("id") String id) { + + if (id == null || id.length() == 0) { + throw BizException.newInstance("exception.remove.id.must.not.empty"); + } + + Biz tmp = bizService.selectById(id); + if (tmp == null) { + throw BizException.newInstance("exception.remove.domain.not.exist"); + } + + bizService.deleteById(id); + + BizRemoveResponseData resp = BizRemoveResponseData.of(tmp); + + return new DefaultApiResponse(resp); + } + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizCreateRequest.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizCreateRequest.java new file mode 100644 index 0000000..e6b6f0e --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizCreateRequest.java @@ -0,0 +1,16 @@ +package com.supwisdom.institute.backend.biz.api.vo.request; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest; + +/** + * @author loie + */ +public class BizCreateRequest extends Biz implements IApiCreateRequest { + + /** + * + */ + private static final long serialVersionUID = -3512866840130579457L; + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizQueryRequest.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizQueryRequest.java new file mode 100644 index 0000000..7f60870 --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizQueryRequest.java @@ -0,0 +1,44 @@ +package com.supwisdom.institute.backend.biz.api.vo.request; + +import lombok.Getter; +import lombok.Setter; + +import java.util.Map; + +import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest; + +import io.swagger.annotations.ApiModelProperty; + +/** + * @author loie + */ +public class BizQueryRequest implements IApiQueryRequest { + + /** + * + */ + private static final long serialVersionUID = -4345168235529389375L; + + @Getter + @Setter + private boolean loadAll = false; + + @Getter + @Setter + private int pageIndex = 0; + + @Getter + @Setter + private int pageSize = 20; + + @Getter + @Setter + @ApiModelProperty(hidden = true) + private Map mapBean; + + @Getter + @Setter + @ApiModelProperty(hidden = true) + private Map orderBy; + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizUpdateRequest.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizUpdateRequest.java new file mode 100644 index 0000000..74973ce --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/request/BizUpdateRequest.java @@ -0,0 +1,23 @@ +package com.supwisdom.institute.backend.biz.api.vo.request; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author loie + */ +public class BizUpdateRequest extends Biz implements IApiUpdateRequest { + + /** + * + */ + private static final long serialVersionUID = 6002556449210326472L; + + @Getter + @Setter + private String id; + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizCreateResponseData.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizCreateResponseData.java new file mode 100644 index 0000000..9a91fce --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizCreateResponseData.java @@ -0,0 +1,34 @@ +package com.supwisdom.institute.backend.biz.api.vo.response; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author loie + */ +public class BizCreateResponseData extends Biz implements IApiCreateResponseData { + + /** + * + */ + private static final long serialVersionUID = -7081539211184618366L; + + @Getter + @Setter + private String id; + + private BizCreateResponseData() { + + } + + public static BizCreateResponseData of(Biz entity) { + BizCreateResponseData data = new BizCreateResponseData(); + + return EntityUtils.copy(entity, data); + } + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizLoadResponseData.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizLoadResponseData.java new file mode 100644 index 0000000..84c2864 --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizLoadResponseData.java @@ -0,0 +1,34 @@ +package com.supwisdom.institute.backend.biz.api.vo.response; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author loie + */ +public class BizLoadResponseData extends Biz implements IApiLoadResponseData { + + /** + * + */ + private static final long serialVersionUID = -921871332091924834L; + + @Getter + @Setter + private String id; + + private BizLoadResponseData() { + + } + + public static BizLoadResponseData of(Biz entity) { + BizLoadResponseData data = new BizLoadResponseData(); + + return EntityUtils.copy(entity, data); + } + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizQueryResponseData.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizQueryResponseData.java new file mode 100644 index 0000000..3c19ad1 --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizQueryResponseData.java @@ -0,0 +1,80 @@ +package com.supwisdom.institute.backend.biz.api.vo.response; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; +import java.util.Map; + +import org.springframework.data.domain.Page; + +import com.supwisdom.institute.backend.biz.api.vo.request.BizQueryRequest; +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData; + +/** + * @author loie + */ +public class BizQueryResponseData implements IApiQueryResponseData { + + /** + * + */ + private static final long serialVersionUID = 5706417972093485886L; + + private BizQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { + this.loadAll = loadAll; + this.pageIndex = pageIndex; + this.pageSize = pageSize; + this.mapBean = mapBean; + this.orderBy = orderBy; + } + + public static BizQueryResponseData of(BizQueryRequest queryRequest) { + BizQueryResponseData data = new BizQueryResponseData( + queryRequest.isLoadAll(), + queryRequest.getPageIndex(), + queryRequest.getPageSize(), + queryRequest.getMapBean(), + queryRequest.getOrderBy() + ); + + return data; + } + + public BizQueryResponseData build(Page page) { + this.currentItemCount = page.getNumberOfElements(); + this.pageCount = page.getTotalPages(); + this.recordCount = page.getTotalElements(); + this.items = page.getContent(); + + return this; + } + + @Getter + private boolean loadAll; + @Getter + private int pageIndex; + @Getter + private int pageSize; + @Getter + private Map mapBean; + @Getter + private Map orderBy; + + @Getter + @Setter + private int pageCount; + @Getter + @Setter + private long recordCount; + + @Getter + @Setter + private int currentItemCount; + + @Getter + @Setter + private List items; + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizRemoveResponseData.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizRemoveResponseData.java new file mode 100644 index 0000000..0d3f019 --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizRemoveResponseData.java @@ -0,0 +1,34 @@ +package com.supwisdom.institute.backend.biz.api.vo.response; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData; + +/** + * @author loie + */ +public class BizRemoveResponseData implements IApiRemoveResponseData { + + /** + * + */ + private static final long serialVersionUID = 7920962172100289008L; + + @Getter + @Setter + private String id; + + private BizRemoveResponseData() { + + } + + public static BizRemoveResponseData of(Biz entity) { + BizRemoveResponseData data = new BizRemoveResponseData(); + + return EntityUtils.copy(entity, data); + } + +} diff --git a/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizUpdateResponseData.java b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizUpdateResponseData.java new file mode 100644 index 0000000..19bef62 --- /dev/null +++ b/biz/api/src/main/java/com/supwisdom/institute/backend/biz/api/vo/response/BizUpdateResponseData.java @@ -0,0 +1,34 @@ +package com.supwisdom.institute.backend.biz.api.vo.response; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author loie + */ +public class BizUpdateResponseData extends Biz implements IApiUpdateResponseData { + + /** + * + */ + private static final long serialVersionUID = 4502820318022107903L; + + @Getter + @Setter + private String id; + + private BizUpdateResponseData() { + + } + + public static BizUpdateResponseData of(Biz entity) { + BizUpdateResponseData data = new BizUpdateResponseData(); + + return EntityUtils.copy(entity, data); + } + +} diff --git a/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/entity/Biz.java b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/entity/Biz.java new file mode 100644 index 0000000..553cc05 --- /dev/null +++ b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/entity/Biz.java @@ -0,0 +1,43 @@ +package com.supwisdom.institute.backend.biz.domain.entity; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.common.framework.entity.ABaseEntity; + +@Entity +@Table(name = "TB_BIZ") +public class Biz extends ABaseEntity { + + /** + * + */ + private static final long serialVersionUID = 5503233707196628811L; + + @Getter + @Setter + @Column(name = "NAME") + private String name; + + @Getter + @Setter + @Column(name = "BOOL") + private Boolean bool; + + @Getter + @Setter + @Column(name = "DATE") + private Date date; + + @Getter + @Setter + @Column(name = "NUM") + private Integer num; + +} diff --git a/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/exception/BizException.java b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/exception/BizException.java new file mode 100644 index 0000000..2ae5778 --- /dev/null +++ b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/exception/BizException.java @@ -0,0 +1,12 @@ +package com.supwisdom.institute.backend.biz.domain.exception; + +import com.supwisdom.institute.backend.common.framework.exception.BaseException; + +public class BizException extends BaseException { + + /** + * + */ + private static final long serialVersionUID = 8112079911386045865L; + +} diff --git a/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/repo/BizRepository.java b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/repo/BizRepository.java new file mode 100644 index 0000000..cfeae8f --- /dev/null +++ b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/repo/BizRepository.java @@ -0,0 +1,114 @@ +package com.supwisdom.institute.backend.biz.domain.repo; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.domain.Sort.Order; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository; +import com.supwisdom.institute.backend.common.util.DateUtil; +import com.supwisdom.institute.backend.common.util.MapBeanUtils; + +@Repository +public interface BizRepository extends BaseJpaRepository { + + default Specification convertSpecification(Map mapBean) { + + Specification spec = new Specification() { + + /** + * + */ + private static final long serialVersionUID = -1820403213133310124L; + + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + List predicates = new ArrayList<>(); + + if (mapBean != null) { + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "name"))) { + predicates.add(criteriaBuilder.like(root.get("name"), MapBeanUtils.getString(mapBean, "name"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getBoolean(mapBean, "bool"))) { + predicates.add(criteriaBuilder.equal(root.get("bool"), MapBeanUtils.getBoolean(mapBean, "bool"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "dateBegin"))) { + String grantTimeBegin = MapBeanUtils.getString(mapBean, "dateBegin"); + Date d = DateUtil.parseDate(grantTimeBegin+" 00:00:00", "yyyy-MM-dd HH:mm:ss"); + + if (d != null) { + predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("date"), d)); + } + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "dateEnd"))) { + String grantTimeEnd = MapBeanUtils.getString(mapBean, "dateEnd"); + Date d = DateUtil.parseDate(grantTimeEnd+" 23:59:59", "yyyy-MM-dd HH:mm:ss"); + + if (d != null) { + predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("date"), d)); + } + } + } + + return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])); + } + + }; + + return spec; + } + + @Override + public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { + + Specification spec = this.convertSpecification(mapBean); + + if (loadAll) { + pageIndex = 0; + pageSize = Integer.MAX_VALUE; + } + + Sort sort = new Sort(Sort.Direction.DESC, "date"); // Sort.unsorted + + if (orderBy != null) { + List orders = new ArrayList<>(); + + orderBy.forEach((k, v) -> { + if ("asc".equalsIgnoreCase(v)) { + Order order = Order.asc(k); + orders.add(order); + } else if ("desc".equalsIgnoreCase(v)) { + Order order = Order.desc(k); + orders.add(order); + } else { + Order order = Order.by(k); + orders.add(order); + } + }); + + sort = Sort.by(orders); + } + + PageRequest pageRequest = PageRequest.of(pageIndex, pageSize, sort); + + return this.findAll(spec, pageRequest); + } + +} diff --git a/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/service/BizService.java b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/service/BizService.java new file mode 100644 index 0000000..43f1dd7 --- /dev/null +++ b/biz/domain/src/main/java/com/supwisdom/institute/backend/biz/domain/service/BizService.java @@ -0,0 +1,21 @@ +package com.supwisdom.institute.backend.biz.domain.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.biz.domain.repo.BizRepository; +import com.supwisdom.institute.backend.common.framework.service.ABaseService; + +@Service +public class BizService extends ABaseService { + + @Autowired + private BizRepository bizRepository; + + @Override + public BizRepository getRepo() { + return bizRepository; + } + +} diff --git a/common/core/pom.xml b/common/core/pom.xml index d535132..0193355 100644 --- a/common/core/pom.xml +++ b/common/core/pom.xml @@ -36,6 +36,7 @@ org.springframework.cloud spring-cloud-starter-openfeign + true diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/UserContext.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/UserContext.java index 00f2e43..13f4d25 100644 --- a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/UserContext.java +++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/user/UserContext.java @@ -17,5 +17,17 @@ public class UserContext { public static void setUser(User value) { user.set(value); } + + + + public static String getUsername() { + User u = user.get(); + + if (u != null) { + return u.getUsername(); + } + + return null; + } } diff --git a/common/framework/pom.xml b/common/framework/pom.xml index 328b83c..18d0ac5 100644 --- a/common/framework/pom.xml +++ b/common/framework/pom.xml @@ -42,6 +42,11 @@ + + org.springframework.boot + spring-boot-starter-web + true + org.springframework.boot spring-boot-starter-data-jpa diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java index ee21f7a..5f10b42 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java @@ -6,11 +6,8 @@ public class BaseException extends RuntimeException { * */ private static final long serialVersionUID = 2278568118369300446L; - - /** - * 异常信息 - */ - protected String msg; + + public static final int DEFAULT_CODE = -1; /** * 具体异常码 @@ -20,7 +17,6 @@ public class BaseException extends RuntimeException { public BaseException(int code, String msgFormat, Object... args) { super(String.format(msgFormat, args)); this.code = code; - this.msg = String.format(msgFormat, args); } public BaseException() { @@ -39,10 +35,6 @@ public class BaseException extends RuntimeException { super(message); } - public String getMsg() { - return msg; - } - public int getCode() { return code; } @@ -55,11 +47,11 @@ public class BaseException extends RuntimeException { * @return */ @Deprecated - public BaseException newInstance(String msgFormat, Object... args) { - return new BaseException(this.code, msgFormat, args); + public static BaseException newInstance(String msgFormat, Object... args) { + return new BaseException(DEFAULT_CODE, msgFormat, args); } - public BaseException newInstance(int code, String msgFormat, Object... args) { + public static BaseException newInstance(int code, String msgFormat, Object... args) { return new BaseException(code, msgFormat, args); } diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/EnableCustomExceptionHandler.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/EnableCustomExceptionHandler.java new file mode 100644 index 0000000..28553c6 --- /dev/null +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/EnableCustomExceptionHandler.java @@ -0,0 +1,17 @@ +package com.supwisdom.institute.backend.common.framework.exception; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.Import; + +@Documented +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Import({ExceptionConfiguration.class}) +public @interface EnableCustomExceptionHandler { + +} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ErrorResponse.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ErrorResponse.java new file mode 100644 index 0000000..e0e4235 --- /dev/null +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ErrorResponse.java @@ -0,0 +1,38 @@ +package com.supwisdom.institute.backend.common.framework.exception; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData; + +public class ErrorResponse implements IApiResponseData { + + /** + * + */ + private static final long serialVersionUID = 5810078993746894780L; + + /** + * 异常信息 + */ + @Getter + @Setter + private String message; + + /** + * 具体异常码 + */ + @Getter + @Setter + private int code = -1; + + private ErrorResponse(int code, String msgFormat, Object... args) { + this.code = code; + this.message = String.format(msgFormat, args); + } + + public static ErrorResponse of(int code, String msgFormat, Object... args) { + return new ErrorResponse(code, msgFormat, args); + } + +} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ExceptionConfiguration.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ExceptionConfiguration.java new file mode 100644 index 0000000..845e935 --- /dev/null +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/ExceptionConfiguration.java @@ -0,0 +1,14 @@ +package com.supwisdom.institute.backend.common.framework.exception; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ExceptionConfiguration { + + @Bean + public GlobalExceptionHandler globalExceptionHandler() { + return new GlobalExceptionHandler(); + } + +} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/GlobalExceptionHandler.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..d32199c --- /dev/null +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/GlobalExceptionHandler.java @@ -0,0 +1,30 @@ +package com.supwisdom.institute.backend.common.framework.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler({Exception.class}) + public ErrorResponse DefaultExceptionHandler(Exception e) { + + ErrorResponse error = ErrorResponse.of(BaseException.DEFAULT_CODE, e.getMessage()); + + return error; + } + + + @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler({BaseException.class}) + public ErrorResponse BaseExceptionHandler(BaseException e) { + + ErrorResponse error = ErrorResponse.of(e.getCode(), e.getMessage()); + + return error; + } + +} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/ABaseModal.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/ABaseModal.java deleted file mode 100644 index 3b8d6d3..0000000 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/ABaseModal.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.supwisdom.institute.backend.common.framework.modal; - -public abstract class ABaseModal implements IModal { - - /** - * - */ - private static final long serialVersionUID = 8717041105592152819L; - -} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/IModal.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/IModal.java deleted file mode 100644 index cb6f72b..0000000 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/modal/IModal.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.supwisdom.institute.backend.common.framework.modal; - -import java.io.Serializable; - -public interface IModal extends Serializable { - -} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/ABaseModel.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/ABaseModel.java new file mode 100644 index 0000000..efa3e25 --- /dev/null +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/ABaseModel.java @@ -0,0 +1,10 @@ +package com.supwisdom.institute.backend.common.framework.model; + +public abstract class ABaseModel implements IModel { + + /** + * + */ + private static final long serialVersionUID = 8717041105592152819L; + +} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/IModel.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/IModel.java new file mode 100644 index 0000000..a6258d3 --- /dev/null +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/model/IModel.java @@ -0,0 +1,7 @@ +package com.supwisdom.institute.backend.common.framework.model; + +import java.io.Serializable; + +public interface IModel extends Serializable { + +} diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/ABaseJpaRepositoryImpl.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/ABaseJpaRepository.java similarity index 67% rename from common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/ABaseJpaRepositoryImpl.java rename to common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/ABaseJpaRepository.java index 32e0e33..d787e59 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/ABaseJpaRepositoryImpl.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/ABaseJpaRepository.java @@ -13,21 +13,22 @@ import org.springframework.data.jpa.repository.support.JpaEntityInformation; import org.springframework.data.jpa.repository.support.SimpleJpaRepository; import org.springframework.data.repository.NoRepositoryBean; +import com.supwisdom.institute.backend.common.core.transmit.user.UserContext; import com.supwisdom.institute.backend.common.framework.entity.ABaseEntity; @Transactional @NoRepositoryBean -public class ABaseJpaRepositoryImpl extends SimpleJpaRepository implements BaseJpaRepository { +public class ABaseJpaRepository extends SimpleJpaRepository implements BaseJpaRepository { @SuppressWarnings("unused") private final EntityManager em; - public ABaseJpaRepositoryImpl(Class domainClass, EntityManager em) { + public ABaseJpaRepository(Class domainClass, EntityManager em) { super(domainClass, em); this.em = em; } - public ABaseJpaRepositoryImpl(JpaEntityInformation information, EntityManager em) { + public ABaseJpaRepository(JpaEntityInformation information, EntityManager em) { super(information, em); this.em = em; } @@ -67,7 +68,9 @@ public class ABaseJpaRepositoryImpl extends SimpleJpaRepo if (entity.getDeleted() == null) { entity.setDeleted(false); } - //entity.setAddAccount(AuthUtil.getRemoteUser()); // FIXME: setAddAccount + if (entity.getAddAccount() == null) { + entity.setAddAccount(UserContext.getUsername()); + } if (entity.getAddTime() == null) { entity.setAddTime(Calendar.getInstance().getTime()); } @@ -79,7 +82,9 @@ public class ABaseJpaRepositoryImpl extends SimpleJpaRepo public E update(E entity) { - //entity.setEditAccount(AuthUtil.getRemoteUser()); // FIXME: setEditAccount + if (entity.getEditAccount() == null) { + entity.setEditAccount(UserContext.getUsername()); + } if (entity.getEditTime() == null) { entity.setEditTime(Calendar.getInstance().getTime()); } @@ -88,5 +93,22 @@ public class ABaseJpaRepositoryImpl extends SimpleJpaRepo return e; } + + public E remove(E entity) { + + if (entity.getDeleted() == null) { + entity.setDeleted(true); + } + if (entity.getDeleteAccount() == null) { + entity.setDeleteAccount(UserContext.getUsername()); + } + if (entity.getDeleteTime() == null) { + entity.setDeleteTime(Calendar.getInstance().getTime()); + } + + E e = this.save(entity); + + return e; + } } diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java index 3451705..ef0a932 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java @@ -10,6 +10,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.NoRepositoryBean; +import com.supwisdom.institute.backend.common.core.transmit.user.UserContext; import com.supwisdom.institute.backend.common.framework.entity.ABaseEntity; import com.supwisdom.institute.backend.common.util.UUIDUtils; @@ -71,7 +72,7 @@ public interface BaseJpaRepository extends JpaRepository< entity.setDeleted(false); } if (entity.getAddAccount() == null) { - //entity.setAddAccount(AuthUtil.getRemoteUser()); // FIXME: setAddAccount + entity.setAddAccount(UserContext.getUsername()); } if (entity.getAddTime() == null) { entity.setAddTime(Calendar.getInstance().getTime()); @@ -85,7 +86,7 @@ public interface BaseJpaRepository extends JpaRepository< public default E update(E entity) { if (entity.getEditAccount() == null) { - //entity.setEditAccount(AuthUtil.getRemoteUser()); // FIXME: setEditAccount + entity.setEditAccount(UserContext.getUsername()); } if (entity.getEditTime() == null) { entity.setEditTime(Calendar.getInstance().getTime()); @@ -96,14 +97,13 @@ public interface BaseJpaRepository extends JpaRepository< return e; } - public default E remove(E entity) { if (entity.getDeleted() == null) { entity.setDeleted(true); } if (entity.getDeleteAccount() == null) { - //entity.setDeleteAccount(AuthUtil.getRemoteUser()); // FIXME: setDeleteAccount + entity.setDeleteAccount(UserContext.getUsername()); } if (entity.getDeleteTime() == null) { entity.setDeleteTime(Calendar.getInstance().getTime()); @@ -114,7 +114,6 @@ public interface BaseJpaRepository extends JpaRepository< return e; } - public default void delete(String id) { this.deleteById(id); diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/resultTransformer/IgnoreCaseResultTransformer.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/resultTransformer/IgnoreCaseResultTransformer.java index ee622bc..0736f3e 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/resultTransformer/IgnoreCaseResultTransformer.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/resultTransformer/IgnoreCaseResultTransformer.java @@ -10,63 +10,66 @@ import java.lang.reflect.Field; import java.util.List; /** - *  * 修正hibernate返回自定义pojo类型时找不到属性的BUG * 主要发生在使用oracle或高版本的mysql时,查询返回的字段默认是大写的(除非SQL中指定了别名),这导致返回自定义pojo类型时会报找不到属性的错误,该类用于修正此BUG。 - * 使用该类时SQL返回的字段名大小写或者带"_"都会被忽略,如数据库字段为 USER_NAME,自定义pojo的属性名为username就可以使用 - *  - * @author feng*/ + * 使用该类时SQL返回的字段名大小写或者带"_"都会被忽略,如数据库字段为 USER_NAME,自定义pojo的属性名为username就可以使用   + * + * @author feng + */ public class IgnoreCaseResultTransformer implements ResultTransformer { - private static final long serialVersionUID = -3779317531110592988L; - private final Class resultClass; - private Field[] fields; - private List types = Lists.newArrayList(); - public IgnoreCaseResultTransformer(final Class resultClass) { - this.resultClass = resultClass; - List list = Lists.newArrayList(); - for (Class superClass = resultClass; superClass != Object.class; superClass = superClass.getSuperclass()) { - Field[] fs = superClass.getDeclaredFields(); - List newFs = Lists.newArrayList(); - for(int i=0;i resultClass; + private Field[] fields; + private List> types = Lists.newArrayList(); + + public IgnoreCaseResultTransformer(final Class resultClass) { + this.resultClass = resultClass; + List list = Lists.newArrayList(); + for (Class superClass = resultClass; superClass != Object.class; superClass = superClass.getSuperclass()) { + Field[] fs = superClass.getDeclaredFields(); + List newFs = Lists.newArrayList(); + for (int i = 0; i < fs.length; i++) { + if (fs[i].getName().equals("serialVersionUID")) { + continue; } - /** -      * aliases为每条记录的数据库字段名,ORACLE字段名默认为大写 -      * tupe为与aliases对应的字段的值 -      */ - @Override - public Object transformTuple(final Object[] tuple, final String[] aliases) { - Object result; - try { - result = this.resultClass.newInstance(); - for (int i = 0; i < aliases.length; i++) { - for (int j=0;j implements IApiResponse { @@ -10,17 +9,6 @@ public abstract class AbstractApiResponse implements */ private static final long serialVersionUID = 846108786006850165L; - @JsonIgnore - @Deprecated - protected boolean acknowleged = true; - - @Override - @JsonIgnore - @Deprecated - public boolean isAcknowleged() { - return acknowleged; - } - protected int code = 0; protected String message = null; diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/DefaultApiResponse.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/DefaultApiResponse.java index 72ac7e2..5ea45c5 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/DefaultApiResponse.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/DefaultApiResponse.java @@ -16,37 +16,14 @@ public class DefaultApiResponse extends AbstractApiR return data; } -// public void setData(T data) { -// this.data = data; -// } -// -// public DefaultApiResponse() { -// -// } - public DefaultApiResponse(T data) { this(0, null, data); } - @Deprecated - public DefaultApiResponse(boolean acknowleged, T data) { - super.acknowleged = acknowleged; - if (super.acknowleged == false) { - super.code = -1; - super.message = "未知错误"; - } - - this.data = data; - } - public DefaultApiResponse(int code, String message, T data) { super.code = code; super.message = message; - if (code != 0) { - super.acknowleged = false; - } - this.data = data; } diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/IApiResponse.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/IApiResponse.java index 487183a..f8f2573 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/IApiResponse.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/IApiResponse.java @@ -2,15 +2,10 @@ package com.supwisdom.institute.backend.common.framework.vo.response; import java.io.Serializable; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData; public interface IApiResponse extends Serializable { - @JsonIgnore - @Deprecated - boolean isAcknowleged(); - int getCode(); String getMessage(); diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/data/IApiQueryResponseData.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/data/IApiQueryResponseData.java index 4e78c10..5789a96 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/data/IApiQueryResponseData.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/vo/response/data/IApiQueryResponseData.java @@ -1,11 +1,10 @@ package com.supwisdom.institute.backend.common.framework.vo.response.data; +import java.io.Serializable; import java.util.List; import java.util.Map; -import com.supwisdom.institute.backend.common.framework.entity.ABaseEntity; - -public interface IApiQueryResponseData extends IApiResponseData { +public interface IApiQueryResponseData extends IApiResponseData { /** * 当前页码 diff --git a/common/utils/src/main/java/com/supwisdom/institute/backend/common/util/MapBeanUtils.java b/common/utils/src/main/java/com/supwisdom/institute/backend/common/util/MapBeanUtils.java index 0a5f50f..136f9de 100644 --- a/common/utils/src/main/java/com/supwisdom/institute/backend/common/util/MapBeanUtils.java +++ b/common/utils/src/main/java/com/supwisdom/institute/backend/common/util/MapBeanUtils.java @@ -1,13 +1,5 @@ package com.supwisdom.institute.backend.common.util; -import com.google.common.collect.Lists; - -import java.beans.BeanInfo; -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.reflect.InvocationTargetException; -import java.util.List; import java.util.Map; public class MapBeanUtils { @@ -155,72 +147,72 @@ public class MapBeanUtils { return defaultValue; } - /** - * 获取 mapBean 中 key 的 value,若不存在,则返回 -1L - * - * @param mapBean - * @param key - * @return - */ - public static List getList(Map mapBean, String key) { - - return getList(mapBean, key, Lists.newArrayList()); - } - - /** - * 获取 mapBean 中 key 的 value,若不存在,则返回 defaultValue - * - * @param mapBean - * @param key - * @param defaultValue - * @return - */ - public static List getList(Map mapBean, String key, List defaultValue) { - - if (containsValue(mapBean, key)) { - List l = (List)mapBean.get(key); - return l == null ? defaultValue : l; - } - - return defaultValue; - } - - /** - * 将一个 Map 对象转化为一个 JavaBean - * @param obj 要转化的对象 - * @param map 包含属性值的 map - * @return 转化出来的 JavaBean 对象 - * @throws IntrospectionException - * 如果分析类属性失败 - * @throws IllegalAccessException - * 如果实例化 JavaBean 失败 - * @throws InstantiationException - * 如果实例化 JavaBean 失败 - * @throws InvocationTargetException - * 如果调用属性的 setter 方法失败 - */ - public static Object convert2Bean(Object obj, Map map) - throws IntrospectionException, IllegalAccessException, - InstantiationException, InvocationTargetException { - BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); // 获取类属性 - - // 给 JavaBean 对象的属性赋值 - PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); - for (int i = 0; i< propertyDescriptors.length; i++) { - PropertyDescriptor descriptor = propertyDescriptors[i]; - String propertyName = descriptor.getName(); - - if (map.containsKey(propertyName)) { - // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。 - Object value = map.get(propertyName); - - Object[] args = new Object[1]; - args[0] = value; - - descriptor.getWriteMethod().invoke(obj, args); - } - } - return obj; - } +// /** +// * 获取 mapBean 中 key 的 value,若不存在,则返回 -1L +// * +// * @param mapBean +// * @param key +// * @return +// */ +// public static List getList(Map mapBean, String key) { +// +// return getList(mapBean, key, Lists.newArrayList()); +// } +// +// /** +// * 获取 mapBean 中 key 的 value,若不存在,则返回 defaultValue +// * +// * @param mapBean +// * @param key +// * @param defaultValue +// * @return +// */ +// public static List getList(Map mapBean, String key, List defaultValue) { +// +// if (containsValue(mapBean, key)) { +// List l = (List)mapBean.get(key); +// return l == null ? defaultValue : l; +// } +// +// return defaultValue; +// } +// +// /** +// * 将一个 Map 对象转化为一个 JavaBean +// * @param obj 要转化的对象 +// * @param map 包含属性值的 map +// * @return 转化出来的 JavaBean 对象 +// * @throws IntrospectionException +// * 如果分析类属性失败 +// * @throws IllegalAccessException +// * 如果实例化 JavaBean 失败 +// * @throws InstantiationException +// * 如果实例化 JavaBean 失败 +// * @throws InvocationTargetException +// * 如果调用属性的 setter 方法失败 +// */ +// public static Object convert2Bean(Object obj, Map map) +// throws IntrospectionException, IllegalAccessException, +// InstantiationException, InvocationTargetException { +// BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); // 获取类属性 +// +// // 给 JavaBean 对象的属性赋值 +// PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); +// for (int i = 0; i< propertyDescriptors.length; i++) { +// PropertyDescriptor descriptor = propertyDescriptors[i]; +// String propertyName = descriptor.getName(); +// +// if (map.containsKey(propertyName)) { +// // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。 +// Object value = map.get(propertyName); +// +// Object[] args = new Object[1]; +// args[0] = value; +// +// descriptor.getWriteMethod().invoke(obj, args); +// } +// } +// return obj; +// } } diff --git a/doc/USAGE.md b/doc/USAGE.md new file mode 100644 index 0000000..40d7b96 --- /dev/null +++ b/doc/USAGE.md @@ -0,0 +1,688 @@ +# 应用开发框架 - 项目开发说明 + + +[TOC] + + +## 项目介绍 + + +### 公共类库 + +common,提供公用的工具类、框架代码 + + + +### 业务类库 + +以 业务领域 为单位,实现 业务领域、业务接口,如: + +* system,系统功能 + +* biz,业务示例 + +每个 业务领域项目下,又分为 领域层 domain、接口层 api + +业务类库中,尽量以通用服务的方式实现业务 + + + +### 微服务项目 sa + +将 业务类库 包装为 微服务,对外提供 RESTful API,以及相关的接口文档的访问、测试 + + + +### 后端项目 bff + +提供 面向UI 的后端接口 + +对服务接口的转发(建议,避免使用) + +对服务接口的聚合、裁剪、适配 + +提供用户认证,保护接口的访问权限 + + + +## 项目开发 + + +### 业务类库 + +面对业务需求,设计时,进行领域划分,保证划分的粒度适中 + +* 在 领域层 domain,创建 实体 entity、数据传输对象 dto、持久化 repo、业务逻辑 service + +* 在 接口层 api,创建 值对象 vo、接口 api + +#### 实体 entity + +```java +package com.supwisdom.institute.backend.biz.domain.entity; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +import lombok.Getter; +import lombok.Setter; + +import com.supwisdom.institute.backend.common.framework.entity.ABaseEntity; + +@Entity +@Table(name = "TB_BIZ") +public class Biz extends ABaseEntity { + + /** + * + */ + private static final long serialVersionUID = 5503233707196628811L; + + @Getter + @Setter + @Column(name = "NAME") + private String name; + + @Getter + @Setter + @Column(name = "BOOL") + private Boolean bool; + + @Getter + @Setter + @Column(name = "DATE") + private Date date; + + @Getter + @Setter + @Column(name = "NUM") + private Integer num; + +} + +``` + +继承 `ABaseEntity` + +注解 `@Entity`,指定该 class 为一个实体 + +注解 `@Table`,指定该实体对应的数据库表的表名 + +注解 `@Column`,指定该属性对应的数据库表的字段名 + +表名、字段名 都采用大写,多个单词用 `下划线(_)` 隔开 + + + +#### 数据传输对象 dto + +```java + +``` + + +#### 持久化 repo + +```java +package com.supwisdom.institute.backend.biz.domain.repo; + +import java.util.Map; + +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Repository; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository; + +@Repository +public interface BizRepository extends BaseJpaRepository { + + @Override + public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { + + + return null; + } + +} + +``` + +继承 `BaseJpaRepository`,基类中,已经实现了基本的 CURD 逻辑,方法如下: + +* 分页查询 +```java + public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) +``` + +* 根据ID获取 +```java + public default E selectById(String id) +``` + +* 新增 +```java + public default E insert(E entity) +``` + +* 更新 +```java + public default E update(E entity) +``` + +* 删除 +```java + public default void delete(String id) +``` + + +注解 `@Repository`,指定该 class 为一个数据持久化类 + +其中 `BaseJpaRepository` 的 `selectPageList` 方法,默认返回所有数据,不会处理查询条件、排序,故一般都需要由业务自行重写 + +```java + default Specification convertSpecification(Map mapBean) { + + Specification spec = new Specification() { + + /** + * + */ + private static final long serialVersionUID = -1820403213133310124L; + + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + List predicates = new ArrayList<>(); + + if (mapBean != null) { + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "name"))) { + predicates.add(criteriaBuilder.like(root.get("name"), MapBeanUtils.getString(mapBean, "name"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getBoolean(mapBean, "bool"))) { + predicates.add(criteriaBuilder.equal(root.get("bool"), MapBeanUtils.getBoolean(mapBean, "bool"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "dateBegin"))) { + String grantTimeBegin = MapBeanUtils.getString(mapBean, "dateBegin"); + Date d = DateUtil.parseDate(grantTimeBegin+" 00:00:00", "yyyy-MM-dd HH:mm:ss"); + + if (d != null) { + predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("date"), d)); + } + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "dateEnd"))) { + String grantTimeEnd = MapBeanUtils.getString(mapBean, "dateEnd"); + Date d = DateUtil.parseDate(grantTimeEnd+" 23:59:59", "yyyy-MM-dd HH:mm:ss"); + + if (d != null) { + predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("date"), d)); + } + } + } + + return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])); + } + + }; + + return spec; + } + + @Override + public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { + + Specification spec = this.convertSpecification(mapBean); + + if (loadAll) { + pageIndex = 0; + pageSize = Integer.MAX_VALUE; + } + + Sort sort = new Sort(Sort.Direction.DESC, "date"); // Sort.unsorted + + if (orderBy != null) { + List orders = new ArrayList<>(); + + orderBy.forEach((k, v) -> { + if ("asc".equalsIgnoreCase(v)) { + Order order = Order.asc(k); + orders.add(order); + } else if ("desc".equalsIgnoreCase(v)) { + Order order = Order.desc(k); + orders.add(order); + } else { + Order order = Order.by(k); + orders.add(order); + } + }); + + sort = Sort.by(orders); + } + + PageRequest pageRequest = PageRequest.of(pageIndex, pageSize, sort); + + return this.findAll(spec, pageRequest); + } + +``` + + + +#### 业务逻辑 service + +```java +package com.supwisdom.institute.backend.biz.domain.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.supwisdom.institute.backend.biz.domain.entity.Biz; +import com.supwisdom.institute.backend.biz.domain.repo.BizRepository; +import com.supwisdom.institute.backend.common.framework.service.ABaseService; + +@Service +public class BizService extends ABaseService { + + @Autowired + private BizRepository bizRepository; + + @Override + public BizRepository getRepo() { + return bizRepository; + } + +} + +``` + +继承 `ABaseService` + +注解 `@Service`,指定该 class 为一个业务逻辑类 + +注入 业务对应的 Repository,并实现 `public REPO getRepo()` + + +#### 值对象 vo + +这里的vo,目前主要用于接口的请求、响应对象的封装 + + + +#### 接口 api + +```java +package com.supwisdom.institute.backend.biz.api.v1.admin; + +import io.swagger.annotations.Api; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(value = "BizAdminBiz", tags = { "BizAdminBiz" }, description = "Biz示例接口") +@RestController +@RequestMapping("/v1/admin/biz") +public class AdminBizController { + +} + +``` + + + +### 微服务项目 + +* 关于 Application + +```java +package com.supwisdom.institute.backend.admin.sa; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +import com.supwisdom.infras.online.doc.configuration.EnableInfrasOnlineDoc; +import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit; +import com.supwisdom.institute.backend.common.framework.exception.EnableCustomExceptionHandler; + +@SpringBootApplication + +@EnableSimpleUserTransmit +@EnableCustomExceptionHandler + +@EnableInfrasOnlineDoc + +@EntityScan(basePackages = {"com.supwisdom.**.domain.entity"}) // 扫描子项目下的实体 +@EnableJpaRepositories(basePackages = {"com.supwisdom.**.domain.repo"}) // 扫描子项目下的持久类 +@ComponentScan(basePackages = {"com.supwisdom"}) +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + public CorsFilter corsFilter() { + final CorsConfiguration config = new CorsConfiguration(); + // config.setAllowCredentials(true); + config.addAllowedOrigin("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + + final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/v2/api-docs", config); + + return new CorsFilter(source); + } + +} + +``` + +注解 `@SpringBootApplication`, + +注解 `@EnableSimpleUserTransmit`,从请求中接收 User 信息,通过 Feign 调用外部服务时,传递 User 信息 + +注解 `@EnableCustomExceptionHandler`,将异常转换为符合开发规范的 json 数据 + +注解 `@EntityScan`,扫描实体 + +注解 `@EnableJpaRepositories`,扫描持久类 + +注解 `@ComponentScan`,扫描组件,如 @Service、@Controller、@RestController 等 + +Filter `corsFilter`,允许跨域请求,此处允许对路径 `/v2/api-docs` 的跨域请求 + + +* 在 pom 中,添加依赖配置 + +```xml + + com.supwisdom.institute + sw-backend-biz-api + + +``` + +* (可选)在 application.yml 中,添加业务相关的配置项 + + + +### 后端项目 + +* 关于 Application + +```java +package com.supwisdom.institute.backend.admin.bff; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +import com.supwisdom.infras.security.configure.basic.EnableInfrasBasicApi; +import com.supwisdom.infras.security.configure.cas.EnableInfrasCasSecurity; +import com.supwisdom.infras.security.configure.jwt.EnableInfrasJWTApi; +import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit; +import com.supwisdom.institute.backend.common.framework.exception.EnableCustomExceptionHandler; + +@SpringBootApplication +@EnableFeignClients + +@EnableSimpleUserTransmit +@EnableCustomExceptionHandler + +@EnableInfrasCasSecurity + +@EnableInfrasBasicApi +@EnableInfrasJWTApi +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + public CorsFilter corsFilter() { + final CorsConfiguration config = new CorsConfiguration(); + //config.setAllowCredentials(true); + config.addAllowedOrigin("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + + final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/v2/api-docs", config); + source.registerCorsConfiguration("/api/**", config); // 对 /api/** 下的请求,支持 cors 跨域请求,如不需要可以注释 + + return new CorsFilter(source); + } + +} + +``` + +注解 `@SpringBootApplication`, + +注解 `@EnableFeignClients`,支持 FeignClient + +注解 `@EnableSimpleUserTransmit`,从请求中接收 User 信息,通过 Feign 调用外部服务时,传递 User 信息 + +注解 `@EnableCustomExceptionHandler`,将异常转换为符合开发规范的 json 数据 + +注解 `@EnableInfrasCasSecurity`,支持 cas,在 application.yml 可配置是否启用 + +注解 `@EnableInfrasBasicApi`,支持 basic 认证(一般在开发环境启用),在 application.yml 可配置是否启用 + +注解 `@EnableInfrasJWTApi`,支持 jwt 认证(一般在生产环境启用),在 application.yml 可配置是否启用 + + + +* 关于接口请求 + +后端项目中,使用服务接口的方式有 2 种,一是 请求转发,二是 远程调用 + + +#### 请求转发 + +请求转发的方式,基于 spring-cloud-gateway 实现 + +* 在 pom.xml 中,添加依赖配置 + +```xml + + org.springframework.cloud + spring-cloud-starter-gateway + + +``` + +* 在 application.yml 中,添加 spring.cloud.gateway.routes 配置 + +```yaml +spring: + cloud: + gateway: + routes: + - id: system-api + uri: http://localhost:8081 + predicates: + - Path=/api/system/** + filters: + - RewritePath=/api/system/(?.*), /$\{suffix} + - id: biz-api + uri: http://localhost:8081 + predicates: + - Path=/api/biz/** + filters: + - RewritePath=/api/biz/(?.*), /$\{suffix} + +``` + +**疑问?为何不用服务注册与发现** + +考虑到,后期部署采用 k8s,而 k8s 会提供服务注册与发现的能力,所以此处不再考虑 + +若存在脱离 k8s 部署的情况,可以考虑采用 nginx 实现服务端负载均衡即可,或其他方案 + + +#### 远程调用 + +远程调用的方式,基于 spring-cloud-openfeign 实现 + +* 在 pom.xml 中,添加依赖配置 + +```xml + + org.springframework.cloud + spring-cloud-starter-openfeign + + +``` + +* 在 Application 中,添加注解 `@EnableFeignClients`,`@EnableSimpleUserTransmit` + +注解 `@EnableFeignClients`,表示启用 FeignClients 的配置 + +注解 `@EnableSimpleUserTransmit`,表示将 后端的登录用户信息,在请求 服务接口 的过程中,进行传递(加入到请求头 Header 中) + +* 在 application.yml 中,添加 服务接口地址 配置 + +如: +```yml +sw-backend-biz-api.uri: http://localhost:8081 +``` + +* 在 remote 包 下,创建 FeignClient 类、FallbackFactory 类 + +```java +package com.supwisdom.institute.backend.admin.bff.apis.remote.biz; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.alibaba.fastjson.JSONObject; +import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz; + +@FeignClient( + name = "biz-biz-remote-feign-client", + url = "${sw-backend-biz-api.uri}/v1/admin/biz", + fallbackFactory = BizRemoteFallbackFactory.class +) +public interface BizRemoteFeignClient { + + @RequestMapping(method = RequestMethod.GET) + JSONObject query( + @RequestParam(name = "loadAll") boolean loadAll, + @RequestParam(name = "pageIndex") int pageIndex, + @RequestParam(name = "pageSize") int pageSize + + ); + + @RequestMapping(method = RequestMethod.GET, path = "/{id}") + JSONObject load( + @PathVariable(name = "id") String id + ); + + @RequestMapping(method = RequestMethod.POST) + JSONObject create( + @RequestBody Biz biz + ); + + @RequestMapping(method = RequestMethod.PUT, path = "/{id}") + JSONObject update( + @PathVariable(name = "id") String id, + @RequestBody Biz biz + ); + + @RequestMapping(method = RequestMethod.DELETE, path = "/{id}") + JSONObject delete( + @PathVariable(name = "id") String id + ); + +} + +``` + +注解 `@FeignClient`,`url` 指定后端服务的地址,`fallbackFactory` 指定熔断回调处理的工厂类 + +```java +package com.supwisdom.institute.backend.admin.bff.apis.remote.biz; + +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; +import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz; +import com.supwisdom.institute.backend.admin.bff.remote.FallbackError; + +import feign.hystrix.FallbackFactory; + +@Component +public class BizRemoteFallbackFactory implements FallbackFactory { + + @Override + public BizRemoteFeignClient create(Throwable cause) { + return new BizRemoteFeignClient() { + + @Override + public JSONObject query(boolean loadAll, int pageIndex, int pageSize) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject load(String id) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject create(Biz biz) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject update(String id, Biz biz) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + @Override + public JSONObject delete(String id) { + if (cause != null) { + cause.printStackTrace(); + } + return FallbackError.defaultErrorJson(cause); + } + + }; + } + +} + +``` \ No newline at end of file diff --git a/sa/admin/pom.xml b/sa/admin/pom.xml index 09c386c..a03165a 100644 --- a/sa/admin/pom.xml +++ b/sa/admin/pom.xml @@ -35,6 +35,13 @@ spring-boot-starter-actuator + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.boot spring-boot-starter-web @@ -46,10 +53,10 @@ - + com.supwisdom.infras diff --git a/sa/admin/src/main/java/com/supwisdom/institute/backend/admin/sa/Application.java b/sa/admin/src/main/java/com/supwisdom/institute/backend/admin/sa/Application.java index 252e9bf..8bf05fd 100644 --- a/sa/admin/src/main/java/com/supwisdom/institute/backend/admin/sa/Application.java +++ b/sa/admin/src/main/java/com/supwisdom/institute/backend/admin/sa/Application.java @@ -12,10 +12,12 @@ import org.springframework.web.filter.CorsFilter; import com.supwisdom.infras.online.doc.configuration.EnableInfrasOnlineDoc; import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit; +import com.supwisdom.institute.backend.common.framework.exception.EnableCustomExceptionHandler; @SpringBootApplication @EnableSimpleUserTransmit +@EnableCustomExceptionHandler @EnableInfrasOnlineDoc diff --git a/system/api/pom.xml b/system/api/pom.xml index 76a9dcd..07e9732 100644 --- a/system/api/pom.xml +++ b/system/api/pom.xml @@ -38,6 +38,11 @@ spring-boot-starter + + org.springframework.boot + spring-boot-starter-web + + com.supwisdom.institute diff --git a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminConfigController.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminConfigController.java index 9eac867..b67493a 100644 --- a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminConfigController.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminConfigController.java @@ -21,16 +21,16 @@ import org.springframework.web.bind.annotation.RestController; import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse; +import com.supwisdom.institute.backend.system.api.vo.request.ConfigCreateRequest; +import com.supwisdom.institute.backend.system.api.vo.request.ConfigQueryRequest; +import com.supwisdom.institute.backend.system.api.vo.request.ConfigUpdateRequest; +import com.supwisdom.institute.backend.system.api.vo.response.ConfigCreateResponseData; +import com.supwisdom.institute.backend.system.api.vo.response.ConfigLoadResponseData; +import com.supwisdom.institute.backend.system.api.vo.response.ConfigQueryResponseData; +import com.supwisdom.institute.backend.system.api.vo.response.ConfigUpdateResponseData; import com.supwisdom.institute.backend.system.domain.entity.Config; import com.supwisdom.institute.backend.system.domain.exception.ConfigException; import com.supwisdom.institute.backend.system.domain.service.ConfigService; -import com.supwisdom.institute.backend.system.domain.vo.request.ConfigCreateRequest; -import com.supwisdom.institute.backend.system.domain.vo.request.ConfigQueryRequest; -import com.supwisdom.institute.backend.system.domain.vo.request.ConfigUpdateRequest; -import com.supwisdom.institute.backend.system.domain.vo.response.ConfigCreateResponseData; -import com.supwisdom.institute.backend.system.domain.vo.response.ConfigLoadResponseData; -import com.supwisdom.institute.backend.system.domain.vo.response.ConfigQueryResponseData; -import com.supwisdom.institute.backend.system.domain.vo.response.ConfigUpdateResponseData; @Api(value = "SystemAdminConfig", tags = { "SystemAdminConfig" }, description = "配置项的操作接口") @Slf4j diff --git a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/.gitkeep b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigCreateRequest.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigCreateRequest.java similarity index 88% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigCreateRequest.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigCreateRequest.java index 8c741fe..94d8578 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigCreateRequest.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigCreateRequest.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.request; +package com.supwisdom.institute.backend.system.api.vo.request; import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest; diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigQueryRequest.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigQueryRequest.java similarity index 91% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigQueryRequest.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigQueryRequest.java index e83083b..d167604 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigQueryRequest.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigQueryRequest.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.request; +package com.supwisdom.institute.backend.system.api.vo.request; import lombok.Getter; import lombok.Setter; diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigUpdateRequest.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigUpdateRequest.java similarity index 90% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigUpdateRequest.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigUpdateRequest.java index 6f7e1a5..8ebf5f2 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/request/ConfigUpdateRequest.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/ConfigUpdateRequest.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.request; +package com.supwisdom.institute.backend.system.api.vo.request; import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest; diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigCreateResponseData.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigCreateResponseData.java similarity index 92% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigCreateResponseData.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigCreateResponseData.java index a14a607..3d130d8 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigCreateResponseData.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigCreateResponseData.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.response; +package com.supwisdom.institute.backend.system.api.vo.response; import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData; diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigLoadResponseData.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigLoadResponseData.java similarity index 92% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigLoadResponseData.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigLoadResponseData.java index a32312d..c93fa8c 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigLoadResponseData.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigLoadResponseData.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.response; +package com.supwisdom.institute.backend.system.api.vo.response; import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData; diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigQueryResponseData.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigQueryResponseData.java similarity index 92% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigQueryResponseData.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigQueryResponseData.java index 906d681..aea651a 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigQueryResponseData.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigQueryResponseData.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.response; +package com.supwisdom.institute.backend.system.api.vo.response; import lombok.Getter; import lombok.Setter; @@ -9,8 +9,8 @@ import java.util.Map; import org.springframework.data.domain.Page; import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData; +import com.supwisdom.institute.backend.system.api.vo.request.ConfigQueryRequest; import com.supwisdom.institute.backend.system.domain.entity.Config; -import com.supwisdom.institute.backend.system.domain.vo.request.ConfigQueryRequest; /** * @author loie diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigRemoveResponseData.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigRemoveResponseData.java similarity index 92% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigRemoveResponseData.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigRemoveResponseData.java index 556307b..d593ed4 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigRemoveResponseData.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigRemoveResponseData.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.response; +package com.supwisdom.institute.backend.system.api.vo.response; import lombok.Getter; import lombok.Setter; diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigUpdateResponseData.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigUpdateResponseData.java similarity index 92% rename from system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigUpdateResponseData.java rename to system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigUpdateResponseData.java index 51ca051..95a1d24 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/vo/response/ConfigUpdateResponseData.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/ConfigUpdateResponseData.java @@ -1,4 +1,4 @@ -package com.supwisdom.institute.backend.system.domain.vo.response; +package com.supwisdom.institute.backend.system.api.vo.response; import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData; diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/.gitkeep b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/exception/.gitkeep b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/exception/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/model/.gitkeep b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/model/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/.gitkeep b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/.gitkeep b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/.gitkeep new file mode 100644 index 0000000..e69de29 -- 2.17.1