From fc892e96dc0123baa2eb2bd02ebbbe27fdcc748f Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:25:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(critical-value):=20=E5=8D=B1=E6=80=A5?= =?UTF-8?q?=E5=80=BC=E5=A4=84=E7=90=86=E8=AE=B0=E5=BD=95=E9=97=AD=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appservice/ICriticalValueAppService.java | 4 + .../impl/CriticalValueAppServiceImpl.java | 38 ++++ .../controller/CriticalValueController.java | 19 ++ .../V60__critical_value_handle_record.sql | 23 ++ .../domain/CriticalValueHandleRecord.java | 29 +++ .../CriticalValueHandleRecordMapper.java | 6 + .../ICriticalValueHandleRecordService.java | 4 + .../CriticalValueHandleRecordServiceImpl.java | 8 + .../src/api/criticalvalue/index.js | 3 + .../inpatientDoctor/CriticalValueHandle.vue | 207 ++++++++++++++++++ 10 files changed, 341 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V60__critical_value_handle_record.sql create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/domain/CriticalValueHandleRecord.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/mapper/CriticalValueHandleRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/ICriticalValueHandleRecordService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/impl/CriticalValueHandleRecordServiceImpl.java create mode 100644 healthlink-his-ui/src/views/inpatientDoctor/CriticalValueHandle.vue diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/ICriticalValueAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/ICriticalValueAppService.java index 50de05ffd..7fbb42969 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/ICriticalValueAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/ICriticalValueAppService.java @@ -1,5 +1,6 @@ package com.healthlink.his.web.criticalvalue.appservice; import com.healthlink.his.criticalvalue.domain.CriticalValue; +import com.healthlink.his.criticalvalue.domain.CriticalValueHandleRecord; import java.util.List; import java.util.Map; public interface ICriticalValueAppService { @@ -10,4 +11,7 @@ public interface ICriticalValueAppService { List getPendingList(); List getOverdueList(); Map getStatistics(String startDate, String endDate); + List getPendingHandleList(); + void handleCriticalValue(CriticalValueHandleRecord record); + List getHandleHistory(Long criticalValueId); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/impl/CriticalValueAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/impl/CriticalValueAppServiceImpl.java index 7bf298ba4..8b75cfca6 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/impl/CriticalValueAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/appservice/impl/CriticalValueAppServiceImpl.java @@ -1,14 +1,18 @@ package com.healthlink.his.web.criticalvalue.appservice.impl; import com.healthlink.his.criticalvalue.domain.CriticalValue; +import com.healthlink.his.criticalvalue.domain.CriticalValueHandleRecord; +import com.healthlink.his.criticalvalue.service.ICriticalValueHandleRecordService; import com.healthlink.his.criticalvalue.service.ICriticalValueService; import com.healthlink.his.web.criticalvalue.appservice.ICriticalValueAppService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.*; @Service public class CriticalValueAppServiceImpl implements ICriticalValueAppService { @Autowired private ICriticalValueService criticalValueService; + @Autowired private ICriticalValueHandleRecordService handleRecordService; @Override public CriticalValue reportCriticalValue(CriticalValue cv) { @@ -72,4 +76,38 @@ public class CriticalValueAppServiceImpl implements ICriticalValueAppService { result.put("confirmRate", total > 0 ? Math.round(closed * 100.0 / total) : 0); return result; } + @Override + public List getPendingHandleList() { + return criticalValueService.list(new LambdaQueryWrapper() + .in(CriticalValue::getStatus, "PENDING", "RECEIVED") + .eq(CriticalValue::getDeleteFlag, "0") + .orderByDesc(CriticalValue::getReportTime)); + } + @Override + @Transactional(rollbackFor = Exception.class) + public void handleCriticalValue(CriticalValueHandleRecord record) { + record.setHandleTime(new Date()); + handleRecordService.save(record); + if ("HANDLE".equals(record.getHandleType())) { + CriticalValue cv = criticalValueService.getById(record.getCriticalValueId()); + cv.setHandlerId(record.getHandlerId()); + cv.setHandlerName(record.getHandlerName()); + cv.setHandleTime(new Date()); + cv.setHandleResult(record.getHandleResult()); + cv.setStatus("PROCESSING"); + criticalValueService.updateById(cv); + } else if ("CONFIRM".equals(record.getHandleType())) { + CriticalValue cv = criticalValueService.getById(record.getCriticalValueId()); + cv.setCloseTime(new Date()); + cv.setStatus("CLOSED"); + criticalValueService.updateById(cv); + } + } + @Override + public List getHandleHistory(Long criticalValueId) { + return handleRecordService.list(new LambdaQueryWrapper() + .eq(CriticalValueHandleRecord::getCriticalValueId, criticalValueId) + .eq(CriticalValueHandleRecord::getDeleteFlag, "0") + .orderByDesc(CriticalValueHandleRecord::getHandleTime)); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/controller/CriticalValueController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/controller/CriticalValueController.java index 7348b0dfe..770565e24 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/controller/CriticalValueController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/criticalvalue/controller/CriticalValueController.java @@ -1,10 +1,12 @@ package com.healthlink.his.web.criticalvalue.controller; import com.core.common.core.domain.AjaxResult; import com.healthlink.his.criticalvalue.domain.CriticalValue; +import com.healthlink.his.criticalvalue.domain.CriticalValueHandleRecord; import com.healthlink.his.web.criticalvalue.appservice.ICriticalValueAppService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @Tag(name = "危急值管理") @RestController @@ -42,4 +44,21 @@ public class CriticalValueController { @GetMapping("/statistics") public AjaxResult statistics(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) { return AjaxResult.success(criticalValueAppService.getStatistics(startDate, endDate)); } + + @Operation(summary = "待处理危急值列表") + @PreAuthorize("@ss.hasPermi('inpatient:criticalvalue:list')") + @GetMapping("/pending-handle") + public AjaxResult pendingHandle() { return AjaxResult.success(criticalValueAppService.getPendingHandleList()); } + + @Operation(summary = "处理危急值") + @PreAuthorize("@ss.hasPermi('inpatient:criticalvalue:edit')") + @PostMapping("/handle") + public AjaxResult handle(@RequestBody CriticalValueHandleRecord record) { + criticalValueAppService.handleCriticalValue(record); return AjaxResult.success(); } + + @Operation(summary = "处理历史") + @PreAuthorize("@ss.hasPermi('inpatient:criticalvalue:list')") + @GetMapping("/history") + public AjaxResult history(@RequestParam Long criticalValueId) { + return AjaxResult.success(criticalValueAppService.getHandleHistory(criticalValueId)); } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V60__critical_value_handle_record.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V60__critical_value_handle_record.sql new file mode 100644 index 000000000..c76215376 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V60__critical_value_handle_record.sql @@ -0,0 +1,23 @@ +CREATE TABLE critical_value_handle_record ( + id BIGSERIAL PRIMARY KEY, + critical_value_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + handle_type VARCHAR(20) NOT NULL, + handler_id BIGINT NOT NULL, + handler_name VARCHAR(50), + handle_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + handle_result TEXT, + review_result TEXT, + doctor_id BIGINT, + doctor_name VARCHAR(50), + confirm_time TIMESTAMP, + tenant_id BIGINT DEFAULT 0, + delete_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +COMMENT ON TABLE critical_value_handle_record IS '危急值处理记录'; +COMMENT ON COLUMN critical_value_handle_record.handle_type IS '处理类型: HANDLE-处理 REVIEW-复查 CONFIRM-确认'; +CREATE INDEX idx_cv_handle_cv_id ON critical_value_handle_record(critical_value_id); +CREATE INDEX idx_cv_handle_patient ON critical_value_handle_record(patient_id); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/domain/CriticalValueHandleRecord.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/domain/CriticalValueHandleRecord.java new file mode 100644 index 000000000..5e940db2a --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/domain/CriticalValueHandleRecord.java @@ -0,0 +1,29 @@ +package com.healthlink.his.criticalvalue.domain; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import java.util.Date; +@Data +@TableName("critical_value_handle_record") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class CriticalValueHandleRecord extends HisBaseEntity { + @TableId(type = IdType.ASSIGN_ID) + private Long id; + private Long criticalValueId; + private Long encounterId; + private Long patientId; + private String handleType; + private Long handlerId; + private String handlerName; + private Date handleTime; + private String handleResult; + private String reviewResult; + private Long doctorId; + private String doctorName; + private Date confirmTime; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/mapper/CriticalValueHandleRecordMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/mapper/CriticalValueHandleRecordMapper.java new file mode 100644 index 000000000..3b4747cb4 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/mapper/CriticalValueHandleRecordMapper.java @@ -0,0 +1,6 @@ +package com.healthlink.his.criticalvalue.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.criticalvalue.domain.CriticalValueHandleRecord; +import org.apache.ibatis.annotations.Mapper; +@Mapper +public interface CriticalValueHandleRecordMapper extends BaseMapper {} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/ICriticalValueHandleRecordService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/ICriticalValueHandleRecordService.java new file mode 100644 index 000000000..de9a1e0e6 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/ICriticalValueHandleRecordService.java @@ -0,0 +1,4 @@ +package com.healthlink.his.criticalvalue.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.criticalvalue.domain.CriticalValueHandleRecord; +public interface ICriticalValueHandleRecordService extends IService {} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/impl/CriticalValueHandleRecordServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/impl/CriticalValueHandleRecordServiceImpl.java new file mode 100644 index 000000000..c5a6c380b --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/criticalvalue/service/impl/CriticalValueHandleRecordServiceImpl.java @@ -0,0 +1,8 @@ +package com.healthlink.his.criticalvalue.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.criticalvalue.domain.CriticalValueHandleRecord; +import com.healthlink.his.criticalvalue.mapper.CriticalValueHandleRecordMapper; +import com.healthlink.his.criticalvalue.service.ICriticalValueHandleRecordService; +import org.springframework.stereotype.Service; +@Service +public class CriticalValueHandleRecordServiceImpl extends ServiceImpl implements ICriticalValueHandleRecordService {} diff --git a/healthlink-his-ui/src/api/criticalvalue/index.js b/healthlink-his-ui/src/api/criticalvalue/index.js index 858934a00..15a5aebe6 100644 --- a/healthlink-his-ui/src/api/criticalvalue/index.js +++ b/healthlink-his-ui/src/api/criticalvalue/index.js @@ -4,3 +4,6 @@ export function confirmValue(id, params) { return request({ url: '/api/v1/critic export function closeValue(id) { return request({ url: '/api/v1/critical-value/close/' + id, method: 'put' }) } export function getStatistics() { return request({ url: '/api/v1/critical-value/statistics', method: 'get' }) } export function getOverdueList() { return request({ url: '/api/v1/critical-value/overdue', method: 'get' }) } +export function getPendingHandleList() { return request({ url: '/api/v1/critical-value/pending-handle', method: 'get' }) } +export function handleCriticalValue(data) { return request({ url: '/api/v1/critical-value/handle', method: 'post', data: data }) } +export function getHandleHistory(criticalValueId) { return request({ url: '/api/v1/critical-value/history', method: 'get', params: { criticalValueId } }) } diff --git a/healthlink-his-ui/src/views/inpatientDoctor/CriticalValueHandle.vue b/healthlink-his-ui/src/views/inpatientDoctor/CriticalValueHandle.vue new file mode 100644 index 000000000..c0865e974 --- /dev/null +++ b/healthlink-his-ui/src/views/inpatientDoctor/CriticalValueHandle.vue @@ -0,0 +1,207 @@ + + + + +