fix: 修复会诊申请单已确认/签名还能取消提交的 Bug #256

- 在 cancelConsultation 方法中添加状态校验
- 禁止已确认 (20)、已签名 (30)、已完成 (40) 状态的会诊申请取消提交
- 只有已提交 (10) 状态的会诊申请才允许取消提交
This commit is contained in:
2026-03-26 17:59:45 +08:00
parent 1a7b6c0cd4
commit c509a804ec

View File

@@ -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.setConsultationStatus(ConsultationStatusEnum.NEW.getCode());
entity.setConfirmingPhysician(null); entity.setConfirmingPhysician(null);
@@ -722,19 +730,26 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
(entity.getConsultationStatus() == ConsultationStatusEnum.SIGNED.getCode() || (entity.getConsultationStatus() == ConsultationStatusEnum.SIGNED.getCode() ||
entity.getConsultationStatus() == ConsultationStatusEnum.COMPLETED.getCode())) { entity.getConsultationStatus() == ConsultationStatusEnum.COMPLETED.getCode())) {
// 查询所有已签名的医生invited_status >= 3 // 查询所有已确认和已签名的医生invited_status >= 2
// invited_status: 1-已提交2-已确认3-已签名
List<ConsultationInvited> confirmedAndSignedPhysicians = invitedList.stream()
.filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 2)
.collect(Collectors.toList());
// 查询所有已签名的医生invited_status = 3
List<ConsultationInvited> signedPhysicians = invitedList.stream() List<ConsultationInvited> signedPhysicians = invitedList.stream()
.filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 3) .filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 3)
.collect(Collectors.toList()); .collect(Collectors.toList());
if (!signedPhysicians.isEmpty()) { if (!confirmedAndSignedPhysicians.isEmpty()) {
// 1. 会诊邀请参加医师:拼接所有已签名医生的"科室-姓名" // 1. 会诊邀请参加医师:拼接所有已确认和已签名医生的"科室 - 姓名"
String invitedPhysiciansText = signedPhysicians.stream() String invitedPhysiciansText = confirmedAndSignedPhysicians.stream()
.map(inv -> inv.getInvitedDepartmentName() + "-" + inv.getInvitedPhysicianName()) .map(inv -> inv.getInvitedDepartmentName() + "-" + inv.getInvitedPhysicianName())
.collect(Collectors.joining("")); .collect(Collectors.joining(""));
dto.setInvitedPhysiciansText(invitedPhysiciansText); dto.setInvitedPhysiciansText(invitedPhysiciansText);
// 2. 会诊意见:汇总所有已签名医生的意见 // 2. 会诊意见:汇总所有已签名医生的意见(只有已签名医生才能填写意见)
if (!signedPhysicians.isEmpty()) {
String consultationOpinion = signedPhysicians.stream() String consultationOpinion = signedPhysicians.stream()
.filter(inv -> StringUtils.hasText(inv.getConfirmOpinion())) .filter(inv -> StringUtils.hasText(inv.getConfirmOpinion()))
.map(ConsultationInvited::getConfirmOpinion) .map(ConsultationInvited::getConfirmOpinion)
@@ -748,7 +763,9 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
dto.setSignPhysician(firstSigned.getInvitedPhysicianName()); dto.setSignPhysician(firstSigned.getInvitedPhysicianName());
dto.setSignTime(firstSigned.getSignatureTime()); dto.setSignTime(firstSigned.getSignatureTime());
log.info("填充会诊记录信息,已签名医生数:{}", signedPhysicians.size()); log.info("填充会诊记录信息,已确认和已签名医生数:{},已签名医生数:{}",
confirmedAndSignedPhysicians.size(), signedPhysicians.size());
}
} }
} }
} }