package com.ruoyi.task.api.spi;
import com.ruoyi.common.core.domain.entity.PatArchive;
import java.util.List;
/**
* 患者档案读取能力 —— ruoyi-task 的对外 SPI,由 smartor 侧实现。
*
*
为什么端口声明在 ruoyi-task、实现在 smartor
* 任务侧要读 {@code pat_archive},但该表不归 ruoyi-task
* (患者档案是独立域,本次只把 {@link PatArchive} 这个类型上提到了 ruoyi-common)。
* 按"各模块独占自己的数据访问"原则,ruoyi-task 不得自写针对 {@code pat_archive} 的 SQL。
*
* 又因为 ruoyi-task 不能依赖 smartor(会形成
* {@code smartor -> ruoyi-task -> smartor} 硬循环),所以方向必须反过来:
* 接口声明在 ruoyi-task、实现放在 smartor,由 Spring 在运行期注入。
* 编译期 ruoyi-task 只看到接口,smartor 依赖 ruoyi-task 因此可以 implements 它 —— 无环。
*
*
为什么不需要新 DTO
* {@link PatArchive} 已上提到 {@code com.ruoyi.common.core.domain.entity},
* 双方都可见,因此端口直接用实体本身,无需逐字段映射。
*
* ⚠️ 实现必须保持"纯转发"
* 实现方只做转发或等价的类型转换,不得加入业务判断。
*
* @see com.ruoyi.common.core.domain.entity.PatArchive
*/
public interface TaskArchivePort {
/**
* 按患者档案 id 查档案(原 {@code PatArchiveMapper#selectPatArchiveByPatid},
* 亦即 {@code IPatArchiveService#selectPatArchiveByPatid} —— 后者是前者的纯委托)。
*
* @param patid 档案 id
* @return 档案;不存在返回 {@code null}
*/
PatArchive findByPatid(Long patid);
/**
* 按条件查档案列表(原 {@code PatArchiveMapper#selectPatArchiveList})。
*
* @param query 查询条件(非 null 字段参与过滤)
* @return 档案集合
*/
List findList(PatArchive query);
/**
* 按 id 查「导入档案」并转成档案视图(原
* {@code DtoConversionUtils.sourceToTarget(patArchiveImportMapper.selectPatArchiveImportById(patid), PatArchive.class)})。
*
* ⚠️ 原实现拿到的 {@code PatArchiveImport} 从不逐字段访问,而是整体转成
* {@link PatArchive},所以这里把"取 + 转"合成一个方法,调用方拿到的仍是 {@link PatArchive},
* 行为完全不变,且无需把 {@code PatArchiveImport} 暴露到 ruoyi-task。
*
* @param patid 档案 id
* @return 转换后的档案;不存在返回 {@code null}
*/
PatArchive findImportedByPatid(Long patid);
}