fix(consultation): 修复会诊确认参加医师字段取值逻辑 - Bug #266

**问题修复:**
- 字段标签:将'会诊邀请参加医师'改为'会诊确认参加医师'
- 后端取值:从consultation_confirmation表的confirming_physicians字段取值
- 前端显示:解析JSON格式并格式化为'科室-姓名'的友好显示

**技术变更:**
- ConsultationAppServiceImpl.java: 修改convertToDto(),查询确认表获取字段值
- consultation.vue: 添加JSON解析逻辑,格式化显示医师列表
This commit is contained in:
2026-03-30 11:32:07 +08:00
parent 6f701d7fa6
commit 2288162ad7
5 changed files with 48 additions and 482 deletions

View File

@@ -725,47 +725,45 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
dto.setInvitedList(invitedDtoList); dto.setInvitedList(invitedDtoList);
// 🎯 如果会诊已完成或已签名,填充会诊记录信息(从已签名的医生中获取) // 🎯 如果会诊已完成或已签名,填充会诊记录信息(从会诊确认表中获取)
if (entity.getConsultationStatus() != null && if (entity.getConsultationStatus() != null &&
(entity.getConsultationStatus() == ConsultationStatusEnum.SIGNED.getCode() || (entity.getConsultationStatus() == ConsultationStatusEnum.SIGNED.getCode() ||
entity.getConsultationStatus() == ConsultationStatusEnum.COMPLETED.getCode())) { entity.getConsultationStatus() == ConsultationStatusEnum.COMPLETED.getCode())) {
// 查询所有已确认和已签名的医生invited_status >= 2 // 查询会诊确认记录
// invited_status: 1-已提交2-已确认3-已签名 LambdaQueryWrapper<ConsultationConfirmation> confirmWrapper = new LambdaQueryWrapper<>();
List<ConsultationInvited> confirmedAndSignedPhysicians = invitedList.stream() confirmWrapper.eq(ConsultationConfirmation::getConsultationRequestId, entity.getId());
.filter(inv -> inv.getInvitedStatus() != null && inv.getInvitedStatus() >= 2) ConsultationConfirmation confirmation = consultationConfirmationMapper.selectOne(confirmWrapper);
.collect(Collectors.toList());
// 查询所有已签名的医生invited_status = 3 // 查询所有已签名的医生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 (!confirmedAndSignedPhysicians.isEmpty()) { if (confirmation != null) {
// 1. 会诊邀请参加医师:拼接所有已确认和已签名医生的"科室 - 姓名" // 1. 会诊确认参加医师:从确认表的confirming_physicians字段取值
String invitedPhysiciansText = confirmedAndSignedPhysicians.stream() if (StringUtils.hasText(confirmation.getConfirmingPhysicians())) {
.map(inv -> inv.getInvitedDepartmentName() + "-" + inv.getInvitedPhysicianName()) dto.setInvitedPhysiciansText(confirmation.getConfirmingPhysicians());
.collect(Collectors.joining("")); log.info("从会诊确认表获取confirmingPhysicians: {}", confirmation.getConfirmingPhysicians());
dto.setInvitedPhysiciansText(invitedPhysiciansText); }
// 2. 会诊意见:汇总所有已签名医生的意见(只有已签名医生才能填写意见) // 2. 会诊意见:从确认表取值
if (StringUtils.hasText(confirmation.getConsultationOpinion())) {
dto.setConsultationOpinion(confirmation.getConsultationOpinion());
}
// 3. 签名医生信息:从确认表取值
dto.setSignPhysician(confirmation.getSignature());
dto.setSignTime(confirmation.getSignatureDate());
}
// 4. 所属医生、代表科室:使用第一个签名的医生(向后兼容)
if (!signedPhysicians.isEmpty()) { 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); ConsultationInvited firstSigned = signedPhysicians.get(0);
dto.setAttendingPhysician(firstSigned.getInvitedPhysicianName()); dto.setAttendingPhysician(firstSigned.getInvitedPhysicianName());
dto.setRepresentDepartment(firstSigned.getInvitedDepartmentName()); dto.setRepresentDepartment(firstSigned.getInvitedDepartmentName());
dto.setSignPhysician(firstSigned.getInvitedPhysicianName());
dto.setSignTime(firstSigned.getSignatureTime());
log.info("填充会诊记录信息,已确认和已签名医生数:{},已签名医生数:{}", log.info("填充会诊记录信息,已签名医生数:{}", signedPhysicians.size());
confirmedAndSignedPhysicians.size(), signedPhysicians.size());
}
} }
} }
} }

View File

@@ -713,6 +713,25 @@ const handleRowClick = async (row) => {
if (row) { if (row) {
console.log('点击的行数据:', row); console.log('点击的行数据:', row);
// 🎯 处理会诊确认参加医师字段可能是JSON格式
let physiciansText = row.invitedPhysiciansText || '';
if (physiciansText) {
try {
// 尝试解析JSON格式
const physicians = JSON.parse(physiciansText);
if (Array.isArray(physicians)) {
// 格式化为:科室-姓名、科室-姓名
physiciansText = physicians
.map(p => `${p.deptName || ''}-${p.physicianName || ''}`)
.filter(text => text !== '-')
.join('、');
}
} catch (e) {
// 如果不是JSON保持原值
console.log('invitedPhysiciansText不是JSON格式使用原值:', physiciansText);
}
}
// 填充表单数据 // 填充表单数据
Object.assign(formData, { Object.assign(formData, {
consultationId: row.consultationId, consultationId: row.consultationId,
@@ -731,7 +750,7 @@ const handleRowClick = async (row) => {
createTime: row.consultationRequestDate || row.createTime, // 申请时间 createTime: row.consultationRequestDate || row.createTime, // 申请时间
// 🎯 填充会诊记录字段(如果会诊已完成或已签名) // 🎯 填充会诊记录字段(如果会诊已完成或已签名)
invitedPhysiciansText: row.invitedPhysiciansText || '', invitedPhysiciansText: physiciansText,
consultationOpinion: row.consultationOpinion || '', consultationOpinion: row.consultationOpinion || '',
attendingPhysician: row.attendingPhysician || '', attendingPhysician: row.attendingPhysician || '',
representDepartment: row.representDepartment || '', representDepartment: row.representDepartment || '',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long