From 4b8d85a0c22e90968880b8e40ec6de10fa965ef9 Mon Sep 17 00:00:00 2001 From: xunyu Date: Wed, 27 May 2026 01:26:30 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#506:=20fallback=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/outpatient/mapper/OrderMapper.java | 66 ++++++++++++++----- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/com/openhis/web/outpatient/mapper/OrderMapper.java b/com/openhis/web/outpatient/mapper/OrderMapper.java index 6508aa6fd..b10113ff6 100644 --- a/com/openhis/web/outpatient/mapper/OrderMapper.java +++ b/com/openhis/web/outpatient/mapper/OrderMapper.java @@ -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 #updateScheduleSlotStatusToCancelled(Long,String)},在退号时将关联的排班号状态更新为 “已取消”(4)。 + * - 新增方法 {@link #updateScheduleSlotStatusToCancelled(Long,Integer)},在退号时将关联的排班号状态更新为 “已取消”(4)。 * - 其余新增方法保持不变。 */ @Mapper @@ -39,6 +39,19 @@ public interface OrderMapper { @Select("SELECT * FROM his_order WHERE id = #{orderId}") Map 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}") + void updateOrderStatus(@Param("orderId") Long orderId, + @Param("status") String status, + @Param("operator") String operator); + /** * 将医嘱状态更新为 CANCELLED(诊前退号)。 * @@ -53,23 +66,42 @@ public interface OrderMapper { @Param("operator") String operator); /** - * 将排班号状态更新为已取消(状态码 4)。 + * 将医嘱状态更新为 PAID(支付成功)。 * - * @param orderId 医嘱主键,用于关联查询排班号 - * @param operator 操作人姓名 + * @param orderId 医嘱主键 + * @param status 目标状态,建议使用 {@link #ORDER_STATUS_PAID} + * @param operator 操作人姓名 */ - @Update({ - "" - }) - void updateScheduleSlotStatusToCancelled(@Param("orderId") Long orderId, - @Param("operator") String operator); + @Update("UPDATE his_order SET status = #{status}, updated_by = #{operator}, updated_time = NOW() " + + "WHERE id = #{orderId}") + void updateOrderStatusToPaid(@Param("orderId") Long orderId, + @Param("status") String status, + @Param("operator") String operator); - // 下面保留原有的其他方法(如 updateOrderStatusToPaid、selectOrderDetailById 等), - // 这里省略以避免重复,只展示与 Bug #506 直接相关的新增/修改内容。 + /** + * 将医嘱状态更新为 RETURNED(已退回)。 + * + * @param orderId 医嘱主键 + * @param status 目标状态,建议使用 {@link #ORDER_STATUS_RETURNED} + * @param operator 操作人姓名 + */ + @Update("UPDATE his_order SET status = #{status}, updated_by = #{operator}, updated_time = NOW() " + + "WHERE id = #{orderId}") + void updateOrderStatusToReturned(@Param("orderId") Long orderId, + @Param("status") String status, + @Param("operator") String operator); + + /** + * 退号后,将关联的排班号状态更新为 “已取消”(4)。 + * + * @param orderId 医嘱主键,用于定位对应的排班号 + * @param status 目标状态码,PRD 中约定 4 表示已取消 + */ + @Update("UPDATE adm_schedule_slot " + + "SET status = #{status} " + + "WHERE id = (SELECT schedule_slot_id FROM his_order WHERE id = #{orderId})") + void updateScheduleSlotStatusToCancelled(@Param("orderId") Long orderId, + @Param("status") Integer status); + + // 其他已有方法(如分页查询、统计等)保持不变 }