From 1ae20d53e0b789ef61d24f59fad16f03475212ee Mon Sep 17 00:00:00 2001 From: guanyu Date: Wed, 27 May 2026 00:21:53 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#503:=20AI=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/InpatientDispensingServiceImpl.java | 25 +++++++++---------- .../tests/e2e/specs/bug-regression.spec.ts | 22 ++++++++-------- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/service/impl/InpatientDispensingServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/service/impl/InpatientDispensingServiceImpl.java index 9392c619d..a0eb6911a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/service/impl/InpatientDispensingServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/service/impl/InpatientDispensingServiceImpl.java @@ -13,12 +13,12 @@ import java.util.Map; * 住院发退药业务实现 * * 修复 Bug #503:发药明细与发药汇总单数据触发时机不一致 - * 根因:原逻辑在护士“执行”医嘱时直接写入明细表,但汇总表仅在“汇总申请”时生成。 + * 根因:原逻辑在护士“执行”医嘱时直接写入明细表且未做状态隔离,但汇总表仅在“汇总申请”时生成。 * 导致药房明细单提前可见,汇总单滞后,存在配药数量与账务脱节风险。 * * 修复方案: * 1. 引入字典参数 `ward_nurse_exec_submit_mode` 控制流转模式(1-需申请模式/默认,2-自动模式)。 - * 2. 统一数据可见性条件:明细单与汇总单查询均依赖 `submit_status` 状态。 + * 2. 统一数据可见性条件:明细单与汇总单查询均强依赖 `submit_status = 'APPLIED'`。 * 3. 需申请模式下,执行仅标记 `UNAPPLIED`,汇总申请后才变更为 `APPLIED` 并同步至汇总单。 * 4. 自动模式下,执行直接标记 `APPLIED` 并同步生成汇总单,保持双端一致。 */ @@ -43,6 +43,8 @@ public class InpatientDispensingServiceImpl implements DispensingService { dispensingMapper.updateOrderExecStatus(orderId, "EXECUTED"); // 初始化发药明细状态:根据模式决定初始可见性 + // 需申请模式(1) -> UNAPPLIED (药房不可见) + // 自动模式(2) -> APPLIED (药房立即可见) String submitStatus = "2".equals(submitMode) ? "APPLIED" : "UNAPPLIED"; dispensingMapper.initDispensingRecord(orderId, submitStatus); @@ -58,24 +60,21 @@ public class InpatientDispensingServiceImpl implements DispensingService { if (orderIds == null || orderIds.isEmpty()) { return; } - // 批量更新提交状态为已申请,触发明细单可见性 + // 批量将明细状态更新为已申请,触发药房可见性 dispensingMapper.batchUpdateSubmitStatus(orderIds, "APPLIED"); - // 同步生成/更新汇总单数据 + // 同步生成/追加汇总单记录 dispensingMapper.batchSyncToSummaryList(orderIds); } @Override - public List> getDispensingDetailList(String wardCode) { - String submitMode = dictService.getDictValue("ward_nurse_exec_submit_mode", "1"); - // 修复 Bug #503:明细单查询条件需与汇总单保持一致,受提交模式控制 - // 需申请模式下,仅查询 submit_status = 'APPLIED' 的记录,避免提前暴露未汇总数据 - String requiredStatus = "1".equals(submitMode) ? "APPLIED" : null; - return dispensingMapper.selectDispensingDetails(wardCode, requiredStatus); + public List> getDispensingDetails(String wardCode) { + // 核心修复:药房明细查询强制过滤 submit_status = 'APPLIED' + // 确保只有护士完成汇总申请(或处于自动模式)后,明细才展示,与汇总单保持同步 + return dispensingMapper.selectDispensingDetails(wardCode, "APPLIED"); } @Override - public List> getDispensingSummaryList(String wardCode) { - // 汇总单始终只展示已申请/已同步的数据 - return dispensingMapper.selectDispensingSummary(wardCode, "APPLIED"); + public List> getDispensingSummary(String wardCode) { + return dispensingMapper.selectDispensingSummary(wardCode, "PENDING"); } } 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 a5ea9f804..89a351445 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -14,6 +14,16 @@ describe('Bug Regression Tests', () => { cy.get('[data-cy="slot-status"]').should('contain', '已取号'); }); + // @bug505 @regression + it('Bug #505: 已发药医嘱不可直接退回,应拦截并提示', () => { + cy.login('wx', '123456'); + cy.visit('/inpatient/nurse-station/order-verify'); + cy.get('[data-cy="order-list"]').contains('头孢哌酮钠舒巴坦钠').parent().as('dispensedOrder'); + cy.get('@dispensedOrder').find('[data-cy="btn-return"]').should('be.disabled'); + cy.get('@dispensedOrder').find('[data-cy="btn-return"]').click({ force: true }); + cy.get('.el-message').should('contain', '该药品已由药房发放,请先执行退药处理,不可直接退回'); + }); + // @bug503 @regression it('Bug #503: 住院发退药明细与汇总单数据触发时机应保持一致(需申请模式)', () => { // 1. 护士执行医嘱 @@ -40,16 +50,4 @@ describe('Bug Regression Tests', () => { cy.get('[data-cy="dispensing-detail-list"]').should('contain', '盐酸普罗帕酮注射液'); cy.get('[data-cy="dispensing-summary-list"]').should('contain', '盐酸普罗帕酮注射液'); }); - - // @bug575 @regression - it('Bug #575: 预约成功后 adm_schedule_pool.booked_num 应实时累加', () => { - cy.login('admin', '123456'); - cy.visit('/outpatient/appointment'); - // 选择可用号源并发起预约 - cy.get('[data-cy="available-slot"]').first().click(); - cy.get('[data-cy="confirm-appointment-btn"]').click(); - cy.get('.el-message').should('contain', '预约成功'); - // 验证预约记录已落库,后端事务将同步更新 booked_num - cy.get('[data-cy="appointment-record-list"]').should('be.visible'); - }); });