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 f4549f3d..3405ddf7 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 @@ -435,7 +435,15 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { } // 判断是"取消提交"还是"作废" - if ("取消提交".equals(cancelReason) && ConsultationStatusEnum.SUBMITTED.getCode().equals(entity.getConsultationStatus())) { + if ("取消提交".equals(cancelReason)) { + // 状态校验:禁止已确认 (20)、已签名 (30)、已完成 (40) 的会诊申请取消提交 + if (entity.getConsultationStatus() >= ConsultationStatusEnum.CONFIRMED.getCode()) { + throw new IllegalArgumentException("当前状态不允许取消提交,只有已提交状态的会诊申请才能取消提交"); + } + // 只有状态为 10(已提交) 才允许取消提交 + if (!ConsultationStatusEnum.SUBMITTED.getCode().equals(entity.getConsultationStatus())) { + throw new IllegalArgumentException("只有已提交状态的会诊申请才能取消提交"); + } // 取消提交:将状态从"已提交"改回"新开" entity.setConsultationStatus(ConsultationStatusEnum.NEW.getCode()); entity.setConfirmingPhysician(null); @@ -722,33 +730,42 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { (entity.getConsultationStatus() == ConsultationStatusEnum.SIGNED.getCode() || entity.getConsultationStatus() == ConsultationStatusEnum.COMPLETED.getCode())) { - // 查询所有已签名的医生(invited_status >= 3) + // 查询所有已确认和已签名的医生(invited_status >= 2) + // invited_status: 1-已提交,2-已确认,3-已签名 + List confirmedAndSignedPhysicians = invitedList.stream() + .filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 2) + .collect(Collectors.toList()); + + // 查询所有已签名的医生(invited_status = 3) List signedPhysicians = invitedList.stream() .filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 3) .collect(Collectors.toList()); - if (!signedPhysicians.isEmpty()) { - // 1. 会诊邀请参加医师:拼接所有已签名医生的"科室-姓名" - String invitedPhysiciansText = signedPhysicians.stream() + if (!confirmedAndSignedPhysicians.isEmpty()) { + // 1. 会诊邀请参加医师:拼接所有已确认和已签名医生的"科室 - 姓名" + String invitedPhysiciansText = confirmedAndSignedPhysicians.stream() .map(inv -> inv.getInvitedDepartmentName() + "-" + inv.getInvitedPhysicianName()) .collect(Collectors.joining("、")); dto.setInvitedPhysiciansText(invitedPhysiciansText); - // 2. 会诊意见:汇总所有已签名医生的意见 - String consultationOpinion = signedPhysicians.stream() - .filter(inv -> StringUtils.hasText(inv.getConfirmOpinion())) - .map(ConsultationInvited::getConfirmOpinion) - .collect(Collectors.joining("\n")); - dto.setConsultationOpinion(consultationOpinion); - - // 3. 所属医生、代表科室、签名医生、签名时间:使用第一个签名的医生 - ConsultationInvited firstSigned = signedPhysicians.get(0); - dto.setAttendingPhysician(firstSigned.getInvitedPhysicianName()); - dto.setRepresentDepartment(firstSigned.getInvitedDepartmentName()); - dto.setSignPhysician(firstSigned.getInvitedPhysicianName()); - dto.setSignTime(firstSigned.getSignatureTime()); - - log.info("填充会诊记录信息,已签名医生数:{}", signedPhysicians.size()); + // 2. 会诊意见:汇总所有已签名医生的意见(只有已签名医生才能填写意见) + if (!signedPhysicians.isEmpty()) { + String consultationOpinion = signedPhysicians.stream() + .filter(inv -> StringUtils.hasText(inv.getConfirmOpinion())) + .map(ConsultationInvited::getConfirmOpinion) + .collect(Collectors.joining("\n")); + dto.setConsultationOpinion(consultationOpinion); + + // 3. 所属医生、代表科室、签名医生、签名时间:使用第一个签名的医生 + ConsultationInvited firstSigned = signedPhysicians.get(0); + dto.setAttendingPhysician(firstSigned.getInvitedPhysicianName()); + dto.setRepresentDepartment(firstSigned.getInvitedDepartmentName()); + dto.setSignPhysician(firstSigned.getInvitedPhysicianName()); + dto.setSignTime(firstSigned.getSignatureTime()); + + log.info("填充会诊记录信息,已确认和已签名医生数:{},已签名医生数:{}", + confirmedAndSignedPhysicians.size(), signedPhysicians.size()); + } } } }