From 1dd7ee34288d53f5cf9e4d2f62378b790c95e15b Mon Sep 17 00:00:00 2001 From: sindir Date: Thu, 22 Jan 2026 12:14:01 +0800 Subject: [PATCH] =?UTF-8?q?=2090=EF=BC=8C=E5=88=86=E8=AF=8A=E6=8E=92?= =?UTF-8?q?=E9=98=9F=E7=AE=A1=E7=90=86-=E3=80=8B=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E5=8F=AB=E5=8F=B7=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IDoctorStationMainAppService.java | 6 + .../impl/DoctorStationMainAppServiceImpl.java | 43 ++ .../DoctorStationMainController.java | 23 + .../web/doctorstation/dto/PatientInfoDto.java | 6 + .../DoctorStationMainAppMapper.xml | 30 +- .../administration/domain/Encounter.java | 9 +- .../src/views/doctorstation/components/api.js | 11 + .../components/callQueue/DoctorCallDialog.vue | 675 ++++++++++++++++++ .../src/views/doctorstation/index.vue | 219 ++++-- 9 files changed, 931 insertions(+), 91 deletions(-) create mode 100644 openhis-ui-vue3/src/views/doctorstation/components/callQueue/DoctorCallDialog.vue diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationMainAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationMainAppService.java index c29a1fed..c0f42999 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationMainAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationMainAppService.java @@ -90,4 +90,10 @@ public interface IDoctorStationMainAppService { */ List getReceptionStatistics(String startTime,String endTime,Long practitionerId); + /** + * 过号重排 + * @param encounterId 就诊ID + * @return 操作结果 + */ + R rearrangeMissedEncounter(Long encounterId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java index 2619b546..b8b9907b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java @@ -26,9 +26,11 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -323,4 +325,45 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer practitionerId); } + /** + * 过号重排核心实现 + */ + @Override + @Transactional(rollbackFor = Exception.class) // 事务保证原子性 + public R rearrangeMissedEncounter(Long encounterId) { + // 1. 校验就诊记录是否存在 + Encounter encounter = encounterMapper.selectById(encounterId); + if (encounter == null) { + return R.fail("就诊记录不存在"); + } + + // 2. 校验状态:仅「在诊(IN_PROGRESS=2)」可重排 + if (!EncounterStatus.IN_PROGRESS.getValue().equals(encounter.getStatusEnum())) { + return R.fail("仅「在诊」状态的患者可执行过号重排"); + } + + // 3. 核心更新:改回待诊+更新missed_time + Date now = new Date(); + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + int updateCount = encounterMapper.update(null, + new LambdaUpdateWrapper() + .eq(Encounter::getId, encounterId) + .set(Encounter::getStatusEnum, EncounterStatus.PLANNED.getValue()) // 改回1-待诊 + .set(Encounter::getMissedTime, now) // 新增:设置过号时间为当前时间 + .set(Encounter::getUpdateBy, practitionerId.toString()) // 操作医生ID + .eq(Encounter::getStatusEnum, EncounterStatus.IN_PROGRESS.getValue())); // 防并发 + + if (updateCount == 0) { + return R.fail("过号重排失败:状态更新异常"); + } + + // 4. 同步更新接诊参与记录 + iEncounterParticipantService.update(new LambdaUpdateWrapper() + .eq(EncounterParticipant::getEncounterId, encounterId) + .eq(EncounterParticipant::getTypeCode, ParticipantType.ADMITTER.getCode()) + .set(EncounterParticipant::getStatusEnum, EncounterActivityStatus.COMPLETED.getValue())); + + return R.ok("过号重排成功"); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationMainController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationMainController.java index dc9ac9e5..a9526d5e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationMainController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationMainController.java @@ -133,6 +133,29 @@ public class DoctorStationMainController { } } + /** + * 过号重排 + * + * @param encounterId 就诊id + * @return 结果 + */ + @GetMapping(value = "/rearrange-missed-encounter") + public R rearrangeMissedEncounter(@RequestParam(value = "encounterId", required = false) String encounterId) { + // 1. 空值校验(和现有接口保持一致) + if (encounterId == null || "undefined".equals(encounterId) || "null".equals(encounterId)) { + return R.fail("就诊ID不能为空"); + } + try { + // 2. 字符串转Long(和现有接口保持一致) + Long id = Long.parseLong(encounterId); + // 3. 调用AppService的过号重排方法 + return iDoctorStationMainAppService.rearrangeMissedEncounter(id); + } catch (NumberFormatException e) { + // 4. 格式错误处理(和现有接口保持一致) + return R.fail("就诊ID格式错误"); + } + } + /** * 查询处方号列表信息 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java index 66886a24..3968f6d6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java @@ -1,5 +1,6 @@ package com.openhis.web.doctorstation.dto; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; @@ -127,4 +128,9 @@ public class PatientInfoDto { * 就诊卡号 */ private String identifierNo; + + /** + * 过号时间 + */ + private Date missedTime; } diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml index 6a774d94..e37cd888 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml @@ -24,7 +24,8 @@ T10.practitioner_user_id, T10.jz_practitioner_user_id, T10.bus_no, - T10.identifier_no + T10.identifier_no, + T10.missed_time from ( SELECT T1.tenant_id AS tenant_id, @@ -50,7 +51,8 @@ T1.reception_time AS reception_time, T1.organization_id AS org_id, T8.bus_no AS bus_no, - T9.identifier_no AS identifier_no + T9.identifier_no AS identifier_no, + T1.missed_time AS missed_time FROM adm_encounter AS T1 LEFT JOIN adm_organization AS T2 ON T1.organization_id = T2.ID AND T2.delete_flag = '0' LEFT JOIN adm_healthcare_service AS T3 ON T1.service_type_id = T3.ID AND T3.delete_flag = '0' @@ -70,18 +72,18 @@ LEFT JOIN fin_contract AS T7 ON T6.contract_no = T7.bus_no AND T7.delete_flag = '0' LEFT JOIN adm_patient AS T8 ON T1.patient_id = T8.ID AND T8.delete_flag = '0' LEFT JOIN ( - SELECT patient_id, - identifier_no - FROM ( - SELECT patient_id, - identifier_no, - ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY create_time ASC) AS rn - FROM adm_patient_identifier - WHERE delete_flag = '0' - AND identifier_no IS NOT NULL - AND identifier_no != '' - ) t - WHERE rn = 1 + SELECT patient_id, + identifier_no + FROM ( + SELECT patient_id, + identifier_no, + ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY create_time ASC) AS rn + FROM adm_patient_identifier + WHERE delete_flag = '0' + AND identifier_no IS NOT NULL + AND identifier_no != '' + ) t + WHERE rn = 1 ) AS T9 ON T8.id = T9.patient_id WHERE T1.delete_flag = '0' diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Encounter.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Encounter.java index a66e065e..36ec065c 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Encounter.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Encounter.java @@ -1,8 +1,6 @@ package com.openhis.administration.domain; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import com.core.common.core.domain.HisBaseEntity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -145,4 +143,9 @@ public class Encounter extends HisBaseEntity { */ private Long registrarId; + /** + * 过号时间 + */ + @TableField("missed_time") + private Date missedTime; } diff --git a/openhis-ui-vue3/src/views/doctorstation/components/api.js b/openhis-ui-vue3/src/views/doctorstation/components/api.js index 9d12ca2a..ab88eb55 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/api.js +++ b/openhis-ui-vue3/src/views/doctorstation/components/api.js @@ -54,6 +54,17 @@ export function leaveEncounter(encounterId) { }); } +/** + * 重新排序未到诊患者 + */ +export const rearrangeMissedNumber = (encounterId) => { + return request({ + url: '/doctor-station/main/rearrange-missed-encounter', // 对应Controller的路径 + method: 'get', // 注意:现有接口都是GET,这里和后端保持一致 + params: { encounterId } // GET请求用params传参 + }); +}; + /** * 完诊 */ diff --git a/openhis-ui-vue3/src/views/doctorstation/components/callQueue/DoctorCallDialog.vue b/openhis-ui-vue3/src/views/doctorstation/components/callQueue/DoctorCallDialog.vue new file mode 100644 index 00000000..ce6032ec --- /dev/null +++ b/openhis-ui-vue3/src/views/doctorstation/components/callQueue/DoctorCallDialog.vue @@ -0,0 +1,675 @@ + + + + + \ No newline at end of file diff --git a/openhis-ui-vue3/src/views/doctorstation/index.vue b/openhis-ui-vue3/src/views/doctorstation/index.vue index 5acbdb39..af32ea67 100644 --- a/openhis-ui-vue3/src/views/doctorstation/index.vue +++ b/openhis-ui-vue3/src/views/doctorstation/index.vue @@ -1,11 +1,16 @@ - +
@@ -86,11 +84,11 @@ ' / ' + patientInfo.genderEnum_enumText + ' / ' + - (patientInfo?.contractName ? patientInfo.contractName : '') + - '/' + - patientInfo.phone + - '/' + - patientInfo.busNo + (patientInfo?.contractName ? patientInfo.contractName : '') + + '/' + + patientInfo.phone + + '/' + + patientInfo.busNo : '-' }} @@ -110,27 +108,22 @@ 退费 - + 处方单 - 办理住院 + + 办理住院
- + - + +