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);
|
}
|
}
|