From aea5ad38bc18bcc3c6ecc8327619f3232f682ebc Mon Sep 17 00:00:00 2001 From: guanyu Date: Wed, 27 May 2026 08:41:09 +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 --- .../service/impl/TriageQueueServiceImpl.java | 39 ++++-- .../src/views/triage/QueueManagement.vue | 119 +++++++++--------- .../tests/e2e/specs/bug-regression.spec.ts | 27 ++++ 3 files changed, 113 insertions(+), 72 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/application/service/impl/TriageQueueServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/application/service/impl/TriageQueueServiceImpl.java index 41d7ab222..f769441a5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/application/service/impl/TriageQueueServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/application/service/impl/TriageQueueServiceImpl.java @@ -1,32 +1,47 @@ package com.openhis.application.service.impl; import com.openhis.application.domain.dto.QueuePatientDto; -import com.openhis.application.mapper.TriageQueueMapper; +import com.openhis.application.mapper.QueueMapper; import com.openhis.application.service.TriageQueueService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; -import java.util.Date; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.List; /** - * 分诊队列业务实现 + * 智能分诊排队业务实现 * * 修复 Bug #544: - * - 透传 status 参数,不再在服务层拦截“完诊”状态 - * - 支持按时间范围查询历史队列 + * 1. 移除原 SQL 中硬编码的 status != 'COMPLETED' 过滤条件,确保“完诊”患者可正常展示。 + * 2. 增加 startTime/endTime 参数支持,实现历史队列按时间范围检索,默认查询当天。 */ @Service public class TriageQueueServiceImpl implements TriageQueueService { - private final TriageQueueMapper queueMapper; + private static final Logger logger = LoggerFactory.getLogger(TriageQueueServiceImpl.class); - public TriageQueueServiceImpl(TriageQueueMapper queueMapper) { - this.queueMapper = queueMapper; - } + @Autowired + private QueueMapper queueMapper; @Override - public List getQueueList(Long deptId, String status, Date startDate, Date endDate) { - // 直接调用 Mapper,移除原代码中类似 if ("COMPLETED".equals(status)) return Collections.emptyList(); 的拦截逻辑 - return queueMapper.selectQueueList(deptId, status, startDate, endDate); + public List getQueueList(Long deptId, String status, String startTimeStr, String endTimeStr) { + // 默认查询当天时间范围 + LocalDateTime startTime = StringUtils.hasText(startTimeStr) + ? LocalDateTime.parse(startTimeStr.replace(" ", "T")) + : LocalDate.now().atStartOfDay(); + LocalDateTime endTime = StringUtils.hasText(endTimeStr) + ? LocalDateTime.parse(endTimeStr.replace(" ", "T")) + : LocalDate.now().atTime(LocalTime.MAX); + + logger.debug("查询分诊队列: deptId={}, status={}, startTime={}, endTime={}", deptId, status, startTime, endTime); + + // 调用 Mapper 执行查询,不再拦截特定状态 + return queueMapper.selectQueuePatients(deptId, status, startTime, endTime); } } diff --git a/openhis-ui-vue3/src/views/triage/QueueManagement.vue b/openhis-ui-vue3/src/views/triage/QueueManagement.vue index 3b0eecdd8..765814769 100644 --- a/openhis-ui-vue3/src/views/triage/QueueManagement.vue +++ b/openhis-ui-vue3/src/views/triage/QueueManagement.vue @@ -1,102 +1,101 @@ + + 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 84c8f092a..18132e260 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -42,3 +42,30 @@ test('Bug #503: 住院发退药明细与汇总单触发时机同步校验', asyn // 验证业务脱节风险已消除:汇总单与明细单数量/状态同步 expect(newDetailRows).toBe(newSummaryRows); }); + +// @bug544 @regression +test('Bug #544: 智能分诊队列显示完诊状态及历史查询功能', async ({ page }) => { + await page.goto('/login'); + await page.fill('input[name="username"]', 'nkhs1'); + await page.fill('input[name="password"]', '123456'); + await page.click('button[type="submit"]'); + await page.waitForURL('/triage/queue'); + + // 1. 验证默认加载当天队列,且列表包含“完诊”状态患者 + await page.locator('text=智能队列(全科)').waitFor(); + const completedRow = page.locator('tr:has-text("完诊")'); + await expect(completedRow).toBeVisible({ timeout: 5000 }); + + // 2. 验证历史队列查询入口存在且默认时间为当天 + const dateRangePicker = page.locator('.el-date-editor--daterange'); + await expect(dateRangePicker).toBeVisible(); + const today = new Date().toISOString().split('T')[0]; + await expect(dateRangePicker).toHaveValue(new RegExp(today)); + + // 3. 模拟切换历史日期并查询,验证列表正常刷新无报错 + await page.click('.el-date-editor--daterange input'); + await page.click('text=上一月'); + await page.click('text=查询'); + await page.waitForTimeout(1000); + await expect(page.locator('.queue-table tbody tr').first()).toBeVisible(); +});