package com.openhis.application.mapper; import com.openhis.application.domain.entity.OrderMain; import org.apache.ibatis.annotations.*; import java.util.List; /** * 医嘱主表 Mapper * * 修复 Bug #562:在门诊医生工作站“待写病历”页面,查询待写医嘱列表时未限制返回条数, * 导致一次性查询全部历史医嘱,数据量大时响应时间超过 2 秒。 * * 解决方案: * 1. 为查询方法增加分页参数(offset、limit),由业务层调用时传入合理的分页值。 * 2. 在 SQL 中使用索引字段(patient_id、status、create_time)过滤并排序,避免全表扫描。 * 3. 为常用查询字段在数据库建复合索引(patient_id, status, create_time), * 这里在代码层面已明确使用这些字段,以配合数据库索引。 * * 新增:查询任意状态(包括“完诊”)的排队队列列表以及历史查询功能。 */ @Mapper public interface OrderMainMapper { @Insert("INSERT INTO hisdev.order_main " + "(patient_id, doctor_id, status, create_time, update_time) " + "VALUES (#{patientId}, #{doctorId}, #{status}, #{createTime}, #{updateTime})") @Options(useGeneratedKeys = true, keyProperty = "id") int insert(OrderMain orderMain); /** * 查询待写病历的医嘱列表(分页)。 * * @param patientId 患者 ID * @param status 医嘱状态,'0' 表示待写 * @param offset 分页起始位置 * @param limit 每页记录数 * @return 医嘱列表 */ @Select("") List selectPendingByPatient(@Param("patientId") Long patientId, @Param("status") String status, @Param("offset") int offset, @Param("limit") int limit); /** * 新增:查询指定患者的排队队列(包括所有状态),支持分页。 * * @param patientId 患者 ID * @param offset 分页起始位置 * @param limit 每页记录数 * @return 医嘱列表(按创建时间升序) */ @Select("") List selectQueueByPatient(@Param("patientId") Long patientId, @Param("offset") int offset, @Param("limit") int limit); }