diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/appservice/IEmrRevisionAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/appservice/IEmrRevisionAppService.java new file mode 100644 index 000000000..e13489d18 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/appservice/IEmrRevisionAppService.java @@ -0,0 +1,14 @@ +package com.healthlink.his.web.emr.appservice; + +import com.healthlink.his.emr.domain.EmrRevision; + +import java.util.List; + +public interface IEmrRevisionAppService { + + EmrRevision recordRevision(EmrRevision revision); + + List getRevisions(Long emrId); + + EmrRevision getRevisionDetail(Long id); +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/appservice/impl/EmrRevisionAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/appservice/impl/EmrRevisionAppServiceImpl.java new file mode 100644 index 000000000..a37c5f195 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/appservice/impl/EmrRevisionAppServiceImpl.java @@ -0,0 +1,43 @@ +package com.healthlink.his.web.emr.appservice.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.healthlink.his.emr.domain.EmrRevision; +import com.healthlink.his.emr.service.IEmrRevisionService; +import com.healthlink.his.web.emr.appservice.IEmrRevisionAppService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +@Service +public class EmrRevisionAppServiceImpl implements IEmrRevisionAppService { + + @Resource + private IEmrRevisionService emrRevisionService; + + @Override + @Transactional(rollbackFor = Exception.class) + public EmrRevision recordRevision(EmrRevision revision) { + EmrRevision latest = emrRevisionService.selectLatest(revision.getEmrId()); + int nextNumber = (latest != null) ? latest.getRevisionNumber() + 1 : 1; + revision.setRevisionNumber(nextNumber); + if (revision.getEncounterId() == null && latest != null) { + revision.setEncounterId(latest.getEncounterId()); + } + revision.setCreateTime(new Date()); + emrRevisionService.save(revision); + return revision; + } + + @Override + public List getRevisions(Long emrId) { + return emrRevisionService.selectByEmrId(emrId); + } + + @Override + public EmrRevision getRevisionDetail(Long id) { + return emrRevisionService.getById(id); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrRevisionController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrRevisionController.java index a72bf7b41..dac0678a4 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrRevisionController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrRevisionController.java @@ -5,26 +5,47 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.healthlink.his.emr.domain.EmrRevision; import com.healthlink.his.emr.service.IEmrRevisionService; +import com.healthlink.his.web.emr.appservice.IEmrRevisionAppService; +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.transaction.annotation.Transactional; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import java.util.Date; import java.util.Map; /** * 病历修改留痕 Controller */ @RestController -@RequestMapping("/emr-revision") +@RequestMapping("/emr/revision") @Slf4j @AllArgsConstructor +@Tag(name = "病历修改留痕") public class EmrRevisionController { private final IEmrRevisionService revisionService; + private final IEmrRevisionAppService emrRevisionAppService; + + @PostMapping("/record") + @PreAuthorize("@ss.hasPermi('inpatient:emr:edit')") + @Operation(summary = "记录修改留痕") + public R recordRevision(@RequestBody EmrRevision revision) { + return R.ok(emrRevisionAppService.recordRevision(revision)); + } + + @GetMapping("/list/{emrId}") + @PreAuthorize("@ss.hasPermi('inpatient:emr:list')") + @Operation(summary = "获取修改历史列表") + public R getRevisions(@PathVariable Long emrId) { + return R.ok(emrRevisionAppService.getRevisions(emrId)); + } + @GetMapping("/page") + @PreAuthorize("@ss.hasPermi('inpatient:emr:list')") + @Operation(summary = "分页查询修改留痕") public R getPage( @RequestParam(value = "emrId", required = false) Long emrId, @RequestParam(value = "encounterId", required = false) Long encounterId, @@ -39,35 +60,16 @@ public class EmrRevisionController { return R.ok(revisionService.page(new Page<>(pageNo, pageSize), w)); } - @GetMapping("/list") - public R getList(@RequestParam("emrId") Long emrId) { - LambdaQueryWrapper w = new LambdaQueryWrapper<>(); - w.eq(EmrRevision::getEmrId, emrId) - .orderByAsc(EmrRevision::getRevisionNumber); - return R.ok(revisionService.list(w)); - } - @GetMapping("/{id}") + @PreAuthorize("@ss.hasPermi('inpatient:emr:list')") + @Operation(summary = "获取修订详情") public R getById(@PathVariable Long id) { - return R.ok(revisionService.getById(id)); - } - - @PostMapping("/record") - @Transactional(rollbackFor = Exception.class) - public R recordRevision(@RequestBody EmrRevision revision) { - // 自动计算版本号 - LambdaQueryWrapper w = new LambdaQueryWrapper<>(); - w.eq(EmrRevision::getEmrId, revision.getEmrId()) - .orderByDesc(EmrRevision::getRevisionNumber) - .last("LIMIT 1"); - EmrRevision last = revisionService.getOne(w); - revision.setRevisionNumber(last == null ? 1 : last.getRevisionNumber() + 1); - revision.setCreateTime(new Date()); - revisionService.save(revision); - return R.ok(revision); + return R.ok(emrRevisionAppService.getRevisionDetail(id)); } @GetMapping("/compare") + @PreAuthorize("@ss.hasPermi('inpatient:emr:list')") + @Operation(summary = "对比两个修订版本") public R compareRevisions( @RequestParam("revisionId1") Long id1, @RequestParam("revisionId2") Long id2) { diff --git a/healthlink-his-ui/src/api/anesthesia.js b/healthlink-his-ui/src/api/anesthesia.js index 73a3aef09..69ac8662c 100644 --- a/healthlink-his-ui/src/api/anesthesia.js +++ b/healthlink-his-ui/src/api/anesthesia.js @@ -93,3 +93,11 @@ export function saveAnesSummary(data) { export function getAnesSummary(recordId) { return request({ url: '/api/v1/anesthesia/summary/' + recordId, method: 'get' }) } + +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/api/emr.js b/healthlink-his-ui/src/api/emr.js index 9c4c0c511..d25656c70 100644 --- a/healthlink-his-ui/src/api/emr.js +++ b/healthlink-his-ui/src/api/emr.js @@ -2,6 +2,10 @@ import request from "@/utils/request" export function getTimelinessByEncounter(encounterId) { return request({ url: "/emr-revision/timeliness/" + encounterId, method: "get" }) } export function getTimelinessStatistics(params) { return request({ url: "/emr-revision/statistics", method: "get", params }) } export function getPendingEmrCount(params) { return request({ url: "/emr-archive/pending-count", method: "get", params }) } - -// 查询超期病历列表 export function getOverdueList(params) { return request({ url: "/emr-archive/overdue/list", method: "get", params }) } + +export function recordEmrRevision(data) { return request({ url: "/emr/revision/record", method: "post", data }) } +export function getEmrRevisionList(emrId) { return request({ url: "/emr/revision/list/" + emrId, method: "get" }) } +export function getEmrRevisionPage(params) { return request({ url: "/emr/revision/page", method: "get", params }) } +export function getEmrRevisionDetail(id) { return request({ url: "/emr/revision/" + id, method: "get" }) } +export function compareEmrRevisions(id1, id2) { return request({ url: "/emr/revision/compare", method: "get", params: { revisionId1: id1, revisionId2: id2 } }) } diff --git a/healthlink-his-ui/src/api/emr/index.js b/healthlink-his-ui/src/api/emr/index.js index c814665a3..3a7487460 100644 --- a/healthlink-his-ui/src/api/emr/index.js +++ b/healthlink-his-ui/src/api/emr/index.js @@ -1,4 +1,5 @@ import request from '@/utils/request' + export function createRevision(data) { return request({ url: '/api/v1/emr/revision', method: 'post', data }) } export function getRevisionHistory(emrId) { return request({ url: '/api/v1/emr/revision/' + emrId, method: 'get' }) } export function executeCompletenessCheck(emrId) { return request({ url: '/api/v1/emr/completeness-check/' + emrId, method: 'post' }) } @@ -7,3 +8,9 @@ export function getTimelinessByEncounter(encounterId) { return request({ url: '/ export function getOverdueList() { return request({ url: '/api/v1/emr/timeliness/overdue', method: 'get' }) } export function getTimelinessStatistics(params) { return request({ url: '/api/v1/emr/timeliness/statistics', method: 'get', params }) } export function checkTimeliness(data) { return request({ url: '/api/v1/emr/timeliness/check', method: 'post', data }) } + +export function recordEmrRevision(data) { return request({ url: '/emr/revision/record', method: 'post', data }) } +export function getEmrRevisionList(emrId) { return request({ url: '/emr/revision/list/' + emrId, method: 'get' }) } +export function getEmrRevisionPage(params) { return request({ url: '/emr/revision/page', method: 'get', params }) } +export function getEmrRevisionDetail(id) { return request({ url: '/emr/revision/' + id, method: 'get' }) } +export function compareEmrRevisions(id1, id2) { return request({ url: '/emr/revision/compare', method: 'get', params: { revisionId1: id1, revisionId2: id2 } }) } diff --git a/healthlink-his-ui/src/views/inpatientDoctor/EmrRevisionTrack.vue b/healthlink-his-ui/src/views/inpatientDoctor/EmrRevisionTrack.vue new file mode 100644 index 000000000..e829a99e2 --- /dev/null +++ b/healthlink-his-ui/src/views/inpatientDoctor/EmrRevisionTrack.vue @@ -0,0 +1,277 @@ + + + + +