From f444584908f9979e9b0dd9da0efdf6ac454d310f Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:35:45 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat(anesthesia):=20ASA=E9=BA=BB=E9=86=89?= =?UTF-8?q?=E8=AF=84=E4=BC=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appservice/IAnesthesiaAppService.java | 5 + .../impl/AnesthesiaAppServiceImpl.java | 21 ++ .../controller/AnesthesiaController.java | 16 + .../db/migration/V62__anes_asa_assessment.sql | 26 ++ .../anesthesia/domain/AnesAsaAssessment.java | 58 +++ .../mapper/AnesAsaAssessmentMapper.java | 14 + .../service/IAnesAsaAssessmentService.java | 11 + .../impl/AnesAsaAssessmentServiceImpl.java | 20 ++ healthlink-his-ui/src/api/anesthesia.js | 8 + .../inpatientDoctor/AnesthesiaAssessment.vue | 340 ++++++++++++++++++ 10 files changed, 519 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V62__anes_asa_assessment.sql create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesAsaAssessment.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesAsaAssessmentMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesAsaAssessmentService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesAsaAssessmentServiceImpl.java create mode 100644 healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java index 974d50886..8dae6c404 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java @@ -1,5 +1,6 @@ package com.healthlink.his.web.anesthesia.appservice; +import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; @@ -31,4 +32,8 @@ public interface IAnesthesiaAppService { AnesthesiaIoSummaryDto getIoSummary(Long recordId); void completeRecord(Long recordId); + + AnesAsaAssessment saveAsaAssessment(AnesAsaAssessment assessment); + + List getAsaAssessments(Long recordId); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java index 8c6bf041b..acfe00102 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java @@ -1,5 +1,6 @@ package com.healthlink.his.web.anesthesia.appservice.impl; +import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; @@ -7,6 +8,7 @@ import com.healthlink.his.anesthesia.domain.AnesthesiaRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaVitalSign; import com.healthlink.his.anesthesia.dto.AnesthesiaIoSummaryDto; import com.healthlink.his.anesthesia.dto.AnesthesiaRecordDetailDto; +import com.healthlink.his.anesthesia.service.IAnesAsaAssessmentService; import com.healthlink.his.anesthesia.service.IAnesthesiaFollowupService; import com.healthlink.his.anesthesia.service.IAnesthesiaIoRecordService; import com.healthlink.his.anesthesia.service.IAnesthesiaMedicationService; @@ -39,6 +41,9 @@ public class AnesthesiaAppServiceImpl implements IAnesthesiaAppService { @Resource private IAnesthesiaFollowupService anesthesiaFollowupService; + @Resource + private IAnesAsaAssessmentService anesAsaAssessmentService; + @Override @Transactional public AnesthesiaRecord createRecord(AnesthesiaRecord record) { @@ -125,4 +130,20 @@ public class AnesthesiaAppServiceImpl implements IAnesthesiaAppService { record.setEndTime(new Date()); anesthesiaRecordService.updateById(record); } + + @Override + @Transactional + public AnesAsaAssessment saveAsaAssessment(AnesAsaAssessment assessment) { + if (assessment.getId() != null) { + anesAsaAssessmentService.updateById(assessment); + } else { + anesAsaAssessmentService.save(assessment); + } + return assessment; + } + + @Override + public List getAsaAssessments(Long recordId) { + return anesAsaAssessmentService.selectByRecordId(recordId); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java index 163c84e3a..540f03f06 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java @@ -1,6 +1,7 @@ package com.healthlink.his.web.anesthesia.controller; import com.core.common.core.domain.R; +import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; @@ -17,6 +18,7 @@ import com.healthlink.his.web.anesthesia.appservice.IAnesthesiaAppService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -134,4 +136,18 @@ public class AnesthesiaController { anesthesiaAppService.completeRecord(id); return R.ok(); } + + @PostMapping("/asa-assessment") + @Operation(summary = "保存ASA评估") + @PreAuthorize("@ss.hasPermi('inpatient:anesthesia:edit')") + public R saveAsaAssessment(@RequestBody AnesAsaAssessment assessment) { + return R.ok(anesthesiaAppService.saveAsaAssessment(assessment)); + } + + @GetMapping("/asa-assessment/{recordId}") + @Operation(summary = "查询ASA评估列表") + @PreAuthorize("@ss.hasPermi('inpatient:anesthesia:list')") + public R> getAsaAssessments(@PathVariable Long recordId) { + return R.ok(anesthesiaAppService.getAsaAssessments(recordId)); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V62__anes_asa_assessment.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V62__anes_asa_assessment.sql new file mode 100644 index 000000000..3360a66c9 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V62__anes_asa_assessment.sql @@ -0,0 +1,26 @@ +CREATE TABLE anes_asa_assessment ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + asa_grade VARCHAR(5) NOT NULL, + assessment_time TIMESTAMP NOT NULL, + assessor_id BIGINT NOT NULL, + assessor_name VARCHAR(50), + airway_assessment TEXT, + mallampati_grade VARCHAR(5), + neck_mobility VARCHAR(50), + mouth_opening_cm DECIMAL(4,1), + weight_kg DECIMAL(6,2), + height_cm DECIMAL(5,1), + bmi DECIMAL(5,1), + npo_hours INTEGER, + asa_factors TEXT, + risk_level VARCHAR(20), + tenant_id BIGINT DEFAULT 0, + delete_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesAsaAssessment.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesAsaAssessment.java new file mode 100644 index 000000000..55c903d88 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesAsaAssessment.java @@ -0,0 +1,58 @@ +package com.healthlink.his.anesthesia.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 com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@TableName("anes_asa_assessment") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class AnesAsaAssessment extends HisBaseEntity { + + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + private Long recordId; + + private Long encounterId; + + private Long patientId; + + private String asaGrade; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date assessmentTime; + + private Long assessorId; + + private String assessorName; + + private String airwayAssessment; + + private String mallampatiGrade; + + private String neckMobility; + + private BigDecimal mouthOpeningCm; + + private BigDecimal weightKg; + + private BigDecimal heightCm; + + private BigDecimal bmi; + + private Integer npoHours; + + private String asaFactors; + + private String riskLevel; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesAsaAssessmentMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesAsaAssessmentMapper.java new file mode 100644 index 000000000..e8b4beff6 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesAsaAssessmentMapper.java @@ -0,0 +1,14 @@ +package com.healthlink.his.anesthesia.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface AnesAsaAssessmentMapper extends BaseMapper { + + List selectByRecordId(@Param("recordId") Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesAsaAssessmentService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesAsaAssessmentService.java new file mode 100644 index 000000000..939ca097e --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesAsaAssessmentService.java @@ -0,0 +1,11 @@ +package com.healthlink.his.anesthesia.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; + +import java.util.List; + +public interface IAnesAsaAssessmentService extends IService { + + List selectByRecordId(Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesAsaAssessmentServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesAsaAssessmentServiceImpl.java new file mode 100644 index 000000000..8d13a74f2 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesAsaAssessmentServiceImpl.java @@ -0,0 +1,20 @@ +package com.healthlink.his.anesthesia.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; +import com.healthlink.his.anesthesia.mapper.AnesAsaAssessmentMapper; +import com.healthlink.his.anesthesia.service.IAnesAsaAssessmentService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AnesAsaAssessmentServiceImpl + extends ServiceImpl + implements IAnesAsaAssessmentService { + + @Override + public List selectByRecordId(Long recordId) { + return baseMapper.selectByRecordId(recordId); + } +} diff --git a/healthlink-his-ui/src/api/anesthesia.js b/healthlink-his-ui/src/api/anesthesia.js index 0a6b9e24c..3662dc0ef 100644 --- a/healthlink-his-ui/src/api/anesthesia.js +++ b/healthlink-his-ui/src/api/anesthesia.js @@ -69,3 +69,11 @@ export function getFollowup(recordId) { export function addFollowup(data) { return request({ url: '/api/v1/anesthesia/followup', method: 'post', data }) } + +export function saveAsaAssessment(data) { + return request({ url: '/api/v1/anesthesia/asa-assessment', method: 'post', data }) +} + +export function getAsaAssessments(recordId) { + return request({ url: '/api/v1/anesthesia/asa-assessment/' + recordId, method: 'get' }) +} diff --git a/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue b/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue new file mode 100644 index 000000000..1c98e65ab --- /dev/null +++ b/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue @@ -0,0 +1,340 @@ + + + + + From 8adee630fb4a228662fd91b074ea480a70c5c7fb Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:40:11 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix(anesthesia):=20=E4=BF=AE=E5=A4=8DMapper?= =?UTF-8?q?=20XML=E7=BC=BA=E5=A4=B1+recordId=E7=A1=AC=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/anesthesia/AnesAsaAssessmentMapper.xml | 7 +++++++ .../views/inpatientDoctor/AnesthesiaAssessment.vue | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesAsaAssessmentMapper.xml diff --git a/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesAsaAssessmentMapper.xml b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesAsaAssessmentMapper.xml new file mode 100644 index 000000000..695f4c9da --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesAsaAssessmentMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue b/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue index 1c98e65ab..18bd54745 100644 --- a/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue +++ b/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaAssessment.vue @@ -191,10 +191,14 @@ + + From b3800b7ae0d552c47536ddbafdc386a4a6bd2985 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:53:11 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat(anesthesia):=20=E9=BA=BB=E9=86=89?= =?UTF-8?q?=E5=B0=8F=E7=BB=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - V63 Flyway migration: anes_summary table - Entity, Mapper, Service, AppService, Controller - POST /anesthesia/summary, GET /anesthesia/summary/{recordId} - Frontend AnesthesiaSummary.vue with form and display --- .../appservice/IAnesthesiaAppService.java | 5 + .../impl/AnesthesiaAppServiceImpl.java | 27 ++ .../controller/AnesthesiaController.java | 15 + .../db/migration/V63__anes_summary.sql | 29 ++ .../his/anesthesia/domain/AnesSummary.java | 67 ++++ .../anesthesia/mapper/AnesSummaryMapper.java | 12 + .../service/IAnesSummaryService.java | 9 + .../service/impl/AnesSummaryServiceImpl.java | 18 + .../mapper/anesthesia/AnesSummaryMapper.xml | 7 + healthlink-his-ui/src/api/anesthesia.js | 8 + .../inpatientDoctor/AnesthesiaSummary.vue | 336 ++++++++++++++++++ 11 files changed, 533 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V63__anes_summary.sql create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesSummary.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesSummaryMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesSummaryService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesSummaryServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesSummaryMapper.xml create mode 100644 healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaSummary.vue diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java index 366d95a1e..82d18de16 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java @@ -1,6 +1,7 @@ package com.healthlink.his.web.anesthesia.appservice; import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; +import com.healthlink.his.anesthesia.domain.AnesSummary; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; @@ -40,4 +41,8 @@ public interface IAnesthesiaAppService { AnesthesiaVitalSign recordVitalSign(AnesthesiaVitalSign vitalSign); List getVitalSignTimeline(Long recordId); + + AnesSummary saveSummary(AnesSummary summary); + + AnesSummary getSummary(Long recordId); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java index cf63c7e10..fc8c23b37 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java @@ -1,6 +1,7 @@ package com.healthlink.his.web.anesthesia.appservice.impl; import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; +import com.healthlink.his.anesthesia.domain.AnesSummary; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; @@ -9,6 +10,7 @@ import com.healthlink.his.anesthesia.domain.AnesthesiaVitalSign; import com.healthlink.his.anesthesia.dto.AnesthesiaIoSummaryDto; import com.healthlink.his.anesthesia.dto.AnesthesiaRecordDetailDto; import com.healthlink.his.anesthesia.service.IAnesAsaAssessmentService; +import com.healthlink.his.anesthesia.service.IAnesSummaryService; import com.healthlink.his.anesthesia.service.IAnesthesiaFollowupService; import com.healthlink.his.anesthesia.service.IAnesthesiaIoRecordService; import com.healthlink.his.anesthesia.service.IAnesthesiaMedicationService; @@ -44,6 +46,9 @@ public class AnesthesiaAppServiceImpl implements IAnesthesiaAppService { @Resource private IAnesAsaAssessmentService anesAsaAssessmentService; + @Resource + private IAnesSummaryService anesSummaryService; + @Override @Transactional public AnesthesiaRecord createRecord(AnesthesiaRecord record) { @@ -158,4 +163,26 @@ public class AnesthesiaAppServiceImpl implements IAnesthesiaAppService { public List getVitalSignTimeline(Long recordId) { return anesthesiaVitalSignService.selectByRecordId(recordId); } + + @Override + @Transactional + public AnesSummary saveSummary(AnesSummary summary) { + if (summary.getId() != null) { + anesSummaryService.updateById(summary); + } else { + AnesSummary existing = anesSummaryService.selectByRecordId(summary.getRecordId()); + if (existing != null) { + summary.setId(existing.getId()); + anesSummaryService.updateById(summary); + } else { + anesSummaryService.save(summary); + } + } + return summary; + } + + @Override + public AnesSummary getSummary(Long recordId) { + return anesSummaryService.selectByRecordId(recordId); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java index fdc4b4dbe..4afe91fd7 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java @@ -2,6 +2,7 @@ package com.healthlink.his.web.anesthesia.controller; import com.core.common.core.domain.R; import com.healthlink.his.anesthesia.domain.AnesAsaAssessment; +import com.healthlink.his.anesthesia.domain.AnesSummary; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; @@ -164,4 +165,18 @@ public class AnesthesiaController { public R> getVitalSignTimeline(@PathVariable Long recordId) { return R.ok(anesthesiaAppService.getVitalSignTimeline(recordId)); } + + @PostMapping("/summary") + @Operation(summary = "保存麻醉小结") + @PreAuthorize("@ss.hasPermi('inpatient:anesthesia:edit')") + public R saveSummary(@RequestBody AnesSummary summary) { + return R.ok(anesthesiaAppService.saveSummary(summary)); + } + + @GetMapping("/summary/{recordId}") + @Operation(summary = "获取麻醉小结") + @PreAuthorize("@ss.hasPermi('inpatient:anesthesia:list')") + public R getSummary(@PathVariable Long recordId) { + return R.ok(anesthesiaAppService.getSummary(recordId)); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V63__anes_summary.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V63__anes_summary.sql new file mode 100644 index 000000000..319c888ba --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V63__anes_summary.sql @@ -0,0 +1,29 @@ +CREATE TABLE anes_summary ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + anesthesia_type VARCHAR(32), + anesthesia_start_time TIMESTAMP, + anesthesia_end_time TIMESTAMP, + surgery_start_time TIMESTAMP, + surgery_end_time TIMESTAMP, + intraop_blood_loss_ml INTEGER, + intraop_urine_ml INTEGER, + intraop_fluid_ml INTEGER, + blood_transfusion_ml INTEGER, + complications TEXT, + has_complications BOOLEAN DEFAULT FALSE, + airway_management VARCHAR(50), + extubation_time TIMESTAMP, + patient_condition VARCHAR(50), + summary TEXT, + anesthetist_id BIGINT, + anesthetist_name VARCHAR(50), + tenant_id BIGINT DEFAULT 0, + delete_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesSummary.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesSummary.java new file mode 100644 index 000000000..fa13bf608 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesSummary.java @@ -0,0 +1,67 @@ +package com.healthlink.his.anesthesia.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 com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.Date; + +@Data +@TableName("anes_summary") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class AnesSummary extends HisBaseEntity { + + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + private Long recordId; + + private Long encounterId; + + private Long patientId; + + private String anesthesiaType; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date anesthesiaStartTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date anesthesiaEndTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date surgeryStartTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date surgeryEndTime; + + private Integer intraopBloodLossMl; + + private Integer intraopUrineMl; + + private Integer intraopFluidMl; + + private Integer bloodTransfusionMl; + + private String complications; + + private Boolean hasComplications; + + private String airwayManagement; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date extubationTime; + + private String patientCondition; + + private String summary; + + private Long anesthetistId; + + private String anesthetistName; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesSummaryMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesSummaryMapper.java new file mode 100644 index 000000000..01c31e0bb --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesSummaryMapper.java @@ -0,0 +1,12 @@ +package com.healthlink.his.anesthesia.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.anesthesia.domain.AnesSummary; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface AnesSummaryMapper extends BaseMapper { + + AnesSummary selectByRecordId(@Param("recordId") Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesSummaryService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesSummaryService.java new file mode 100644 index 000000000..81e7d99cf --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesSummaryService.java @@ -0,0 +1,9 @@ +package com.healthlink.his.anesthesia.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.anesthesia.domain.AnesSummary; + +public interface IAnesSummaryService extends IService { + + AnesSummary selectByRecordId(Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesSummaryServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesSummaryServiceImpl.java new file mode 100644 index 000000000..1e80b1434 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesSummaryServiceImpl.java @@ -0,0 +1,18 @@ +package com.healthlink.his.anesthesia.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.anesthesia.domain.AnesSummary; +import com.healthlink.his.anesthesia.mapper.AnesSummaryMapper; +import com.healthlink.his.anesthesia.service.IAnesSummaryService; +import org.springframework.stereotype.Service; + +@Service +public class AnesSummaryServiceImpl + extends ServiceImpl + implements IAnesSummaryService { + + @Override + public AnesSummary selectByRecordId(Long recordId) { + return baseMapper.selectByRecordId(recordId); + } +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesSummaryMapper.xml b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesSummaryMapper.xml new file mode 100644 index 000000000..6181aacd8 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesSummaryMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/healthlink-his-ui/src/api/anesthesia.js b/healthlink-his-ui/src/api/anesthesia.js index 1d31de50b..73a3aef09 100644 --- a/healthlink-his-ui/src/api/anesthesia.js +++ b/healthlink-his-ui/src/api/anesthesia.js @@ -85,3 +85,11 @@ export function recordVitalSign(data) { export function getVitalSignTimeline(recordId) { return request({ url: '/api/v1/anesthesia/vital-sign/timeline/' + recordId, method: 'get' }) } + +export function saveAnesSummary(data) { + return request({ url: '/api/v1/anesthesia/summary', method: 'post', data }) +} + +export function getAnesSummary(recordId) { + return request({ url: '/api/v1/anesthesia/summary/' + recordId, method: 'get' }) +} diff --git a/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaSummary.vue b/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaSummary.vue new file mode 100644 index 000000000..62570423e --- /dev/null +++ b/healthlink-his-ui/src/views/inpatientDoctor/AnesthesiaSummary.vue @@ -0,0 +1,336 @@ + + + + + From 694935b648ba75eacdc30a1ba8dccac992eed0e7 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 13:00:50 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat(anesthesia):=20=E6=9C=AF=E5=90=8E?= =?UTF-8?q?=E9=9A=8F=E8=AE=BF=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appservice/IAnesthesiaAppService.java | 5 + .../impl/AnesthesiaAppServiceImpl.java | 26 ++ .../controller/AnesthesiaController.java | 15 + healthlink-his-ui/src/api/anesthesia/index.js | 2 + .../views/inpatientDoctor/PostopFollowup.vue | 281 ++++++++++++++++++ 5 files changed, 329 insertions(+) create mode 100644 healthlink-his-ui/src/views/inpatientDoctor/PostopFollowup.vue diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java index 82d18de16..172eeb054 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/IAnesthesiaAppService.java @@ -5,6 +5,7 @@ import com.healthlink.his.anesthesia.domain.AnesSummary; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; +import com.healthlink.his.anesthesia.domain.AnesthesiaPostopFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaVitalSign; import com.healthlink.his.anesthesia.dto.AnesthesiaIoSummaryDto; @@ -45,4 +46,8 @@ public interface IAnesthesiaAppService { AnesSummary saveSummary(AnesSummary summary); AnesSummary getSummary(Long recordId); + + AnesthesiaPostopFollowup recordFollowup(AnesthesiaPostopFollowup followup); + + List getFollowups(Long encounterId); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java index fc8c23b37..c14af9551 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/appservice/impl/AnesthesiaAppServiceImpl.java @@ -5,6 +5,7 @@ import com.healthlink.his.anesthesia.domain.AnesSummary; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; +import com.healthlink.his.anesthesia.domain.AnesthesiaPostopFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaVitalSign; import com.healthlink.his.anesthesia.dto.AnesthesiaIoSummaryDto; @@ -13,10 +14,12 @@ import com.healthlink.his.anesthesia.service.IAnesAsaAssessmentService; import com.healthlink.his.anesthesia.service.IAnesSummaryService; import com.healthlink.his.anesthesia.service.IAnesthesiaFollowupService; import com.healthlink.his.anesthesia.service.IAnesthesiaIoRecordService; +import com.healthlink.his.anesthesia.service.IAnesthesiaPostopFollowupService; import com.healthlink.his.anesthesia.service.IAnesthesiaMedicationService; import com.healthlink.his.anesthesia.service.IAnesthesiaRecordService; import com.healthlink.his.anesthesia.service.IAnesthesiaVitalSignService; import com.healthlink.his.web.anesthesia.appservice.IAnesthesiaAppService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -49,6 +52,9 @@ public class AnesthesiaAppServiceImpl implements IAnesthesiaAppService { @Resource private IAnesSummaryService anesSummaryService; + @Resource + private IAnesthesiaPostopFollowupService anesthesiaPostopFollowupService; + @Override @Transactional public AnesthesiaRecord createRecord(AnesthesiaRecord record) { @@ -185,4 +191,24 @@ public class AnesthesiaAppServiceImpl implements IAnesthesiaAppService { public AnesSummary getSummary(Long recordId) { return anesSummaryService.selectByRecordId(recordId); } + + @Override + @Transactional(rollbackFor = Exception.class) + public AnesthesiaPostopFollowup recordFollowup(AnesthesiaPostopFollowup followup) { + if (followup.getId() != null) { + anesthesiaPostopFollowupService.updateById(followup); + } else { + followup.setStatus(0); + anesthesiaPostopFollowupService.save(followup); + } + return followup; + } + + @Override + public List getFollowups(Long encounterId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AnesthesiaPostopFollowup::getEncounterId, encounterId) + .orderByDesc(AnesthesiaPostopFollowup::getFollowupTime); + return anesthesiaPostopFollowupService.list(wrapper); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java index 4afe91fd7..9369b7d83 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/anesthesia/controller/AnesthesiaController.java @@ -6,6 +6,7 @@ import com.healthlink.his.anesthesia.domain.AnesSummary; import com.healthlink.his.anesthesia.domain.AnesthesiaFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaIoRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaMedication; +import com.healthlink.his.anesthesia.domain.AnesthesiaPostopFollowup; import com.healthlink.his.anesthesia.domain.AnesthesiaRecord; import com.healthlink.his.anesthesia.domain.AnesthesiaVitalSign; import com.healthlink.his.anesthesia.dto.AnesthesiaIoSummaryDto; @@ -179,4 +180,18 @@ public class AnesthesiaController { public R getSummary(@PathVariable Long recordId) { return R.ok(anesthesiaAppService.getSummary(recordId)); } + + @PostMapping("/postop-followup") + @Operation(summary = "记录术后随访") + @PreAuthorize("@ss.hasPermi('inpatient:anesthesia:edit')") + public R recordFollowup(@RequestBody AnesthesiaPostopFollowup followup) { + return R.ok(anesthesiaAppService.recordFollowup(followup)); + } + + @GetMapping("/postop-followup/{encounterId}") + @Operation(summary = "查询术后随访列表") + @PreAuthorize("@ss.hasPermi('inpatient:anesthesia:list')") + public R> getPostopFollowups(@PathVariable Long encounterId) { + return R.ok(anesthesiaAppService.getFollowups(encounterId)); + } } diff --git a/healthlink-his-ui/src/api/anesthesia/index.js b/healthlink-his-ui/src/api/anesthesia/index.js index 3c529d7d0..52daecca2 100644 --- a/healthlink-his-ui/src/api/anesthesia/index.js +++ b/healthlink-his-ui/src/api/anesthesia/index.js @@ -7,3 +7,5 @@ export function getVitalSigns(recordId) { return request({ url: '/api/v1/anesthe export function getMedications(recordId) { return request({ url: '/api/v1/anesthesia/medication/' + recordId, method: 'get' }) } export function getIoSummary(recordId) { return request({ url: '/api/v1/anesthesia/io-summary/' + recordId, method: 'get' }) } export function completeRecord(id) { return request({ url: '/api/v1/anesthesia/complete/' + id, method: 'put' }) } +export function recordPostopFollowup(data) { return request({ url: '/api/v1/anesthesia/postop-followup', method: 'post', data }) } +export function getPostopFollowups(encounterId) { return request({ url: '/api/v1/anesthesia/postop-followup/' + encounterId, method: 'get' }) } diff --git a/healthlink-his-ui/src/views/inpatientDoctor/PostopFollowup.vue b/healthlink-his-ui/src/views/inpatientDoctor/PostopFollowup.vue new file mode 100644 index 000000000..c34921d80 --- /dev/null +++ b/healthlink-his-ui/src/views/inpatientDoctor/PostopFollowup.vue @@ -0,0 +1,281 @@ + + + + +