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 c41c6a5d9..30e69da75 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 @@ -614,8 +614,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation Long encounterDiagnosisId = medicineList.get(0).getEncounterDiagnosisId(); // 中药付数 BigDecimal chineseHerbsDoseQuantity = medicineList.get(0).getChineseHerbsDoseQuantity(); - // 处方号 - String prescriptionNo = insertOrUpdateList.get(0).getPrescriptionNo(); + // 🔧 Bug Fix #668: 收集所有处方号(不同分组可能有不同处方号) + List prescriptionNos = insertOrUpdateList.stream() + .map(AdviceSaveDto::getPrescriptionNo) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); // 签发时,生成中药代煎的账单 if (Whether.YES.getValue().equals(sufferingFlag) && is_sign) { @@ -624,9 +628,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation AdviceBaseDto adviceBaseDto = new AdviceBaseDto(); adviceBaseDto.setAdviceDefinitionId(sufferingDefinitionId); // 医嘱定义id - // 先删除中药代煎的账单 - iChargeItemService.remove(new LambdaQueryWrapper() - .eq(ChargeItem::getPrescriptionNo, prescriptionNo).eq(ChargeItem::getProductId, sufferingDefinitionId)); + // 🔧 Bug Fix #668: 先删除所有处方号关联的中药代煎账单 + if (!prescriptionNos.isEmpty()) { + iChargeItemService.remove(new LambdaQueryWrapper() + .in(ChargeItem::getPrescriptionNo, prescriptionNos) + .eq(ChargeItem::getProductId, sufferingDefinitionId)); + } // 对应的诊疗医嘱信息 AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, @@ -635,40 +642,44 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation // 费用定价 AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); if (advicePriceDto != null) { - // 生成账单 - chargeItem = new ChargeItem(); - chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 - chargeItem.setPrescriptionNo(prescriptionNo); // 处方号 - chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 收费状态 - chargeItem.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 4)); - chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 - chargeItem.setPatientId(patientId); // 患者 - chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 - chargeItem.setEncounterId(encounterId); // 就诊id - chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID - chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID - chargeItem.setRequestingOrgId(orgId); // 开立科室 - chargeItem.setEnteredDate(curDate); // 开立时间 - chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 - chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id - chargeItem.setAccountId(accountId);// 关联账户ID - chargeItem.setConditionId(conditionId); // 诊断id - chargeItem.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id + // 🔧 Bug Fix #668: 为每个处方号分别生成代煎账单 + for (String prescriptionNo : prescriptionNos) { + chargeItem = new ChargeItem(); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 + chargeItem.setPrescriptionNo(prescriptionNo); // 处方号 + chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 收费状态 + chargeItem.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 4)); + chargeItem.setPatientId(patientId); // 患者 + chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 + chargeItem.setEncounterId(encounterId); // 就诊id + chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID + chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID + chargeItem.setRequestingOrgId(orgId); // 开立科室 + chargeItem.setEnteredDate(curDate); // 开立时间 + chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 + chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id + chargeItem.setAccountId(accountId);// 关联账户ID + chargeItem.setConditionId(conditionId); // 诊断id + chargeItem.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id - chargeItem.setQuantityValue(quantity); // 数量 - chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 - chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 - // 计算总价,保留6位小数 - BigDecimal qty = quantity; - chargeItem.setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(6, RoundingMode.HALF_UP)); // 总价 - chargeItem.setTcmFlag(Whether.YES.getValue());// 中医标识 - iChargeItemService.save(chargeItem); + chargeItem.setQuantityValue(quantity); // 数量 + chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 + chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 + // 计算总价,保留6位小数 + BigDecimal qty = quantity; + chargeItem.setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(6, RoundingMode.HALF_UP)); // 总价 + chargeItem.setTcmFlag(Whether.YES.getValue());// 中医标识 + iChargeItemService.save(chargeItem); + } } } } else if (Whether.NO.getValue().equals(sufferingFlag)) { - // 删除中药代煎的账单 - iChargeItemService.remove(new LambdaQueryWrapper() - .eq(ChargeItem::getPrescriptionNo, prescriptionNo).eq(ChargeItem::getProductId, sufferingDefinitionId)); + // 🔧 Bug Fix #668: 删除所有处方号关联的中药代煎账单 + if (!prescriptionNos.isEmpty()) { + iChargeItemService.remove(new LambdaQueryWrapper() + .in(ChargeItem::getPrescriptionNo, prescriptionNos) + .eq(ChargeItem::getProductId, sufferingDefinitionId)); + } } // 签发时,把草稿状态的账单更新为待收费[中医]