From ea8dca058a1b813d180f39a02c62a889d6fed309 Mon Sep 17 00:00:00 2001 From: wangjian963 <15215920+aprilry@user.noreply.gitee.com> Date: Tue, 16 Jun 2026 16:15:13 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix(=E6=99=BA=E8=83=BD=E5=88=86=E8=AF=8A?= =?UTF-8?q?=E6=8E=92=E9=98=9F=E7=AE=A1=E7=90=86):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=80=99=E9=80=89=E6=B1=A0=E5=92=8C=E9=98=9F=E5=88=97=E7=9A=84?= =?UTF-8?q?=E7=A1=AC=E7=BC=96=E7=A0=81=E5=81=87=E6=95=B0=E6=8D=AE=EF=BC=8C?= =?UTF-8?q?=E6=B6=88=E9=99=A4=E9=A1=B5=E9=9D=A2=E5=8A=A0=E8=BD=BD=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E9=97=AA=E7=8E=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 getInitialCandidatePoolList() 和 getInitialQueueList() 两个硬编码函数(共8条虚构患者/队列记录) - 候选池和队列 ref 初始值由硬编码假数据改为空数组 [] - currentDate 初始值由固定日期改为空字符串,由 loadDataFromApi 动态计算 - currentCall 初始值由假数据(郑华/4号诊室)改为占位符(-/-/-),由 syncCurrentCallFromQueue 动态同步 - loadDataFromApi 异常回退不再注入假数据,统一清空为 [] --- .../triageandqueuemanage/cardiology/index.vue | 105 ++---------------- 1 file changed, 12 insertions(+), 93 deletions(-) diff --git a/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue b/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue index 6a38d0599..5d54ed1f7 100755 --- a/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue +++ b/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue @@ -687,15 +687,15 @@ import { } from '../api' // 当前日期 & 统计信息(总已签到/在队列中) -const currentDate = ref('2025/12/22 上午') +const currentDate = ref('') const totalSignedIn = ref(0) const totalInQueue = ref(0) // 当前呼叫信息 const currentCall = ref({ - number: '1', - name: '郑华', - room: '4号诊室' + number: '-', + name: '-', + room: '-' }) // 当前选中的队列行(用于选呼) @@ -785,85 +785,6 @@ const weekOptions = [ // 叫号类型 const callType = ref('选呼') -// ============ 数据初始化/刷新(前端模拟) ============ -const getInitialCandidatePoolList = () => ([ - { - sequenceNo: 12, - patientName: '陈明', - age: 65, - appointmentType: '专家', - room: '3号诊室', - doctor: '张医生', - matchingRule: '年龄≥60' - }, - { - sequenceNo: 13, - patientName: '刘芳', - age: 58, - appointmentType: '普通', - room: '4号诊室', - doctor: '李医生', - matchingRule: '-' - }, - { - sequenceNo: 14, - patientName: '周强', - age: 45, - appointmentType: '普通', - room: '5号诊室', - doctor: '王医生', - matchingRule: '-' - }, - { - sequenceNo: 15, - patientName: '吴伟', - age: 72, - appointmentType: '专家', - room: '3号诊室', - doctor: '张医生', - matchingRule: '年龄≥70' - } -]) - -const getInitialQueueList = () => ([ - { - queueOrder: 1, - patientName: '林静', - appointmentType: '专家', - room: '3号诊室', - doctor: '张医生', - waitingTime: '05:00', - status: '等待' - }, - { - queueOrder: 2, - patientName: '郑华', - appointmentType: '普通', - room: '4号诊室', - doctor: '李医生', - waitingTime: '00:00', - status: '叫号中' - }, - { - queueOrder: 3, - patientName: '王丽', - appointmentType: '普通', - room: '5号诊室', - doctor: '王医生', - waitingTime: '08:00', - status: '等待' - }, - { - queueOrder: 4, - patientName: '张伟', - appointmentType: '专家', - room: '3号诊室', - doctor: '张医生', - waitingTime: '12:00', - status: '等待' - } -]) - const syncCurrentCallFromQueue = () => { const calling = originalQueueList.value.find((i) => i.status === '叫号中') if (!calling) { @@ -1108,12 +1029,12 @@ const loadDataFromApi = async () => { })) console.log('【心内科】候选池已加载', originalCandidatePoolList.value.length, '条今天的数据') } else { - console.log('【心内科】候选池数据为空数组或非数组,使用默认数据') - originalCandidatePoolList.value = getInitialCandidatePoolList() + console.log('【心内科】候选池数据为空数组或非数组') + originalCandidatePoolList.value = [] } } else { - console.log('【心内科】候选池响应为空或格式错误,使用默认数据') - originalCandidatePoolList.value = getInitialCandidatePoolList() + console.log('【心内科】候选池响应为空或格式错误') + originalCandidatePoolList.value = [] } // 2) 队列列表:从数据库读取(可刷新、可恢复) @@ -1161,10 +1082,8 @@ const loadDataFromApi = async () => { console.log('【心内科】数据加载完成:候选池', originalCandidatePoolList.value.length, '条,队列', originalQueueList.value.length, '条') ElMessage.success('【心内科】已从门诊挂号接口加载数据') } catch (e) { - console.error('【心内科】loadDataFromApi 执行异常,使用本地假数据:', e) - // 任何异常:回退本地假数据 - originalCandidatePoolList.value = getInitialCandidatePoolList() - // 队列不再回退假数据,避免误导 + console.error('【心内科】loadDataFromApi 执行异常:', e) + originalCandidatePoolList.value = [] originalQueueList.value = [] totalSignedIn.value = originalCandidatePoolList.value.length totalInQueue.value = originalQueueList.value.length @@ -1173,7 +1092,7 @@ const loadDataFromApi = async () => { } // 原始数据存储(用于过滤) -const originalCandidatePoolList = ref(getInitialCandidatePoolList()) +const originalCandidatePoolList = ref([]) // 过滤后的智能候选池数据(按诊室过滤) const filteredCandidatePoolList = computed(() => { @@ -1184,7 +1103,7 @@ const filteredCandidatePoolList = computed(() => { }) // 原始队列数据存储(用于过滤) -const originalQueueList = ref(getInitialQueueList()) +const originalQueueList = ref([]) // 动态计算已加载数据中的唯一诊室列表(依赖上方两个 ref,确保声明顺序正确) const uniqueRooms = computed(() => { From cb82f8d5bf107db73d20eff87590d9d5d89a28d6 Mon Sep 17 00:00:00 2001 From: Ranyunqiao <2499115710@qq.com> Date: Tue, 16 Jun 2026 16:16:09 +0800 Subject: [PATCH 2/3] bug 673 761 719 754 728 727 763 --- .../impl/AdviceProcessAppServiceImpl.java | 11 ++-- .../impl/MedicineSummaryAppServiceImpl.java | 4 +- .../dto/MedicineSummaryParam.java | 6 +-- .../impl/AdviceManageAppServiceImpl.java | 53 ++++++++++++++----- .../AdviceProcessAppMapper.xml | 8 +-- .../MedicineSummaryAppMapper.xml | 2 +- .../src/components/TableLayout/Table.vue | 5 +- .../transferOrganizationDialog.vue | 4 +- .../home/components/order/index.vue | 28 ++++++---- .../components/prescriptionList.vue | 18 +++---- 10 files changed, 89 insertions(+), 50 deletions(-) diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java index e34baee4d..745c25eb4 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java @@ -461,12 +461,15 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { } // 处理转科/出院等特殊医嘱 for (ServiceRequest serviceRequest : allServiceRequests) { + // Bug #718: 延迟状态变更时机。核对通过时不立即变更患者就诊状态, + // 而是等到护士在【入出转管理】中手动点击“转科”或“清床”时再处理。 + // 这样可以确保护士在真正转出前,依然能在在科列表中选中患者并处理遗留医嘱。 if (ActivityDefCategory.TRANSFER.getValue().equals(serviceRequest.getCategoryEnum())) { - encounterService.updateEncounterStatus(serviceRequest.getEncounterId(), - EncounterZyStatus.PENDING_TRANSFER.getValue()); + // encounterService.updateEncounterStatus(serviceRequest.getEncounterId(), + // EncounterZyStatus.PENDING_TRANSFER.getValue()); } else if (ActivityDefCategory.DISCHARGE.getValue().equals(serviceRequest.getCategoryEnum())) { - encounterService.updateEncounterStatus(serviceRequest.getEncounterId(), - EncounterZyStatus.AWAITING_DISCHARGE.getValue()); + // encounterService.updateEncounterStatus(serviceRequest.getEncounterId(), + // EncounterZyStatus.AWAITING_DISCHARGE.getValue()); } } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java index a6a79698d..0c51cf5fb 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java @@ -206,8 +206,8 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService // 领药人 Long receiverId = medicineSummaryParamList.get(0).getReceiverId(); // 申请时间(优先使用前端传递的操作时间,确保与实际操作时间一致) - Date now = medicineSummaryParamList.get(0).getDispenseTime() != null - ? medicineSummaryParamList.get(0).getDispenseTime() : DateUtils.getNowDate(); + Date now = medicineSummaryParamList.get(0).getExecuteTime() != null + ? medicineSummaryParamList.get(0).getExecuteTime() : DateUtils.getNowDate(); // 申请人 Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); // 药品发放id diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/dto/MedicineSummaryParam.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/dto/MedicineSummaryParam.java index 2ed5b896a..99ffe5c32 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/dto/MedicineSummaryParam.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/dto/MedicineSummaryParam.java @@ -22,10 +22,10 @@ import java.util.Date; public class MedicineSummaryParam { /** - * 领药时间 + * 实际执行时间 */ - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") - private Date dispenseTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date executeTime; /** * 发放id diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java index 83735f589..35d8fada0 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java @@ -322,33 +322,60 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { try { // 根据adviceType判断删除哪种类型的医嘱 - if (ItemType.MEDICINE.getValue().equals(adviceType)) { - // 药品删除 - iMedicationRequestService.removeById(requestId); - iMedicationDispenseService.deleteMedicationDispense(requestId); - iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, requestId); - log.info("删除药品医嘱成功,requestId: {}", requestId); + if (ItemType.MEDICINE.getValue().equals(adviceType) || (adviceType != null && adviceType == 7)) { + // 药品删除 (7表示出院带药,也按药品逻辑删除) + MedicationRequest medRequest = iMedicationRequestService.getById(requestId); + if (medRequest != null) { + if (!RequestStatus.DRAFT.getValue().equals(medRequest.getStatusEnum())) { + throw new ServiceException("仅待签发状态的医嘱允许删除"); + } + iMedicationRequestService.removeById(requestId); + iMedicationDispenseService.deleteMedicationDispense(requestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, requestId); + log.info("删除药品医嘱成功,requestId: {}", requestId); + } } else if (ItemType.DEVICE.getValue().equals(adviceType)) { // 耗材删除 - iDeviceRequestService.removeById(requestId); - iDeviceDispenseService.deleteDeviceDispense(requestId); - iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_DEVICE_REQUEST, requestId); - log.info("删除耗材医嘱成功,requestId: {}", requestId); + DeviceRequest deviceRequest = iDeviceRequestService.getById(requestId); + if (deviceRequest != null) { + if (!RequestStatus.DRAFT.getValue().equals(deviceRequest.getStatusEnum())) { + throw new ServiceException("仅待签发状态的医嘱允许删除"); + } + iDeviceRequestService.removeById(requestId); + iDeviceDispenseService.deleteDeviceDispense(requestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_DEVICE_REQUEST, requestId); + log.info("删除耗材医嘱成功,requestId: {}", requestId); + } } else if (ItemType.ACTIVITY.getValue().equals(adviceType) || (adviceType != null && (adviceType == 26 || adviceType == 31))) { // 诊疗活动删除(包括护理type=26和未知类型type=31) - iServiceRequestService.removeById(requestId); - iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, requestId); - log.info("删除诊疗/护理医嘱成功,requestId: {}, adviceType: {}", requestId, adviceType); + ServiceRequest serviceRequest = iServiceRequestService.getById(requestId); + if (serviceRequest != null) { + if (!RequestStatus.DRAFT.getValue().equals(serviceRequest.getStatusEnum())) { + throw new ServiceException("仅待签发状态的医嘱允许删除"); + } + iServiceRequestService.removeById(requestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, requestId); + log.info("删除诊疗/护理医嘱成功,requestId: {}, adviceType: {}", requestId, adviceType); + } } else { // 未知类型,尝试按诊疗活动删除(兜底策略) log.warn("未知的adviceType: {},尝试按诊疗活动删除,requestId: {}", adviceType, requestId); + ServiceRequest serviceRequest = iServiceRequestService.getById(requestId); + if (serviceRequest != null) { + if (!RequestStatus.DRAFT.getValue().equals(serviceRequest.getStatusEnum())) { + throw new ServiceException("仅待签发状态的医嘱允许删除"); + } + } iServiceRequestService.removeById(requestId); iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, requestId); } + } catch (ServiceException e) { + // 业务校验异常,直接向上抛出,中断并回滚事务 + throw e; } catch (Exception e) { log.error("删除医嘱失败,requestId: {}, adviceType: {}", requestId, adviceType, e); // 继续处理其他记录,不中断整个流程 diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml b/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml index 66e9f1c2d..be50dffd7 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml @@ -211,7 +211,7 @@ NULL::numeric AS unit_price, NULL::numeric AS total_price, NULL::bigint AS stopper_id, - NULL::varchar AS stopper_name + CASE WHEN T1.status_enum IN (6, 13) THEN T1.update_by ELSE NULL END AS stopper_name FROM med_medication_request AS T1 LEFT JOIN med_medication_definition AS T2 ON T2.id = T1.medication_id @@ -331,7 +331,7 @@ T1.unit_code AS unit_code, T1.status_enum AS request_status, NULL::varchar AS method_code, - NULL::varchar AS rate_code, + T1.rate_code AS rate_code, NULL::numeric AS dose, NULL::varchar AS dose_unit_code, ao1.id AS position_id, @@ -359,7 +359,7 @@ NULL::numeric AS unit_price, NULL::numeric AS total_price, NULL::bigint AS stopper_id, - NULL::varchar AS stopper_name + CASE WHEN T1.status_enum IN (6, 13) THEN T1.update_by ELSE NULL END AS stopper_name FROM wor_service_request AS T1 LEFT JOIN wor_activity_definition AS T2 ON T2.id = T1.activity_id @@ -496,7 +496,7 @@ NULL::numeric AS unit_price, NULL::numeric AS total_price, NULL::bigint AS stopper_id, - NULL::varchar AS stopper_name + CASE WHEN T1.status_enum IN (6, 13) THEN T1.update_by ELSE NULL END AS stopper_name FROM wor_device_request AS T1 LEFT JOIN adm_device_definition AS T2 ON T2.id = T1.device_def_id diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/MedicineSummaryAppMapper.xml b/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/MedicineSummaryAppMapper.xml index 7e0749e01..466e5859d 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/MedicineSummaryAppMapper.xml +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalnursestation/MedicineSummaryAppMapper.xml @@ -36,7 +36,7 @@ - + diff --git a/healthlink-his-ui/src/components/TableLayout/Table.vue b/healthlink-his-ui/src/components/TableLayout/Table.vue index e8e906951..d2666837d 100755 --- a/healthlink-his-ui/src/components/TableLayout/Table.vue +++ b/healthlink-his-ui/src/components/TableLayout/Table.vue @@ -1,4 +1,4 @@ -