86 lines
3.5 KiB
Java
86 lines
3.5 KiB
Java
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({
|
||
"<script>",
|
||
"SELECT id, patient_id, status, queue_time, finish_time",
|
||
"FROM his_triage_queue",
|
||
"WHERE 1=1",
|
||
// 当 patientId 为 null 时查询全部,否则过滤指定患者
|
||
"<if test='patientId != null'>",
|
||
" AND patient_id = #{patientId}",
|
||
"</if>",
|
||
// 只展示待诊或已完诊两种状态的记录
|
||
"AND status IN (#{STATUS_WAITING}, #{STATUS_FINISHED})",
|
||
"ORDER BY queue_time ASC",
|
||
"</script>"
|
||
})
|
||
List<Map<String, Object>> 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({
|
||
"<script>",
|
||
"SELECT id, patient_id, status, queue_time, finish_time",
|
||
"FROM his_triage_queue",
|
||
"WHERE patient_id = #{patientId}",
|
||
" AND status = #{STATUS_FINISHED}",
|
||
"<if test='startTime != null'>",
|
||
" AND finish_time >= #{startTime}",
|
||
"</if>",
|
||
"<if test='endTime != null'>",
|
||
" AND finish_time <= #{endTime}",
|
||
"</if>",
|
||
"ORDER BY finish_time DESC",
|
||
"</script>"
|
||
})
|
||
List<Map<String, Object>> selectQueueHistory(@Param("patientId") Long patientId,
|
||
@Param("startTime") String startTime,
|
||
@Param("endTime") String endTime);
|
||
}
|