diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java index aee6e3f33..2c5ee8051 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java @@ -251,18 +251,16 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio // 遍历检验申请单明细,为每个检验项目创建对应的门诊医嘱记录 for (DoctorStationLabApplyItemDto labApplyItemDto : doctorStationLabApplyDto.getLabApplyItemList()) { - // 1. 根据检验项目名称查询诊疗定义(检验项目) + // 1. Bug #764: 使用 lab_activity_definition 表的 activityId 查询检验项目定义 + // 检验项目存储在 lab_activity_definition 独立表中,不走 wor_activity_definition String itemName = labApplyItemDto.getItemName(); - Long activityDefinitionId = activityDefinitionService.getAppointActivityDefinitionId(itemName); - - if (activityDefinitionId == null) { - throw new RuntimeException("未找到检验项目 '" + itemName + "' 对应的诊疗定义"); + Long labActivityId = labApplyItemDto.getActivityId(); + if (labActivityId == null) { + throw new RuntimeException("检验项目 '" + itemName + "' 未传入 activityId,请重新选择检验项目"); } - - // 2. 获取诊疗定义详情 - ActivityDefinition activityDefinition = activityDefinitionService.getById(activityDefinitionId); - if (activityDefinition == null) { - throw new RuntimeException("诊疗定义不存在"); + LabActivityDefinition labActivityDef = labActivityDefinitionService.getById(labActivityId); + if (labActivityDef == null) { + throw new RuntimeException("检验项目 '" + itemName + "' 对应的检验项目定义不存在(ID: " + labActivityId + ")"); } // 3. 根据执行科室代码获取科室 ID(positionId) @@ -297,17 +295,17 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio // 设置检验项目相关信息 // 医嘱定义 ID(诊疗定义 ID) - adviceSaveDto.setAdviceDefinitionId(activityDefinitionId); + adviceSaveDto.setAdviceDefinitionId(labActivityId); // 费用定价主表 ID(对应 adm_charge_item 表的 definition_id 字段) - adviceSaveDto.setDefinitionId(activityDefinitionId); + adviceSaveDto.setDefinitionId(labActivityId); // 医嘱名称 adviceSaveDto.setAdviceName(itemName); // 医嘱详细分类 - adviceSaveDto.setCategoryCode(activityDefinition.getCategoryCode()); + adviceSaveDto.setCategoryCode(labActivityDef.getCategoryCode()); // 活动 ID(诊疗定义 ID) - adviceSaveDto.setActivityId(activityDefinitionId); + adviceSaveDto.setActivityId(labActivityId); // 医嘱定义对应表名 - adviceSaveDto.setAdviceTableName("wor_activity_definition"); + adviceSaveDto.setAdviceTableName("lab_activity_definition"); // 执行科室 ID adviceSaveDto.setPositionId(positionId); @@ -346,13 +344,13 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio // 请求数量 adviceSaveDto.setQuantity(labApplyItemDto.getItemQty() != null ? labApplyItemDto.getItemQty() : java.math.BigDecimal.ONE); // 请求单位编码(使用诊疗定义的使用单位) - adviceSaveDto.setUnitCode(activityDefinition.getPermittedUnitCode()); + adviceSaveDto.setUnitCode(labActivityDef.getPermittedUnitCode()); // 单价处理(BugFix#CodeReview: 根据套餐ID从正确的数据源获取价格) // 套餐项目:从 inspection_basic_information 表获取 package_amount // 普通项目:使用前端传入的 itemPrice(已从诊疗项目获取) java.math.BigDecimal unitPrice; - Long feePackageId = activityDefinition.getFeePackageId(); + Long feePackageId = labActivityDef.getFeePackageId(); if (feePackageId != null) { // 套餐项目:查询套餐价格