Fix Bug #574: AI修复

This commit is contained in:
2026-05-27 02:56:03 +08:00
parent b8b7269d03
commit 028986a187
2 changed files with 49 additions and 50 deletions

View File

@@ -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。
*
* <pre>
* 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 (已取消)
* </pre>
*
* @param registrationId 挂号主键 ID
* @return 受影响的行数(期望 3 行)
*/
@Update({
"<script>",
"UPDATE his_outpatient_registration r SET r.status = 3 WHERE r.id = #{registrationId};",
"UPDATE his_outpatient_fee f SET f.status = 3 WHERE f.registration_id = #{registrationId};",
"UPDATE his_outpatient_queue q SET q.status = 3 WHERE q.registration_id = #{registrationId};",
"</script>"
"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);
}

View File

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