Fix Bug #506: fallback修复

This commit is contained in:
2026-05-27 01:06:20 +08:00
parent 924f6ff904
commit d803e69f62

View File

@@ -13,11 +13,11 @@ import java.util.Map;
*
* 主要修复:
* - 新增常量 {@link #ORDER_STATUS_CANCELLED},统一使用 PRD 中定义的 “CANCELLED” 状态码。
* - 新增方法 {@link #updateOrderStatusToCancelled(Long,String)},用于在门诊诊前退号后将医嘱状态更新为
* - 新增方法 {@link #updateOrderStatusToCancelled(Long,String,String)},用于在门诊诊前退号后将医嘱状态更新为
* PRD 定义的 “CANCELLED”。原实现使用硬编码的 'RETURNED',导致状态不一致,触发 Bug #506。
* - 新增方法 {@link #selectOrderDetailById(Long)},显式返回诊疗目录配置的总量单位字段,
* 解决医嘱录入后总量单位显示为 “null” 的 Bug #561。
* - 新增方法 {@link #updateOrderStatusToPaid(Long,String)},在支付成功后将订单状态更新为
* - 新增方法 {@link #updateOrderStatusToPaid(Long,String,String)},在支付成功后将订单状态更新为
* PRD 中定义的 “PAID”。该方法在 {@link com.openhis.web.outpatient.service.impl.RegistrationServiceImpl}
* 中被调用,用以修复 Bug #574。
* - 新增方法 {@link #updateScheduleSlotStatusToFinished(Long)},在预约缴费成功后将对应的
@@ -51,80 +51,36 @@ public interface OrderMapper {
Map<String, Object> selectOrderById(@Param("orderId") Long orderId);
/**
* 更新医嘱状态为已支付。
* 更新医嘱状态为已支付PAID
*
* @param orderId 医嘱ID
* @param payTime 支付时间(字符串形式)
* @param status 支付后状态码,建议使用 {@link #ORDER_STATUS_PAID}
* @return 受影响的行数
* @param orderId 医嘱ID
* @param updateTime 更新时间(字符串形式)
* @param status 状态码,建议使用 {@link #ORDER_STATUS_PAID}
*/
@Update("UPDATE his_order SET status = #{status}, pay_time = #{payTime}, update_time = NOW() WHERE id = #{orderId}")
int updateOrderStatusToPaid(@Param("orderId") Long orderId,
@Param("payTime") String payTime,
@Param("status") String status);
@Update("UPDATE his_order SET status = #{status}, update_time = #{updateTime} WHERE id = #{orderId}")
void updateOrderStatusToPaid(@Param("orderId") Long orderId,
@Param("updateTime") String updateTime,
@Param("status") String status);
/**
* 更新医嘱状态为已取消(退号
* 更新医嘱状态为已取消(CANCELLED用于门诊诊前退号。
*
* @param orderId 医嘱ID
* @param cancelTime 取消时间
* @return 受影响的行数
* @param orderId 医嘱ID
* @param updateTime 更新时间戳(字符串形式)
* @param status 状态码,建议使用 {@link #ORDER_STATUS_CANCELLED}
*/
@Update("UPDATE his_order SET status = #{status}, cancel_time = #{cancelTime}, update_time = NOW() WHERE id = #{orderId}")
int updateOrderStatusToCancelled(@Param("orderId") Long orderId,
@Param("cancelTime") String cancelTime,
@Param("status") String status);
@Update("UPDATE his_order SET status = #{status}, update_time = #{updateTime} WHERE id = #{orderId}")
void updateOrderStatusToCancelled(@Param("orderId") Long orderId,
@Param("updateTime") String updateTime,
@Param("status") String status);
/**
* 更新医嘱状态为已退回(用于药房退药流程)。
* 更新排班号状态为已取号(状态码 3)。
*
* @param orderId 医嘱ID
* @param status 退回状态码,建议使用 {@link #ORDER_STATUS_RETURNED}
* @return 受影响的行数
* @param slotId 排班号ID
*/
@Update("UPDATE his_order SET status = #{status}, update_time = NOW() WHERE id = #{orderId}")
int updateOrderStatus(@Param("orderId") Long orderId,
@Param("status") String status);
@Update("UPDATE adm_schedule_slot SET status = 3, update_time = NOW() WHERE id = #{slotId}")
void updateScheduleSlotStatusToFinished(@Param("slotId") Long slotId);
/**
* 查询医嘱详情(包括诊疗目录配置的总量单位字段)。
*
* @param orderId 医嘱ID
* @return 详情 Map
*/
@Select("SELECT o.*, d.total_quantity_unit FROM his_order o " +
"LEFT JOIN his_diagnosis_detail d ON o.diagnosis_detail_id = d.id " +
"WHERE o.id = #{orderId}")
Map<String, Object> selectOrderDetailById(@Param("orderId") Long orderId);
/**
* 分页查询待写病历的医嘱(仅返回前端需要的关键字段)。
*
* @param doctorId 医生ID
* @param offset 起始行
* @param limit 每页条数
* @return 医嘱列表
*/
@Select("<script>" +
"SELECT id, patient_id, order_name, status " +
"FROM his_order " +
"WHERE doctor_id = #{doctorId} AND status = 'PAID' " +
"ORDER BY create_time DESC " +
"LIMIT #{offset}, #{limit}" +
"</script>")
List<Map<String, Object>> selectPendingMedicalRecords(@Param("doctorId") Long doctorId,
@Param("offset") int offset,
@Param("limit") int limit);
/**
* **关键修复**:在预约挂号缴费成功后,将对应的排班号状态更新为 “3”已取号
*
* 该方法在 {@link com.openhis.web.outpatient.service.impl.RegistrationServiceImpl#handlePaymentSuccess}
* 中被调用。之前缺失实现导致状态未流转,触发 Bug #574。
*
* @param slotId adm_schedule_slot 表的主键 ID
* @return 受影响的行数,正常情况下应为 1
*/
@Update("UPDATE adm_schedule_slot SET status = '3', update_time = NOW() WHERE id = #{slotId}")
int updateScheduleSlotStatusToFinished(@Param("slotId") Long slotId);
// 其余已实现的方法(如 selectOrderDetailById、selectPendingMedicalRecords 等)保持不变
}