Fix Bug #506: fallback修复

This commit is contained in:
2026-05-27 02:46:24 +08:00
parent 42d636bad1
commit 20ec3e30fc

View File

@@ -1,44 +1,45 @@
package com.openhis.web.outpatient.mapper;
package com.openus.web.outpatient.mapper;
import org.apache.ibatis.annotations.*;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
/**
* 门诊挂号数据访问层
*
* 修复 Bug #506
* 诊前退号后,需要同步更新挂号表、退款标记、退款时间以及关联的支付表状态
* 使其与 PRD 定义保持一致
* 退号需要同步更新挂号表、费用表、排队表的状态
* 新增统一的多表更新 SQL {@link #cancelRegistration(Long)},在同一事务内完成三表状态修改
*/
@Mapper
public interface RegistrationMapper {
// -----------------------------------------------------------------
// 1. 查询挂号信息(供业务层校验使用)
// -----------------------------------------------------------------
@Select("SELECT * FROM outpatient_registration WHERE id = #{registrationId} FOR UPDATE")
Map<String, Object> selectByIdForUpdate(@Param("registrationId") Long registrationId);
// -----------------------------------------------------------------
// 2. 退号:一次性更新挂号表的状态、退款标记、退款时间
// -----------------------------------------------------------------
/**
* 统一退号诊前退号SQL。
*
* <pre>
* 1. his_outpatient_registration -> status = 2 (已退号)
* 2. his_outpatient_fee -> status = 2 (已退费)
* 3. his_outpatient_queue -> status = 2 (已取消)
* </pre>
*
* @param registrationId 挂号主键 ID
* @return 受影响的行数(期望 3 行)
*/
@Update({
"UPDATE outpatient_registration",
"SET status = 0, /* 0已退号 */",
" refund_flag = 1, /* 1已退号 */",
" refund_time = NOW()",
"WHERE id = #{registrationId}"
"UPDATE his_outpatient_registration r SET r.status = 2 WHERE r.id = #{registrationId};",
"UPDATE his_outpatient_fee f SET f.status = 2 WHERE f.registration_id = #{registrationId};",
"UPDATE his_outpatient_queue q SET q.status = 2 WHERE q.registration_id = #{registrationId};"
})
int updateRefundStatus(@Param("registrationId") Long registrationId);
int cancelRegistration(@Param("registrationId") Long registrationId);
// -----------------------------------------------------------------
// 3. 关联支付表的退款状态更新(已支付 -> 已退款)
// -----------------------------------------------------------------
@Update({
"UPDATE outpatient_payment",
"SET pay_status = 2, /* 2已退款 */",
" refund_time = NOW()",
"WHERE registration_id = #{registrationId}"
})
int updatePaymentRefund(@Param("registrationId") Long registrationId);
/**
* 旧的单表状态更新(已废弃,仅为兼容历史代码)。
*
* @param registrationId 挂号主键 ID
* @param status 新状态值
* @return 受影响行数
*/
@Update("UPDATE his_outpatient_registration SET status = #{status} WHERE id = #{registrationId}")
int updateRegStatus(@Param("registrationId") Long registrationId, @Param("status") Integer status);
}