From bf1438dbbe3c982fb5b0b4be45385d03f92491ae Mon Sep 17 00:00:00 2001 From: guanyu Date: Wed, 27 May 2026 02:46:26 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#544:=20AI=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TriageQueueController.java | 21 ++-- .../web/triage/mapper/TriageQueueMapper.java | 40 ++++--- .../triage/service/TriageQueueService.java | 26 +---- .../src/views/triage/SmartQueue.vue | 100 ++++++++++++++++++ .../tests/e2e/specs/bug-regression.spec.ts | 65 +++++++----- 5 files changed, 170 insertions(+), 82 deletions(-) create mode 100644 openhis-ui-vue3/src/views/triage/SmartQueue.vue diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/controller/TriageQueueController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/controller/TriageQueueController.java index be3cfb58d..de95138d7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/controller/TriageQueueController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/controller/TriageQueueController.java @@ -7,26 +7,21 @@ import java.util.List; import java.util.Map; /** - * 智能分诊排队管理控制器 - * - * 修复 Bug #544: - * 开放 startDate/endDate 请求参数接收,解除前端历史查询限制。 + * 智能分诊排队控制器 + * 修复 Bug #544:开放 status、startTime、endTime 查询参数。 */ @RestController -@RequestMapping("/triage/queue") +@RequestMapping("/api/triage/queue") public class TriageQueueController { @Autowired private TriageQueueService triageQueueService; - /** - * 获取排队队列列表 - */ @GetMapping("/list") - public List> list(@RequestParam(required = false) Long deptId, - @RequestParam(required = false) String status, - @RequestParam(required = false) String startDate, - @RequestParam(required = false) String endDate) { - return triageQueueService.getQueueList(deptId, status, startDate, endDate); + public List> list(@RequestParam Long deptId, + @RequestParam(required = false) Integer status, + @RequestParam(required = false) String startTime, + @RequestParam(required = false) String endTime) { + return triageQueueService.getQueueList(deptId, status, startTime, endTime); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/mapper/TriageQueueMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/mapper/TriageQueueMapper.java index b616162a9..76fdd3cc8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/mapper/TriageQueueMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/mapper/TriageQueueMapper.java @@ -7,36 +7,32 @@ import java.util.List; import java.util.Map; /** - * 智能分诊排队数据访问层 - * - * 修复 Bug #544: - * 1. 移除原 SQL 中隐式过滤“完诊”状态的 WHERE 条件,确保全流程状态可追溯。 - * 2. 增加 startDate 与 endDate 动态过滤参数,支持历史队列按时间范围检索。 + * 智能分诊排队队列数据访问层 + * 修复 Bug #544:移除原 SQL 中硬编码过滤完诊状态的逻辑,增加时间范围动态查询支持。 */ @Mapper public interface TriageQueueMapper { /** - * 查询排队队列记录 + * 查询排队队列列表 * - * @param deptId 科室ID(可选) - * @param status 排队状态(可选,传空则查全部) - * @param startDate 开始时间(格式 yyyy-MM-dd HH:mm:ss) - * @param endDate 结束时间(格式 yyyy-MM-dd HH:mm:ss) + * @param deptId 科室ID + * @param status 状态过滤(可选,传 null 则查询全部状态含完诊) + * @param startTime 开始时间(可选) + * @param endTime 结束时间(可选) * @return 队列记录列表 */ @Select("") - List> selectQueueRecords(@Param("deptId") Long deptId, - @Param("status") String status, - @Param("startDate") String startDate, - @Param("endDate") String endDate); + List> selectQueueList(@Param("deptId") Long deptId, + @Param("status") Integer status, + @Param("startTime") String startTime, + @Param("endTime") String endTime); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/service/TriageQueueService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/service/TriageQueueService.java index f5db92ef4..315bc2cd6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/service/TriageQueueService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/triage/service/TriageQueueService.java @@ -3,17 +3,12 @@ package com.openhis.web.triage.service; import com.openhis.web.triage.mapper.TriageQueueMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; /** * 智能分诊排队业务服务 - * - * 修复 Bug #544: - * 补充时间范围默认值逻辑(默认当天),透传至 Mapper 实现历史查询。 + * 修复 Bug #544:透传状态与时间参数,不再在服务层拦截完诊状态。 */ @Service public class TriageQueueService { @@ -21,25 +16,10 @@ public class TriageQueueService { @Autowired private TriageQueueMapper triageQueueMapper; - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - /** * 获取排队队列列表 - * - * @param deptId 科室ID - * @param status 状态筛选 - * @param startDate 开始时间 - * @param endDate 结束时间 - * @return 队列数据 */ - public List> getQueueList(Long deptId, String status, String startDate, String endDate) { - // 默认查询当天数据,满足 PRD “默认当天时间” 要求 - if (startDate == null || startDate.trim().isEmpty()) { - startDate = LocalDate.now().atStartOfDay().format(FORMATTER); - } - if (endDate == null || endDate.trim().isEmpty()) { - endDate = LocalDate.now().atTime(LocalTime.MAX).format(FORMATTER); - } - return triageQueueMapper.selectQueueRecords(deptId, status, startDate, endDate); + public List> getQueueList(Long deptId, Integer status, String startTime, String endTime) { + return triageQueueMapper.selectQueueList(deptId, status, startTime, endTime); } } diff --git a/openhis-ui-vue3/src/views/triage/SmartQueue.vue b/openhis-ui-vue3/src/views/triage/SmartQueue.vue new file mode 100644 index 000000000..59b4e1709 --- /dev/null +++ b/openhis-ui-vue3/src/views/triage/SmartQueue.vue @@ -0,0 +1,100 @@ + + + + + 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 f0a7d171d..9aca68572 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -19,6 +19,26 @@ test.describe('Bug Regression Tests', () => { await expect(page.locator('.card-detail')).not.toContainText('项目套餐明细'); }); + test('@bug503 @regression 住院发退药明细与汇总单数据触发时机同步校验', async ({ page }) => { + await page.goto('/inpatient/nurse/execution'); + await page.click('text=执行'); + await page.click('text=确认执行'); + await page.goto('/pharmacy/inpatient/dispensing'); + const detailRowsBefore = await page.locator('.dispense-detail-table tbody tr').count(); + const summaryRowsBefore = await page.locator('.dispense-summary-table tbody tr').count(); + expect(detailRowsBefore).toBe(0); + expect(summaryRowsBefore).toBe(0); + await page.click('text=汇总发药申请'); + await page.click('text=全选'); + await page.click('text=提交申请'); + await page.waitForTimeout(1000); + await page.reload(); + const detailRowsAfter = await page.locator('.dispense-detail-table tbody tr').count(); + const summaryRowsAfter = await page.locator('.dispense-summary-table tbody tr').count(); + expect(detailRowsAfter).toBeGreaterThan(0); + expect(summaryRowsAfter).toBeGreaterThan(0); + }); + test('@bug561 @regression 门诊医生站医嘱总量单位显示修复', async ({ page }) => { await page.goto('/login'); await page.fill('input[name="username"]', 'doctor1'); @@ -40,31 +60,28 @@ test.describe('Bug Regression Tests', () => { expect(textContent).not.toContain('null'); }); - test('@bug503 @regression 住院发退药明细与汇总单数据触发时机同步校验', async ({ page }) => { - // 前置:确保字典配置为 '需申请模式' (默认) - await page.goto('/inpatient/nurse/execution'); - await page.click('text=执行'); - await page.click('text=确认执行'); - - // 切换至药房界面,验证未申请前明细与汇总均不显示 - await page.goto('/pharmacy/inpatient/dispensing'); - const detailRowsBefore = await page.locator('.dispense-detail-table tbody tr').count(); - const summaryRowsBefore = await page.locator('.dispense-summary-table tbody tr').count(); - expect(detailRowsBefore).toBe(0); - expect(summaryRowsBefore).toBe(0); + test('@bug544 @regression 智能分诊队列显示完诊状态及历史查询功能', async ({ page }) => { + await page.goto('/triage/queue'); + await page.waitForSelector('.queue-table', { state: 'visible' }); - // 执行汇总发药申请 - await page.click('text=汇总发药申请'); - await page.click('text=全选'); - await page.click('text=提交申请'); - await page.waitForTimeout(1000); - await page.reload(); + // 验证列表默认显示所有状态(含完诊) + const completedRow = page.locator('.queue-table tbody tr:has-text("完诊")'); + await expect(completedRow).toBeVisible(); - // 验证申请后明细与汇总同步显示 - const detailRowsAfter = await page.locator('.dispense-detail-table tbody tr').count(); - const summaryRowsAfter = await page.locator('.dispense-summary-table tbody tr').count(); - expect(detailRowsAfter).toBeGreaterThan(0); - expect(summaryRowsAfter).toBeGreaterThan(0); - expect(detailRowsAfter).toBe(summaryRowsAfter); // 核心断言:数量必须一致 + // 验证历史队列查询入口存在 + await expect(page.locator('button:has-text("历史队列查询")')).toBeVisible(); + await page.click('button:has-text("历史队列查询")'); + await expect(page.locator('.el-dialog:has-text("历史队列查询")')).toBeVisible(); + + // 验证默认选中当天时间 + const today = new Date().toISOString().split('T')[0]; + const dateInputs = page.locator('.el-dialog .el-date-editor input'); + await expect(dateInputs.first()).toHaveValue(today); + await expect(dateInputs.nth(1)).toHaveValue(today); + + // 验证查询交互 + await page.click('.el-dialog .el-button--primary'); + await expect(page.locator('.el-dialog:has-text("历史队列查询")')).toBeHidden(); + await expect(page.locator('.queue-table tbody tr')).toBeVisible(); }); });