From 1a7092d2d8208d1907cddf8455dd0cd0735e8416 Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 17:52:28 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat(cdss):=20CDSS=E4=B8=B4=E5=BA=8A?= =?UTF-8?q?=E5=86=B3=E7=AD=96=E6=94=AF=E6=8C=81=E7=B3=BB=E7=BB=9F=20?= =?UTF-8?q?=E2=80=94=20=E4=BF=AE=E5=A4=8DAPI=E8=B7=AF=E5=BE=84+=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=A7=84=E5=88=99=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- healthlink-his-ui/src/api/cdss/cdssAlert.js | 6 +- healthlink-his-ui/src/api/cdss/cdssRule.js | 8 +- .../src/views/cdss/cdssRules/index.vue | 105 ++++++++++++++++++ 3 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 healthlink-his-ui/src/views/cdss/cdssRules/index.vue diff --git a/healthlink-his-ui/src/api/cdss/cdssAlert.js b/healthlink-his-ui/src/api/cdss/cdssAlert.js index 184f4cae8..2b9b6663f 100644 --- a/healthlink-his-ui/src/api/cdss/cdssAlert.js +++ b/healthlink-his-ui/src/api/cdss/cdssAlert.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function evaluateRules(params) { return request({ - url: '/cdss/evaluate', + url: '/infection/cdss/evaluate', method: 'post', params: params }) @@ -10,7 +10,7 @@ export function evaluateRules(params) { export function getAlerts(encounterId, query) { return request({ - url: '/cdss/alerts/' + encounterId, + url: '/infection/cdss/alerts/' + encounterId, method: 'get', params: query }) @@ -18,7 +18,7 @@ export function getAlerts(encounterId, query) { export function acknowledgeAlert(id, data) { return request({ - url: '/cdss/alerts/' + id + '/acknowledge', + url: '/infection/cdss/alerts/' + id + '/acknowledge', method: 'post', data: data }) diff --git a/healthlink-his-ui/src/api/cdss/cdssRule.js b/healthlink-his-ui/src/api/cdss/cdssRule.js index 46fe51d5e..a04af6619 100644 --- a/healthlink-his-ui/src/api/cdss/cdssRule.js +++ b/healthlink-his-ui/src/api/cdss/cdssRule.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function getCdssRuleList(query) { return request({ - url: '/cdss/rules', + url: '/infection/cdss/rules', method: 'get', params: query }) @@ -10,7 +10,7 @@ export function getCdssRuleList(query) { export function addCdssRule(data) { return request({ - url: '/cdss/rules', + url: '/infection/cdss/rules', method: 'post', data: data }) @@ -18,7 +18,7 @@ export function addCdssRule(data) { export function updateCdssRule(data) { return request({ - url: '/cdss/rules', + url: '/infection/cdss/rules', method: 'put', data: data }) @@ -26,7 +26,7 @@ export function updateCdssRule(data) { export function deleteCdssRule(id) { return request({ - url: '/cdss/rules/' + id, + url: '/infection/cdss/rules/' + id, method: 'delete' }) } diff --git a/healthlink-his-ui/src/views/cdss/cdssRules/index.vue b/healthlink-his-ui/src/views/cdss/cdssRules/index.vue new file mode 100644 index 000000000..e4eee98ed --- /dev/null +++ b/healthlink-his-ui/src/views/cdss/cdssRules/index.vue @@ -0,0 +1,105 @@ + + + From 9cfb7fcf78cf271058bc907edecd380599a25407 Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 18:41:06 +0800 Subject: [PATCH 02/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DDrgAnalysisContr?= =?UTF-8?q?oller=20bean=E5=86=B2=E7=AA=81+=E6=B7=BB=E5=8A=A0=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ller.java => MrHomepageDrgController.java} | 26 ++++++++++++++----- .../db/migration/V76__add_missing_menus.sql | 7 +++++ 2 files changed, 27 insertions(+), 6 deletions(-) rename healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/{DrgAnalysisController.java => MrHomepageDrgController.java} (63%) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V76__add_missing_menus.sql diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/DrgAnalysisController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHomepageDrgController.java similarity index 63% rename from healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/DrgAnalysisController.java rename to healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHomepageDrgController.java index 1d7bb0969..3dc26e910 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/DrgAnalysisController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/mrhomepage/controller/MrHomepageDrgController.java @@ -1,19 +1,33 @@ package com.healthlink.his.web.mrhomepage.controller; + import com.core.common.core.domain.R; import com.healthlink.his.mrhomepage.domain.MrDrgGrouping; import com.healthlink.his.mrhomepage.service.IMrDrgGroupingService; -import lombok.AllArgsConstructor;import lombok.extern.slf4j.Slf4j; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import java.math.BigDecimal;import java.util.*; -@RestController @RequestMapping("/drg-analysis") @Slf4j @AllArgsConstructor -public class DrgAnalysisController { + +import java.math.BigDecimal; +import java.util.*; + +@RestController +@RequestMapping("/mr-homepage/drg") +@Slf4j +@AllArgsConstructor +public class MrHomepageDrgController { + private final IMrDrgGroupingService drgService; + @GetMapping("/cost-efficiency") public R getCostEfficiency() { List all = drgService.list(); - BigDecimal totalCost = BigDecimal.ZERO; int count = 0; + BigDecimal totalCost = BigDecimal.ZERO; + int count = 0; for (MrDrgGrouping g : all) { - if (g.getTotalCost() != null) { totalCost = totalCost.add(g.getTotalCost()); count++; } + if (g.getTotalCost() != null) { + totalCost = totalCost.add(g.getTotalCost()); + count++; + } } Map result = new HashMap<>(); result.put("avgCost", count > 0 ? totalCost.divide(BigDecimal.valueOf(count), 2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO); diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V76__add_missing_menus.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V76__add_missing_menus.sql new file mode 100644 index 000000000..47d3a16ca --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V76__add_missing_menus.sql @@ -0,0 +1,7 @@ +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark, delete_flag) +VALUES +('CDSS', 10001, 10, 'cdss', 'cdss/cdssAlerts/index', NULL, 1, 0, 'C', '0', '0', 'infection:cdss:list', 'fa:', 'admin', CURRENT_TIMESTAMP, NULL, NULL, '临床决策支持', 0), +('区域共享', 20081, 10, 'regionalshare', 'esbmanage/regionalshare/index', NULL, 1, 0, 'C', '0', '0', 'infection:regional:list', 'fa:', 'admin', CURRENT_TIMESTAMP, NULL, NULL, '区域医疗信息共享', 0), +('EMR数据仓库', 20201, 10, 'data-warehouse', 'emr/data-warehouse/index', NULL, 1, 0, 'C', '0', '0', 'infection:emr:list', 'fa:', 'admin', CURRENT_TIMESTAMP, NULL, NULL, '病历数据仓库', 0), +('病案统计明细', 20051, 10, 'statistics-detail', 'mrhomepage/statistics-detail/index', NULL, 1, 0, 'C', '0', '0', 'infection:mrhomepage:list', 'fa:', 'admin', CURRENT_TIMESTAMP, NULL, NULL, '病案统计明细', 0), +('报表维度', 360, 10, 'ReportDimension', 'reportmanage/ReportDimension', NULL, 1, 0, 'C', '0', '0', 'infection:report:list', 'fa:', 'admin', CURRENT_TIMESTAMP, NULL, NULL, '报表维度', 0); From 424a99f4120eb6aaab54f163fe3d679a4364705f Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 18:50:42 +0800 Subject: [PATCH 03/11] =?UTF-8?q?fix(quality):=20=E4=BF=AE=E5=A4=8DEmrQual?= =?UTF-8?q?ityScoreMapper=20bean=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将quality包下的EmrQualityScoreMapper重命名为QualityScoreMapper, 避免与emr包下的EmrQualityScoreMapper产生Spring bean名冲突。 同步更新EmrQualityAppServiceImpl和TerminalQualityAppServiceImpl的引用。 --- .../web/quality/appservice/impl/EmrQualityAppServiceImpl.java | 2 +- .../appservice/impl/TerminalQualityAppServiceImpl.java | 4 ++-- .../{EmrQualityScoreMapper.java => QualityScoreMapper.java} | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/{EmrQualityScoreMapper.java => QualityScoreMapper.java} (70%) diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java index 7d537ffc7..cfa578f16 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java @@ -10,7 +10,7 @@ import java.util.*; import java.util.Date; @Service public class EmrQualityAppServiceImpl implements IEmrQualityAppService { - @Autowired private EmrQualityScoreMapper scoreMapper; + @Autowired private QualityScoreMapper scoreMapper; @Autowired private EmrDefectMapper defectMapper; @Override diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java index 0c2a603db..d76031f59 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java @@ -3,7 +3,7 @@ package com.healthlink.his.web.quality.appservice.impl; import com.healthlink.his.quality.domain.EmrDefect; import com.healthlink.his.quality.domain.EmrQualityScore; import com.healthlink.his.quality.mapper.EmrDefectMapper; -import com.healthlink.his.quality.mapper.EmrQualityScoreMapper; +import com.healthlink.his.quality.mapper.QualityScoreMapper; import com.healthlink.his.web.quality.appservice.ITerminalQualityAppService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.beans.factory.annotation.Autowired; @@ -16,7 +16,7 @@ import java.util.*; public class TerminalQualityAppServiceImpl implements ITerminalQualityAppService { @Autowired - private EmrQualityScoreMapper scoreMapper; + private QualityScoreMapper scoreMapper; @Autowired private EmrDefectMapper defectMapper; diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/EmrQualityScoreMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/QualityScoreMapper.java similarity index 70% rename from healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/EmrQualityScoreMapper.java rename to healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/QualityScoreMapper.java index 46a337123..80cf23aec 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/EmrQualityScoreMapper.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/QualityScoreMapper.java @@ -2,4 +2,4 @@ package com.healthlink.his.quality.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.healthlink.his.quality.domain.EmrQualityScore; import org.apache.ibatis.annotations.Mapper; -@Mapper public interface EmrQualityScoreMapper extends BaseMapper {} +@Mapper public interface QualityScoreMapper extends BaseMapper {} From 359afba793e4fffd08a4ea552cd13b51d8772a5b Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:03:38 +0800 Subject: [PATCH 04/11] =?UTF-8?q?fix(ui):=20=E4=BF=AE=E5=A4=8DEMR=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BB=93=E5=BA=93=E9=A1=B5=E9=9D=A2=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?API=E5=87=BD=E6=95=B0=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- healthlink-his-ui/src/api/emr.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/healthlink-his-ui/src/api/emr.js b/healthlink-his-ui/src/api/emr.js index feb01352e..2451ecd26 100644 --- a/healthlink-his-ui/src/api/emr.js +++ b/healthlink-his-ui/src/api/emr.js @@ -19,3 +19,8 @@ export function getCompletenessResults(emrId) { return request({ url: "/emr/comp export function checkTimeliness(encounterId) { return request({ url: "/emr/timeliness/check", method: "post", params: { encounterId } }) } export function getTimelinessAlerts(params) { return request({ url: "/emr/timeliness/alerts", method: "get", params }) } + +export function extractStructuredData(emrId) { return request({ url: "/emr/structured-data/extract/" + emrId, method: "post" }) } +export function getStructuredData(encounterId) { return request({ url: "/emr/structured-data/" + encounterId, method: "get" }) } +export function calculateQualityScore(encounterId) { return request({ url: "/emr/quality-score/calculate/" + encounterId, method: "post" }) } +export function getQualityScores(encounterId) { return request({ url: "/emr/quality-score/" + encounterId, method: "get" }) } From 0bb113557cc8512d7abc44aa974d0d8d743d016d Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:06:24 +0800 Subject: [PATCH 05/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DEmrQualityScore?= =?UTF-8?q?=E5=88=AB=E5=90=8D=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EmrQualityAppServiceImpl.java | 8 ++++---- .../impl/TerminalQualityAppServiceImpl.java | 16 ++++++++-------- .../{EmrQualityScore.java => QualityScore.java} | 4 ++-- .../his/quality/mapper/QualityScoreMapper.java | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) rename healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/domain/{EmrQualityScore.java => QualityScore.java} (93%) diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java index cfa578f16..7706214d8 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/EmrQualityAppServiceImpl.java @@ -1,6 +1,6 @@ package com.healthlink.his.web.quality.appservice.impl; import com.healthlink.his.quality.domain.EmrDefect; -import com.healthlink.his.quality.domain.EmrQualityScore; +import com.healthlink.his.quality.domain.QualityScore; import com.healthlink.his.quality.mapper.*; import com.healthlink.his.web.quality.appservice.IEmrQualityAppService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -43,9 +43,9 @@ public class EmrQualityAppServiceImpl implements IEmrQualityAppService { @Override public List> getQualityScores(Long encounterId) { List> scores = new ArrayList<>(); - List list = scoreMapper.selectList(new LambdaQueryWrapper() - .eq(EmrQualityScore::getEncounterId, encounterId).orderByDesc(EmrQualityScore::getCreateTime)); - for (EmrQualityScore s : list) { + List list = scoreMapper.selectList(new LambdaQueryWrapper() + .eq(QualityScore::getEncounterId, encounterId).orderByDesc(QualityScore::getCreateTime)); + for (QualityScore s : list) { Map m = new HashMap<>(); m.put("id", s.getId()); m.put("emrType", s.getEmrType()); m.put("score", s.getScore()); m.put("grade", s.getGrade()); m.put("checkType", s.getCheckType()); m.put("checkerName", s.getCheckerName()); diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java index d76031f59..b3b7b6453 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/appservice/impl/TerminalQualityAppServiceImpl.java @@ -1,7 +1,7 @@ package com.healthlink.his.web.quality.appservice.impl; import com.healthlink.his.quality.domain.EmrDefect; -import com.healthlink.his.quality.domain.EmrQualityScore; +import com.healthlink.his.quality.domain.QualityScore; import com.healthlink.his.quality.mapper.EmrDefectMapper; import com.healthlink.his.quality.mapper.QualityScoreMapper; import com.healthlink.his.web.quality.appservice.ITerminalQualityAppService; @@ -44,7 +44,7 @@ public class TerminalQualityAppServiceImpl implements ITerminalQualityAppService String grade = calculateGrade(score); // 保存评分记录 - EmrQualityScore qualityScore = new EmrQualityScore(); + QualityScore qualityScore = new QualityScore(); qualityScore.setEncounterId(encounterId); qualityScore.setScore(score); qualityScore.setMaxScore(new BigDecimal(100)); @@ -69,15 +69,15 @@ public class TerminalQualityAppServiceImpl implements ITerminalQualityAppService result.put("encounterId", encounterId); // 获取评分记录 - List scores = scoreMapper.selectList( - new LambdaQueryWrapper() - .eq(EmrQualityScore::getEncounterId, encounterId) - .eq(EmrQualityScore::getCheckType, "TERMINAL") - .orderByDesc(EmrQualityScore::getCreateTime) + List scores = scoreMapper.selectList( + new LambdaQueryWrapper() + .eq(QualityScore::getEncounterId, encounterId) + .eq(QualityScore::getCheckType, "TERMINAL") + .orderByDesc(QualityScore::getCreateTime) ); if (!scores.isEmpty()) { - EmrQualityScore latestScore = scores.get(0); + QualityScore latestScore = scores.get(0); result.put("score", latestScore.getScore()); result.put("grade", latestScore.getGrade()); result.put("checkTime", latestScore.getCreateTime()); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/domain/EmrQualityScore.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/domain/QualityScore.java similarity index 93% rename from healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/domain/EmrQualityScore.java rename to healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/domain/QualityScore.java index 895d0182a..83b16ecc1 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/domain/EmrQualityScore.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/domain/QualityScore.java @@ -6,9 +6,9 @@ import com.core.common.core.domain.HisBaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.math.BigDecimal; @Data @TableName("emr_quality_score") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -public class EmrQualityScore extends HisBaseEntity { +public class QualityScore extends HisBaseEntity { @TableId(type = IdType.ASSIGN_ID) private Long id; private Long encounterId; private Long patientId; private String emrType; private BigDecimal score; private BigDecimal maxScore; private String grade; private Long checkerId; private String checkerName; private String checkType; private String remark; private String delFlag; -} +} \ No newline at end of file diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/QualityScoreMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/QualityScoreMapper.java index 80cf23aec..27808bcd6 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/QualityScoreMapper.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/quality/mapper/QualityScoreMapper.java @@ -1,5 +1,5 @@ package com.healthlink.his.quality.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.healthlink.his.quality.domain.EmrQualityScore; +import com.healthlink.his.quality.domain.QualityScore; import org.apache.ibatis.annotations.Mapper; -@Mapper public interface QualityScoreMapper extends BaseMapper {} +@Mapper public interface QualityScoreMapper extends BaseMapper {} From 690f6808666b2e2aebda5c0a6180f86f184b52ca Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:20:58 +0800 Subject: [PATCH 06/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DFlyway=20V66?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{V66__update_menu_icons.sql => V77__update_menu_icons.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/{V66__update_menu_icons.sql => V77__update_menu_icons.sql} (100%) diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V66__update_menu_icons.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V77__update_menu_icons.sql similarity index 100% rename from healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V66__update_menu_icons.sql rename to healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V77__update_menu_icons.sql From 09dbd5e9f093e5c03fc3520390424d7a6644a4c1 Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:23:12 +0800 Subject: [PATCH 07/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DFlyway=20V68/V69?= =?UTF-8?q?/V75=E7=89=88=E6=9C=AC=E5=86=B2=E7=AA=81=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E4=B8=BAV78/V79/V80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{V68__tcm_diagnosis_table.sql => V78__tcm_diagnosis_table.sql} | 0 ...idemic_report_enhance.sql => V79__epidemic_report_enhance.sql} | 0 .../{V75__mr_stats_detail.sql => V80__mr_stats_detail.sql} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/{V68__tcm_diagnosis_table.sql => V78__tcm_diagnosis_table.sql} (100%) rename healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/{V69__epidemic_report_enhance.sql => V79__epidemic_report_enhance.sql} (100%) rename healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/{V75__mr_stats_detail.sql => V80__mr_stats_detail.sql} (100%) diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V68__tcm_diagnosis_table.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V78__tcm_diagnosis_table.sql similarity index 100% rename from healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V68__tcm_diagnosis_table.sql rename to healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V78__tcm_diagnosis_table.sql diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V69__epidemic_report_enhance.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V79__epidemic_report_enhance.sql similarity index 100% rename from healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V69__epidemic_report_enhance.sql rename to healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V79__epidemic_report_enhance.sql diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V75__mr_stats_detail.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V80__mr_stats_detail.sql similarity index 100% rename from healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V75__mr_stats_detail.sql rename to healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V80__mr_stats_detail.sql From 6a2a579fec40d36934470f10a0a748554ac0999f Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:29:39 +0800 Subject: [PATCH 08/11] =?UTF-8?q?refactor(infection):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?CDSS=E4=B8=B4=E5=BA=8A=E5=86=B3=E7=AD=96=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除CdssAppServiceImpl实现类及其接口ICdssAppService - 移除CdssController控制器及相关的API端点 - 删除BusinessAnalyticsController业务分析控制器 - 移除V71__cdss.sql数据库迁移脚本 - 清理所有与CDSS规则和告警相关的代码 --- .../infection/appservice/ICdssAppService.java | 14 --- .../appservice/impl/CdssAppServiceImpl.java | 104 ------------------ .../infection/controller/CdssController.java | 61 ---------- .../BusinessAnalyticsController.java | 62 ----------- .../main/resources/db/migration/V71__cdss.sql | 33 ------ 5 files changed, 274 deletions(-) delete mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/ICdssAppService.java delete mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/impl/CdssAppServiceImpl.java delete mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/controller/CdssController.java delete mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/BusinessAnalyticsController.java delete mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V71__cdss.sql diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/ICdssAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/ICdssAppService.java deleted file mode 100644 index 8502ed885..000000000 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/ICdssAppService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.healthlink.his.web.infection.appservice; - -import com.healthlink.his.infection.domain.CdssAlert; -import com.healthlink.his.infection.domain.CdssRule; - -import java.util.List; -import java.util.Map; - -public interface ICdssAppService { - Map evaluateRules(Long encounterId); - List getAlerts(Long encounterId); - boolean acknowledgeAlert(Long alertId); - List getRules(Map params); -} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/impl/CdssAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/impl/CdssAppServiceImpl.java deleted file mode 100644 index 85f2513ba..000000000 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/appservice/impl/CdssAppServiceImpl.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.healthlink.his.web.infection.appservice.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.healthlink.his.infection.domain.CdssAlert; -import com.healthlink.his.infection.domain.CdssRule; -import com.healthlink.his.infection.service.ICdssAlertService; -import com.healthlink.his.infection.service.ICdssRuleService; -import com.healthlink.his.web.infection.appservice.ICdssAppService; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import java.util.stream.Collectors; - -@Service -@Slf4j -@AllArgsConstructor -public class CdssAppServiceImpl implements ICdssAppService { - - private final ICdssRuleService cdssRuleService; - private final ICdssAlertService cdssAlertService; - - @Override - @Transactional(rollbackFor = Exception.class) - public Map evaluateRules(Long encounterId) { - log.info("CDSS规则评估开始, encounterId={}", encounterId); - - List enabledRules = cdssRuleService.list( - new LambdaQueryWrapper() - .eq(CdssRule::getEnabled, true) - ); - - List newAlerts = new ArrayList<>(); - for (CdssRule rule : enabledRules) { - CdssAlert alert = new CdssAlert(); - alert.setEncounterId(encounterId); - alert.setPatientId(0L); - alert.setRuleId(rule.getId()); - alert.setAlertType(rule.getRuleType()); - alert.setAlertMessage("[" + rule.getRuleName() + "] " + rule.getSuggestion()); - alert.setSeverity(rule.getSeverity()); - alert.setAcknowledged(false); - cdssAlertService.save(alert); - newAlerts.add(alert); - } - - Map result = new HashMap<>(); - result.put("totalRules", enabledRules.size()); - result.put("newAlertCount", newAlerts.size()); - result.put("newAlerts", newAlerts); - result.put("evaluateTime", new Date()); - - log.info("CDSS规则评估完成: {}条规则, 生成{}条告警", enabledRules.size(), newAlerts.size()); - return result; - } - - @Override - public List getAlerts(Long encounterId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(CdssAlert::getEncounterId, encounterId); - wrapper.orderByDesc(CdssAlert::getCreateTime); - return cdssAlertService.list(wrapper); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public boolean acknowledgeAlert(Long alertId) { - CdssAlert alert = cdssAlertService.getById(alertId); - if (alert == null) { - return false; - } - alert.setAcknowledged(true); - alert.setAcknowledgedTime(new Date()); - return cdssAlertService.updateById(alert); - } - - @Override - public List getRules(Map params) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - - String ruleType = getStr(params, "ruleType"); - if (ruleType != null && !ruleType.isEmpty()) { - wrapper.eq(CdssRule::getRuleType, ruleType); - } - String severity = getStr(params, "severity"); - if (severity != null && !severity.isEmpty()) { - wrapper.eq(CdssRule::getSeverity, severity); - } - String keyword = getStr(params, "keyword"); - if (keyword != null && !keyword.isEmpty()) { - wrapper.and(w -> w.like(CdssRule::getRuleName, keyword) - .or().like(CdssRule::getRuleCode, keyword)); - } - wrapper.orderByDesc(CdssRule::getCreateTime); - return cdssRuleService.list(wrapper); - } - - private String getStr(Map params, String key) { - Object v = params.get(key); - return v != null ? v.toString() : null; - } -} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/controller/CdssController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/controller/CdssController.java deleted file mode 100644 index b946a1f18..000000000 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/infection/controller/CdssController.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.healthlink.his.web.infection.controller; - -import com.core.common.core.domain.R; -import com.healthlink.his.infection.domain.CdssAlert; -import com.healthlink.his.infection.domain.CdssRule; -import com.healthlink.his.web.infection.appservice.ICdssAppService; -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.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -@Tag(name = "CDSS临床决策支持") -@RestController -@RequestMapping("/infection/cdss") -@Slf4j -@AllArgsConstructor -public class CdssController { - - private final ICdssAppService cdssAppService; - - @Operation(summary = "评估规则生成告警") - @PreAuthorize("@ss.hasPermi('infection:cdss:edit')") - @PostMapping("/evaluate") - public R evaluateRules(@RequestParam Long encounterId) { - log.info("CDSS规则评估, encounterId={}", encounterId); - return R.ok(cdssAppService.evaluateRules(encounterId)); - } - - @Operation(summary = "获取告警列表") - @PreAuthorize("@ss.hasPermi('infection:cdss:list')") - @GetMapping("/alerts/{encounterId}") - public R getAlerts(@PathVariable Long encounterId) { - return R.ok(cdssAppService.getAlerts(encounterId)); - } - - @Operation(summary = "确认告警") - @PreAuthorize("@ss.hasPermi('infection:cdss:edit')") - @PostMapping("/alerts/{id}/acknowledge") - public R acknowledgeAlert(@PathVariable Long id) { - return R.ok(cdssAppService.acknowledgeAlert(id)); - } - - @Operation(summary = "查询规则列表") - @PreAuthorize("@ss.hasPermi('infection:cdss:list')") - @GetMapping("/rules") - public R getRules( - @RequestParam(value = "ruleType", required = false) String ruleType, - @RequestParam(value = "severity", required = false) String severity, - @RequestParam(value = "keyword", required = false) String keyword) { - Map params = new java.util.HashMap<>(); - if (ruleType != null) params.put("ruleType", ruleType); - if (severity != null) params.put("severity", severity); - if (keyword != null) params.put("keyword", keyword); - return R.ok(cdssAppService.getRules(params)); - } -} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/BusinessAnalyticsController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/BusinessAnalyticsController.java deleted file mode 100644 index f4f0eab25..000000000 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/BusinessAnalyticsController.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.healthlink.his.web.quality.controller; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.core.common.core.domain.R; -import com.healthlink.his.quality.domain.BusinessAnalytics; -import com.healthlink.his.quality.service.IBusinessAnalyticsService; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; - -import java.math.BigDecimal; -import java.util.*; - -@RestController -@RequestMapping("/business-analytics") -@Slf4j -@AllArgsConstructor -public class BusinessAnalyticsController { - - private final IBusinessAnalyticsService analyticsService; - - @GetMapping("/page") - public R getPage( - @RequestParam(value = "departmentName", required = false) String deptName, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) { - LambdaQueryWrapper w = new LambdaQueryWrapper<>(); - w.like(StringUtils.hasText(deptName), BusinessAnalytics::getDepartmentName, deptName) - .orderByDesc(BusinessAnalytics::getStatDate); - return R.ok(analyticsService.page(new Page<>(pageNo, pageSize), w)); - } - - @PostMapping("/add") - @Transactional(rollbackFor = Exception.class) - public R add(@RequestBody BusinessAnalytics analytics) { - analytics.setCreateTime(new Date()); - analyticsService.save(analytics); - return R.ok(analytics); - } - - @GetMapping("/summary") - public R getSummary() { - Map summary = new HashMap<>(); - List list = analyticsService.list(); - BigDecimal totalRevenue = BigDecimal.ZERO, totalCost = BigDecimal.ZERO; - int totalPatients = 0; - for (BusinessAnalytics ba : list) { - totalRevenue = totalRevenue.add(ba.getRevenue() != null ? ba.getRevenue() : BigDecimal.ZERO); - totalCost = totalCost.add(ba.getCost() != null ? ba.getCost() : BigDecimal.ZERO); - totalPatients += ba.getPatientCount() != null ? ba.getPatientCount() : 0; - } - summary.put("totalRecords", list.size()); - summary.put("totalRevenue", totalRevenue); - summary.put("totalCost", totalCost); - summary.put("totalProfit", totalRevenue.subtract(totalCost)); - summary.put("totalPatients", totalPatients); - return R.ok(summary); - } -} diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V71__cdss.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V71__cdss.sql deleted file mode 100644 index d540c2d3f..000000000 --- a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V71__cdss.sql +++ /dev/null @@ -1,33 +0,0 @@ -CREATE TABLE cdss_rule ( - id BIGSERIAL PRIMARY KEY, - rule_code VARCHAR(32) NOT NULL, - rule_name VARCHAR(100) NOT NULL, - rule_type VARCHAR(20) NOT NULL, - condition_expr TEXT NOT NULL, - suggestion TEXT NOT NULL, - severity VARCHAR(16) DEFAULT 'INFO', - enabled BOOLEAN DEFAULT TRUE, - 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) -); - -CREATE TABLE cdss_alert ( - id BIGSERIAL PRIMARY KEY, - encounter_id BIGINT NOT NULL, - patient_id BIGINT NOT NULL, - rule_id BIGINT NOT NULL, - alert_type VARCHAR(20) NOT NULL, - alert_message TEXT NOT NULL, - severity VARCHAR(16) NOT NULL, - acknowledged BOOLEAN DEFAULT FALSE, - acknowledged_by BIGINT, - acknowledged_time TIMESTAMP, - tenant_id BIGINT DEFAULT 0, - delete_flag CHAR(1) DEFAULT '0', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - create_by VARCHAR(64) -); From 4b54b04bc137369af131194e34e795931721bb53 Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:29:55 +0800 Subject: [PATCH 09/11] =?UTF-8?q?remove(infection):=20=E5=88=A0=E9=99=A4CD?= =?UTF-8?q?SS=E7=9B=B8=E5=85=B3=E5=AE=9E=E4=BD=93=E5=92=8C=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除CdssAlert实体类及其对应的映射器和实现类 - 删除CdssRule实体类及其对应的映射器和实现类 - 移除ICdssAlertService和ICdssRuleService接口定义 - 清理infection模块中的临床决策支持系统相关代码结构 --- .../his/infection/domain/CdssAlert.java | 35 ------------------- .../his/infection/domain/CdssRule.java | 30 ---------------- .../his/infection/mapper/CdssAlertMapper.java | 9 ----- .../his/infection/mapper/CdssRuleMapper.java | 9 ----- .../infection/service/ICdssAlertService.java | 7 ---- .../infection/service/ICdssRuleService.java | 7 ---- .../service/impl/CdssAlertServiceImpl.java | 11 ------ .../service/impl/CdssRuleServiceImpl.java | 11 ------ 8 files changed, 119 deletions(-) delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssAlert.java delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssRule.java delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssAlertMapper.java delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssRuleMapper.java delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssAlertService.java delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssRuleService.java delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssAlertServiceImpl.java delete mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssRuleServiceImpl.java diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssAlert.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssAlert.java deleted file mode 100644 index 58c23f128..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssAlert.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.healthlink.his.infection.domain; - -import com.baomidou.mybatisplus.annotation.*; -import com.core.common.core.domain.HisBaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; - -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("cdss_alert") -public class CdssAlert extends HisBaseEntity { - @TableId(value = "id", type = IdType.ASSIGN_ID) - private Long id; - @TableField("encounter_id") - private Long encounterId; - @TableField("patient_id") - private Long patientId; - @TableField("rule_id") - private Long ruleId; - @TableField("alert_type") - private String alertType; - @TableField("alert_message") - private String alertMessage; - @TableField("severity") - private String severity; - @TableField("acknowledged") - private Boolean acknowledged; - @TableField("acknowledged_by") - private Long acknowledgedBy; - @TableField("acknowledged_time") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date acknowledgedTime; -} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssRule.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssRule.java deleted file mode 100644 index 0774ab288..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/domain/CdssRule.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.healthlink.his.infection.domain; - -import com.baomidou.mybatisplus.annotation.*; -import com.core.common.core.domain.HisBaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Date; - -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("cdss_rule") -public class CdssRule extends HisBaseEntity { - @TableId(value = "id", type = IdType.ASSIGN_ID) - private Long id; - @TableField("rule_code") - private String ruleCode; - @TableField("rule_name") - private String ruleName; - @TableField("rule_type") - private String ruleType; - @TableField("condition_expr") - private String conditionExpr; - @TableField("suggestion") - private String suggestion; - @TableField("severity") - private String severity; - @TableField("enabled") - private Boolean enabled; -} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssAlertMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssAlertMapper.java deleted file mode 100644 index 46e956005..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssAlertMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.healthlink.his.infection.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.healthlink.his.infection.domain.CdssAlert; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface CdssAlertMapper extends BaseMapper { -} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssRuleMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssRuleMapper.java deleted file mode 100644 index 44e5f66e3..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/mapper/CdssRuleMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.healthlink.his.infection.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.healthlink.his.infection.domain.CdssRule; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface CdssRuleMapper extends BaseMapper { -} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssAlertService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssAlertService.java deleted file mode 100644 index 2bdfdee86..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssAlertService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.healthlink.his.infection.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.healthlink.his.infection.domain.CdssAlert; - -public interface ICdssAlertService extends IService { -} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssRuleService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssRuleService.java deleted file mode 100644 index 4c8b8f104..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/ICdssRuleService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.healthlink.his.infection.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.healthlink.his.infection.domain.CdssRule; - -public interface ICdssRuleService extends IService { -} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssAlertServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssAlertServiceImpl.java deleted file mode 100644 index 75c38e3ff..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssAlertServiceImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.healthlink.his.infection.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.healthlink.his.infection.domain.CdssAlert; -import com.healthlink.his.infection.mapper.CdssAlertMapper; -import com.healthlink.his.infection.service.ICdssAlertService; -import org.springframework.stereotype.Service; - -@Service -public class CdssAlertServiceImpl extends ServiceImpl implements ICdssAlertService { -} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssRuleServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssRuleServiceImpl.java deleted file mode 100644 index ca45560aa..000000000 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/infection/service/impl/CdssRuleServiceImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.healthlink.his.infection.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.healthlink.his.infection.domain.CdssRule; -import com.healthlink.his.infection.mapper.CdssRuleMapper; -import com.healthlink.his.infection.service.ICdssRuleService; -import org.springframework.stereotype.Service; - -@Service -public class CdssRuleServiceImpl extends ServiceImpl implements ICdssRuleService { -} From 568b10829c1752e19c08150ba14caf054d6df6e3 Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:30:17 +0800 Subject: [PATCH 10/11] =?UTF-8?q?feat(quality):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=88=86=E6=9E=90=E6=8E=A7=E5=88=B6=E5=99=A8?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 QualityBusinessAnalyticsController 控制器类 - 实现分页查询业务分析数据接口 /page - 实现新增业务分析记录接口 /add - 实现业务统计数据汇总接口 /summary - 集成分页查询和条件筛选功能 - 添加事务管理确保数据一致性 --- .../QualityBusinessAnalyticsController.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/QualityBusinessAnalyticsController.java diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/QualityBusinessAnalyticsController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/QualityBusinessAnalyticsController.java new file mode 100644 index 000000000..6ff685f8b --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/quality/controller/QualityBusinessAnalyticsController.java @@ -0,0 +1,62 @@ +package com.healthlink.his.web.quality.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.healthlink.his.quality.domain.BusinessAnalytics; +import com.healthlink.his.quality.service.IBusinessAnalyticsService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.util.*; + +@RestController +@RequestMapping("/business-analytics") +@Slf4j +@AllArgsConstructor +public class QualityBusinessAnalyticsController { + + private final IBusinessAnalyticsService analyticsService; + + @GetMapping("/page") + public R getPage( + @RequestParam(value = "departmentName", required = false) String deptName, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.like(StringUtils.hasText(deptName), BusinessAnalytics::getDepartmentName, deptName) + .orderByDesc(BusinessAnalytics::getStatDate); + return R.ok(analyticsService.page(new Page<>(pageNo, pageSize), w)); + } + + @PostMapping("/add") + @Transactional(rollbackFor = Exception.class) + public R add(@RequestBody BusinessAnalytics analytics) { + analytics.setCreateTime(new Date()); + analyticsService.save(analytics); + return R.ok(analytics); + } + + @GetMapping("/summary") + public R getSummary() { + Map summary = new HashMap<>(); + List list = analyticsService.list(); + BigDecimal totalRevenue = BigDecimal.ZERO, totalCost = BigDecimal.ZERO; + int totalPatients = 0; + for (BusinessAnalytics ba : list) { + totalRevenue = totalRevenue.add(ba.getRevenue() != null ? ba.getRevenue() : BigDecimal.ZERO); + totalCost = totalCost.add(ba.getCost() != null ? ba.getCost() : BigDecimal.ZERO); + totalPatients += ba.getPatientCount() != null ? ba.getPatientCount() : 0; + } + summary.put("totalRecords", list.size()); + summary.put("totalRevenue", totalRevenue); + summary.put("totalCost", totalCost); + summary.put("totalProfit", totalRevenue.subtract(totalCost)); + summary.put("totalPatients", totalPatients); + return R.ok(summary); + } +} From b1e7d45416358056385ffcbdc9b3feefd101af40 Mon Sep 17 00:00:00 2001 From: chenqi Date: Thu, 18 Jun 2026 19:39:54 +0800 Subject: [PATCH 11/11] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3Git=E5=86=B2?= =?UTF-8?q?=E7=AA=81+=E4=BF=AE=E5=A4=8D=E8=8F=9C=E5=8D=95=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V81__fix_menu_permissions.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V81__fix_menu_permissions.sql diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V81__fix_menu_permissions.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V81__fix_menu_permissions.sql new file mode 100644 index 000000000..6d0ac524d --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V81__fix_menu_permissions.sql @@ -0,0 +1,11 @@ +UPDATE sys_menu SET perms = 'mrhomepage:mrhomepage:list' WHERE menu_name = '病案统计明细' AND perms = 'infection:mrhomepage:list'; +UPDATE sys_menu SET perms = 'reportmanage:report:list' WHERE menu_name = '报表维度' AND perms = 'infection:report:list'; + +INSERT INTO sys_role_menu (role_id, menu_id) VALUES +(1, (SELECT menu_id FROM sys_menu WHERE menu_name = 'CDSS告警' LIMIT 1)), +(1, (SELECT menu_id FROM sys_menu WHERE menu_name = 'CDSS规则' LIMIT 1)), +(1, (SELECT menu_id FROM sys_menu WHERE menu_name = '区域共享' LIMIT 1)), +(1, (SELECT menu_id FROM sys_menu WHERE menu_name = 'EMR数据仓库' LIMIT 1)), +(1, (SELECT menu_id FROM sys_menu WHERE menu_name = '病案统计明细' LIMIT 1)), +(1, (SELECT menu_id FROM sys_menu WHERE menu_name = '报表维度' LIMIT 1)) +ON CONFLICT DO NOTHING;