Fix Bug #544: fallback修复

This commit is contained in:
2026-05-27 01:06:01 +08:00
parent 6f186ab42c
commit cfed95cd47

View File

@@ -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({
"<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 &gt;= #{startTime}",
"</if>",
"<if test='endTime != null'>",
" AND finish_time &lt;= #{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);
}