From 638f853af66dbc6bbab20d50368eea2716c8371c Mon Sep 17 00:00:00 2001 From: HuangShun <148689675+huabuweixin@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:59:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E6=B1=8217=20=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E7=AB=99-=E3=80=8B=E6=82=A3=E8=80=85?= =?UTF-8?q?=E5=88=97=E8=A1=A8=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E7=AB=99=E7=9A=84=E5=88=9D=E8=AF=8A/?= =?UTF-8?q?=E5=A4=8D=E8=AF=8A=E6=A0=87=E8=AF=86=E6=B2=A1=E6=9C=89=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=95=B0=E6=8D=AE=E5=AD=98=E5=82=A8=E5=92=8C=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IDoctorStationMainAppService.java | 2 +- .../impl/DoctorStationMainAppServiceImpl.java | 59 ++++++++++--------- .../DoctorStationMainController.java | 31 ++++++---- .../src/views/doctorstation/components/api.js | 7 ++- .../src/views/doctorstation/index.vue | 2 +- 5 files changed, 56 insertions(+), 45 deletions(-) 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 c0f42999..907c11c3 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 @@ -50,7 +50,7 @@ public interface IDoctorStationMainAppService { * @param encounterId 就诊id * @return 结果 */ - R completeEncounter(Long encounterId); + R completeEncounter(Long encounterId, Integer firstEnum); /** * 取消完成 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 75d0422e..fae8b8e4 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 @@ -173,51 +173,52 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer * @return 结果 */ @Override - public R completeEncounter(Long encounterId) { - // 1. 检查当前患者状态是否为就诊中(20) + @Transactional(rollbackFor = Exception.class) + public R completeEncounter(Long encounterId, Integer firstEnum) { + // 1. 检查当前患者状态 Encounter encounter = encounterMapper.selectById(encounterId); if (encounter == null) { return R.fail("就诊记录不存在"); } - - // 检查状态是否为就诊中 + if (!EncounterStatus.IN_PROGRESS.getValue().equals(encounter.getStatusEnum())) { return R.fail("当前患者不在就诊中状态"); } - - // 2. 更新状态为已完成(30),并写入完成时间 + + // 2. 更新状态、完成时间以及初复诊标识 Date now = new Date(); int update = encounterMapper.update(null, - new LambdaUpdateWrapper().eq(Encounter::getId, encounterId) - .set(Encounter::getStatusEnum, EncounterStatus.DISCHARGED.getValue()) - .set(Encounter::getSubjectStatusEnum, EncounterSubjectStatus.DEPARTED.getValue()) - .set(Encounter::getEndTime, now)); - - if (update <= 0) { - return R.fail("更新状态失败"); - } - - // 3. 写入审计日志 + new LambdaUpdateWrapper() + .eq(Encounter::getId, encounterId) + .set(Encounter::getStatusEnum, EncounterStatus.DISCHARGED.getValue()) + .set(Encounter::getSubjectStatusEnum, EncounterSubjectStatus.DEPARTED.getValue()) + .set(Encounter::getEndTime, now) + .set(Encounter::getFirstEnum, firstEnum) // 直接在此处更新字段 + .set(Encounter::getUpdateTime, now)); + + if (update <= 0) return R.fail("完诊失败"); + + // 3. 审计日志 try { String username = SecurityUtils.getUsernameSafe(); String sql = "INSERT INTO sys_oper_log " - + "(title,oper_time,method,request_method,oper_name,oper_url,oper_param,json_result) " - + "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; - - jdbcTemplate.update(sql, - "完诊操作", - now, - "DoctorStationMainAppServiceImpl.completeEncounter()", - "POST", - username, - "/doctorstation/main/complete-encounter", - "{\"encounterId\": " + encounterId + "}", - "{\"code\": 200, \"msg\": \"就诊完成\", \"data\": null}"); + + "(title,oper_time,method,request_method,oper_name,oper_url,oper_param,json_result) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; + + jdbcTemplate.update(sql, + "完诊操作", + now, + "DoctorStationMainAppServiceImpl.completeEncounter()", + "POST", + username, + "/doctorstation/main/complete-encounter", + "{\"encounterId\": " + encounterId + "}", + "{\"code\": 200, \"msg\": \"就诊完成\", \"data\": null}"); } catch (Exception e) { log.error("写入完诊审计日志失败", e); // 审计日志失败不影响主流程 } - + 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 a9526d5e..7c3b28da 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 @@ -4,6 +4,7 @@ package com.openhis.web.doctorstation.controller; import com.core.common.core.domain.R; +import com.core.common.utils.StringUtils; import com.openhis.common.enums.Whether; import com.openhis.web.doctorstation.appservice.IDoctorStationMainAppService; import com.openhis.web.doctorstation.dto.DoctorStationInitDto; @@ -11,12 +12,10 @@ import com.openhis.web.doctorstation.dto.PatientInfoDto; import com.openhis.web.doctorstation.dto.PrescriptionInfoBaseDto; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.util.Map; /** * 医生站-主页面 controller @@ -98,19 +97,29 @@ public class DoctorStationMainController { /** * 就诊完成 * - * @param encounterId 就诊id + * @param params 包含 encounterId 和 firstEnum 的键值对 * @return 结果 */ - @GetMapping(value = "/complete-encounter") - public R completeEncounter(@RequestParam(value = "encounterId", required = false) String encounterId) { - if (encounterId == null || "undefined".equals(encounterId) || "null".equals(encounterId)) { + @PostMapping(value = "/complete-encounter") // JSON提交必须用POST + public R completeEncounter(@RequestBody Map params) { + // 从 map 中提取数据 + Object encounterIdObj = params.get("encounterId"); + Object firstEnumObj = params.get("firstEnum"); + + if (encounterIdObj == null || StringUtils.isEmpty(encounterIdObj.toString())) { return R.fail("就诊ID不能为空"); } + if (firstEnumObj == null) { + return R.fail("初复诊状态不能为空"); + } + try { - Long id = Long.parseLong(encounterId); - return iDoctorStationMainAppService.completeEncounter(id); + Long id = Long.parseLong(encounterIdObj.toString()); + Integer firstEnum = Integer.parseInt(firstEnumObj.toString()); + // 调用 Service + return iDoctorStationMainAppService.completeEncounter(id, firstEnum); } catch (NumberFormatException e) { - return R.fail("就诊ID格式错误"); + return R.fail("数据格式错误(ID或初复诊状态非数字)"); } } diff --git a/openhis-ui-vue3/src/views/doctorstation/components/api.js b/openhis-ui-vue3/src/views/doctorstation/components/api.js index ab88eb55..75d322f2 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/api.js +++ b/openhis-ui-vue3/src/views/doctorstation/components/api.js @@ -68,10 +68,11 @@ export const rearrangeMissedNumber = (encounterId) => { /** * 完诊 */ -export function completeEncounter(encounterId) { +export function completeEncounter(params) { return request({ - url: '/doctor-station/main/complete-encounter?encounterId=' + encounterId, - method: 'get', + url: '/doctor-station/main/complete-encounter', + method: 'post', + data: params, }); } diff --git a/openhis-ui-vue3/src/views/doctorstation/index.vue b/openhis-ui-vue3/src/views/doctorstation/index.vue index 50192ffb..dc148356 100644 --- a/openhis-ui-vue3/src/views/doctorstation/index.vue +++ b/openhis-ui-vue3/src/views/doctorstation/index.vue @@ -569,7 +569,7 @@ function handleLeave(encounterId) { } function handleFinish(encounterId) { - completeEncounter(encounterId).then((res) => { + completeEncounter({ encounterId, firstEnum: firstEnum.value }).then((res) => { if (res.code == 200) { proxy.$modal.msgSuccess('操作成功'); patientInfo.value = {};