liusheng
5 天以前 cc479e6a056785103996cc7ea67dbd5faa3e800e
ruoyi-common/src/main/java/com/ruoyi/common/core/service/VisitTaskCreateApi.java
@@ -152,4 +152,26 @@
     * @return true = 至少存在一条
     */
    boolean existsSubtaskWithStates(Long patid, java.util.List<Long> sendstates, String serviceType);
    /**
     * 判断某患者「同一次出入院记录 + 同一个任务」是否<b>已经生成过</b>子任务。
     *
     * <h3>为什么需要它(2026-10 线上问题)</h3>
     * 出院随访扫描是按 {@code pat_med_inhosp.deptcheck_flag = '0'} 取患者的。
     * 一旦标志位因为规则配置/异常没被改成 1 或 2,下一轮扫描会把同一个患者再处理一遍,
     * 而 {@code writeInSubTask} 的"停旧"分支在 {@code endTime1 == endTime}(同一次出院)时
     * 走的是 else —— <b>会再 insert 一条 sendstate=4 的停用行</b>,
     * 于是同一个患者每次跑批都多一条,最终同一患者几十条子任务。
     * <p>
     * 这个方法是那道"最后防线":落库前按
     * {@code patid + inhospid + taskid}(且 {@code del_flag = 0})判重,
     * 已存在就不再加。口径是"同一次出院 + 同一个任务只应有一条子任务",
     * <b>不跨住院记录</b>(再次入院换了 inhospid 仍会新建,这是原有语义)。
     *
     * @param patid    患者档案ID
     * @param inhospid 出入院记录ID;为 {@code null} 时退化为只看 {@code patid + taskid}
     * @param taskid   任务ID
     * @return true = 已存在(不应再 insert)
     */
    boolean existsSubtask(Long patid, Long inhospid, Long taskid);
}