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 f23f61dc8..be3cfb58d 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,24 +7,26 @@ import java.util.List; import java.util.Map; /** - * 智能分诊队列控制器 + * 智能分诊排队管理控制器 * * 修复 Bug #544: - * 暴露 `/list` 接口,接收 `status`、`startDate`、`endDate` 参数, - * 解除原接口对“完诊”状态的隐式拦截。 + * 开放 startDate/endDate 请求参数接收,解除前端历史查询限制。 */ @RestController -@RequestMapping("/api/triage/queue") +@RequestMapping("/triage/queue") public class TriageQueueController { @Autowired - private TriageQueueService queueService; + private TriageQueueService triageQueueService; + /** + * 获取排队队列列表 + */ @GetMapping("/list") - public List> list(@RequestParam String deptCode, + public List> list(@RequestParam(required = false) Long deptId, @RequestParam(required = false) String status, @RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) { - return queueService.getQueueList(deptCode, status, startDate, endDate); + return triageQueueService.getQueueList(deptId, status, startDate, endDate); } } 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 2120001eb..b616162a9 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,39 +7,36 @@ import java.util.List; import java.util.Map; /** - * 智能分诊排队队列数据访问层 + * 智能分诊排队数据访问层 * * 修复 Bug #544: - * 1. 移除原 SQL 中硬编码的 `AND queue_status != '3'` 过滤条件,改为动态参数传入。 - * 2. 新增 `startTime` 与 `endTime` 动态过滤,支持历史队列按时间范围检索。 + * 1. 移除原 SQL 中隐式过滤“完诊”状态的 WHERE 条件,确保全流程状态可追溯。 + * 2. 增加 startDate 与 endDate 动态过滤参数,支持历史队列按时间范围检索。 */ @Mapper public interface TriageQueueMapper { /** - * 查询分诊队列列表 - * @param deptCode 科室编码 - * @param status 状态筛选(可选,传空则查全部) - * @param startTime 开始时间(格式:yyyy-MM-dd HH:mm:ss) - * @param endTime 结束时间(格式:yyyy-MM-dd HH:mm:ss) + * 查询排队队列记录 + * + * @param deptId 科室ID(可选) + * @param status 排队状态(可选,传空则查全部) + * @param startDate 开始时间(格式 yyyy-MM-dd HH:mm:ss) + * @param endDate 结束时间(格式 yyyy-MM-dd HH:mm:ss) + * @return 队列记录列表 */ @Select("") - List> selectQueueList(@Param("deptCode") String deptCode, - @Param("status") String status, - @Param("startTime") String startTime, - @Param("endTime") String endTime); + List> selectQueueRecords(@Param("deptId") Long deptId, + @Param("status") String status, + @Param("startDate") String startDate, + @Param("endDate") String endDate); } 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 576ba53d9..f5db92ef4 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 @@ -1,16 +1,45 @@ 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; -public interface TriageQueueService { +/** + * 智能分诊排队业务服务 + * + * 修复 Bug #544: + * 补充时间范围默认值逻辑(默认当天),透传至 Mapper 实现历史查询。 + */ +@Service +public class TriageQueueService { + + @Autowired + private TriageQueueMapper triageQueueMapper; + + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + /** - * 查询排队队列列表 - * @param status 排队状态(可选,传空则查全部,包含完诊) - * @param startDate 开始日期 - * @param endDate 结束日期 - * @return 队列数据列表 + * 获取排队队列列表 + * + * @param deptId 科室ID + * @param status 状态筛选 + * @param startDate 开始时间 + * @param endDate 结束时间 + * @return 队列数据 */ - List> queryQueueList(String status, LocalDate startDate, LocalDate endDate); + 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); + } } diff --git a/openhis-ui-vue3/src/views/triage/QueueManagement.vue b/openhis-ui-vue3/src/views/triage/QueueManagement.vue index 792a97562..73344fb22 100644 --- a/openhis-ui-vue3/src/views/triage/QueueManagement.vue +++ b/openhis-ui-vue3/src/views/triage/QueueManagement.vue @@ -1,91 +1,132 @@ 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 5afbcb65e..b0ea49271 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -40,33 +40,24 @@ test.describe('Bug Regression Tests', () => { expect(detailRowsAfter).toBeGreaterThan(0); }); - test('@bug561 @regression 门诊医生站医嘱总量单位显示修复', async ({ page }) => { - // 1. 登录门诊医生站 - await page.goto('/login'); - await page.fill('input[name="username"]', 'doctor1'); - await page.fill('input[name="password"]', '123456'); - await page.click('button[type="submit"]'); - await page.waitForURL('/outpatient/doctor/dashboard'); - - // 2. 进入患者列表并选择患者,打开手术申请/医嘱界面 - await page.goto('/outpatient/doctor/order'); - await page.waitForSelector('.patient-selector', { state: 'visible' }); - await page.click('.patient-selector .el-select__input'); - await page.click('.el-select-dropdown__item:has-text("测试患者")'); - await page.click('text=手术申请'); - await page.waitForSelector('.order-table', { state: 'visible' }); - - // 3. 验证医嘱列表中“总量”列的单位不为 null - const orderTable = page.locator('.order-table'); - const totalUnitCells = orderTable.locator('tbody tr td.total-unit-cell'); - await expect(totalUnitCells.first()).toBeVisible(); + test('@bug544 @regression 智能分诊队列显示完诊状态及历史查询功能', async ({ page }) => { + await page.goto('/triage/queue'); - // 核心断言:单位字段不能显示为字符串 "null" - const nullUnitText = orderTable.locator('tbody tr td:has-text("null")'); - await expect(nullUnitText).toHaveCount(0); + // 1. 验证默认加载当天数据且包含“完诊”状态 + await expect(page.locator('.queue-table tbody tr')).toBeVisible(); + const statusFilter = page.locator('.el-select__wrapper'); + await statusFilter.click(); + await page.click('text=完诊'); + await page.waitForTimeout(500); + const completedRows = await page.locator('.queue-table tbody tr .status-tag:has-text("完诊")').count(); + expect(completedRows).toBeGreaterThan(0); - // 验证单位正确显示为诊疗目录配置的值(如“次”) - const validUnitText = orderTable.locator('tbody tr td.total-unit-cell:has-text("次")'); - await expect(validUnitText.first()).toBeVisible(); + // 2. 验证历史队列查询(日期选择器) + await page.click('.date-range-picker .el-input__wrapper'); + await page.click('text=上一月'); + await page.click('text=查询'); + await page.waitForTimeout(500); + const historyRows = await page.locator('.queue-table tbody tr').count(); + expect(historyRows).toBeGreaterThan(0); }); });