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 29eac55b1..1dee6f698 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,39 +1,51 @@ package com.openhis.application.service.impl; import com.github.pagehelper.PageHelper; -import com.github.pagehelper.PageInfo; -import com.openhis.application.domain.dto.QueuePatientDto; +import com.openhis.application.domain.dto.QueueQueryDto; +import com.openhis.application.domain.entity.TriageQueue; import com.openhis.application.mapper.TriageQueueMapper; import com.openhis.application.service.TriageQueueService; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import java.util.Calendar; +import java.util.Date; import java.util.List; -import java.util.Map; /** * 智能分诊队列业务实现 - * - * 修复 Bug #544: - * 1. 移除对 COMPLETED 状态的隐式过滤,允许查询全流程记录。 - * 2. 支持按 startDate/endDate 范围检索历史队列。 + * 修复 Bug #544:移除完诊状态过滤,增加历史队列时间范围查询支持。 */ @Service public class TriageQueueServiceImpl implements TriageQueueService { - private final TriageQueueMapper triageQueueMapper; + private final TriageQueueMapper queueMapper; - public TriageQueueServiceImpl(TriageQueueMapper triageQueueMapper) { - this.triageQueueMapper = triageQueueMapper; + public TriageQueueServiceImpl(TriageQueueMapper queueMapper) { + this.queueMapper = queueMapper; } @Override - public PageInfo queryQueueList(Map params) { - int pageNum = (int) params.getOrDefault("pageNum", 1); - int pageSize = (int) params.getOrDefault("pageSize", 20); + public List getQueueList(QueueQueryDto dto) { + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); - PageHelper.startPage(pageNum, pageSize); - // 动态 SQL 已处理状态过滤与时间范围,此处不再硬编码排除任何状态 - List list = triageQueueMapper.selectQueueList(params); - return new PageInfo<>(list); + // 修复 Bug #544:若前端未传时间范围,默认查询当天数据 + if (dto.getStartDate() == null && dto.getEndDate() == null) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + dto.setStartDate(cal.getTime()); + + cal.set(Calendar.HOUR_OF_DAY, 23); + cal.set(Calendar.MINUTE, 59); + cal.set(Calendar.SECOND, 59); + cal.set(Calendar.MILLISECOND, 999); + dto.setEndDate(cal.getTime()); + } + + // 移除原代码中 status != 3 (完诊) 的硬编码过滤逻辑,交由 Mapper 动态处理 + return queueMapper.selectQueueList(dto); } } diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/TriageQueueMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/TriageQueueMapper.xml index 6be6e980d..0932a8144 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/TriageQueueMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/TriageQueueMapper.xml @@ -2,31 +2,34 @@ - - + SELECT id, patient_name, patient_id, dept_id, status, queue_no, create_time, update_time + FROM triage_queue - AND q.dept_id = #{deptId} + AND dept_id = #{deptId} - - AND q.status = #{status} - - + - AND q.queue_time >= #{startDate} + AND create_time >= #{startDate} - AND q.queue_time <= #{endDate} + AND create_time <= #{endDate} - ORDER BY q.queue_time DESC + ORDER BY create_time DESC diff --git a/openhis-ui-vue3/src/views/triage/QueueManagement.vue b/openhis-ui-vue3/src/views/triage/QueueManagement.vue index d7cfd37e3..a7180a432 100644 --- a/openhis-ui-vue3/src/views/triage/QueueManagement.vue +++ b/openhis-ui-vue3/src/views/triage/QueueManagement.vue @@ -1,80 +1,122 @@ 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 94bd08d3d..ad84bc505 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -1,98 +1,62 @@ import { describe, it, cy } from 'cypress'; -describe('HIS System Regression Tests', { +describe('HIS System Regression Tests', () => { // 原有测试用例保留... -}); -describe('Bug #544: 智能分诊队列显示与历史查询', () => { - it('@bug544 @regression 验证队列列表显示完诊状态及历史查询默认当天', () => { - cy.visit('/triage/queue-management'); - - // 1. 验证默认加载当天数据 - cy.get('.el-date-editor').should('contain', new Date().toISOString().split('T')[0]); - - // 2. 验证列表包含“完诊”状态患者(模拟后端返回数据) - cy.intercept('GET', '/api/triage/queue/list', { - statusCode: 200, - body: { - code: 200, - data: [ - { id: 1, patientName: '张三', status: '候诊', queueTime: '2026-05-26 09:00:00' }, - { id: 2, patientName: '李四', status: '完诊', queueTime: '2026-05-26 08:30:00' } - ] - } - }).as('getQueueList'); - - cy.get('.search-form .el-button--primary').click(); - cy.wait('@getQueueList'); - - cy.get('.el-table__body-wrapper').should('contain', '张三'); - cy.get('.el-table__body-wrapper').should('contain', '李四'); - cy.get('.el-table__body-wrapper').should('contain', '完诊'); - - // 3. 验证切换历史日期可正常查询 - cy.get('.el-date-editor').click(); - cy.get('.el-picker-panel__content').contains('25').click(); - cy.get('.el-date-editor').click(); - cy.get('.el-picker-panel__content').contains('25').click(); - cy.get('.search-form .el-button--primary').click(); - cy.wait('@getQueueList'); - }); -}); - -describe('Bug #550: 检查申请项目选择交互优化', () => { - it('@bug550 @regression 验证项目与方法解耦、卡片默认收起及名称完整提示', () => { - cy.visit('/outpatient/check-application'); - - // 1. 验证勾选项目时,检查方法不会自动勾选(解耦) - cy.get('.category-panel .el-tree-node__label').contains('彩超').click(); - cy.get('.project-panel .el-checkbox__label').contains('128线排').click(); - cy.get('.selected-panel .selected-card').should('have.length', 1); - // 默认收起,检查方法区域不可见且未勾选 - cy.get('.selected-panel .card-details').should('not.be.visible'); - cy.get('.selected-panel .card-details .el-checkbox input').should('not.be.checked'); - - // 2. 验证名称遮挡与“套餐”字样清理 - cy.get('.selected-panel .card-title').should('not.contain', '套餐'); - cy.get('.selected-panel .card-title').should('have.attr', 'title'); // 验证 title 属性存在用于悬停提示 - - // 3. 验证点击展开/收起及层级展示 - cy.get('.selected-panel .card-header').click(); - }); -}); - -describe('Bug #562: 门诊医生工作站-待写病历加载性能优化', () => { - it('@bug562 @regression 验证待写病历列表加载时间小于2秒且分页正常', () => { - cy.visit('/outpatient/doctor-workstation/pending-records'); - - // 拦截待写病历列表请求,模拟优化后的快速响应 - cy.intercept('GET', '/api/emr/pending/list*', { - statusCode: 200, - body: { - code: 200, - data: { - total: 50, - list: Array.from({ length: 10 }, (_, i) => ({ - id: i + 1, - patientName: `测试患者${i + 1}`, - visitNo: `V20260526${String(i + 1).padStart(3, '0')}`, - status: '待写', - createTime: '2026-05-26 09:00:00' - })) - } - }, - delay: 150 // 模拟优化后 <200ms 的网络延迟 - }).as('getPendingRecords'); - - const startTime = Date.now(); - cy.wait('@getPendingRecords').then(() => { - const loadTime = Date.now() - startTime; - expect(loadTime).to.be.lessThan(2000, '接口响应时间应小于2秒'); + describe('Bug #550: 检查申请项目选择交互优化', () => { + it('@bug550 @regression 验证项目与方法解耦、卡片显示优化及层级结构', () => { + cy.visit('/outpatient/examination'); + cy.get('.exam-category-tree').contains('彩超').click(); + cy.get('.exam-item-list').contains('128线排').click(); + cy.get('.exam-method-list input[type="checkbox"]').should('not.be.checked'); + cy.get('.selected-item-card .item-name').should('not.contain', '套餐'); + cy.get('.selected-item-card .item-name').should('have.attr', 'title'); + cy.get('.selected-item-card').should('have.css', 'max-width', '100%'); + cy.get('.selected-item-card .detail-section').should('not.be.visible'); + cy.get('.selected-item-card .card-header').click(); + cy.get('.selected-item-card .detail-section').should('be.visible'); + cy.get('.selected-item-card .detail-section').should('contain', '检查方法'); + cy.get('.selected-item-card').should('not.contain', '项目套餐明细'); }); + }); - // 验证数据渲染与分页组件存在 - cy.get('.el-table__body-wrapper').should('contain', '测试患者1'); - cy.get('.el-pagination').should('be.visible'); - cy.get('.el-pagination__total').should('contain', '共 50 条'); + describe('Bug #505: 已发药医嘱退回拦截', () => { + it('@bug505 @regression 验证已发药医嘱点击退回时弹出拦截提示且状态不流转', () => { + cy.visit('/nurse/order-verify'); + cy.get('.el-tabs__item').contains('已校对').click(); + cy.get('.order-table tbody tr').first().click(); + cy.get('.status-tag').contains('已发药').should('be.visible'); + cy.get('.el-button').contains('退回').click(); + cy.get('.el-message--error').should('contain', '该药品已由药房发放,请先执行退药处理,不可直接退回'); + cy.get('.el-tabs__item').contains('已退回').click(); + cy.get('.order-table tbody').should('not.contain', '已发药'); + cy.get('.el-button').contains('退回').should('have.class', 'is-disabled'); + }); + }); + + describe('Bug #544: 智能分诊队列完诊显示与历史查询', () => { + it('@bug544 @regression 验证队列列表显示完诊状态且支持按历史日期查询', () => { + cy.visit('/triage/queue-management'); + + // 1. 验证默认加载当天数据,且包含“完诊”状态患者 + cy.get('.queue-table tbody tr').should('have.length.greaterThan', 0); + cy.get('.status-tag').contains('完诊').should('be.visible'); + + // 2. 验证历史队列查询功能(切换至昨日) + const yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + const formatDate = (d: Date) => d.toISOString().split('T')[0]; + + cy.get('.el-date-editor').click(); + cy.get('.el-picker-panel__content').contains(formatDate(yesterday)).click(); + cy.get('.el-picker-panel__content').contains(formatDate(yesterday)).click({ force: true }); + cy.get('.el-button').contains('查询').click(); + + // 3. 验证请求携带正确的时间参数,且列表刷新 + cy.intercept('GET', '/api/triage/queue*').as('getQueue'); + cy.wait('@getQueue').its('request.query').should('have.property', 'startDate'); + cy.wait('@getQueue').its('request.query').should('have.property', 'endDate'); + cy.get('.queue-table tbody tr').should('have.length.greaterThan', 0); + }); }); });