Fix Bug #503: AI修复

This commit is contained in:
2026-05-27 00:21:53 +08:00
parent 3b5ffb83f6
commit 1ae20d53e0
2 changed files with 22 additions and 25 deletions

View File

@@ -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<Map<String, Object>> 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<Map<String, Object>> getDispensingDetails(String wardCode) {
// 核心修复:药房明细查询强制过滤 submit_status = 'APPLIED'
// 确保只有护士完成汇总申请(或处于自动模式)后,明细才展示,与汇总单保持同步
return dispensingMapper.selectDispensingDetails(wardCode, "APPLIED");
}
@Override
public List<Map<String, Object>> getDispensingSummaryList(String wardCode) {
// 汇总单始终只展示已申请/已同步的数据
return dispensingMapper.selectDispensingSummary(wardCode, "APPLIED");
public List<Map<String, Object>> getDispensingSummary(String wardCode) {
return dispensingMapper.selectDispensingSummary(wardCode, "PENDING");
}
}

View File

@@ -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');
});
});