diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java index 54007cda..15632f7a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java @@ -726,46 +726,65 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { dto.setInvitedList(invitedDtoList); - // 🎯 如果会诊已确认、已签名或已完成,填充会诊记录信息 + // 🎯 如果会诊已确认、已签名或已完成,填充会诊记录信息(从会诊确认表中获取) // 会诊状态:20=已确认,30=已签名,40=已完成 if (entity.getConsultationStatus() != null && entity.getConsultationStatus() >= ConsultationStatusEnum.CONFIRMED.getCode()) { - // 查询所有已确认和已签名的医生(invited_status >= 20) + // 查询会诊确认记录 + LambdaQueryWrapper confirmWrapper = new LambdaQueryWrapper<>(); + confirmWrapper.eq(ConsultationConfirmation::getConsultationRequestId, entity.getId()); + ConsultationConfirmation confirmation = consultationConfirmationMapper.selectOne(confirmWrapper); + + // 查询所有已确认和已签名的医生(invited_status >= 2) List confirmedAndSignedPhysicians = invitedList.stream() - .filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= ConsultationStatusEnum.CONFIRMED.getCode()) + .filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 2) .collect(Collectors.toList()); - // 查询所有已签名的医生(invited_status >= 30) + // 查询所有已签名的医生(invited_status >= 3) List signedPhysicians = invitedList.stream() - .filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= ConsultationStatusEnum.SIGNED.getCode()) + .filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 3) .collect(Collectors.toList()); + if (confirmation != null) { + // 1. 会诊确认参加医师:优先从确认表的confirming_physicians字段取值 + if (StringUtils.hasText(confirmation.getConfirmingPhysicians())) { + dto.setInvitedPhysiciansText(confirmation.getConfirmingPhysicians()); + } else if (!confirmedAndSignedPhysicians.isEmpty()) { + // 备用:从invitedList拼接 + String invitedPhysiciansText = confirmedAndSignedPhysicians.stream() + .map(inv -> inv.getInvitedDepartmentName() + "-" + inv.getInvitedPhysicianName()) + .collect(Collectors.joining("、")); + dto.setInvitedPhysiciansText(invitedPhysiciansText); + } + + // 2. 会诊意见:优先从确认表取值 + if (StringUtils.hasText(confirmation.getConsultationOpinion())) { + dto.setConsultationOpinion(confirmation.getConsultationOpinion()); + } else if (!confirmedAndSignedPhysicians.isEmpty()) { + // 备用:从invitedList汇总 + String consultationOpinion = confirmedAndSignedPhysicians.stream() + .filter(inv -> StringUtils.hasText(inv.getConfirmOpinion())) + .map(ConsultationInvited::getConfirmOpinion) + .collect(Collectors.joining("\n")); + dto.setConsultationOpinion(consultationOpinion); + } + + // 3. 签名医生、签名时间:从确认表取值 + dto.setSignPhysician(confirmation.getSignature()); + dto.setSignTime(confirmation.getSignatureDate()); + } + + // 4. 所属医生、代表科室:使用第一个确认的医生(向后兼容) if (!confirmedAndSignedPhysicians.isEmpty()) { - // 1. 会诊确认参加医师:拼接所有已确认和已签名医生的"科室 - 姓名" - String invitedPhysiciansText = confirmedAndSignedPhysicians.stream() - .map(inv -> inv.getInvitedDepartmentName() + "-" + inv.getInvitedPhysicianName()) - .collect(Collectors.joining("、")); - dto.setInvitedPhysiciansText(invitedPhysiciansText); - - // 2. 会诊意见:汇总所有已确认医生的意见 - String consultationOpinion = confirmedAndSignedPhysicians.stream() - .filter(inv -> StringUtils.hasText(inv.getConfirmOpinion())) - .map(ConsultationInvited::getConfirmOpinion) - .collect(Collectors.joining("\n")); - dto.setConsultationOpinion(consultationOpinion); - - // 3. 所属医生、代表科室:使用第一个确认的医生 ConsultationInvited firstConfirmed = confirmedAndSignedPhysicians.get(0); dto.setAttendingPhysician(firstConfirmed.getInvitedPhysicianName()); dto.setRepresentDepartment(firstConfirmed.getInvitedDepartmentName()); - // 4. 签名医生、签名时间:只有已签名医生才有 - if (!signedPhysicians.isEmpty()) { - ConsultationInvited firstSigned = signedPhysicians.get(0); - dto.setSignPhysician(firstSigned.getInvitedPhysicianName()); - dto.setSignTime(firstSigned.getSignatureTime()); - } + log.info("填充会诊记录信息,已确认和已签名医生数:{},已签名医生数:{}", + confirmedAndSignedPhysicians.size(), signedPhysicians.size()); + } + } log.info("填充会诊记录信息,已确认和已签名医生数:{},已签名医生数:{}", confirmedAndSignedPhysicians.size(), signedPhysicians.size());