liusheng
8 天以前 34f78281cf395a24e1f3f1c3b861186ff8a03b7b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.ruoyi.inhospvisit;
 
/**
 * 出入院随访模块包根。
 * <p>
 * 目录约定:
 * <ul>
 *   <li>{@code com.ruoyi.inhospvisit.api} —— <b>唯一对外包</b>,其它模块只能依赖这个包;</li>
 *   <li>{@code controller} / {@code service} / {@code mapper} / {@code domain} —— 模块内部实现,
 *       其它模块不应直接引用。</li>
 * </ul>
 * 模块可通过 {@code sys_config} 参数表的 {@code inhospvisit.enabled=false} 整体关闭
 * (运行时读取,改完最多 10 秒生效);关闭后门面返回安全值并打 WARN,
 * 直接访问出入院随访端点的请求会被拦截器拦下并返回明确的"未启用"业务错误。
 * <p>
 * <b>⚠️ 开关的作用范围(2025 更正)</b>:
 * <ul>
 *   <li><b>HTTP 触发端点</b>:由 {@code InhospVisitAvailabilityInterceptor} 拦下,报明确业务错误;</li>
 *   <li><b>定时任务</b>:<b>受本开关控制</b>({@code RyTask} 的 5 个入口:
 *       dealOutHospInfo / dealOutHospInfoBySchedule / dealTaskGroupOutHosp /
 *       rollTaskGroupCycle 走门面,dealSubtaskDeadline 走入口守卫);</li>
 *   <li><b>跨模块调用</b>:门面统一判开关;</li>
 *   <li><b>基础出入院信息读写</b>({@code InhospVisitDataService}):<b>刻意不受开关管</b> ——
 *       否则关掉随访会连带让 HIS 采集与记录管理瘫痪。</li>
 * </ul>
 * <p>
 * ⚠️ <b>本注释此前写的是"开关不作用于定时任务"</b>,理由是"关掉 = 当天全院随访停摆,
 * 而 sys_config 是热读的、一次误操作没有反馈渠道"。该说法<b>与事实不符且已更正</b>:
 * 当时定时任务走的是 smartor 里的遗留实现 {@code PatMedInhospServiceImpl},
 * 它<b>从不调用门面的编排方法</b>(只用门面取数据),所以真实状态是
 * "开关对定时任务无效、且没有任何提示" —— 比"受控"更糟,因为它让人以为已经关掉了。
 * 现在定时任务改走门面,关闭时日志会明确打出「模块未启用…跳过」,
 * 参数在「系统管理 → 参数设置」里可见可改,反馈渠道是通畅的。
 * 详见 {@code doc/模块开关有效性核查与修复.md}。
 */
public final class InhospVisitModule {
 
    /**
     * 模块配置前缀(仅作为 yml 兜底配置的键前缀;主开关在 sys_config 参数表里)
     */
    public static final String PROPERTIES_PREFIX = "inhospvisit";
 
    /**
     * sys_config 参数表里的开关键名
     */
    public static final String SWITCH_KEY = "inhospvisit.enabled";
 
    private InhospVisitModule() {
    }
}