Fix Bug #506: AI修复
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package com.openhis.application.service.impl;
|
||||
|
||||
import com.openhis.application.mapper.*;
|
||||
import com.openhis.application.domain.entity.*;
|
||||
import com.openhis.application.service.OutpatientRegistrationService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
public class OutpatientRegistrationServiceImpl implements OutpatientRegistrationService {
|
||||
|
||||
private final OrderMainMapper orderMainMapper;
|
||||
private final AdmScheduleSlotMapper admScheduleSlotMapper;
|
||||
private final AdmSchedulePoolMapper admSchedulePoolMapper;
|
||||
private final RefundLogMapper refundLogMapper;
|
||||
|
||||
public OutpatientRegistrationServiceImpl(OrderMainMapper orderMainMapper,
|
||||
AdmScheduleSlotMapper admScheduleSlotMapper,
|
||||
AdmSchedulePoolMapper admSchedulePoolMapper,
|
||||
RefundLogMapper refundLogMapper) {
|
||||
this.orderMainMapper = orderMainMapper;
|
||||
this.admScheduleSlotMapper = admScheduleSlotMapper;
|
||||
this.admSchedulePoolMapper = admSchedulePoolMapper;
|
||||
this.refundLogMapper = refundLogMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelRegistration(Long orderId) {
|
||||
// 1. 查询原订单
|
||||
OrderMain order = orderMainMapper.selectById(orderId);
|
||||
if (order == null) {
|
||||
throw new RuntimeException("挂号订单不存在");
|
||||
}
|
||||
|
||||
// 2. 更新 order_main 表
|
||||
OrderMain updateOrder = new OrderMain();
|
||||
updateOrder.setId(orderId);
|
||||
updateOrder.setStatus(0); // 状态变更为 0(已取消)
|
||||
updateOrder.setPayStatus(3); // 支付状态变更为 3(已退费)
|
||||
updateOrder.setCancelTime(new Date()); // 写入当前取消时间
|
||||
updateOrder.setCancelReason("诊前退号"); // 修正退号原因
|
||||
orderMainMapper.updateById(updateOrder);
|
||||
|
||||
// 3. 更新 adm_schedule_slot 表 (回滚号源)
|
||||
if (order.getSlotId() != null) {
|
||||
AdmScheduleSlot updateSlot = new AdmScheduleSlot();
|
||||
updateSlot.setId(order.getSlotId());
|
||||
updateSlot.setStatus(0); // 状态回滚至 0(待约)
|
||||
updateSlot.setOrderId(null); // 清空关联订单ID
|
||||
admScheduleSlotMapper.updateById(updateSlot);
|
||||
}
|
||||
|
||||
// 4. 更新 adm_schedule_pool 表 (号源池计数与版本控制)
|
||||
if (order.getPoolId() != null) {
|
||||
AdmSchedulePool pool = admSchedulePoolMapper.selectById(order.getPoolId());
|
||||
if (pool != null) {
|
||||
AdmSchedulePool updatePool = new AdmSchedulePool();
|
||||
updatePool.setId(pool.getId());
|
||||
updatePool.setVersion(pool.getVersion() + 1); // version 累加 1
|
||||
updatePool.setBookedNum(pool.getBookedNum() - 1); // booked_num 减 1
|
||||
admSchedulePoolMapper.updateById(updatePool);
|
||||
}
|
||||
}
|
||||
|
||||
// 5. 写入 refund_log 表 (确保 order_id 关联 order_main.id)
|
||||
RefundLog refundLog = new RefundLog();
|
||||
refundLog.setOrderId(orderId); // 严格关联 order_main.id
|
||||
refundLog.setRefundAmount(order.getPayAmount());
|
||||
refundLog.setRefundTime(new Date());
|
||||
refundLog.setReason("诊前退号");
|
||||
refundLogMapper.insert(refundLog);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user