package com.ruoyi.phone;
/**
* 电话模块包根。
*
*
这个模块装了什么
* 原先散在 {@code ruoyi-task} 的 {@code ServiceSubtaskController} 与
* {@code ServiceSubtaskServiceImpl} 里的"电话"能力,本模块化后整体搬到这里:
*
* - {@code controller} —— 三条外呼通道的回调端点,URL 与原样完全一致
* (上海/雨绮挂在 {@code /smartor/serviceSubtask/**},三汇挂在 {@code /smartor/shphone/**}),
* 外部电话平台不需要改回调地址;
* - {@code service} —— 电话会话状态机(redis 会话、TTS 播报、ASR 匹配、AI 匹配、静默/挂机、
* 通话记录落库)的全部实现;
* - {@code domain} —— 电话回调/拉取的入参与出参;
* - {@code api} —— 唯一对外包:其它模块只能经 {@code PhoneFacade} 调电话能力。
*
*
* 数据访问边界(重要)
* {@code service_subtask} / {@code service_subtask_detail} / {@code service_task} 等表归 {@code ruoyi-task},
* 按 {@code doc/跨模块数据访问原则与收口方案.md} 的落地口径,非归属模块一律禁止写这些表;
* 因此本模块刻意不带 Mapper / XML:
*
* - 任务数据 → {@code com.ruoyi.task.api.TaskSubtaskApi}(归属模块内实现,本模块只调 API);
* - 模板话术 → {@code com.ruoyi.template.service} 下的 service 接口;
* - 发送方式状态 → {@code com.ruoyi.task.api.spi.TaskPreachformPort};
* - 录音下载 → {@code com.ruoyi.task.api.spi.TaskFtpPort};
* - 参数配置 → {@code com.ruoyi.task.api.spi.TaskSysConfigPort};
* - AI 选项匹配 → {@code com.ruoyi.common.core.service.SubtaskOptionMatchApi}(ruoyi-common 契约)。
*
*
* 开关
* 模块可通过 {@code sys_config} 参数表的 {@code phone.enabled=false} 整体关闭
* (运行时读取,改完最多 10 秒生效):命中的端点被 {@code PhoneAvailabilityInterceptor}
* 拦下并返回明确的"未启用"业务错误;门面 {@code PhoneFacade} 仍常驻,调用降级为空值/空列表。
*/
public final class PhoneModule {
/**
* 模块配置前缀(仅作为 yml 兜底配置的键前缀;主开关在 sys_config 参数表里)
*/
public static final String PROPERTIES_PREFIX = "phone";
private PhoneModule() {
}
}