diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/mapper/InpatientDispensingMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/mapper/InpatientDispensingMapper.java new file mode 100644 index 000000000..fc06fb9f1 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/mapper/InpatientDispensingMapper.java @@ -0,0 +1,52 @@ +package com.openhis.web.inpatient.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +/** + * 住院发退药数据访问层 + * 修复 Bug #503:统一明细单与汇总单的状态过滤条件,消除触发时机不一致导致的业务脱节风险 + */ +@Mapper +public interface InpatientDispensingMapper { + + /** + * 查询发药明细单 + * @param wardId 病区ID + * @param statusList 统一的状态过滤列表 (需申请模式: ['SUBMITTED'], 自动模式: ['EXECUTED', 'SUBMITTED']) + */ + @Select("") + List> selectDispensingDetails(@Param("wardId") Long wardId, + @Param("statusList") List statusList); + + /** + * 查询发药汇总单 + * @param wardId 病区ID + * @param statusList 统一的状态过滤列表 + */ + @Select("") + List> selectDispensingSummaries(@Param("wardId") Long wardId, + @Param("statusList") List statusList); +} 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 new file mode 100644 index 000000000..33a1f0d2c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatient/service/impl/InpatientDispensingServiceImpl.java @@ -0,0 +1,53 @@ +package com.openhis.web.inpatient.service.impl; + +import com.openhis.web.inpatient.mapper.InpatientDispensingMapper; +import com.openhis.web.inpatient.service.InpatientDispensingService; +import com.openhis.web.system.service.SysDictDataService; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 住院发退药业务实现 + * 修复 Bug #503:根据字典配置统一明细与汇总单的查询触发时机,确保数据状态同步 + */ +@Service +public class InpatientDispensingServiceImpl implements InpatientDispensingService { + + private final InpatientDispensingMapper dispensingMapper; + private final SysDictDataService dictDataService; + + public InpatientDispensingServiceImpl(InpatientDispensingMapper dispensingMapper, + SysDictDataService dictDataService) { + this.dispensingMapper = dispensingMapper; + this.dictDataService = dictDataService; + } + + @Override + public Map queryPharmacyDispensingData(Long wardId) { + // 1. 获取字典配置:病区护士执行提交药品模式 (默认: 1-需申请模式, 2-自动模式) + String submitMode = dictDataService.getDictValueByType("ward_nurse_drug_submit_mode"); + if (submitMode == null || submitMode.isBlank()) { + submitMode = "1"; // 默认需申请模式 + } + + // 2. 统一数据触发状态条件,彻底解决“明细先显、汇总后显”的逻辑脱节 + // 需申请模式(1):仅查询已汇总申请的数据 (apply_status = 'SUBMITTED') + // 自动模式(2):查询护士已执行的数据 (apply_status = 'EXECUTED' 或 'SUBMITTED') + List statusFilter = "1".equals(submitMode) + ? Arrays.asList("SUBMITTED") + : Arrays.asList("EXECUTED", "SUBMITTED"); + + // 3. 同步查询明细与汇总单,确保药房端接收到的数据触发时机完全一致 + List> detailList = dispensingMapper.selectDispensingDetails(wardId, statusFilter); + List> summaryList = dispensingMapper.selectDispensingSummaries(wardId, statusFilter); + + return Map.of( + "details", detailList, + "summaries", summaryList, + "mode", submitMode + ); + } +} diff --git a/openhis-ui-vue3/src/views/pharmacy/PharmacyDispensing.vue b/openhis-ui-vue3/src/views/pharmacy/PharmacyDispensing.vue new file mode 100644 index 000000000..dc4aaef39 --- /dev/null +++ b/openhis-ui-vue3/src/views/pharmacy/PharmacyDispensing.vue @@ -0,0 +1,100 @@ + + + + + 刷新数据 + 当前模式: {{ mode === '1' ? '需申请模式' : '自动模式' }} + + + + + + + + + 发药明细单 + ({{ details.length }}) + + + + + + + + + + + + + + + + 发药汇总单 + ({{ summaries.length }}) + + + + + + + + + + + + + + + + +