fix(#574): 签到状态 BOOKED(1)→CHECKED_IN(3) + 全链路映射修复

根因:checkInTicket() 将签到后状态设为 BOOKED(1) 而非 CHECKED_IN(3)
导致:前端无法识别已签到状态,池统计漏计已签到人数

修复:
- TicketServiceImpl: 签到状态改为 SlotStatus.CHECKED_IN(3)
- TicketAppServiceImpl: 新增 CHECKED_IN→已签到 映射分支
- SchedulePoolMapper: 池统计兼容 BOOKED 和 CHECKED_IN
- outpatientAppointment/index.vue: STATUS_CLASS_MAP + 患者信息条件加上已签到
- AGENTS.md: 写入状态值一致性/禁止删文件/全链路验证铁律
This commit is contained in:
2026-06-02 09:48:51 +08:00
parent 710a215597
commit b8463f4659
5 changed files with 72 additions and 8 deletions

View File

@@ -24,7 +24,7 @@ public interface SchedulePoolMapper extends BaseMapper<SchedulePool> {
FROM adm_schedule_slot s
WHERE s.pool_id = p.id
AND s.delete_flag = '0'
AND s.status = #{bookedStatus}
AND (s.status = #{bookedStatus} OR s.status = 3)
), 0),
locked_num = COALESCE((
SELECT COUNT(1)
@@ -42,7 +42,7 @@ public interface SchedulePoolMapper extends BaseMapper<SchedulePool> {
@Param("lockedStatus") Integer lockedStatus);
/**
* 签到时更新号源池统计:锁定数-1,已预约数+1
* 签到时更新号源池统计:锁定数-1签到后状态变为CHECKED_IN=3由refreshPoolStats统一统计
*
* @param poolId 号源池ID
* @return 结果
@@ -50,7 +50,6 @@ public interface SchedulePoolMapper extends BaseMapper<SchedulePool> {
@Update("""
UPDATE adm_schedule_pool
SET locked_num = locked_num - 1,
booked_num = booked_num + 1,
update_time = NOW()
WHERE id = #{poolId}
AND locked_num > 0

View File

@@ -329,16 +329,16 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
orderService.updateOrderStatusById(latestOrder.getId(), OrderStatus.ACTIVE.getValue());
orderMapper.updatePayStatus(latestOrder.getId(), 1, new Date());
// 2. 只有锁定态(2)的号源才能签到,签到时 2→1(LOCKED→BOOKED)
// 2. 只有锁定态(2)的号源才能签到,签到时 2→3(LOCKED→CHECKED_IN)
ScheduleSlot slot = scheduleSlotMapper.selectById(slotId);
if (slot == null || !SlotStatus.LOCKED.getValue().equals(slot.getStatus())) {
throw new RuntimeException("号源状态异常,无法签到");
}
// 3. 更新号源槽位状态 2→1LOCKED→BOOKED已预约=已签到)
scheduleSlotMapper.updateSlotStatusAndCheckInTime(slotId, SlotStatus.BOOKED.getValue(), new Date(), SlotStatus.LOCKED.getValue());
// 3. 更新号源槽位状态 2→3LOCKED→CHECKED_IN已签到)
scheduleSlotMapper.updateSlotStatusAndCheckInTime(slotId, SlotStatus.CHECKED_IN.getValue(), new Date(), SlotStatus.LOCKED.getValue());
// 4. 更新号源池统计:锁定数-1预约数+1
// 4. 更新号源池统计:锁定数-1签到数+1
if (slot != null && slot.getPoolId() != null) {
schedulePoolMapper.updatePoolStatsOnCheckIn(slot.getPoolId());
}