From d332650bfab0f8ecc24d1faff7f0f1d41a7f81be Mon Sep 17 00:00:00 2001 From: chenqi Date: Fri, 9 Jan 2026 16:15:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(patient):=20=E5=AE=9E=E7=8E=B0=E9=97=A8?= =?UTF-8?q?=E8=AF=8A=E6=8C=82=E5=8F=B7=E9=A1=B5=E9=9D=A2=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E5=88=B0=E6=82=A3=E8=80=85=E6=A1=A3=E6=A1=88=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E7=B2=BE=E7=A1=AE=E5=AE=9A=E4=BD=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在门诊挂号页面添加患者ID和姓名查询参数传递到患者档案页面 - 在患者档案页面实现路由参数接收和按数据库ID精确查询功能 - 新增searchType字段支持按姓名和病人ID两种查询方式 - 优化患者档案页面初始化逻辑,分离字典数据加载和列表查询 - 修改后端服务实现,对精确ID查询跳过医生患者过滤条件以确保跳转查询成功 --- .../DoctorStationDiagnosisAppServiceImpl.java | 2 +- .../impl/PatientInformationServiceImpl.java | 44 +++--- .../charge/outpatientregistration/index.vue | 15 +- .../patientmanagement/index.vue | 129 +++++++++++++++--- 4 files changed, 149 insertions(+), 41 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java index aaa7df64..97b5b099 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java @@ -482,4 +482,4 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn return R.ok(encounterDiagnosis); } -} +} \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java index 7b60f299..fd72e0ca 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java @@ -143,29 +143,35 @@ public class PatientInformationServiceImpl implements IPatientInformationService CommonConstants.FieldName.BusNo, CommonConstants.FieldName.PyStr, CommonConstants.FieldName.WbStr)), request); - // 查询当前用户对应的医生信息 - LambdaQueryWrapper practitionerQuery = new LambdaQueryWrapper<>(); - practitionerQuery.eq(com.openhis.administration.domain.Practitioner::getUserId, userId); - // 使用list()避免TooManyResultsException异常,然后取第一个记录 - List practitionerList = practitionerService.list(practitionerQuery); - com.openhis.administration.domain.Practitioner practitioner = practitionerList != null && !practitionerList.isEmpty() ? practitionerList.get(0) : null; + // 检查是否是精确ID查询(从门诊挂号页面跳转时使用) + boolean hasExactIdQuery = (patientBaseInfoDto.getId() != null); - // 如果当前用户是医生,添加医生患者过滤条件 - if (practitioner != null) { - // 查询该医生作为接诊医生(ADMITTER, code="1")和挂号医生(REGISTRATION_DOCTOR, code="12")的所有就诊记录的患者ID - List doctorPatientIds = patientManageMapper.getPatientIdsByPractitionerId( - practitioner.getId(), - Arrays.asList(ParticipantType.ADMITTER.getCode(), ParticipantType.REGISTRATION_DOCTOR.getCode())); + // 只有非精确ID查询时,才添加医生患者过滤条件 + if (!hasExactIdQuery) { + // 查询当前用户对应的医生信息 + LambdaQueryWrapper practitionerQuery = new LambdaQueryWrapper<>(); + practitionerQuery.eq(com.openhis.administration.domain.Practitioner::getUserId, userId); + // 使用list()避免TooManyResultsException异常,然后取第一个记录 + List practitionerList = practitionerService.list(practitionerQuery); + com.openhis.administration.domain.Practitioner practitioner = practitionerList != null && !practitionerList.isEmpty() ? practitionerList.get(0) : null; - if (doctorPatientIds != null && !doctorPatientIds.isEmpty()) { - // 添加患者ID过滤条件 - 注意:这里使用列名而不是表别名 - queryWrapper.in("id", doctorPatientIds); - } else { - // 如果没有相关患者,返回空结果 - queryWrapper.eq("id", -1); // 设置一个不存在的ID + // 如果当前用户是医生,添加医生患者过滤条件 + if (practitioner != null) { + // 查询该医生作为接诊医生(ADMITTER, code="1")和挂号医生(REGISTRATION_DOCTOR, code="12")的所有就诊记录的患者ID + List doctorPatientIds = patientManageMapper.getPatientIdsByPractitionerId( + practitioner.getId(), + Arrays.asList(ParticipantType.ADMITTER.getCode(), ParticipantType.REGISTRATION_DOCTOR.getCode())); + + if (doctorPatientIds != null && !doctorPatientIds.isEmpty()) { + // 添加患者ID过滤条件 - 注意:这里使用列名而不是表别名 + queryWrapper.in("id", doctorPatientIds); + } else { + // 如果没有相关患者,返回空结果 + queryWrapper.eq("id", -1); // 设置一个不存在的ID + } } + // 如果不是医生,查询所有患者 } - // 如果不是医生,查询所有患者 IPage patientInformationPage = patientManageMapper.getPatientPage(new Page<>(pageNo, pageSize), queryWrapper); diff --git a/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue b/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue index 2001d9b4..0408dd7f 100644 --- a/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue +++ b/openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue @@ -961,7 +961,20 @@ async function handleReadCard(value) { /** 跳转到患者档案页面 */ function goToPatientRecord() { - router.push('/patient/patientmgr'); + // 如果已选择患者,则跳转到档案页面并定位到该患者 + if (form.value.patientId) { + // 使用患者ID作为查询参数传递到档案页面 + router.push({ + path: '/patient/patientmgr', + query: { + patientId: form.value.patientId, + patientName: form.value.name + } + }); + } else { + // 未选择患者时,直接跳转到档案页面 + router.push('/patient/patientmgr'); + } } /** 新增用户信息弹窗 */ diff --git a/openhis-ui-vue3/src/views/patientmanagement/patientmanagement/index.vue b/openhis-ui-vue3/src/views/patientmanagement/patientmanagement/index.vue index a3c8766b..f0c81478 100644 --- a/openhis-ui-vue3/src/views/patientmanagement/patientmanagement/index.vue +++ b/openhis-ui-vue3/src/views/patientmanagement/patientmanagement/index.vue @@ -118,9 +118,14 @@