liusheng
5 天以前 cc479e6a056785103996cc7ea67dbd5faa3e800e
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.ruoyi.common.core.service;
 
/**
 * 宣教能力的对外接口(实现由 {@code ruoyi-publicity} 的常驻门面 {@code PublicityFacade} 提供)。
 *
 * <h3>为什么要单独拆出来</h3>
 * 宣教原本混在 {@code PatMedInhospServiceImpl#dealOutHospInfo} 里(迁移前 L331-444):
 * <ol>
 *   <li><b>入院宣教</b>({@code in.helibrary.switch == "2"} 才执行):科室维度 type=4、病区维度 type=5;</li>
 *   <li><b>药品宣教</b>(仅 {@code active == "sltd"}):按 {@code medicalCode} 拆串查
 *       {@code service_taskmedical},命中则 type=0。</li>
 * </ol>
 * 这两块<b>不是"随访"</b>而是"宣教",所以按你的决定单独拉成 {@code ruoyi-publicity} 模块。
 *
 * <h3>边界:宣教模块不建子任务</h3>
 * 宣教模块只负责"<b>决定要不要发、发什么</b>"(读配置、判站点、拼说明),
 * 真正的子任务落库与派发<b>回调 {@code ruoyi-inhospvisit}</b>
 * (走 {@link PublicitySubtaskApi})。这样 {@code boxedServiceSubtask}
 * 的宣教分支(type=0/4/5)以及"回写 check_flag"的语义全仓只有一份实现,不会出现两份逻辑漂移。
 *
 * <h3>调用方务必降级</h3>
 * 取不到实现时按"没有宣教要做"处理并打 WARN,绝不能让出入院随访主流程抛异常。
 */
public interface PublicityApi {
 
    /**
     * 入院宣教:按患者所在科室(type=4)与病区(type=5)分别匹配长期宣教任务。
     * <p>
     * 迁移对应:{@code PatMedInhospServiceImpl#dealOutHospInfo} L331-409。
     * <p>
     * 内部行为要点(迁移时必须保留):
     * <ul>
     *   <li>受 {@code sys_config: in.helibrary.switch == "2"} 控制,不是 "2" 时<b>整块不执行</b>;</li>
     *   <li>科室维度与病区维度是<b>两段独立的扫描</b>(各自查 {@code deptcheck_flag='0'} /
     *       {@code in_wardcheck_flag='0'}),不是一次查询分两组;</li>
     *   <li>患者档案为空时把标志位置 "2" 并写 {@code longTaskReason="患者基本信息为空"};</li>
     *   <li>科室/病区没配长期宣教任务时置 "2" + 文案「该患者所在科室未配置入院长期宣教任务;」/
     *       「该患者所在病区未配置入院长期宣教任务;」;</li>
     *   <li>病区分支在取已有 {@code longTaskReason} 时<b>没有做 null 判断</b>(迁移前 L401 直接拼接)
     *       —— 这是原缺陷,<b>原样保留</b>。</li>
     * </ul>
     *
     * @param config {@code sys_config: visit.early.day} 的值,可能为 null
     * @return 提交处理的记录数(仅用于日志/返回,迁移前 {@code dealOutHospInfo} 固定返回 1)
     */
    int dealInHospPublicity(String config);
 
    /**
     * 药品宣教(省立同德专属):按患者的 {@code medicalCode} 逐个药品编码匹配长期宣教任务。
     * <p>
     * 迁移对应:{@code PatMedInhospServiceImpl#dealOutHospInfo} L411-444。
     * <p>
     * 内部行为要点(迁移时必须保留):
     * <ul>
     *   <li>仅 {@code active == "sltd"} 时执行,其它站点直接返回 0;</li>
     *   <li>{@code medicalCode} 为空则跳过该患者;查不到的药品<b>直接忽略</b>(不需要宣教);</li>
     *   <li>三个数组长度不一致时取最小长度,<b>越界时把 medicalName 置空串</b>并打 WARN
     *       (迁移前 L428-433 的防御性编程,原样保留)。</li>
     * </ul>
     *
     * @param config {@code sys_config: visit.early.day} 的值,可能为 null
     * @return 命中并处理的药品数
     */
    int dealMedicalPublicity(String config);
}