package com.ruoyi.task.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.List; /** * 任务模块的 MVC 配置:把 {@link TaskAvailabilityInterceptor} 挂到任务模块自己的端点前缀上。 * *
* 因此这里用前缀即可精确覆盖,无需像满意度模块那样逐个列 17 个精确路径。 * 唯一需要额外处理的是"电话模块保留原 URL 后落在这个前缀里的 6 条端点", * 见 {@link #excludedPhonePaths()}。 * 若将来又有其它模块往这两个前缀下加端点,同样需要加到排除清单里。 */ @Configuration public class TaskWebConfig implements WebMvcConfigurer { /** * 任务(原 {@code ServiceTaskController}) */ private static final String SERVICETASK_PATTERN = "/smartor/servicetask/**"; /** * 子任务(原 {@code ServiceSubtaskController}) */ private static final String SERVICESUBTASK_PATTERN = "/smartor/serviceSubtask/**"; /** * 挂在 {@code /smartor/serviceSubtask/**} 下、但归电话模块(ruoyi-phone)的 6 条端点。 *
* 电话模块化时刻意保留原 URL(外部电话平台的回调地址不能改),于是这几条 * 落在任务模块的前缀里。它们必须从"任务开关"的拦截范围里排除, * 否则会出现"关掉 task.enabled 顺手把电话回调也关了"——外部平台正在通话, * 回调被拦会直接把随访打断。它们由 {@code phone.enabled} 管。 *
* ⚠️ 这里是字符串字面量而不是引用 {@code PhoneWebConfig} 的常量:
* 依赖方向只能是 {@code ruoyi-phone -> ruoyi-task},反过来会形成 Maven 循环依赖。
* 改电话端点路径时两边都要改;{@code TaskSwitchCheck} 里有断言盯着这 6 条。
*/
private static final String[] PHONE_OWNED_SUBTASK_PATHS = new String[]{
"/smartor/serviceSubtask/phoneCallBack",
"/smartor/serviceSubtask/phoneCallBackYQ",
"/smartor/serviceSubtask/taskPull",
"/smartor/serviceSubtask/saveQuestionAnswerPhone",
"/smartor/serviceSubtask/recordAcceptshanghai",
"/smartor/serviceSubtask/recordAccept",
};
@Autowired
private TaskAvailabilityInterceptor taskAvailabilityInterceptor;
/**
* 供测试/非 Spring 环境直接构造
*/
public TaskWebConfig() {
}
public TaskWebConfig(TaskAvailabilityInterceptor interceptor) {
this.taskAvailabilityInterceptor = interceptor;
}
/**
* 本模块需要"关闭即明确报错"的 URL 前缀(供校验脚本/单元测试断言)
*/
public static List