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/**} 之类的前缀: *

* 另外 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); } }