From 5ef05b9b55b247f867c8b90f8b88dc480967f9b8 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:02:38 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix(blood-transfusion):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8DP0/P1=E9=97=AE=E9=A2=98=20-=20=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=98=A0=E5=B0=84/=E5=8F=82=E6=95=B0=E6=B8=85=E7=90=86/tenant?= =?UTF-8?q?=5Fid/Flyway=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appservice/IBloodTransfusionAppService.java | 4 ++-- .../impl/BloodTransfusionAppServiceImpl.java | 10 +++------- .../controller/BloodTransfusionController.java | 10 ++++------ ...lood_transfusion.sql => V57__blood_transfusion.sql} | 2 ++ 4 files changed, 11 insertions(+), 15 deletions(-) rename healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/{V2026_0618__blood_transfusion.sql => V57__blood_transfusion.sql} (95%) diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/IBloodTransfusionAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/IBloodTransfusionAppService.java index 7595d664d..3ae63cf6c 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/IBloodTransfusionAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/IBloodTransfusionAppService.java @@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.Map; public interface IBloodTransfusionAppService { void apply(BloodTransfusionRecord record); - IPage page(String patientName, String approvalStatus, String bloodComponent, Integer pageNum, Integer pageSize); - void approve(Long id, String approvalStatus, String approverName, String remark); + IPage page(String approvalStatus, String bloodComponent, Integer pageNum, Integer pageSize); + void approve(Long id, String approvalStatus, String approverName); void observe(BloodTransfusionObservation observation); Map getRecordDetail(Long id); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/impl/BloodTransfusionAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/impl/BloodTransfusionAppServiceImpl.java index 108667ef9..c355decce 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/impl/BloodTransfusionAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/appservice/impl/BloodTransfusionAppServiceImpl.java @@ -23,11 +23,8 @@ public class BloodTransfusionAppServiceImpl implements IBloodTransfusionAppServi recordService.save(record); } @Override - public IPage page(String patientName, String approvalStatus, String bloodComponent, Integer pageNum, Integer pageSize) { + public IPage page(String approvalStatus, String bloodComponent, Integer pageNum, Integer pageSize) { LambdaQueryWrapper w = new LambdaQueryWrapper<>(); - if (patientName != null && !patientName.isEmpty()) { - w.like(BloodTransfusionRecord::getDoctorName, patientName); - } if (approvalStatus != null && !approvalStatus.isEmpty()) { w.eq(BloodTransfusionRecord::getApprovalStatus, approvalStatus); } @@ -38,7 +35,7 @@ public class BloodTransfusionAppServiceImpl implements IBloodTransfusionAppServi return recordService.page(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize), w); } @Override - public void approve(Long id, String approvalStatus, String approverName, String remark) { + public void approve(Long id, String approvalStatus, String approverName) { BloodTransfusionRecord record = recordService.getById(id); if (record == null) { throw new RuntimeException("输血记录不存在"); @@ -63,8 +60,7 @@ public class BloodTransfusionAppServiceImpl implements IBloodTransfusionAppServi Map result = new LinkedHashMap<>(); BloodTransfusionRecord record = recordService.getById(id); if (record == null) { - result.put("error", "记录不存在"); - return result; + throw new RuntimeException("输血记录不存在"); } result.put("record", record); List observations = observationService.list( diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/controller/BloodTransfusionController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/controller/BloodTransfusionController.java index 4a9352b42..515b48973 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/controller/BloodTransfusionController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/bloodtransfusion/controller/BloodTransfusionController.java @@ -22,21 +22,19 @@ public class BloodTransfusionController { @Operation(summary = "输血申请分页") @PreAuthorize("@ss.hasPermi('inpatient:bloodtransfusion:list')") @GetMapping("/page") - public AjaxResult page(@RequestParam(required = false) String patientName, - @RequestParam(required = false) String approvalStatus, + public AjaxResult page(@RequestParam(required = false) String approvalStatus, @RequestParam(required = false) String bloodComponent, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize) { - return AjaxResult.success(appService.page(patientName, approvalStatus, bloodComponent, pageNum, pageSize)); + return AjaxResult.success(appService.page(approvalStatus, bloodComponent, pageNum, pageSize)); } @Operation(summary = "审批输血") @PreAuthorize("@ss.hasPermi('inpatient:bloodtransfusion:edit')") @PutMapping("/approve/{id}") public AjaxResult approve(@PathVariable Long id, @RequestParam String approvalStatus, - @RequestParam(required = false) String approverName, - @RequestParam(required = false) String remark) { - appService.approve(id, approvalStatus, approverName, remark); + @RequestParam(required = false) String approverName) { + appService.approve(id, approvalStatus, approverName); return AjaxResult.success(); } @Operation(summary = "输血观察记录") diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V2026_0618__blood_transfusion.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V57__blood_transfusion.sql similarity index 95% rename from healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V2026_0618__blood_transfusion.sql rename to healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V57__blood_transfusion.sql index 9fbf67378..9cd3f06d9 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V2026_0618__blood_transfusion.sql +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V57__blood_transfusion.sql @@ -25,6 +25,7 @@ CREATE TABLE blood_transfusion_record ( adverse_reaction TEXT, adverse_reaction_type VARCHAR(50), status VARCHAR(20) DEFAULT 'DRAFT', + tenant_id INTEGER DEFAULT 0, del_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, create_by VARCHAR(64), @@ -45,6 +46,7 @@ CREATE TABLE blood_transfusion_observation ( symptoms TEXT, nurse_id BIGINT, nurse_name VARCHAR(50), + tenant_id INTEGER DEFAULT 0, del_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, create_by VARCHAR(64) From 815b80437e4031a65fefe0ac05f61881d280d842 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:12:41 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat(clinical-pathway):=20=E4=B8=B4?= =?UTF-8?q?=E5=BA=8A=E8=B7=AF=E5=BE=84=E6=89=A7=E8=A1=8C=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IClinicalPathwayAppService.java | 17 + .../impl/ClinicalPathwayAppServiceImpl.java | 178 +++++++ .../controller/ClinicalPathwayController.java | 49 +- .../V58__clinical_pathway_variance.sql | 21 + .../domain/ClinicalPathwayVariance.java | 12 + .../mapper/ClinicalPathwayVarianceMapper.java | 6 + .../IClinicalPathwayVarianceService.java | 4 + .../ClinicalPathwayVarianceServiceImpl.java | 8 + healthlink-his-ui/src/api/clinicalPathway.js | 37 ++ .../views/inpatientDoctor/ClinicalPathway.vue | 472 ++++++++++++++++++ 10 files changed, 803 insertions(+), 1 deletion(-) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/IClinicalPathwayAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/impl/ClinicalPathwayAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/domain/ClinicalPathwayVariance.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/mapper/ClinicalPathwayVarianceMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/IClinicalPathwayVarianceService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/impl/ClinicalPathwayVarianceServiceImpl.java create mode 100644 healthlink-his-ui/src/api/clinicalPathway.js create mode 100644 healthlink-his-ui/src/views/inpatientDoctor/ClinicalPathway.vue diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/IClinicalPathwayAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/IClinicalPathwayAppService.java new file mode 100644 index 000000000..07d5ee99d --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/IClinicalPathwayAppService.java @@ -0,0 +1,17 @@ +package com.healthlink.his.web.clinical.appservice; +import com.healthlink.his.clinical.domain.ClinicalPathway; +import com.healthlink.his.clinical.domain.ClinicalPathwayExecution; +import com.healthlink.his.clinical.domain.ClinicalPathwayVariance; +import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.Map; +public interface IClinicalPathwayAppService { + Map evaluate(Long encounterId); + void admit(ClinicalPathwayExecution execution); + void recordExecution(ClinicalPathwayExecution execution); + void recordVariance(ClinicalPathwayVariance variance); + void discharge(Long executionId); + Map getStatistics(String startDate, String endDate); + IPage page(String diseaseCode, Integer pageNo, Integer pageSize); + void add(ClinicalPathway pathway); + IPage> getExecutionPage(Long pathwayId, Integer pageNo, Integer pageSize); +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/impl/ClinicalPathwayAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/impl/ClinicalPathwayAppServiceImpl.java new file mode 100644 index 000000000..e91a81625 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/appservice/impl/ClinicalPathwayAppServiceImpl.java @@ -0,0 +1,178 @@ +package com.healthlink.his.web.clinical.appservice.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.healthlink.his.clinical.domain.ClinicalPathway; +import com.healthlink.his.clinical.domain.ClinicalPathwayExecution; +import com.healthlink.his.clinical.domain.ClinicalPathwayVariance; +import com.healthlink.his.clinical.service.IClinicalPathwayService; +import com.healthlink.his.clinical.service.IClinicalPathwayExecutionService; +import com.healthlink.his.clinical.service.IClinicalPathwayVarianceService; +import com.healthlink.his.web.clinical.appservice.IClinicalPathwayAppService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.*; +@Service +public class ClinicalPathwayAppServiceImpl implements IClinicalPathwayAppService { + @Autowired + private IClinicalPathwayService pathwayService; + @Autowired + private IClinicalPathwayExecutionService executionService; + @Autowired + private IClinicalPathwayVarianceService varianceService; + @Override + public Map evaluate(Long encounterId) { + Map result = new LinkedHashMap<>(); + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(ClinicalPathwayExecution::getEncounterId, encounterId) + .eq(ClinicalPathwayExecution::getStatus, "IN_PATH"); + ClinicalPathwayExecution active = executionService.getOne(qw); + result.put("hasActivePathway", active != null); + if (active != null) { + result.put("activeExecution", active); + LambdaQueryWrapper pw = new LambdaQueryWrapper<>(); + pw.eq(ClinicalPathway::getId, active.getPathwayId()); + result.put("pathway", pathwayService.getOne(pw)); + } + LambdaQueryWrapper allQw = new LambdaQueryWrapper<>(); + allQw.eq(ClinicalPathwayExecution::getEncounterId, encounterId); + result.put("totalExecutions", executionService.count(allQw)); + return result; + } + @Override + @Transactional(rollbackFor = Exception.class) + public void admit(ClinicalPathwayExecution execution) { + execution.setStatus("IN_PATH"); + execution.setEnterDate(LocalDate.now()); + execution.setCreateTime(new Date()); + executionService.save(execution); + } + @Override + @Transactional(rollbackFor = Exception.class) + public void recordExecution(ClinicalPathwayExecution execution) { + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(ClinicalPathwayExecution::getEncounterId, execution.getEncounterId()) + .eq(ClinicalPathwayExecution::getStatus, "IN_PATH"); + ClinicalPathwayExecution existing = executionService.getOne(qw); + if (existing == null) { + throw new RuntimeException("当前无在径执行记录"); + } + if (execution.getActualDays() != null) { + existing.setActualDays(execution.getActualDays()); + } + if (execution.getActualCost() != null) { + existing.setActualCost(execution.getActualCost()); + } + existing.setUpdateTime(new Date()); + executionService.updateById(existing); + } + @Override + @Transactional(rollbackFor = Exception.class) + public void recordVariance(ClinicalPathwayVariance variance) { + variance.setCreateTime(new Date()); + varianceService.save(variance); + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(ClinicalPathwayExecution::getId, variance.getExecutionId()); + ClinicalPathwayExecution exec = executionService.getOne(qw); + if (exec != null) { + exec.setStatus("VARIATION"); + exec.setVariationReason(variance.getVarianceReason()); + exec.setUpdateTime(new Date()); + executionService.updateById(exec); + } + } + @Override + @Transactional(rollbackFor = Exception.class) + public void discharge(Long executionId) { + ClinicalPathwayExecution exec = executionService.getById(executionId); + if (exec == null) { + throw new RuntimeException("执行记录不存在"); + } + exec.setStatus("COMPLETED"); + exec.setCompleteDate(LocalDate.now()); + if (exec.getEnterDate() != null) { + long days = ChronoUnit.DAYS.between(exec.getEnterDate(), LocalDate.now()); + exec.setActualDays((int) days); + } + exec.setUpdateTime(new Date()); + executionService.updateById(exec); + } + @Override + public Map getStatistics(String startDate, String endDate) { + Map stats = new LinkedHashMap<>(); + stats.put("totalPathways", pathwayService.count()); + stats.put("totalExecutions", executionService.count()); + LambdaQueryWrapper inPathQw = new LambdaQueryWrapper<>(); + inPathQw.eq(ClinicalPathwayExecution::getStatus, "IN_PATH"); + stats.put("inPathCount", executionService.count(inPathQw)); + LambdaQueryWrapper completedQw = new LambdaQueryWrapper<>(); + completedQw.eq(ClinicalPathwayExecution::getStatus, "COMPLETED"); + stats.put("completedCount", executionService.count(completedQw)); + LambdaQueryWrapper variationQw = new LambdaQueryWrapper<>(); + variationQw.eq(ClinicalPathwayExecution::getStatus, "VARIATION"); + stats.put("variationCount", executionService.count(variationQw)); + LambdaQueryWrapper exitQw = new LambdaQueryWrapper<>(); + exitQw.eq(ClinicalPathwayExecution::getStatus, "EXIT"); + stats.put("exitCount", executionService.count(exitQw)); + long total = executionService.count(); + long completed = (long) stats.get("completedCount"); + stats.put("completionRate", total > 0 ? Math.round(completed * 100.0 / total) : 0); + stats.put("totalVariances", varianceService.count()); + return stats; + } + @Override + public IPage page(String diseaseCode, Integer pageNo, Integer pageSize) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(StringUtils.hasText(diseaseCode), ClinicalPathway::getDiseaseCode, diseaseCode) + .eq(ClinicalPathway::getStatus, "ACTIVE"); + return pathwayService.page(new Page<>(pageNo, pageSize), w); + } + @Override + @Transactional(rollbackFor = Exception.class) + public void add(ClinicalPathway pathway) { + pathway.setVersion(1); + pathway.setStatus("ACTIVE"); + pathway.setCreateTime(new Date()); + pathwayService.save(pathway); + } + @Override + public IPage> getExecutionPage(Long pathwayId, Integer pageNo, Integer pageSize) { + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(pathwayId != null, ClinicalPathwayExecution::getPathwayId, pathwayId) + .orderByDesc(ClinicalPathwayExecution::getCreateTime); + Page execPage = executionService.page(new Page<>(pageNo, pageSize), qw); + Page> result = new Page<>(execPage.getCurrent(), execPage.getSize(), execPage.getTotal()); + List> records = new ArrayList<>(); + for (ClinicalPathwayExecution exec : execPage.getRecords()) { + Map row = new LinkedHashMap<>(); + row.put("id", exec.getId()); + row.put("pathwayId", exec.getPathwayId()); + row.put("encounterId", exec.getEncounterId()); + row.put("patientId", exec.getPatientId()); + row.put("patientName", exec.getPatientName()); + row.put("enterDate", exec.getEnterDate()); + row.put("expectedDays", exec.getExpectedDays()); + row.put("actualDays", exec.getActualDays()); + row.put("expectedCost", exec.getExpectedCost()); + row.put("actualCost", exec.getActualCost()); + row.put("status", exec.getStatus()); + row.put("completeDate", exec.getCompleteDate()); + row.put("createTime", exec.getCreateTime()); + LambdaQueryWrapper pw = new LambdaQueryWrapper<>(); + pw.eq(ClinicalPathway::getId, exec.getPathwayId()); + ClinicalPathway pwObj = pathwayService.getOne(pw); + if (pwObj != null) { + row.put("pathwayName", pwObj.getPathwayName()); + row.put("diseaseCode", pwObj.getDiseaseCode()); + row.put("diseaseName", pwObj.getDiseaseName()); + } + records.add(row); + } + result.setRecords(records); + return result; + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java index ddacec21d..67c8a19d0 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java @@ -1,17 +1,23 @@ package com.healthlink.his.web.clinical.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.AjaxResult; import com.core.common.core.domain.R; import com.healthlink.his.clinical.domain.*; import com.healthlink.his.clinical.service.*; +import com.healthlink.his.web.clinical.appservice.IClinicalPathwayAppService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor;import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils;import org.springframework.web.bind.annotation.*; import java.util.*; -@RestController @RequestMapping("/clinical-pathway") @Slf4j @AllArgsConstructor +@Tag(name = "临床路径管理") @RestController @RequestMapping("/clinical-pathway") @Slf4j @AllArgsConstructor public class ClinicalPathwayController { private final IClinicalPathwayService pathwayService; private final IClinicalPathwayExecutionService executionService; + private final IClinicalPathwayAppService clinicalPathwayAppService; @GetMapping("/page") public R getPage(@RequestParam(value="diseaseCode",required=false) String diseaseCode, @RequestParam(value="pageNo",defaultValue="1") Integer pageNo, @@ -59,4 +65,45 @@ public class ClinicalPathwayController { stats.put("completionRate", total > 0 ? Math.round(completed * 100.0 / total) : 0); return R.ok(stats); } + @Operation(summary = "入径评估") + @PreAuthorize("@ss.hasPermi('inpatient:clinical:list')") + @GetMapping("/evaluate/{encounterId}") + public AjaxResult evaluate(@PathVariable Long encounterId) { + return AjaxResult.success(clinicalPathwayAppService.evaluate(encounterId)); + } + @Operation(summary = "入径") + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") + @PostMapping("/admission") + public AjaxResult admission(@RequestBody ClinicalPathwayExecution execution) { + clinicalPathwayAppService.admit(execution); + return AjaxResult.success(); + } + @Operation(summary = "执行记录") + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") + @PostMapping("/execution/record") + public AjaxResult executionRecord(@RequestBody ClinicalPathwayExecution execution) { + clinicalPathwayAppService.recordExecution(execution); + return AjaxResult.success(); + } + @Operation(summary = "变异记录") + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") + @PostMapping("/variance/record") + public AjaxResult varianceRecord(@RequestBody ClinicalPathwayVariance variance) { + clinicalPathwayAppService.recordVariance(variance); + return AjaxResult.success(); + } + @Operation(summary = "出径") + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") + @PostMapping("/discharge") + public AjaxResult discharge(@RequestParam Long executionId) { + clinicalPathwayAppService.discharge(executionId); + return AjaxResult.success(); + } + @Operation(summary = "路径统计") + @PreAuthorize("@ss.hasPermi('inpatient:clinical:list')") + @GetMapping("/statistics") + public AjaxResult statistics(@RequestParam(required = false) String startDate, + @RequestParam(required = false) String endDate) { + return AjaxResult.success(clinicalPathwayAppService.getStatistics(startDate, endDate)); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql new file mode 100644 index 000000000..3c8ff9d16 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql @@ -0,0 +1,21 @@ +CREATE TABLE IF NOT EXISTS clinical_pathway_variance ( + id BIGSERIAL PRIMARY KEY, + execution_id BIGINT NOT NULL, + pathway_id BIGINT NOT NULL, + variance_date DATE NOT NULL, + variance_type VARCHAR(20) NOT NULL, + expected_item VARCHAR(200), + actual_item VARCHAR(200), + variance_reason TEXT, + adjustment_action TEXT, + record_by BIGINT, + record_by_name VARCHAR(50), + tenant_id INTEGER DEFAULT 0, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +CREATE INDEX IF NOT EXISTS idx_cpv_execution ON clinical_pathway_variance(execution_id); +CREATE INDEX IF NOT EXISTS idx_cpv_pathway ON clinical_pathway_variance(pathway_id); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/domain/ClinicalPathwayVariance.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/domain/ClinicalPathwayVariance.java new file mode 100644 index 000000000..8d0126fa2 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/domain/ClinicalPathwayVariance.java @@ -0,0 +1,12 @@ +package com.healthlink.his.clinical.domain; +import com.baomidou.mybatisplus.annotation.*;import com.core.common.core.domain.HisBaseEntity; +import lombok.Data;import lombok.EqualsAndHashCode; +import java.time.LocalDate; +@Data @EqualsAndHashCode(callSuper=true) @TableName("clinical_pathway_variance") +public class ClinicalPathwayVariance extends HisBaseEntity { + @TableId(value="id",type=IdType.ASSIGN_ID) private Long id; + private Long executionId; private Long pathwayId; private LocalDate varianceDate; + private String varianceType; private String expectedItem; private String actualItem; + private String varianceReason; private String adjustmentAction; + private Long recordBy; private String recordByName; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/mapper/ClinicalPathwayVarianceMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/mapper/ClinicalPathwayVarianceMapper.java new file mode 100644 index 000000000..2ffe26351 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/mapper/ClinicalPathwayVarianceMapper.java @@ -0,0 +1,6 @@ +package com.healthlink.his.clinical.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.clinical.domain.ClinicalPathwayVariance; +import org.apache.ibatis.annotations.Mapper; +@Mapper +public interface ClinicalPathwayVarianceMapper extends BaseMapper {} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/IClinicalPathwayVarianceService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/IClinicalPathwayVarianceService.java new file mode 100644 index 000000000..88d303770 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/IClinicalPathwayVarianceService.java @@ -0,0 +1,4 @@ +package com.healthlink.his.clinical.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.clinical.domain.ClinicalPathwayVariance; +public interface IClinicalPathwayVarianceService extends IService {} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/impl/ClinicalPathwayVarianceServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/impl/ClinicalPathwayVarianceServiceImpl.java new file mode 100644 index 000000000..7b4501015 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/clinical/service/impl/ClinicalPathwayVarianceServiceImpl.java @@ -0,0 +1,8 @@ +package com.healthlink.his.clinical.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.clinical.domain.ClinicalPathwayVariance; +import com.healthlink.his.clinical.mapper.ClinicalPathwayVarianceMapper; +import com.healthlink.his.clinical.service.IClinicalPathwayVarianceService; +import org.springframework.stereotype.Service; +@Service +public class ClinicalPathwayVarianceServiceImpl extends ServiceImpl implements IClinicalPathwayVarianceService {} diff --git a/healthlink-his-ui/src/api/clinicalPathway.js b/healthlink-his-ui/src/api/clinicalPathway.js new file mode 100644 index 000000000..de101f662 --- /dev/null +++ b/healthlink-his-ui/src/api/clinicalPathway.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +export function evaluatePathway(encounterId) { + return request({ url: '/clinical-pathway/evaluate/' + encounterId, method: 'get' }) +} + +export function admitPathway(data) { + return request({ url: '/clinical-pathway/admission', method: 'post', data: data }) +} + +export function recordExecution(data) { + return request({ url: '/clinical-pathway/execution/record', method: 'post', data: data }) +} + +export function recordVariance(data) { + return request({ url: '/clinical-pathway/variance/record', method: 'post', data: data }) +} + +export function dischargePathway(executionId) { + return request({ url: '/clinical-pathway/discharge', method: 'post', params: { executionId: executionId } }) +} + +export function getPathwayStatistics(params) { + return request({ url: '/clinical-pathway/statistics', method: 'get', params: params }) +} + +export function getPathwayPage(params) { + return request({ url: '/clinical-pathway/page', method: 'get', params: params }) +} + +export function addPathway(data) { + return request({ url: '/clinical-pathway/add', method: 'post', data: data }) +} + +export function getExecutionPage(params) { + return request({ url: '/clinical-pathway/execution/page', method: 'get', params: params }) +} diff --git a/healthlink-his-ui/src/views/inpatientDoctor/ClinicalPathway.vue b/healthlink-his-ui/src/views/inpatientDoctor/ClinicalPathway.vue new file mode 100644 index 000000000..d25406a83 --- /dev/null +++ b/healthlink-his-ui/src/views/inpatientDoctor/ClinicalPathway.vue @@ -0,0 +1,472 @@ + + + + + From f79c5a2c2623ba9103aae792eac4b8cf9b7feeff Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:20:11 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix(clinical-pathway):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?P0=E9=97=AE=E9=A2=98=20-=20delete=5Fflag/=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=8E=A7=E5=88=B6/=E7=BC=BA=E5=A4=B1=E7=AB=AF=E7=82=B9/tenant?= =?UTF-8?q?=5Fid=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ClinicalPathwayController.java | 14 ++++++++++++++ .../migration/V58__clinical_pathway_variance.sql | 4 ++-- ...__fix_clinical_pathway_variance_delete_flag.sql | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V59__fix_clinical_pathway_variance_delete_flag.sql diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java index 67c8a19d0..4fa0ec277 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/clinical/controller/ClinicalPathwayController.java @@ -18,6 +18,7 @@ public class ClinicalPathwayController { private final IClinicalPathwayService pathwayService; private final IClinicalPathwayExecutionService executionService; private final IClinicalPathwayAppService clinicalPathwayAppService; + @PreAuthorize("@ss.hasPermi('inpatient:clinical:list')") @GetMapping("/page") public R getPage(@RequestParam(value="diseaseCode",required=false) String diseaseCode, @RequestParam(value="pageNo",defaultValue="1") Integer pageNo, @@ -27,13 +28,16 @@ public class ClinicalPathwayController { .eq(ClinicalPathway::getStatus, "ACTIVE"); return R.ok(pathwayService.page(new Page<>(pageNo, pageSize), w)); } + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") @PostMapping("/add") @Transactional(rollbackFor=Exception.class) public R add(@RequestBody ClinicalPathway p) { p.setVersion(1); p.setStatus("ACTIVE"); p.setCreateTime(new Date()); pathwayService.save(p); return R.ok(p); } + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") @PostMapping("/enter") @Transactional(rollbackFor=Exception.class) public R enterPathway(@RequestBody ClinicalPathwayExecution e) { e.setStatus("IN_PATH"); e.setEnterDate(java.time.LocalDate.now()); e.setCreateTime(new Date()); executionService.save(e); return R.ok(e); } + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") @PutMapping("/complete/{id}") @Transactional(rollbackFor=Exception.class) public R completePathway(@PathVariable Long id) { LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); @@ -42,6 +46,7 @@ public class ClinicalPathwayController { e.setStatus("COMPLETED"); e.setCompleteDate(java.time.LocalDate.now()); executionService.updateById(e); return R.ok(); } + @PreAuthorize("@ss.hasPermi('inpatient:clinical:edit')") @PutMapping("/vary/{id}") @Transactional(rollbackFor=Exception.class) public R varyPathway(@PathVariable Long id, @RequestParam("reason") String reason) { LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); @@ -49,6 +54,7 @@ public class ClinicalPathwayController { ClinicalPathwayExecution e = executionService.getOne(qw); if (e == null) return R.fail("执行记录不存在"); e.setStatus("VARIATION"); e.setVariationReason(reason); executionService.updateById(e); return R.ok(); } + @PreAuthorize("@ss.hasPermi('inpatient:clinical:list')") @GetMapping("/stats") public R getStats() { Map stats = new HashMap<>(); @@ -106,4 +112,12 @@ public class ClinicalPathwayController { @RequestParam(required = false) String endDate) { return AjaxResult.success(clinicalPathwayAppService.getStatistics(startDate, endDate)); } + @Operation(summary = "执行记录分页") + @PreAuthorize("@ss.hasPermi('inpatient:clinical:list')") + @GetMapping("/execution/page") + public AjaxResult getExecutionPage(@RequestParam(required = false) Long pathwayId, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) { + return AjaxResult.success(clinicalPathwayAppService.getExecutionPage(pathwayId, pageNo, pageSize)); + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql index 3c8ff9d16..4642004e2 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V58__clinical_pathway_variance.sql @@ -10,8 +10,8 @@ CREATE TABLE IF NOT EXISTS clinical_pathway_variance ( adjustment_action TEXT, record_by BIGINT, record_by_name VARCHAR(50), - tenant_id INTEGER DEFAULT 0, - del_flag CHAR(1) DEFAULT '0', + tenant_id BIGINT DEFAULT 0, + delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, create_by VARCHAR(64), update_time TIMESTAMP, diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V59__fix_clinical_pathway_variance_delete_flag.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V59__fix_clinical_pathway_variance_delete_flag.sql new file mode 100644 index 000000000..52432ae42 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V59__fix_clinical_pathway_variance_delete_flag.sql @@ -0,0 +1,2 @@ +ALTER TABLE clinical_pathway_variance RENAME COLUMN del_flag TO delete_flag; +ALTER TABLE clinical_pathway_variance ALTER COLUMN tenant_id SET DATA TYPE BIGINT; From fc892e96dc0123baa2eb2bd02ebbbe27fdcc748f Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:25:27 +0800 Subject: [PATCH 4/5] =?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 @@ + + + + + From e8356f5f83f719933b276addcaa73b6652dcc700 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 12:30:07 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix(critical-value):=20=E4=BF=AE=E5=A4=8Dha?= =?UTF-8?q?ndler=5Fid=E7=BA=A6=E6=9D=9F+=E8=A1=A5=E5=85=A8update=5Ftime/up?= =?UTF-8?q?date=5Fby=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appservice/impl/CriticalValueAppServiceImpl.java | 5 +++++ .../db/migration/V60__critical_value_handle_record.sql | 6 ++++-- .../V61__fix_critical_value_handle_record_columns.sql | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V61__fix_critical_value_handle_record_columns.sql 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 8b75cfca6..9427a138d 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 @@ -5,6 +5,7 @@ import com.healthlink.his.criticalvalue.service.ICriticalValueHandleRecordServic import com.healthlink.his.criticalvalue.service.ICriticalValueService; import com.healthlink.his.web.criticalvalue.appservice.ICriticalValueAppService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -86,6 +87,10 @@ public class CriticalValueAppServiceImpl implements ICriticalValueAppService { @Override @Transactional(rollbackFor = Exception.class) public void handleCriticalValue(CriticalValueHandleRecord record) { + Long userId = SecurityUtils.getUserId(); + String username = SecurityUtils.getLoginUser().getUsername(); + record.setHandlerId(userId); + record.setHandlerName(username); record.setHandleTime(new Date()); handleRecordService.save(record); if ("HANDLE".equals(record.getHandleType())) { 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 index c76215376..820c01f80 100644 --- 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 @@ -4,7 +4,7 @@ CREATE TABLE critical_value_handle_record ( encounter_id BIGINT NOT NULL, patient_id BIGINT NOT NULL, handle_type VARCHAR(20) NOT NULL, - handler_id BIGINT NOT NULL, + handler_id BIGINT, handler_name VARCHAR(50), handle_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, handle_result TEXT, @@ -15,7 +15,9 @@ CREATE TABLE critical_value_handle_record ( tenant_id BIGINT DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - create_by VARCHAR(64) + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) ); COMMENT ON TABLE critical_value_handle_record IS '危急值处理记录'; COMMENT ON COLUMN critical_value_handle_record.handle_type IS '处理类型: HANDLE-处理 REVIEW-复查 CONFIRM-确认'; diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V61__fix_critical_value_handle_record_columns.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V61__fix_critical_value_handle_record_columns.sql new file mode 100644 index 000000000..fd4f2ac87 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V61__fix_critical_value_handle_record_columns.sql @@ -0,0 +1,3 @@ +ALTER TABLE critical_value_handle_record ALTER COLUMN handler_id DROP NOT NULL; +ALTER TABLE critical_value_handle_record ADD COLUMN update_time TIMESTAMP; +ALTER TABLE critical_value_handle_record ADD COLUMN update_by VARCHAR(64);