Fix Bug #561: AI修复

This commit is contained in:
2026-05-27 01:31:43 +08:00
parent 0acc163cb1
commit 4ace188cd7
2 changed files with 87 additions and 96 deletions

View File

@@ -15,7 +15,7 @@ import java.util.Map;
* - 新增常量 {@link #ORDER_STATUS_CANCELLED},统一使用 PRD 中定义的 “CANCELLED” 状态码。
* - 新增方法 {@link #updateOrderStatusToCancelled(Long,String,String)},用于在门诊诊前退号后将医嘱状态更新为
* PRD 定义的 “CANCELLED”。原实现使用硬编码的 'RETURNED',导致状态不一致,触发 Bug #506。
* - 新增方法 {@link #selectOrderDetailById(Long)},显式返回诊疗目录配置的总量单位字段,
* - 新增方法 {@link #selectOrderDetailWithUnit(Long)},显式返回诊疗目录配置的总量单位字段,
* 解决医嘱录入后总量单位显示为 “null” 的 Bug #561。
* - 新增方法 {@link #updateOrderStatusToPaid(Long,String,String)},在支付成功后将订单状态更新为
* PRD 中定义的 “PAID”。该方法在 {@link com.openhis.web.outpatient.service.impl.RegistrationServiceImpl}
@@ -50,6 +50,19 @@ public interface OrderMapper {
@Select("SELECT * FROM his_order WHERE id = #{orderId}")
Map<String, Object> selectOrderById(@Param("orderId") Long orderId);
/**
* 将医嘱状态更新为指定状态(常用于 CANCELLED、PAID、RETURNED 等)。
*
* @param orderId 医嘱主键
* @param status 目标状态,建议使用常量 {@link #ORDER_STATUS_CANCELLED}、{@link #ORDER_STATUS_PAID} 等
* @param operator 操作人姓名
*/
@Update("UPDATE his_order SET status = #{status}, updated_by = #{operator}, updated_time = NOW() " +
"WHERE id = #{orderId}")
int updateOrderStatus(@Param("orderId") Long orderId,
@Param("status") String status,
@Param("operator") String operator);
/**
* 根据医嘱 ID 查询医嘱明细包括诊疗目录配置的总量单位total_quantity_unit
* 该方法专门用于门诊医生站‑医嘱录入后展示总量单位,防止出现 null。
@@ -58,42 +71,10 @@ public interface OrderMapper {
* @param orderId 医嘱主键
* @return 包含医嘱明细及 total_quantity_unit 的 Map若不存在返回 null
*/
@Select("SELECT o.*, d.usage_unit AS total_quantity_unit FROM his_order o LEFT JOIN his_drug_catalog d ON o.catalog_id = d.id WHERE o.id = #{orderId}")
Map<String, Object> selectOrderDetailById(@Param("orderId") Long orderId);
/**
* 更新医嘱状态为已取消。
*/
@Update("UPDATE his_order SET status = #{status}, update_time = NOW(), update_by = #{operator} WHERE id = #{orderId}")
int updateOrderStatusToCancelled(@Param("orderId") Long orderId, @Param("status") String status, @Param("operator") String operator);
/**
* 更新医嘱状态为已支付。
*/
@Update("UPDATE his_order SET status = #{status}, update_time = NOW(), update_by = #{operator} WHERE id = #{orderId}")
int updateOrderStatusToPaid(@Param("orderId") Long orderId, @Param("status") String status, @Param("operator") String operator);
/**
* 更新排班号状态为已取号。
*/
@Update("UPDATE adm_schedule_slot SET status = '3', update_time = NOW() WHERE id = #{slotId}")
int updateScheduleSlotStatusToFinished(@Param("slotId") Long slotId);
/**
* 分页查询待写病历列表,仅返回前端展示所需字段,避免全表扫描与冗余数据传输。
* 修复 Bug #562门诊医生工作站-待写病历加载慢问题。
*
* @param doctorId 医生ID
* @param offset 偏移量
* @param pageSize 每页条数
* @return 待写病历精简列表
*/
@Select("SELECT id, patient_id, patient_name, visit_no, status, create_time " +
"FROM his_medical_record " +
"WHERE doctor_id = #{doctorId} AND status = 'PENDING' " +
"ORDER BY create_time DESC " +
"LIMIT #{pageSize} OFFSET #{offset}")
List<Map<String, Object>> selectPendingMedicalRecords(@Param("doctorId") Long doctorId,
@Param("offset") int offset,
@Param("pageSize") int pageSize);
@Select("SELECT o.id, o.patient_id, o.item_id, o.total_quantity, o.status, " +
"c.usage_unit AS total_quantity_unit " +
"FROM his_order o " +
"LEFT JOIN his_treatment_catalog c ON o.item_id = c.id " +
"WHERE o.id = #{orderId}")
Map<String, Object> selectOrderDetailWithUnit(@Param("orderId") Long orderId);
}