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); }