diff --git a/com/openhis/web/outpatient/mapper/TriageMapper.java b/com/openhis/web/outpatient/mapper/TriageMapper.java new file mode 100644 index 000000000..da1abe71b --- /dev/null +++ b/com/openhis/web/outpatient/mapper/TriageMapper.java @@ -0,0 +1,85 @@ +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); +}