liusheng
5 天以前 0bbbd746e8c39d91ad7b47a4e36e29ab972dc98c
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
package com.ruoyi.satisfaction.config;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
/**
 * 满意度模块的 MVC 配置:把 {@link SatisfactionAvailabilityInterceptor} 只挂到
 * <b>21 个满意度接口中属于本模块的 17 个端点</b>上。
 * <p>
 * <b>为什么逐个列路径而不是用 {@code /smartor/**} 之类的前缀</b>:
 * <ul>
 *   <li>{@code /smartor/serviceSubtaskDetail/**} 下既有满意度端点(5 个),
 *       也有随访明细端点(其它),用前缀会误伤;</li>
 *   <li>{@code /smartor/trace/**} 下只有 1 个满意度端点,其余是异常跟踪业务;</li>
 *   <li>因此这里显式枚举,保证"只拦满意度",绝不影响其它业务。</li>
 * </ul>
 * 另外 4 个使用满意度数据的随访接口({@code patItemExport} / {@code getSfStatisticsJoy} /
 * {@code getSfStatisticsJoydetails} / {@code saveMYDQuestionAnswer})<b>不在这里</b>:
 * 它们属于随访业务,模块关闭时必须继续可用(满意度部分降级为空/全零)。
 */
@Configuration
public class SatisfactionWebConfig implements WebMvcConfigurer {
 
    /**
     * 患者满意度(11 个,原 {@code PatSatisfactionController})
     */
    private static final String PAT_SATISFACTION_PATTERN = "/smartor/satisfaction/**";
 
    /**
     * 省立同德 / 门诊满意度独占的 5 个端点(原挂在随访明细 Controller 上)
     */
    private static final List<String> SLTD_ENDPOINTS = Arrays.asList(
            "/smartor/serviceSubtaskDetail/sltdMydTotalByScore",
            "/smartor/serviceSubtaskDetail/statQuestionOptionByKsOrBq",
            "/smartor/serviceSubtaskDetail/mydTrend",
            "/smartor/serviceSubtaskDetail/sltdMydTotalByDimension",
            "/smartor/serviceSubtaskDetail/mzMydScoreRank");
 
    /**
     * 满意度异常配置题目(1 个,原挂在随访异常跟踪 Controller 上)
     */
    private static final String EXCEPT_CONFIG_ENDPOINT = "/smartor/trace/getSatisfactionExceptConfigQuestion";
 
    @Autowired
    private SatisfactionAvailabilityInterceptor satisfactionAvailabilityInterceptor;
 
    /**
     * 供测试/非 Spring 环境直接构造
     */
    public SatisfactionWebConfig() {
    }
 
    public SatisfactionWebConfig(SatisfactionAvailabilityInterceptor interceptor) {
        this.satisfactionAvailabilityInterceptor = interceptor;
    }
 
    /**
     * 本模块需要"关闭即明确报错"的 17 个端点(供校验脚本/单元测试断言)
     */
    public static List<String> guardedPathPatterns() {
        List<String> patterns = new ArrayList<>();
        patterns.add(PAT_SATISFACTION_PATTERN);
        patterns.addAll(SLTD_ENDPOINTS);
        patterns.add(EXCEPT_CONFIG_ENDPOINT);
        return patterns;
    }
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(satisfactionAvailabilityInterceptor)
                .addPathPatterns(guardedPathPatterns())
                // 拦截器本身很轻(只读一个 boolean),order 给个小值让它在业务拦截器之前执行
                .order(-100);
    }
}