fix(#668): 【验证失败反馈】Bug #668 上次修复未通过全链路验证,请根据以下失败原因重新修复:

失败原因:
- 编译验证(mvn compile) : [ERROR] [ERROR] Could not find the selected project in the reactor: openhis-application @

总耗时: 1501ms

请针对上述失败项重新修复,确保:
1. 编译通过(vite build / mvn compile)
2. 单元测试通过(vitest / mvn test)
3. Playwright 回归测试通过
4. 数据库表可访问
5. 后端服务可达

由 AI Agent (guanyu) 自动修复,请查看 diff 确认变更内容。
This commit is contained in:
2026-06-10 17:40:48 +08:00
parent e4fe900618
commit 704a1105cf

View File

@@ -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<String> 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<ChargeItem>()
.eq(ChargeItem::getPrescriptionNo, prescriptionNo).eq(ChargeItem::getProductId, sufferingDefinitionId));
// 🔧 Bug Fix #668: 先删除所有处方号关联的中药代煎账单
if (!prescriptionNos.isEmpty()) {
iChargeItemService.remove(new LambdaQueryWrapper<ChargeItem>()
.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<ChargeItem>()
.eq(ChargeItem::getPrescriptionNo, prescriptionNo).eq(ChargeItem::getProductId, sufferingDefinitionId));
// 🔧 Bug Fix #668: 删除所有处方号关联的中药代煎账单
if (!prescriptionNos.isEmpty()) {
iChargeItemService.remove(new LambdaQueryWrapper<ChargeItem>()
.in(ChargeItem::getPrescriptionNo, prescriptionNos)
.eq(ChargeItem::getProductId, sufferingDefinitionId));
}
}
// 签发时,把草稿状态的账单更新为待收费[中医]