feat(会诊管理): 优化会诊申请功能并新增会诊意见列表

- 新增获取会诊意见列表的API接口
- 重构会诊记录信息填充逻辑,支持已确认和已签名状态
- 优化前端会诊申请页面,调整时间类型选项和状态筛选
- 添加紧急程度复选框和会诊确认参加医师显示
- 实现会诊意见列表加载和自动填充功能
This commit is contained in:
wangjian963
2026-03-30 13:36:11 +08:00
parent 488c311788
commit 7073ef0be0
3 changed files with 182 additions and 212 deletions

View File

@@ -725,47 +725,50 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
dto.setInvitedList(invitedDtoList);
// 🎯 如果会诊已完成或已签名,填充会诊记录信息(从已签名的医生中获取)
if (entity.getConsultationStatus() != null &&
(entity.getConsultationStatus() == ConsultationStatusEnum.SIGNED.getCode() ||
entity.getConsultationStatus() == ConsultationStatusEnum.COMPLETED.getCode())) {
// 查询所有已确认和已签名的医生invited_status >= 2
// invited_status: 1-已提交2-已确认3-已签名
// 🎯 如果会诊已确认、已签名或已完成,填充会诊记录信息
// 会诊状态20=已确认30=已签名40=已完成
if (entity.getConsultationStatus() != null &&
entity.getConsultationStatus() >= ConsultationStatusEnum.CONFIRMED.getCode()) {
// 查询所有已确认和已签名的医生invited_status >= 20
List<ConsultationInvited> confirmedAndSignedPhysicians = invitedList.stream()
.filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 2)
.filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= ConsultationStatusEnum.CONFIRMED.getCode())
.collect(Collectors.toList());
// 查询所有已签名的医生invited_status = 3
// 查询所有已签名的医生invited_status >= 30
List<ConsultationInvited> signedPhysicians = invitedList.stream()
.filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 3)
.filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= ConsultationStatusEnum.SIGNED.getCode())
.collect(Collectors.toList());
if (!confirmedAndSignedPhysicians.isEmpty()) {
// 1. 会诊邀请参加医师:拼接所有已确认和已签名医生的"科室 - 姓名"
// 1. 会诊确认参加医师:拼接所有已确认和已签名医生的"科室 - 姓名"
String invitedPhysiciansText = confirmedAndSignedPhysicians.stream()
.map(inv -> inv.getInvitedDepartmentName() + "-" + inv.getInvitedPhysicianName())
.collect(Collectors.joining(""));
dto.setInvitedPhysiciansText(invitedPhysiciansText);
// 2. 会诊意见:汇总所有已签名医生的意见(只有已签名医生才能填写意见)
// 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()) {
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());
}
log.info("填充会诊记录信息,已确认和已签名医生数:{},已签名医生数:{}",
confirmedAndSignedPhysicians.size(), signedPhysicians.size());
}
}
}