diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java index b6de136c..8e49158b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java @@ -541,15 +541,33 @@ public class SurgeryAppServiceImpl implements ISurgeryAppService { // 收集所有需要查询的ID Set practitionerIds = new HashSet<>(); Set orgIds = new HashSet<>(); - Set otherIds = new HashSet<>(); + Set userIds = new HashSet<>(); // 用于查询sys_user表 - // 收集Practitioner IDs - if (surgery.getMainSurgeonId() != null) practitionerIds.add(surgery.getMainSurgeonId()); - if (surgery.getAnesthetistId() != null) practitionerIds.add(surgery.getAnesthetistId()); - if (surgery.getAssistant1Id() != null) practitionerIds.add(surgery.getAssistant1Id()); - if (surgery.getAssistant2Id() != null) practitionerIds.add(surgery.getAssistant2Id()); - if (surgery.getScrubNurseId() != null) practitionerIds.add(surgery.getScrubNurseId()); - if (surgery.getApplyDoctorId() != null) practitionerIds.add(surgery.getApplyDoctorId()); + // 收集Practitioner IDs (医生相关) + if (surgery.getMainSurgeonId() != null) { + practitionerIds.add(surgery.getMainSurgeonId()); + userIds.add(surgery.getMainSurgeonId()); + } + if (surgery.getAnesthetistId() != null) { + practitionerIds.add(surgery.getAnesthetistId()); + userIds.add(surgery.getAnesthetistId()); + } + if (surgery.getAssistant1Id() != null) { + practitionerIds.add(surgery.getAssistant1Id()); + userIds.add(surgery.getAssistant1Id()); + } + if (surgery.getAssistant2Id() != null) { + practitionerIds.add(surgery.getAssistant2Id()); + userIds.add(surgery.getAssistant2Id()); + } + if (surgery.getScrubNurseId() != null) { + practitionerIds.add(surgery.getScrubNurseId()); + userIds.add(surgery.getScrubNurseId()); + } + if (surgery.getApplyDoctorId() != null) { + practitionerIds.add(surgery.getApplyDoctorId()); + userIds.add(surgery.getApplyDoctorId()); + } // 收集Organization IDs if (surgery.getOrgId() != null) orgIds.add(surgery.getOrgId()); @@ -558,69 +576,151 @@ public class SurgeryAppServiceImpl implements ISurgeryAppService { // 批量查询并缓存结果 Map practitionerNameMap = new HashMap<>(); Map orgNameMap = new HashMap<>(); + Map userNameMap = new HashMap<>(); // 从sys_user查询的名称 // 批量查询Practitioner if (!practitionerIds.isEmpty()) { - List practitioners = practitionerService.listByIds(practitionerIds); - for (com.openhis.administration.domain.Practitioner p : practitioners) { - practitionerNameMap.put(p.getId(), p.getName()); + try { + List practitioners = practitionerService.listByIds(practitionerIds); + for (com.openhis.administration.domain.Practitioner p : practitioners) { + if (p.getName() != null && !p.getName().isEmpty()) { + practitionerNameMap.put(p.getId(), p.getName()); + } + } + } catch (Exception e) { + log.warn("查询Practitioner名称失败: {}", e.getMessage()); + } + } + + // 批量查询SysUser (作为备选) - 使用逐个查询 + if (!userIds.isEmpty()) { + try { + for (Long userId : userIds) { + SysUser u = sysUserService.selectUserById(userId); + if (u != null) { + String userName = u.getNickName() != null && !u.getNickName().isEmpty() + ? u.getNickName() + : u.getUserName(); + if (userName != null && !userName.isEmpty()) { + userNameMap.put(u.getUserId(), userName); + } + } + } + } catch (Exception e) { + log.warn("查询SysUser名称失败: {}", e.getMessage()); } } // 批量查询Organization if (!orgIds.isEmpty()) { - List orgs = organizationService.listByIds(orgIds); - for (Organization o : orgs) { - orgNameMap.put(o.getId(), o.getName()); + try { + List orgs = organizationService.listByIds(orgIds); + for (Organization o : orgs) { + if (o.getName() != null && !o.getName().isEmpty()) { + orgNameMap.put(o.getId(), o.getName()); + } + } + } catch (Exception e) { + log.warn("查询Organization名称失败: {}", e.getMessage()); } } // 填充患者姓名 if (surgery.getPatientId() != null && surgery.getPatientName() == null) { - Patient patient = patientService.getById(surgery.getPatientId()); - if (patient != null) { - surgery.setPatientName(patient.getName()); + try { + Patient patient = patientService.getById(surgery.getPatientId()); + if (patient != null) { + surgery.setPatientName(patient.getName()); + } + } catch (Exception e) { + log.warn("查询患者名称失败: {}", e.getMessage()); } } - // 使用缓存填充名称 + // 填充医生名称 - 优先使用practitioner,如果不存在则使用sys_user if (surgery.getMainSurgeonId() != null && surgery.getMainSurgeonName() == null) { - surgery.setMainSurgeonName(practitionerNameMap.get(surgery.getMainSurgeonId())); + String name = practitionerNameMap.get(surgery.getMainSurgeonId()); + if (name == null || name.isEmpty()) { + name = userNameMap.get(surgery.getMainSurgeonId()); + } + if (name != null && !name.isEmpty()) { + surgery.setMainSurgeonName(name); + } } if (surgery.getAnesthetistId() != null && surgery.getAnesthetistName() == null) { - surgery.setAnesthetistName(practitionerNameMap.get(surgery.getAnesthetistId())); + String name = practitionerNameMap.get(surgery.getAnesthetistId()); + if (name == null || name.isEmpty()) { + name = userNameMap.get(surgery.getAnesthetistId()); + } + if (name != null && !name.isEmpty()) { + surgery.setAnesthetistName(name); + } } if (surgery.getAssistant1Id() != null && surgery.getAssistant1Name() == null) { - surgery.setAssistant1Name(practitionerNameMap.get(surgery.getAssistant1Id())); + String name = practitionerNameMap.get(surgery.getAssistant1Id()); + if (name == null || name.isEmpty()) { + name = userNameMap.get(surgery.getAssistant1Id()); + } + if (name != null && !name.isEmpty()) { + surgery.setAssistant1Name(name); + } } if (surgery.getAssistant2Id() != null && surgery.getAssistant2Name() == null) { - surgery.setAssistant2Name(practitionerNameMap.get(surgery.getAssistant2Id())); + String name = practitionerNameMap.get(surgery.getAssistant2Id()); + if (name == null || name.isEmpty()) { + name = userNameMap.get(surgery.getAssistant2Id()); + } + if (name != null && !name.isEmpty()) { + surgery.setAssistant2Name(name); + } } if (surgery.getScrubNurseId() != null && surgery.getScrubNurseName() == null) { - surgery.setScrubNurseName(practitionerNameMap.get(surgery.getScrubNurseId())); + String name = practitionerNameMap.get(surgery.getScrubNurseId()); + if (name == null || name.isEmpty()) { + name = userNameMap.get(surgery.getScrubNurseId()); + } + if (name != null && !name.isEmpty()) { + surgery.setScrubNurseName(name); + } } if (surgery.getApplyDoctorId() != null && surgery.getApplyDoctorName() == null) { - surgery.setApplyDoctorName(practitionerNameMap.get(surgery.getApplyDoctorId())); + String name = practitionerNameMap.get(surgery.getApplyDoctorId()); + if (name == null || name.isEmpty()) { + name = userNameMap.get(surgery.getApplyDoctorId()); + } + if (name != null && !name.isEmpty()) { + surgery.setApplyDoctorName(name); + } } // 填充手术室名称 if (surgery.getOperatingRoomId() != null && surgery.getOperatingRoomName() == null) { - OperatingRoom operatingRoom = operatingRoomService.getById(surgery.getOperatingRoomId()); - if (operatingRoom != null) { - surgery.setOperatingRoomName(operatingRoom.getName()); + try { + OperatingRoom operatingRoom = operatingRoomService.getById(surgery.getOperatingRoomId()); + if (operatingRoom != null) { + surgery.setOperatingRoomName(operatingRoom.getName()); + } + } catch (Exception e) { + log.warn("查询手术室名称失败: {}", e.getMessage()); } } // 使用缓存填充组织名称 if (surgery.getOrgId() != null && surgery.getOrgName() == null) { - surgery.setOrgName(orgNameMap.get(surgery.getOrgId())); + String name = orgNameMap.get(surgery.getOrgId()); + if (name != null && !name.isEmpty()) { + surgery.setOrgName(name); + } } if (surgery.getApplyDeptId() != null && surgery.getApplyDeptName() == null) { - surgery.setApplyDeptName(orgNameMap.get(surgery.getApplyDeptId())); + String name = orgNameMap.get(surgery.getApplyDeptId()); + if (name != null && !name.isEmpty()) { + surgery.setApplyDeptName(name); + } } - log.debug("填充手术名称字段完成 - patientName: {}, mainSurgeonName: {}, orgName: {}", - surgery.getPatientName(), surgery.getMainSurgeonName(), surgery.getOrgName()); + log.debug("填充手术名称字段完成 - patientName: {}, mainSurgeonName: {}, applyDeptName: {}", + surgery.getPatientName(), surgery.getMainSurgeonName(), surgery.getApplyDeptName()); } /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java index 757b823f..fac66d8c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java @@ -7,6 +7,7 @@ import com.core.common.core.domain.R; import com.core.common.core.domain.model.LoginUser; import com.core.common.utils.SecurityUtils; import com.openhis.administration.domain.Patient; +import com.openhis.administration.service.IOrganizationService; import com.openhis.administration.service.IPatientService; import com.openhis.clinical.domain.Surgery; import com.openhis.clinical.service.ISurgeryService; @@ -55,6 +56,12 @@ public class SurgicalScheduleAppServiceImpl implements ISurgicalScheduleAppServi @Resource private ISurgeryService surgeryService; + @Resource + private com.openhis.administration.service.IOrganizationService organizationService; + + @Resource + private com.core.system.service.ISysUserService sysUserService; + @Resource private RequestFormManageAppMapper requestFormManageAppMapper; @@ -206,6 +213,10 @@ public class SurgicalScheduleAppServiceImpl implements ISurgicalScheduleAppServi if (surgery != null) { surgery.setStatusEnum(1); // 1 = 已排期 surgery.setUpdateTime(new Date()); + + // 填充缺失的申请科室和主刀医生名称 + fillSurgeryMissingNames(surgery); + surgeryService.updateById(surgery); log.info("更新手术申请单状态为已排期 - surgeryNo: {}, surgeryId: {}", opSchedule.getOperCode(), surgery.getId()); } @@ -419,4 +430,78 @@ public class SurgicalScheduleAppServiceImpl implements ISurgicalScheduleAppServi // 格式化为 yyyy-MM-dd HH:mm:ss return scheduleDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } + + /** + * 填充手术申请中缺失的名称字段 + * 在创建手术安排时调用,确保关联的cli_surgery表中的名称字段有值 + * + * @param surgery 手术申请对象 + */ + private void fillSurgeryMissingNames(com.openhis.clinical.domain.Surgery surgery) { + // 填充申请科室名称 + if ((surgery.getApplyDeptName() == null || surgery.getApplyDeptName().isEmpty()) + && surgery.getApplyDeptId() != null) { + try { + com.openhis.administration.domain.Organization org = organizationService.getById(surgery.getApplyDeptId()); + if (org != null && org.getName() != null) { + surgery.setApplyDeptName(org.getName()); + log.info("填充申请科室名称 - surgeryId: {}, deptId: {}, deptName: {}", + surgery.getId(), surgery.getApplyDeptId(), org.getName()); + } + } catch (Exception e) { + log.warn("查询申请科室名称失败 - deptId: {}, error: {}", surgery.getApplyDeptId(), e.getMessage()); + } + } + + // 填充主刀医生名称 + if ((surgery.getMainSurgeonName() == null || surgery.getMainSurgeonName().isEmpty()) + && surgery.getMainSurgeonId() != null) { + try { + com.core.common.core.domain.entity.SysUser user = sysUserService.selectUserById(surgery.getMainSurgeonId()); + if (user != null) { + String surgeonName = user.getNickName() != null && !user.getNickName().isEmpty() + ? user.getNickName() + : user.getUserName(); + if (surgeonName != null) { + surgery.setMainSurgeonName(surgeonName); + log.info("填充主刀医生名称 - surgeryId: {}, surgeonId: {}, surgeonName: {}", + surgery.getId(), surgery.getMainSurgeonId(), surgeonName); + } + } + } catch (Exception e) { + log.warn("查询主刀医生名称失败 - surgeonId: {}, error: {}", surgery.getMainSurgeonId(), e.getMessage()); + } + } + + // 填充麻醉医生名称 + if ((surgery.getAnesthetistName() == null || surgery.getAnesthetistName().isEmpty()) + && surgery.getAnesthetistId() != null) { + try { + com.core.common.core.domain.entity.SysUser user = sysUserService.selectUserById(surgery.getAnesthetistId()); + if (user != null) { + String anesthetistName = user.getNickName() != null && !user.getNickName().isEmpty() + ? user.getNickName() + : user.getUserName(); + if (anesthetistName != null) { + surgery.setAnesthetistName(anesthetistName); + } + } + } catch (Exception e) { + log.warn("查询麻醉医生名称失败 - anesthetistId: {}, error: {}", surgery.getAnesthetistId(), e.getMessage()); + } + } + + // 填充执行科室名称 + if ((surgery.getOrgName() == null || surgery.getOrgName().isEmpty()) + && surgery.getOrgId() != null) { + try { + com.openhis.administration.domain.Organization org = organizationService.getById(surgery.getOrgId()); + if (org != null && org.getName() != null) { + surgery.setOrgName(org.getName()); + } + } catch (Exception e) { + log.warn("查询执行科室名称失败 - orgId: {}, error: {}", surgery.getOrgId(), e.getMessage()); + } + } + } } diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml index b29c9f1a..c29a246d 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml @@ -33,7 +33,7 @@ cs.main_surgeon_name AS surgeon_name FROM op_schedule os LEFT JOIN adm_patient ap ON os.patient_id = ap.id - LEFT JOIN cli_surgery cs ON os.patient_id = cs.patient_id + LEFT JOIN cli_surgery cs ON os.oper_code = cs.surgery_no AND cs.delete_flag = '0' LEFT JOIN adm_organization o ON cs.org_id = o.id LEFT JOIN sys_tenant st ON st.id = os.tenant_id LEFT JOIN sys_user su ON su.user_id = os.creator_id @@ -49,6 +49,9 @@ AND os.schedule_date = #{dto.scheduleDate} + + + AND os.oper_code LIKE CONCAT('%', #{dto.operCode}, '%') AND os.delete_flag = '0' @@ -72,7 +75,7 @@ os.surgery_nature AS surgeryType FROM op_schedule os LEFT JOIN adm_patient ap ON os.patient_id = ap.id - LEFT JOIN cli_surgery cs ON os.patient_id = cs.patient_id + LEFT JOIN cli_surgery cs ON os.oper_code = cs.surgery_no AND cs.delete_flag = '0' LEFT JOIN adm_organization o ON cs.org_id = o.id LEFT JOIN doc_request_form drf ON drf.prescription_no=cs.surgery_no WHERE os.schedule_id = #{scheduleId} @@ -120,7 +123,7 @@ cs.main_surgeon_name AS surgeon_name FROM op_schedule os LEFT JOIN adm_patient ap ON os.patient_id = ap.id - LEFT JOIN cli_surgery cs ON os.patient_id = cs.patient_id + LEFT JOIN cli_surgery cs ON os.oper_code = cs.surgery_no AND cs.delete_flag = '0' LEFT JOIN adm_organization o ON cs.org_id = o.id LEFT JOIN sys_tenant st ON st.id = os.tenant_id LEFT JOIN sys_user su ON su.user_id = os.creator_id diff --git a/openhis-ui-vue3/src/views/surgicalschedule/index.vue b/openhis-ui-vue3/src/views/surgicalschedule/index.vue index cba48347..6930e957 100644 --- a/openhis-ui-vue3/src/views/surgicalschedule/index.vue +++ b/openhis-ui-vue3/src/views/surgicalschedule/index.vue @@ -2,6 +2,15 @@
+ + + + + +