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('已取号');
});
});