package com.qianwen.smartman.common.config;
|
|
import com.fasterxml.classmate.TypeResolver;
|
import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
|
import com.google.common.collect.Lists;
|
import java.lang.reflect.Type;
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.List;
|
import com.qianwen.smartman.common.constant.MenuConstant;
|
import com.qianwen.smartman.common.launch.SwaggerPlugin;
|
import com.qianwen.core.secure.BladeUser;
|
import com.qianwen.core.swagger.EnableSwagger;
|
import com.qianwen.core.swagger.SwaggerProperties;
|
import com.qianwen.core.swagger.SwaggerUtil;
|
//import com.qianwen.smartman.modules.dmpLog.constant.DmpLogSyncConstant;
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.plugin.core.config.EnablePluginRegistries;
|
import springfox.documentation.builders.ApiInfoBuilder;
|
import springfox.documentation.builders.PathSelectors;
|
import springfox.documentation.schema.AlternateTypeRule;
|
import springfox.documentation.schema.AlternateTypeRules;
|
import springfox.documentation.service.ApiInfo;
|
import springfox.documentation.service.AuthorizationScope;
|
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;
|
|
@EnableSwagger
|
@Configuration
|
@EnablePluginRegistries({SwaggerPlugin.class})
|
|
|
public class SwaggerConfiguration {
|
private final SwaggerProperties swaggerProperties;
|
private final OpenApiExtensionResolver openApiExtensionResolver;
|
|
public SwaggerConfiguration(final SwaggerProperties swaggerProperties, final OpenApiExtensionResolver openApiExtensionResolver) {
|
this.swaggerProperties = swaggerProperties;
|
this.openApiExtensionResolver = openApiExtensionResolver;
|
}
|
|
@Bean
|
public Docket authDocket() {
|
return docket("authentication", Collections.singletonList("com.qianwen.smartman.modules.auth"));
|
}
|
|
@Bean
|
public Docket sysDocket() {
|
return docket("system", Arrays.asList("com.qianwen.smartman.modules.system", "com.qianwen.smartman.modules.resource"));
|
}
|
|
@Bean
|
public Docket notifyDocket() {
|
return docket("notify", Arrays.asList("com.qianwen.smartman.modules.notify"));
|
}
|
|
@Bean
|
public Docket cpsDocket() {
|
return docket("cps", Arrays.asList("com.qianwen.smartman.modules.cps"));
|
}
|
|
@Bean
|
public Docket fmsDocket() {
|
return docket("fms", Arrays.asList("com.qianwen.smartman.modules.fms"));
|
}
|
|
@Bean
|
public Docket mdcDocket() {
|
return docket("mdc", Lists.newArrayList(new String[]{"com.qianwen.smartman.modules.mdc"}));
|
}
|
|
@Bean
|
public Docket tpmDocket() {
|
return docket("tpm", Lists.newArrayList(new String[]{"com.qianwen.smartman.modules.tpm"}));
|
}
|
|
@Bean
|
public Docket dncDocket() {
|
return docket("dnc", Lists.newArrayList(new String[]{"com.qianwen.smartman.modules.dnc"}));
|
}
|
|
@Bean
|
public Docket visualDocket() {
|
return docket("visual", Lists.newArrayList(new String[]{"com.qianwen.smartman.modules.visual"}));
|
}
|
|
@Bean
|
public Docket deskDocket() {
|
return docket(MenuConstant.DESK, Collections.singletonList("com.qianwen.smartman.modules.desk"));
|
}
|
|
@Bean
|
public Docket tpDocket() {
|
return docket("trace", Collections.singletonList("com.qianwen.smartman.modules.trace"));
|
}
|
|
@Bean
|
public Docket reportDocket() {
|
return docket("report", Collections.singletonList("com.qianwen.smartman.modules.report"));
|
}
|
|
@Bean
|
public Docket syncDocket() {
|
return docket("sync", Collections.singletonList("com.qianwen.smartman.modules.sync"));
|
}
|
/*
|
@Bean
|
public Docket dmpLogDocket() {
|
return docket(DmpLogSyncConstant.DMP_LOG_TOPIC, Collections.singletonList("com.qianwen.smartman.modules.dmpLog"));
|
}
|
*/
|
|
@Bean
|
public Docket toolDocket() {
|
return docket("tool", Collections.singletonList("com.qianwen.smartman.modules.tool"));
|
}
|
|
@Bean
|
public Docket perfDocket() {
|
return docket("perf", Collections.singletonList("com.qianwen.smartman.modules.perf"));
|
}
|
|
@Bean
|
public Docket productionDocket() {
|
return docket("coproduction", Collections.singletonList("com.qianwen.smartman.modules.coproduction"));
|
}
|
|
@Bean
|
public Docket andonDocket() {
|
return docket("andon", Collections.singletonList("com.qianwen.smartman.modules.andon"));
|
}
|
|
@Bean
|
public Docket workinghourDocket() {
|
return docket("workinghour", Collections.singletonList("com.qianwen.smartman.modules.workinghour"));
|
}
|
|
private Docket docket(String groupName, List<String> basePackages) {
|
TypeResolver resolver = new TypeResolver();
|
AlternateTypeRule listLongToString = AlternateTypeRules.newRule(resolver.resolve(List.class, new Type[]{Long.class}), resolver.resolve(List.class, new Type[]{String.class}));
|
return new Docket(DocumentationType.SWAGGER_2).groupName(groupName).apiInfo(apiInfo()).ignoredParameterTypes(new Class[]{BladeUser.class}).alternateTypeRules(new AlternateTypeRule[]{listLongToString}).directModelSubstitute(Long.class, String.class).select().apis(SwaggerUtil.basePackages(basePackages)).paths(PathSelectors.any()).build().securityContexts(securityContexts()).securitySchemes(securitySchemas()).extensions(this.openApiExtensionResolver.buildExtensions(groupName));
|
}
|
|
private List<SecurityContext> securityContexts() {
|
return Collections.singletonList(SecurityContext.builder().securityReferences(defaultAuth()).forPaths(PathSelectors.regex("^.*$")).build());
|
}
|
|
List<SecurityReference> defaultAuth() {
|
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverywhere");
|
AuthorizationScope[] authorizationScopes = {authorizationScope};
|
return Lists.newArrayList(new SecurityReference[]{new SecurityReference(SwaggerUtil.clientInfo().getName(), authorizationScopes), new SecurityReference(SwaggerUtil.bladeAuth().getName(), authorizationScopes), new SecurityReference(SwaggerUtil.bladeTenant().getName(), authorizationScopes)});
|
}
|
|
private List<SecurityScheme> securitySchemas() {
|
return Lists.newArrayList(new SecurityScheme[]{SwaggerUtil.clientInfo(), SwaggerUtil.bladeAuth(), SwaggerUtil.bladeTenant()});
|
}
|
|
private ApiInfo apiInfo() {
|
return new ApiInfoBuilder().title(this.swaggerProperties.getTitle()).description(this.swaggerProperties.getDescription()).license(this.swaggerProperties.getLicense()).licenseUrl(this.swaggerProperties.getLicenseUrl()).termsOfServiceUrl(this.swaggerProperties.getTermsOfServiceUrl()).contact(new Contact(this.swaggerProperties.getContact().getName(), this.swaggerProperties.getContact().getUrl(), this.swaggerProperties.getContact().getEmail())).version(this.swaggerProperties.getVersion()).build();
|
}
|
}
|