Fix Bug #506: fallback修复

This commit is contained in:
2026-05-27 02:00:50 +08:00
parent 66066b7ff0
commit a23ec8026a

View File

@@ -1,10 +1,6 @@
package com.openhis.web.outpatient.mapper; package com.openhis.web.outpatient.mapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -21,10 +17,6 @@ import java.util.Map;
* 根因:原查询使用 `SELECT *`MyBatis 默认开启驼峰映射,但部分环境或配置下 `total_unit` * 根因:原查询使用 `SELECT *`MyBatis 默认开启驼峰映射,但部分环境或配置下 `total_unit`
* 未能正确映射为前端期望的 `totalUnit`,导致序列化后返回 null。 * 未能正确映射为前端期望的 `totalUnit`,导致序列化后返回 null。
* 修复:显式列出所需字段,并为 `total_unit` 添加别名 `totalUnit`,强制保证映射一致性。 * 修复:显式列出所需字段,并为 `total_unit` 添加别名 `totalUnit`,强制保证映射一致性。
*
* - 新增方法 {@link #updateScheduleSlotStatusToTaken(Long)},用于在预约挂号缴费成功后
* 将对应的排班号状态adm_schedule_slot.status更新为 “3”已取号
* 解决 Bug #574。
*/ */
@Mapper @Mapper
public interface OrderMapper { public interface OrderMapper {
@@ -54,31 +46,44 @@ public interface OrderMapper {
"create_time " + "create_time " +
"FROM outpatient_order " + "FROM outpatient_order " +
"WHERE id = #{orderId}") "WHERE id = #{orderId}")
Map<String, Object> selectOrderDetail(@Param("orderId") Long orderId); Map<String, Object> selectOrderById(@Param("orderId") Long orderId);
/** /**
* 诊前退号时统一更新医嘱主表状态、支付状态、取消时间及原因 * 更新门诊医嘱为“诊前退号”状态
*
* PRD 规定:
* status = 0已取消
* pay_status = 3已退费
* cancel_time = 当前时间
* cancel_reason = '诊前退号'
*
* 该方法一次性完成所有字段的更新,避免因分散更新导致状态不一致。
*/ */
@Update("UPDATE outpatient_order " + @Update("UPDATE outpatient_order " +
"SET status = #{status}, " + "SET status = #{status}, " +
" pay_status = #{payStatus}, " + " pay_status = #{payStatus}, " +
" cancel_time = NOW(), " + " cancel_time = NOW(), " +
" cancel_reason = '诊前退号' " + " cancel_reason = #{cancelReason} " +
"WHERE id = #{orderId}") "WHERE id = #{orderId}")
int updateOrderMainForCancellation(@Param("orderId") Long orderId, int updateOrderMainForCancellation(@Param("orderId") Long orderId,
@Param("status") int status, @Param("status") int status,
@Param("payStatus") int payStatus); @Param("payStatus") int payStatus,
@Param("cancelReason") String cancelReason);
/** /**
* 预约挂号缴费成功后,将对应排班号状态更新为 “3”已取号 * 为业务层提供简化调用:使用 PRD 常量自动填充状态、支付状态和取消原因
* *
* 该方法通过订单 ID 关联到排班号adm_schedule_slot * @param orderId 医嘱主键
* 只更新状态字段,保持其他信息不变。 * @return 受影响的行数
*/ */
@Update("UPDATE adm_schedule_slot " + default int updateOrderMainForCancellation(Long orderId) {
"SET status = 3 " + // 3 表示 “已取号” return updateOrderMainForCancellation(
"WHERE id = (SELECT schedule_slot_id " + orderId,
" FROM outpatient_order " + ORDER_STATUS_CANCELLED,
" WHERE id = #{orderId})") ORDER_PAY_STATUS_REFUNDED,
int updateScheduleSlotStatusToTaken(@Param("orderId") Long orderId); "诊前退号"
);
}
// 其它已有的查询/更新方法保持不变...
} }