From 48d3941701c60bebb78292e9b20f0bff9c72cb74 Mon Sep 17 00:00:00 2001 From: chenqi Date: Mon, 30 Mar 2026 15:08:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(consultation):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BC=9A=E8=AF=8A=E7=A1=AE=E8=AE=A4=E5=8F=82=E5=8A=A0=E5=8C=BB?= =?UTF-8?q?=E5=B8=88=E5=AD=97=E6=AE=B5=E5=8F=96=E5=80=BC=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20-=20Bug=20#266?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 从consultation_confirmation表的confirming_physicians字段取值 - 添加备用逻辑:如果确认表无数据则从invitedList拼接 - 会诊意见同样优先从确认表取值 --- .../impl/ConsultationAppServiceImpl.java | 69 ++++++++++++------- 1 file changed, 44 insertions(+), 25 deletions(-) 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());