医院废弃物信息化管理平台
“mitao”
2025-12-24 3763145f34d7706923d55edc32f5cfbc8bc08b92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package cn.besteam.config;
 
import cn.besteam.common.api.vo.Result;
import cn.besteam.common.constant.CommonConstant;
import com.fasterxml.classmate.TypeResolver;
import com.google.common.base.Predicate;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.AlternateTypeRule;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.schema.WildcardType;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import static springfox.documentation.schema.AlternateTypeRules.newRule;
 
/**
 * @author scott
 */
@Slf4j
@Configuration
@EnableSwagger2
public class Swagger2Config implements WebMvcConfigurer {
 
    @Autowired
    private TypeResolver typeResolver;
 
    @Autowired
    private SysEnv sysEnv;
 
    /**
     * 显示swagger-ui.html文档展示页,还必须注入swagger资源:
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
 
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
 
    @Bean
    public Docket api() {
 
        MyDocket md = new MyDocket("1.移动端接口");
        if (sysEnv.isGenApi()) {
            // 不包含/ops接口
            return md.open("cn.besteam.modules", rule(), PathSelectors.ant("/api/**"));
        } else {
            return md.close();
        }
    }
 
    @Bean
    public Docket backend() {
 
        MyDocket md = new MyDocket("2.后台接口");
        if (sysEnv.isGenApi()) {
            return md.open("cn.besteam.modules", rule(), PathSelectors.regex("^((?!/api).)*$"));
        } else {
            return md.close();
        }
    }
 
    private AlternateTypeRule rule() {
 
        return newRule(typeResolver.resolve(DeferredResult.class, typeResolver.resolve(Result.class, WildcardType.class)), typeResolver.resolve(WildcardType.class));
    }
 
    /**
     * 自定义配置类
     */
    static class MyDocket extends Docket {
 
        public MyDocket(String groupName) {
 
            super(DocumentationType.SWAGGER_2);
            this.groupName(groupName);
            this.apiInfo(new ApiInfoBuilder().title("医疗废物平台接口").description("").contact(new Contact("智云启服全体优秀程序员", "https://www.besteam.cn/", "")).version("1.0").build());
        }
 
        public Docket open(String basePackage, AlternateTypeRule rule, Predicate<String> pathSelector) {
 
            return this.select().apis(RequestHandlerSelectors.basePackage(basePackage)).apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(pathSelector).build().pathMapping("/").directModelSubstitute(Date.class, String.class).directModelSubstitute(Timestamp.class, String.class).alternateTypeRules(rule).globalOperationParameters(setHeaderToken()).useDefaultResponseMessages(false);
        }
 
        /**
         * 公共token头部参数
         *
         * @return
         */
        private List<Parameter> setHeaderToken() {
 
            ParameterBuilder tokenPar = new ParameterBuilder();
            List<Parameter> pars = new ArrayList<>();
            tokenPar.name(CommonConstant.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
            pars.add(tokenPar.build());
            return pars;
        }
 
        /**
         * 关闭文档
         *
         * @return
         */
        public Docket close() {
 
            return this.select().apis(RequestHandlerSelectors.none()).build();
        }
 
    }
 
}