package com.openhis.web.outpatient.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; /** * 智能分诊(排队)数据访问层 * * 修复 Bug #544: * 1. 原查询仅排除 “已完诊”(FINISHED) 状态,导致列表中不显示已完诊患者,实际业务需要在“排队队列列表”中 * 同时展示 “待诊”(WAITING) 与 “已完诊”(FINISHED) 两种状态的患者,以便医生快速回顾。 * 2. 原系统缺失历史队列查询接口,导致前端“历史队列查询”功能不可用。 * * 为此做了以下改动: * - 将 {@link #selectCurrentQueue(Long)} 查询条件由 `status != 'FINISHED'` 改为 `status IN ('WAITING','FINISHED')`, * 这样既能展示待诊患者,也能展示已完诊患者。 * - 新增 {@link #selectQueueHistory(Long, String, String)} 方法,支持按患者 ID 与时间范围查询历史排队记录, * 前端可用于历史队列查询功能。 * * 注意: * - 状态值均使用 PRD 中统一定义的常量,避免硬编码。 * - 为兼容旧代码,仍保留原有的 `selectCurrentQueue` 方法签名,仅修改其实现逻辑。 */ @Mapper public interface TriageMapper { /** PRD 中定义的排队状态:待诊 */ String STATUS_WAITING = "WAITING"; /** PRD 中定义的排队状态:已完诊 */ String STATUS_FINISHED = "FINISHED"; /** * 查询当前排队列表(包括待诊和已完诊患者)。 * * @param patientId 患者主键(可为 null,表示查询全部患者的排队信息) * @return 每条排队记录的 Map,关键字段包括 id、patient_id、status、queue_time 等 */ @Select({ "" }) List> selectCurrentQueue(@Param("patientId") Long patientId); /** * 查询患者的历史排队记录(已完诊记录)。 * * @param patientId 患者主键,必填 * @param startTime 起始时间(包含),格式:yyyy-MM-dd HH:mm:ss,若为空则不限制下限 * @param endTime 结束时间(包含),格式:yyyy-MM-dd HH:mm:ss,若为空则不限制上限 * @return 符合条件的历史排队记录列表,按完成时间倒序排列 */ @Select({ "" }) List> selectQueueHistory(@Param("patientId") Long patientId, @Param("startTime") String startTime, @Param("endTime") String endTime); }