diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java index 30e69da75..aec78d7cc 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java @@ -451,10 +451,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, adviceSaveDto.getRequestId()); - // 删除代煎费 - iChargeItemService.remove(new LambdaQueryWrapper() - .eq(ChargeItem::getPrescriptionNo, adviceSaveDto.getPrescriptionNo()) - .eq(ChargeItem::getProductId, sufferingDefinitionId)); + // 删除代煎费(按处方号精确清理) + if (adviceSaveDto.getPrescriptionNo() != null) { + iChargeItemService.remove(new LambdaQueryWrapper() + .eq(ChargeItem::getPrescriptionNo, adviceSaveDto.getPrescriptionNo()) + .eq(ChargeItem::getProductId, sufferingDefinitionId)); + } } @@ -614,7 +616,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation Long encounterDiagnosisId = medicineList.get(0).getEncounterDiagnosisId(); // 中药付数 BigDecimal chineseHerbsDoseQuantity = medicineList.get(0).getChineseHerbsDoseQuantity(); - // 🔧 Bug Fix #668: 收集所有处方号(不同分组可能有不同处方号) + // 收集所有处方号(不同分组可能有不同处方号) List prescriptionNos = insertOrUpdateList.stream() .map(AdviceSaveDto::getPrescriptionNo) .filter(Objects::nonNull) @@ -628,12 +630,10 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation AdviceBaseDto adviceBaseDto = new AdviceBaseDto(); adviceBaseDto.setAdviceDefinitionId(sufferingDefinitionId); // 医嘱定义id - // 🔧 Bug Fix #668: 先删除所有处方号关联的中药代煎账单 - if (!prescriptionNos.isEmpty()) { - iChargeItemService.remove(new LambdaQueryWrapper() - .in(ChargeItem::getPrescriptionNo, prescriptionNos) - .eq(ChargeItem::getProductId, sufferingDefinitionId)); - } + // 先删除该就诊关联的所有中药代煎账单 + iChargeItemService.remove(new LambdaQueryWrapper() + .eq(ChargeItem::getEncounterId, encounterId) + .eq(ChargeItem::getProductId, sufferingDefinitionId)); // 对应的诊疗医嘱信息 AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, @@ -642,7 +642,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation // 费用定价 AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); if (advicePriceDto != null) { - // 🔧 Bug Fix #668: 为每个处方号分别生成代煎账单 + // 为每个处方号分别生成代煎账单 for (String prescriptionNo : prescriptionNos) { chargeItem = new ChargeItem(); chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 @@ -674,12 +674,10 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation } } } else if (Whether.NO.getValue().equals(sufferingFlag)) { - // 🔧 Bug Fix #668: 删除所有处方号关联的中药代煎账单 - if (!prescriptionNos.isEmpty()) { - iChargeItemService.remove(new LambdaQueryWrapper() - .in(ChargeItem::getPrescriptionNo, prescriptionNos) - .eq(ChargeItem::getProductId, sufferingDefinitionId)); - } + // 删除该就诊关联的所有中药代煎账单 + iChargeItemService.remove(new LambdaQueryWrapper() + .eq(ChargeItem::getEncounterId, encounterId) + .eq(ChargeItem::getProductId, sufferingDefinitionId)); } // 签发时,把草稿状态的账单更新为待收费[中医] diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V41__bug735_add_stopper_id_to_requests.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V41__bug735_add_stopper_id_to_requests.sql new file mode 100644 index 000000000..da7e0dd0f --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V41__bug735_add_stopper_id_to_requests.sql @@ -0,0 +1,9 @@ +-- Bug #735: 新医嘱签发后"停嘱医生"字段错误生成数据 +-- 原因:stopper_name 映射到 update_by 字段,签发时 MyBatis-Plus 自动填充导致错误赋值 +-- 修复:添加专用 stopper_id 字段,仅在停嘱操作时设置 + +-- 药品请求表添加停嘱医生ID字段 +ALTER TABLE med_medication_request ADD COLUMN IF NOT EXISTS stopper_id BIGINT; + +-- 服务请求表添加停嘱医生ID字段 +ALTER TABLE wor_service_request ADD COLUMN IF NOT EXISTS stopper_id BIGINT; diff --git a/healthlink-his-ui/src/views/charge/outpatientregistration/index.vue b/healthlink-his-ui/src/views/charge/outpatientregistration/index.vue index dad4080c7..4510c642f 100755 --- a/healthlink-his-ui/src/views/charge/outpatientregistration/index.vue +++ b/healthlink-his-ui/src/views/charge/outpatientregistration/index.vue @@ -1,4 +1,4 @@ -