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} 只挂到
* 21 个满意度接口中属于本模块的 17 个端点上。
*
* 为什么逐个列路径而不是用 {@code /smartor/**} 之类的前缀:
*
* - {@code /smartor/serviceSubtaskDetail/**} 下既有满意度端点(5 个),
* 也有随访明细端点(其它),用前缀会误伤;
* - {@code /smartor/trace/**} 下只有 1 个满意度端点,其余是异常跟踪业务;
* - 因此这里显式枚举,保证"只拦满意度",绝不影响其它业务。
*
* 另外 4 个使用满意度数据的随访接口({@code patItemExport} / {@code getSfStatisticsJoy} /
* {@code getSfStatisticsJoydetails} / {@code saveMYDQuestionAnswer})不在这里:
* 它们属于随访业务,模块关闭时必须继续可用(满意度部分降级为空/全零)。
*/
@Configuration
public class SatisfactionWebConfig implements WebMvcConfigurer {
/**
* 患者满意度(11 个,原 {@code PatSatisfactionController})
*/
private static final String PAT_SATISFACTION_PATTERN = "/smartor/satisfaction/**";
/**
* 省立同德 / 门诊满意度独占的 5 个端点(原挂在随访明细 Controller 上)
*/
private static final List 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 guardedPathPatterns() {
List 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);
}
}