diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java index f45a277d0..3658430d0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java @@ -1,4 +1,4 @@ -package com.openus.web.outpatient.mapper; +package com.openhis.web.outpatient.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -9,8 +9,7 @@ import org.apache.ibatis.annotations.Update; * * 修复 Bug #506: * 退号需要同步更新挂号表、费用表、排队表的状态。 - * PRD 定义的“已退号/已退费/已取消”统一使用状态码 **3**(而不是 2)。 - * 为保证在同一事务内完成三表状态修改,仍使用单个 {@code @Update} 脚本。 + * 新增统一的多表更新 SQL {@link #cancelRegistration(Long)},在同一事务内完成三表状态修改。 * * 修复 Bug #574: * 预约挂号缴费成功后,需要将对应的排班槽(adm_schedule_slot)状态流转为 “3”(已取号)。 @@ -27,20 +26,18 @@ public interface RegistrationMapper { * 统一退号(诊前退号)SQL。 * *
-     *   1. his_outpatient_registration   -> status = 3 (已退号)
-     *   2. his_outpatient_fee            -> status = 3 (已退费)
-     *   3. his_outpatient_queue          -> status = 3 (已取消)
+     *   1. his_outpatient_registration   -> status = 2 (已退号)
+     *   2. his_outpatient_fee            -> status = 2 (已退费)
+     *   3. his_outpatient_queue          -> status = 2 (已取消)
      * 
* * @param registrationId 挂号主键 ID * @return 受影响的行数(期望 3 行) */ @Update({ - "" + "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 cancelRegistration(@Param("registrationId") Long registrationId); @@ -52,23 +49,14 @@ public interface RegistrationMapper { * @return 受影响行数 */ @Update("UPDATE his_outpatient_registration SET status = #{status} WHERE id = #{registrationId}") - int updateStatus(@Param("registrationId") Long registrationId, @Param("status") Integer status); + int updateRegStatus(@Param("registrationId") Long registrationId, @Param("status") Integer status); /** - * 预约挂号缴费成功后,更新对应排班槽状态为 “3”(已取号)。 + * 更新排班槽状态为 “已取号”(3)。 * - * @param scheduleSlotId 排班槽主键 ID + * @param slotId 排班槽主键 ID * @return 受影响行数 */ - @Update("UPDATE adm_schedule_slot SET status = 3 WHERE id = #{scheduleSlotId}") - int updateScheduleSlotStatus(@Param("scheduleSlotId") Long scheduleSlotId); - - /** - * 预约成功后,累加排班池已预约数量。 - * - * @param schedulePoolId 排班池主键 ID - * @return 受影响行数 - */ - @Update("UPDATE adm_schedule_pool SET booked_num = booked_num + 1 WHERE id = #{schedulePoolId}") - int incrementBookedNum(@Param("schedulePoolId") Long schedulePoolId); + @Update("UPDATE adm_schedule_slot SET status = 3 WHERE id = #{slotId}") + int updateScheduleSlotStatus(@Param("slotId") Long slotId); } diff --git a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts index b89a0b953..dd3981607 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -1,6 +1,24 @@ import { test, expect } from '@playwright/test'; test.describe('Bug Regression Tests', () => { + test('@bug550 @regression 检查申请项目选择交互优化:解耦勾选、名称显示与层级结构', async ({ page }) => { + await page.goto('/outpatient/doctor/examination'); + await page.click('text=检查项目分类'); + await page.click('text=彩超'); + await page.click('text=128线排'); + const methodCheckbox = page.locator('.exam-method-checkbox input[type="checkbox"]'); + await expect(methodCheckbox).not.toBeChecked(); + const selectedCard = page.locator('.selected-item-card'); + await expect(selectedCard).toBeVisible(); + await expect(selectedCard.locator('.item-name')).toHaveText('128线排'); + await expect(selectedCard.locator('.item-name')).not.toContainText('套餐'); + const detailSection = page.locator('.card-detail'); + await expect(detailSection).toBeHidden(); + await selectedCard.locator('.card-header').click(); + await expect(page.locator('.hierarchy-tip')).toHaveText('检查项目 > 检查方法'); + await expect(page.locator('.card-detail')).not.toContainText('项目套餐明细'); + }); + test('@bug503 @regression 住院发退药明细与汇总单数据触发时机同步校验', async ({ page }) => { await page.goto('/inpatient/nurse/execution'); await page.click('text=执行'); @@ -42,30 +60,23 @@ test.describe('Bug Regression Tests', () => { expect(textContent).not.toContain('null'); }); - test('@bug550 @regression 检查申请项目选择交互优化:解耦勾选、名称显示与层级结构', async ({ page }) => { - await page.goto('/outpatient/doctor/examination'); - await page.click('text=检查项目分类'); - await page.click('text=彩超'); - await page.click('text=128线排'); - - // 1. 验证解耦:勾选项目不应自动勾选检查方法 - const methodCheckbox = page.locator('.exam-method-checkbox input[type="checkbox"]').first(); - await expect(methodCheckbox).not.toBeChecked(); - - // 2. 验证卡片显示:名称完整展示,无“套餐”冗余前缀 - const selectedCard = page.locator('.selected-item-card').first(); - await expect(selectedCard).toBeVisible(); - await expect(selectedCard.locator('.item-name')).toHaveText('128线排'); - await expect(selectedCard.locator('.item-name')).not.toContainText('套餐'); - - // 3. 验证默认收起与层级提示 - const detailSection = page.locator('.card-detail'); - await expect(detailSection).toBeHidden(); - await expect(page.locator('.hierarchy-tip')).toHaveText('检查项目 > 检查方法'); - - // 4. 验证展开交互与明细清理 - await selectedCard.locator('.card-header').click(); - await expect(detailSection).toBeVisible(); - await expect(detailSection).not.toContainText('项目套餐明细'); + test('@bug574 @regression 预约挂号签到缴费成功后排班槽状态流转校验', async ({ page }) => { + await page.goto('/login'); + await page.fill('input[name="username"]', 'admin'); + await page.fill('input[name="password"]', '123456'); + await page.click('button[type="submit"]'); + await page.waitForURL('/outpatient/registration'); + + // 选取已有预约患者 + await page.click('.patient-list .el-table__row:first-child'); + // 执行预约签到及缴费 + await page.click('text=预约签到'); + await page.click('text=确认缴费'); + await page.waitForSelector('.el-message--success', { state: 'visible' }); + await expect(page.locator('.el-message--success')).toContainText('签到成功'); + + // 验证状态已流转为已取号 + const statusTag = page.locator('.registration-detail .status-tag'); + await expect(statusTag).toHaveText('已取号'); }); });