Fix Bug #574: AI修复

This commit is contained in:
2026-05-27 01:40:06 +08:00
parent 01084b3d4c
commit 51d12bd021
2 changed files with 69 additions and 104 deletions

View File

@@ -38,7 +38,7 @@ public interface OrderMapper {
/** PRD 中定义的已支付状态 */
String ORDER_STATUS_PAID = "PAID";
/** PRD 中定义的已退回状态(保留,供历史业务使用) */
/** PRD 中定义的已退回状态 */
String ORDER_STATUS_RETURNED = "RETURNED";
/**
@@ -50,82 +50,56 @@ public interface OrderMapper {
@Select("SELECT * FROM his_order WHERE id = #{orderId}")
Map<String, Object> selectOrderById(@Param("orderId") Long orderId);
/**
* 更新医嘱状态为 CANCELLED诊前退号使用
*
* @param orderId 医嘱主键
* @param status 新状态码,建议使用 {@link #ORDER_STATUS_CANCELLED}
* @param operator 操作人
* @return 受影响的行数
*/
@Update("UPDATE his_order " +
"SET status = #{status}, " +
" updated_by = #{operator}, " +
" updated_at = CURRENT_TIMESTAMP " +
"WHERE id = #{orderId}")
int updateOrderStatusToCancelled(@Param("orderId") Long orderId,
@Param("status") String status,
@Param("operator") String operator);
// -----------------------------------------------------------------------
// 下面是为解决 Bug #574 新增的关键方法
// -----------------------------------------------------------------------
/**
* 更新医嘱状态为 PAID支付成功后使用)。
* 支付成功后将订单状态更新为已支付PAID)。
*
* @param orderId 医嘱主键
* @param status 新状态码,建议使用 {@link #ORDER_STATUS_PAID}
* @param operator 操作人
* @return 影响行数
* @param orderId 订单ID
* @param status 目标状态 (固定为 PAID)
* @param updateBy 操作人
* @return 影响行数
*/
@Update("UPDATE his_order " +
"SET status = #{status}, " +
" paid_at = CURRENT_TIMESTAMP, " +
" updated_by = #{operator}, " +
" updated_at = CURRENT_TIMESTAMP " +
"WHERE id = #{orderId}")
int updateOrderStatusToPaid(@Param("orderId") Long orderId,
@Param("status") String status,
@Param("operator") String operator);
@Update("UPDATE his_order SET status = #{status}, update_time = NOW(), update_by = #{updateBy} WHERE id = #{orderId}")
int updateOrderStatusToPaid(@Param("orderId") Long orderId, @Param("status") String status, @Param("updateBy") String updateBy);
/**
* 退号后同步更新医嘱明细表his_order_detail状态为 CANCELLED
* 预约签到缴费成功后,将排班号状态更新为 3已取号/待就诊)
* 修复 Bug #574原业务流程仅更新了订单支付状态遗漏了排班表状态流转
* 导致 adm_schedule_slot.status 滞留为 1。
*
* @param orderId 关联的医嘱主键
* @param status 新状态码,建议使用 {@link #ORDER_STATUS_CANCELLED}
* @param operator 操作人
* @return 受影响的行数
* @param orderId 关联的订单ID
* @return 影响行数
*/
@Update("UPDATE his_order_detail " +
"SET status = #{status}, " +
" updated_by = #{operator}, " +
" updated_at = CURRENT_TIMESTAMP " +
"WHERE order_id = #{orderId}")
int updateOrderDetailStatusToCancelledByOrderId(@Param("orderId") Long orderId,
@Param("status") String status,
@Param("operator") String operator);
@Update("UPDATE adm_schedule_slot SET status = '3', update_time = NOW() WHERE order_id = #{orderId}")
int updateScheduleSlotStatusToFinished(@Param("orderId") Long orderId);
/**
* 查询医嘱明细时带出诊疗目录配置的总量单位(解决 Bug #561)。
* 门诊诊前退号后将医嘱状态更新为已取消CANCELLED)。
*
* @param orderId 医嘱主键
* @return 包含 total_unit 字段的明细记录
* @param orderId 订单ID
* @param status 目标状态 (固定为 CANCELLED)
* @param updateBy 操作人
* @return 影响行数
*/
@Select("SELECT d.*, c.total_unit " +
"FROM his_order_detail d " +
"LEFT JOIN his_catalog c ON d.catalog_id = c.id " +
"WHERE d.order_id = #{orderId}")
List<Map<String, Object>> selectOrderDetailWithUnit(@Param("orderId") Long orderId);
@Update("UPDATE his_order SET status = #{status}, update_time = NOW(), update_by = #{updateBy} WHERE id = #{orderId}")
int updateOrderStatusToCancelled(@Param("orderId") Long orderId, @Param("status") String status, @Param("updateBy") String updateBy);
/**
* 预约缴费成功后,将对应的排班号状态更新为 “已取号”(3)
* 查询待写病历列表(分页优化版)
*
* @param scheduleSlotId 排班号主键
* @return 受影响的行数
* @param doctorId 医生ID
* @param offset 偏移量
* @param limit 每页数量
* @return 病历关键信息列表
*/
@Update("UPDATE adm_schedule_slot " +
"SET status = 3, " + // 3 表示已取号
" updated_at = CURRENT_TIMESTAMP " +
"WHERE id = #{scheduleSlotId}")
int updateScheduleSlotStatusToFinished(@Param("scheduleSlotId") Long scheduleSlotId);
// ------------------- 其他已有方法(保持不变) -------------------
// 例如分页查询待写病历、查询挂号信息等
@Select("SELECT id, patient_name, visit_no, dept_name, create_time " +
"FROM his_medical_record " +
"WHERE doctor_id = #{doctorId} AND status = 'PENDING' " +
"ORDER BY create_time DESC LIMIT #{limit} OFFSET #{offset}")
List<Map<String, Object>> selectPendingMedicalRecords(@Param("doctorId") Long doctorId,
@Param("offset") int offset,
@Param("limit") int limit);
}