package com.ruoyi.inhospvisit.api;
|
|
import com.ruoyi.common.core.service.dto.PatMedReq;
|
import com.ruoyi.common.core.service.dto.PatMedRes;
|
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
|
import com.ruoyi.inhospvisit.domain.PatMedInhospDTO;
|
import com.ruoyi.inhospvisit.domain.PatMedInhospVO;
|
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 出入院模块对外<b>基础出入院信息</b>数据访问契约。
|
*
|
* <h3>为什么单独一个契约,而不是塞进 {@link InhospVisitApi}</h3>
|
* 两者管辖范围不同:
|
* <ul>
|
* <li>{@link InhospVisitApi} —— <b>随访业务能力</b>(生成任务/子任务、滚动任务组周期、
|
* 宣教回调)。受 {@code sys_config} 的 {@code inhospvisit.enabled} 开关管辖,
|
* 关闭后各方法返回安全空值。</li>
|
* <li>{@link InhospVisitDataService}(本接口)—— <b>基础出入院信息的读写</b>,
|
* 即 {@code pat_med_inhosp} 这一张表的增删改查。
|
* <b>刻意不受随访开关管辖</b>:HIS 采集({@code CollectHISServiceImpl})与
|
* 档案汇聚({@code HNGatherPatArchiveServiceImpl})都依赖它写入院记录,
|
* 若把开关一并套上,关闭随访生成会连带让数据采集瘫痪 —— 那是两件事。</li>
|
* </ul>
|
*
|
* <h3>独占边界(本次改造的目标)</h3>
|
* {@code PatMedInhospMapper} 与其 1181 行 XML 已搬入本模块,
|
* 其它模块<b>不得</b>再直接注入该 Mapper;一律经由本契约访问。
|
* 这样"出入院信息只有一处实现"成为编译期可验证的事实。
|
*
|
* <h3>⚠️ 与原 Mapper 的语义一致性</h3>
|
* 本契约的每个方法都是 {@code PatMedInhospMapper} 对应方法的<b>纯转发</b>:
|
* 不加工参数、不补默认值、不改时间戳(调用方原本就自行 {@code setCreateTime} 等),
|
* 因此逐方法语义与搬迁前完全一致。
|
*/
|
public interface InhospVisitDataService {
|
|
// ==================== 查询 ====================
|
|
/**
|
* 按主键查询出入院记录。
|
*
|
* @param inhospid 出入院记录主键
|
* @return 记录,不存在返回 {@code null}
|
*/
|
PatMedInhosp selectPatMedInhospByInhospid(Long inhospid);
|
|
/**
|
* 按实体字段做等值条件查询。
|
*
|
* @param patMedInhosp 查询条件(非 null 字段参与过滤)
|
* @return 记录集合,无匹配返回空集合
|
*/
|
List<PatMedInhosp> selectPatMedInhosp(PatMedInhosp patMedInhosp);
|
|
/**
|
* 按患者编号 + 出院日期查询出院记录(出院时间只比较到天)。
|
*
|
* @param patno 患者编号
|
* @param dayStart 查询日期当天 00:00:00
|
* @param dayEnd 查询日期的次日 00:00:00
|
* @return 出院记录集合,按 inhospid 倒序
|
*/
|
List<PatMedInhosp> selectOutInhospByPatnoAndOutDate(String patno, Date dayStart, Date dayEnd);
|
|
/**
|
* 查询患者标签(单患者,GROUP_CONCAT 拼接)。
|
*
|
* @param patid 患者档案id
|
* @return 标签串,无标签返回 {@code null}
|
*/
|
String getTagnameBypatid(Long patid);
|
|
/**
|
* 批量查询患者标签。
|
*
|
* @param patids 患者档案id集合,调用方须保证非空且已去重
|
* @return 每行含 {@code patid}、{@code tagname} 两个 key
|
*/
|
List<Map<String, Object>> getTagnameByPatids(List<Long> patids);
|
|
/**
|
* 通用列表查询(最常用入口)。
|
*
|
* @param patMedInhosp 查询条件
|
* @return 记录集合
|
*/
|
List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp);
|
|
/**
|
* 按住院流水号查询。
|
*
|
* @param patMedInhosp 查询条件(含 serialnum)
|
* @return 记录集合
|
*/
|
List<PatMedInhosp> selectPatMedInhospListBySerialnum(PatMedInhosp patMedInhosp);
|
|
/**
|
* 按 VO 条件查询(支持多科室/多病区集合条件)。
|
*
|
* @param patMedInhospVO 查询条件
|
* @return 记录集合
|
*/
|
List<PatMedInhosp> selectPatMedInhospListByCondition(PatMedInhospVO patMedInhospVO);
|
|
/**
|
* 出院/入院人数与随访人次统计(首页 ECharts 用)。
|
*
|
* @param patMedReq 统计条件
|
* @return 统计结果
|
*/
|
PatMedRes selectPatMedInhospCount(PatMedReq patMedReq);
|
|
/**
|
* 查询三个维度里任意一个仍未处理的出院患者。
|
*
|
* @return 待处理记录集合
|
*/
|
List<PatMedInhosp> selectNeedProcessList();
|
|
/**
|
* 查询患者住院记录(通过入院申请单信息),返回 DTO 列表。
|
* <p>
|
* ⚠️ <b>本方法原样保留了一个原代码缺陷</b>,未做修正:
|
* <pre>
|
* List<PatMedInhosp> rows = selectPatMedInhospList(query);
|
* if (!CollectionUtils.isEmpty(rows)) {
|
* return null; // ← 查到记录反而返回 null,条件写反了
|
* }
|
* </pre>
|
* 后果:查到记录时恒返回 {@code null};查不到记录时返回空列表。
|
* 也就是说<b>原实现里那段"给每条记录补 finishFlag(是否宣教过)"的循环永远不会执行</b>,
|
* 因此本方法不依赖 {@code service_subtask}(随访子任务表)。
|
* <p>
|
* 若将来要修这个缺陷,除了把条件改成 {@code isEmpty},还需要恢复那段补
|
* {@code finishFlag} 的逻辑(判据:该患者是否存在 {@code service_type="4"} 的子任务),
|
* 届时需要给本模块补一个查询子任务的能力。
|
* <p>
|
* 前端当前<b>没有</b>调用该端点(已核对 {@code smartor-web/src})。
|
*
|
* @param patMedInhosp 查询条件
|
* @return 见上;缺陷保留,故查到记录时为 {@code null}
|
*/
|
List<PatMedInhospDTO> selectPatMedInhospByApplication(PatMedInhosp patMedInhosp);
|
|
// ==================== 写入 ====================
|
|
/**
|
* 新增出入院记录。
|
*
|
* @param patMedInhosp 记录({@code createTime}/{@code updateTime} 由调用方设置,
|
* 本方法不代填 —— 与搬迁前一致)
|
* @return 影响行数
|
*/
|
int insertPatMedInhosp(PatMedInhosp patMedInhosp);
|
|
/**
|
* 批量新增出入院记录。
|
*
|
* @param list 记录集合
|
* @return 影响行数
|
*/
|
int insertPatMedInhospBatch(List<PatMedInhosp> list);
|
|
/**
|
* 修改出入院记录("传什么更新什么")。
|
*
|
* @param patMedInhosp 记录(须含主键)
|
* @return 影响行数
|
*/
|
int updatePatMedInhosp(PatMedInhosp patMedInhosp);
|
|
/**
|
* 按主键删除。
|
*
|
* @param inhospid 主键
|
* @return 影响行数
|
*/
|
int deletePatMedInhospByInhospid(Long inhospid);
|
|
/**
|
* 按住院编码删除。
|
*
|
* @param inhospno 住院编码
|
* @return 影响行数
|
*/
|
int deletePatMedInhospByInhospno(String inhospno);
|
|
/**
|
* 按主键集合批量删除。
|
*
|
* @param inhospids 主键集合
|
* @return 影响行数
|
*/
|
int deletePatMedInhospByInhospids(Long[] inhospids);
|
}
|