zhaoyun
d9a8ab3e1e
fix(#506): 请修复 Bug #506
根因:
- Bug #请修复 Bug #506 存在的问题
修复:
- ### 修改的文件(5个修改 + 4个清理)
- **
- | 文件 | 变更 |
- |---|---|
- | `RegistrationController.java` | 改用 `RegistrationCancelService` 代替 `RegistrationService`(后者缺少 `refundRegistration` 方法) |
- | `RegistrationCancelService.java` | 新增 `refundRegistration(Long registrationId)` 方法,从挂号ID查找订单并执行完整退号流程 |
- | `RegistrationCancelServiceImpl.java` | **补全 refund_log 插入**(之前被注释掉);新增 `refundRegistration` 实现;统一事务管理 |
- | `RegistrationCancelMapper.java` | 新增 `selectRegistrationById` 查询 method,支持按挂号ID查找关联订单 |
- | `OrderMapper.java` (inpatient) | 新增 `ORDER_STATUS_CANCELLED`、`ORDER_PAY_STATUS_REFUNDED` 常量,`updateOrderStatusToCancelled`、`updateOrderMainForCancellation` 方法 |
- 清理的重复/损坏文件(4个):**
- `impl/RegistrationCancelServiceImpl.java` — 重复实现,与根级冲突
- `impl/RegistrationServiceImpl.java` — 继承关系无效(`implements` 一个 `@Service` 类),且引用了不存在的方法
- 含零宽字符的 `RegistrationMapper.java` 副本 — 同一包名导致类名冲突
- `openhs/.../OrderMapper.java` — 同一包 `com.openhis.web.inpatient.mapper` 的重复副本
- ### 数据流全链路验证(Bug #506 的 4 点都覆盖)
- | 检查点 | 预期(PRD) | SQL 确认 |
- |---|---|---|
- | `order_main.status` | 0(已取消) | `SET status = 0` |
- | `order_main.pay_status` | 3(已退费) | `SET pay_status = 3` |
- | `order_main.cancel_time` | 当前时间 | `SET cancel_time = NOW()` |
- | `order_main.cancel_reason` | '诊前退号' | `SET cancel_reason = '诊前退号'` |
- | `adm_schedule_slot.status` | 0(待约) | `SET status = 0` |
- | `adm_schedule_slot.order_id` | NULL | `SET order_id = NULL` |
- | `adm_schedule_pool.version` | version + 1 | `SET version = version + 1` |
- | `adm_schedule_pool.booked_num` | booked_num - 1 | `SET booked_num = booked_num - 1` |
- | `refund_log.order_id` | order_main.id | `INSERT INTO refund_log (order_id, ...)` 已取消注释 |
- ### 执行路径
- Controller.refund(registrationId)
- → RegistrationCancelService.refundRegistration(registrationId)
- → RegistrationCancelMapper.selectRegistrationById(registrationId) # 获取 order_id + pay_amount
- → RegistrationCancelServiceImpl.cancelRegistration(orderId, payAmount)
- 1. cancelMapper.updateOrderStatus(orderId) # order_main 状态更新
- 2. orderMapper.updateOrderStatusToCancelled(...) # 医嘱状态→CANCELLED
- 3. cancelMapper.rollbackSlotStatus(orderId) # 号源回滚
- 4. cancelMapper.updatePoolVersion(poolId) # 排班池 version+1, booked_num-1
- 5. cancelMapper.insertRefundLog(orderId, amount) # ✅ 新增退费日志插入
2026-05-28 23:21:53 +08:00
..
2026-05-28 23:21:53 +08:00
2026-05-27 03:00:08 +08:00
2026-05-27 03:00:08 +08:00
2026-05-27 05:57:21 +08:00
2026-05-08 09:14:18 +08:00