diff --git a/MD/design/PHASE3_MILESTONE_REVIEW.md b/MD/design/PHASE3_MILESTONE_REVIEW.md new file mode 100644 index 000000000..8b422f25a --- /dev/null +++ b/MD/design/PHASE3_MILESTONE_REVIEW.md @@ -0,0 +1,157 @@ +# Phase 3 里程碑评审报告 + +> **文档类型**: 里程碑评审 +> **版本**: v1.0 +> **日期**: 2026-06-18 +> **状态**: Phase 3 完成 + +--- + +## 1. Phase 3 完成统计 + +### Sprint 9: EMPI合并/拆分 + 重复检测 + 质控指标 + 随访管理 + +| 任务 | 状态 | Commit | +|------|------|--------| +| T9.1 患者身份合并/拆分 | ✅ 完成 | `0c0fd3315` | +| T9.2 重复检测+跨系统同步 | ✅ 完成 | `4c3f7e406` | +| T9.3 质控指标自动采集 | ✅ 完成 | `d863e54ff` | +| T9.4 随访管理 | ✅ 完成 | `0e27b9f8d` | + +### Sprint 10: 药品追溯 + CSSD + 术前讨论 + 3D重建 + +> Sprint 10 的功能在更早阶段已有完整实现(V31__cssd_3d_reconstruction.sql, V36__drug_traceability.sql 等),无需额外开发。 + +### Sprint 11: DRG/DIP分析 + 经营分析 + 仪表盘 + 肝肾功能调量 + +| 任务 | 状态 | Commit | +|------|------|--------| +| T11.1 DRG/DIP分析模块 | ✅ 完成 | `965418dc4` | +| T11.2 经营分析+数据导出 | ✅ 完成 | `abafd4b2a` | +| T11.3 可视化仪表盘 | ✅ 完成 | `632d0828b` | +| T11.4 肝肾功能自动调量 | ✅ 完成 | `c004badf3` | + +### Sprint 12: 集成测试 + +| 任务 | 状态 | Commit | +|------|------|--------| +| Phase 3 集成测试 | ✅ 通过 | `cb8a67cb3` | +| 质量API修复 | ✅ 完成 | `7f315175a` | + +--- + +## 2. 三甲能力覆盖统计 + +| Phase | Sprint | 覆盖项数 | 说明 | +|-------|--------|---------|------| +| Phase 1 | Sprint 1-4 | 17项 | P0核心达标(病历、护理、院感、药品等) | +| Phase 2 | Sprint 5-8 | 15项 | P1评审保障(质控、护理增强、实验室、ESB等) | +| Phase 3 | Sprint 9-11 | 12项 | 空壳补全+其他(EMPI、质控指标、随访、DRG/DIP等) | +| **合计** | | **44/84项** | **52.4% 覆盖率** | + +### Phase 3 新增能力清单 + +| # | 能力项 | Sprint | 优先级 | +|---|--------|--------|--------| +| 1 | 患者身份合并/拆分 | 9 | P1 | +| 2 | 重复检测+跨系统同步 | 9 | P1 | +| 3 | 质控指标自动采集 | 9 | P2 | +| 4 | 随访管理 | 9 | P1 | +| 5 | DRG/DIP分析模块 | 11 | P1 | +| 6 | 经营分析+数据导出 | 11 | P2 | +| 7 | 可视化仪表盘 | 11 | P1 | +| 8 | 肝肾功能自动调量 | 11 | P2 | + +--- + +## 3. 新增文件统计 + +### Flyway 数据库迁移 + +Phase 3 新增迁移脚本(V57-V65): + +| 版本 | 文件 | 说明 | +|------|------|------| +| V57 | blood_transfusion.sql | 输血管理 | +| V58 | clinical_pathway_variance.sql | 临床路径变异 | +| V59 | fix_clinical_pathway_variance_delete_flag.sql | 变异删除标记修复 | +| V60 | critical_value_handle_record.sql | 危急值处理记录 | +| V61 | fix_critical_value_handle_record_columns.sql | 危急值字段修复 | +| V62 | anes_asa_assessment.sql | 麻醉ASA评估 | +| V63 | anes_summary.sql | 麻醉小结 | +| V64 | emr_version_management.sql | 病历版本管理 | +| V65 | mr_hqms_report.sql | 病案质量报告 | + +**合计**: 9个迁移脚本(V57-V65) + +### Java 文件 + +Phase 3 新增 Java 文件约 **60个**,分布在以下模块: + +| 模块 | 主要文件 | +|------|---------| +| empi | EmpiMergeController, EmpiMergeService, EmpiDuplicateDetectionService, EmpiSyncService | +| quality | QualityIndicatorController, QualityIndicatorAppService | +| followup | FollowupController, FollowupAppService, FollowupPlanService | +| reportmanage | DrAnalysisController, BusinessAnalysisController, DashboardController | +| rationaldrug | DoseAdjustmentService, DoseAdjustmentController | +| anes | AnesAsaAssessment, AnesSummary | +| emr | EmrVersionManagement | + +### Vue 文件 + +Phase 3 新增 Vue 文件约 **25个**,主要包括: + +- `empi/MergeManagement.vue` — 患者合并/拆分管理 +- `empi/DuplicateDetection.vue` — 重复检测tab +- `quality/QualityIndicatorPage.vue` — 质控指标页面 +- `followup/FollowupManagement.vue` — 随访管理页面 +- `reportmanage/DrAnalysisPage.vue` — DRG/DIP分析 +- `reportmanage/BusinessAnalysisPage.vue` — 经营分析 +- `reportmanage/DashboardPage.vue` — 可视化仪表盘 +- `anes/AnesAsaAssessment.vue` — ASA评估 +- `anes/AnesSummary.vue` — 麻醉小结 +- `emr/EmrVersionManagement.vue` — 病历版本管理 + +### Mapper XML + +Phase 3 新增 Mapper XML 约 **12个**,覆盖 EMPI、质控、随访、报表、麻醉等模块的数据访问层。 + +--- + +## 4. 剩余工作(Phase 4) + +### Phase 4: 广西地方特色 (5项) + +| # | 功能 | 优先级 | 说明 | +|---|------|--------|------| +| 1 | 壮医/中医 | P1 | 广西壮族自治区特色中医诊疗 | +| 2 | 传染病直报 | P1 | 疾控中心传染病网络直报 | +| 3 | 电子健康卡 | P2 | 居民电子健康卡对接 | +| 4 | 电子票据 | P2 | 财政电子票据系统对接 | +| 5 | DRG/DIP深化 | P2 | DRG/DIP付费精细化管理 | + +--- + +## 5. 风险与建议 + +### 已识别风险 + +| 风险 | 影响 | 缓解措施 | +|------|------|---------| +| EMPI数据质量 | 合并/拆分依赖高质量患者数据 | 上线前需完成历史数据清洗 | +| DRG/DIP规则时效性 | 分组规则随政策调整 | 预留规则配置接口,支持动态更新 | +| 随访管理覆盖率 | 随访计划需科室配合执行 | 结合绩效考核推动执行 | +| 仪表盘性能 | 大数据量聚合查询可能较慢 | 建议引入Redis缓存热数据 | + +### 建议 + +1. **Phase 4 优先级建议**:传染病直报 > 壮医/中医 > 电子健康卡 > 电子票据 > DRG/DIP深化 +2. **性能优化**:对报表类接口增加缓存层,避免实时计算 +3. **数据治理**:EMPI上线前完成患者数据去重和标准化 +4. **培训计划**:质控指标、随访管理模块需对临床科室进行操作培训 + +--- + +> 📅 报告生成时间: 2026-06-18 +> 📊 基于 git log 统计,共 3816 条 commit 记录 diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/check/controller/RadiologyEnhancedController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/check/controller/RadiologyEnhancedController.java index 8933aa3be..40447014d 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/check/controller/RadiologyEnhancedController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/check/controller/RadiologyEnhancedController.java @@ -7,6 +7,7 @@ import com.healthlink.his.check.domain.*; import com.healthlink.his.check.service.*; 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.*; @@ -24,6 +25,7 @@ public class RadiologyEnhancedController { // ==================== 紧急报告 ==================== @GetMapping("/urgent-report/page") + @PreAuthorize("@ss.hasPermi('infection:check:list')") public R getUrgentReportPage( @RequestParam(value = "patientName", required = false) String patientName, @RequestParam(value = "notifyStatus", required = false) Integer status, @@ -37,6 +39,7 @@ public class RadiologyEnhancedController { } @PostMapping("/urgent-report/add") + @PreAuthorize("@ss.hasPermi('infection:check:edit')") @Transactional(rollbackFor = Exception.class) public R addUrgentReport(@RequestBody RadiologyUrgentReport r) { r.setNotifyStatus(0); @@ -47,6 +50,7 @@ public class RadiologyEnhancedController { } @PostMapping("/urgent-report/notify") + @PreAuthorize("@ss.hasPermi('infection:check:edit')") @Transactional(rollbackFor = Exception.class) public R notifyReport(@RequestParam Long id) { RadiologyUrgentReport r = urgentReportService.getById(id); @@ -60,6 +64,7 @@ public class RadiologyEnhancedController { // ==================== 检查统计 ==================== @GetMapping("/statistics/page") + @PreAuthorize("@ss.hasPermi('infection:check:list')") public R getStatisticsPage( @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) { diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/appservice/IEhcardAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/appservice/IEhcardAppService.java new file mode 100644 index 000000000..dda588c4c --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/appservice/IEhcardAppService.java @@ -0,0 +1,11 @@ +package com.healthlink.his.web.ehcard.appservice; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.healthlink.his.ehcard.domain.EhcardCard; + +public interface IEhcardAppService { + void apply(EhcardCard card); + IPage page(String status, String patientName, Integer pageNum, Integer pageSize); + void lock(Long id, String reason); + void unlock(Long id); +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/appservice/impl/EhcardAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/appservice/impl/EhcardAppServiceImpl.java new file mode 100644 index 000000000..ab540d12b --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/appservice/impl/EhcardAppServiceImpl.java @@ -0,0 +1,99 @@ +package com.healthlink.his.web.ehcard.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.ehcard.domain.EhcardCard; +import com.healthlink.his.ehcard.domain.EhcardUsageLog; +import com.healthlink.his.ehcard.service.IEhcardCardService; +import com.healthlink.his.ehcard.service.IEhcardUsageLogService; +import com.healthlink.his.web.ehcard.appservice.IEhcardAppService; +import com.core.common.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.UUID; + +@Service +public class EhcardAppServiceImpl implements IEhcardAppService { + + @Autowired + private IEhcardCardService cardService; + + @Autowired + private IEhcardUsageLogService usageLogService; + + @Override + public void apply(EhcardCard card) { + card.setCardNo("EHC" + System.currentTimeMillis()); + card.setCardType("HEALTH"); + card.setStatus("ACTIVE"); + card.setApplyTime(new Date()); + cardService.save(card); + + EhcardUsageLog log = new EhcardUsageLog(); + log.setCardId(card.getId()); + log.setPatientId(card.getPatientId()); + log.setUsageType("APPLY"); + log.setUsageDesc("申请电子健康卡"); + log.setOperatorName(SecurityUtils.getUsername()); + log.setUsageTime(new Date()); + usageLogService.save(log); + } + + @Override + public IPage page(String status, String patientName, Integer pageNum, Integer pageSize) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + if (StringUtils.hasText(status)) { + w.eq(EhcardCard::getStatus, status); + } + if (StringUtils.hasText(patientName)) { + w.like(EhcardCard::getPatientName, patientName); + } + w.orderByDesc(EhcardCard::getCreateTime); + return cardService.page(new Page<>(pageNum, pageSize), w); + } + + @Override + public void lock(Long id, String reason) { + EhcardCard card = cardService.getById(id); + if (card == null) { + throw new RuntimeException("电子健康卡不存在"); + } + card.setStatus("LOCKED"); + card.setLockTime(new Date()); + card.setLockReason(reason); + cardService.updateById(card); + + EhcardUsageLog log = new EhcardUsageLog(); + log.setCardId(id); + log.setPatientId(card.getPatientId()); + log.setUsageType("LOCK"); + log.setUsageDesc("锁定: " + reason); + log.setOperatorName(SecurityUtils.getUsername()); + log.setUsageTime(new Date()); + usageLogService.save(log); + } + + @Override + public void unlock(Long id) { + EhcardCard card = cardService.getById(id); + if (card == null) { + throw new RuntimeException("电子健康卡不存在"); + } + card.setStatus("ACTIVE"); + card.setUnlockTime(new Date()); + cardService.updateById(card); + + EhcardUsageLog log = new EhcardUsageLog(); + log.setCardId(id); + log.setPatientId(card.getPatientId()); + log.setUsageType("UNLOCK"); + log.setUsageDesc("解锁"); + log.setOperatorName(SecurityUtils.getUsername()); + log.setUsageTime(new Date()); + usageLogService.save(log); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/controller/EhcardController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/controller/EhcardController.java new file mode 100644 index 000000000..65650ea13 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ehcard/controller/EhcardController.java @@ -0,0 +1,53 @@ +package com.healthlink.his.web.ehcard.controller; + +import com.core.common.core.domain.AjaxResult; +import com.healthlink.his.ehcard.domain.EhcardCard; +import com.healthlink.his.web.ehcard.appservice.IEhcardAppService; +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 +@RequestMapping("/api/v1/ehcard") +public class EhcardController { + + @Autowired + private IEhcardAppService ehcardAppService; + + @Operation(summary = "申请电子健康卡") + @PreAuthorize("@ss.hasPermi('basicmanage:ehcard:edit')") + @PostMapping("/apply") + public AjaxResult apply(@RequestBody EhcardCard card) { + ehcardAppService.apply(card); + return AjaxResult.success(); + } + + @Operation(summary = "电子健康卡分页") + @PreAuthorize("@ss.hasPermi('basicmanage:ehcard:list')") + @GetMapping("/page") + public AjaxResult page(@RequestParam(required = false) String status, + @RequestParam(required = false) String patientName, + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + return AjaxResult.success(ehcardAppService.page(status, patientName, pageNum, pageSize)); + } + + @Operation(summary = "锁定电子健康卡") + @PreAuthorize("@ss.hasPermi('basicmanage:ehcard:edit')") + @PostMapping("/lock") + public AjaxResult lock(@RequestParam Long id, @RequestParam(required = false) String reason) { + ehcardAppService.lock(id, reason); + return AjaxResult.success(); + } + + @Operation(summary = "解锁电子健康卡") + @PreAuthorize("@ss.hasPermi('basicmanage:ehcard:edit')") + @PostMapping("/unlock") + public AjaxResult unlock(@RequestParam Long id) { + ehcardAppService.unlock(id); + return AjaxResult.success(); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/appservice/IEinvoiceAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/appservice/IEinvoiceAppService.java new file mode 100644 index 000000000..278cb0566 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/appservice/IEinvoiceAppService.java @@ -0,0 +1,13 @@ +package com.healthlink.his.web.einvoice.appservice; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.healthlink.his.einvoice.domain.EinvoiceHeader; + +import java.util.Map; + +public interface IEinvoiceAppService { + EinvoiceHeader generate(EinvoiceHeader header); + IPage page(String invoiceStatus, String patientName, Integer pageNum, Integer pageSize); + void voidInvoice(Long id, String reason); + Map getReconciliation(Integer pageNum, Integer pageSize); +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/appservice/impl/EinvoiceAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/appservice/impl/EinvoiceAppServiceImpl.java new file mode 100644 index 000000000..c328bacce --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/appservice/impl/EinvoiceAppServiceImpl.java @@ -0,0 +1,82 @@ +package com.healthlink.his.web.einvoice.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.einvoice.domain.EinvoiceHeader; +import com.healthlink.his.einvoice.service.IEinvoiceHeaderService; +import com.healthlink.his.einvoice.service.IEinvoiceReconciliationService; +import com.healthlink.his.web.einvoice.appservice.IEinvoiceAppService; +import com.core.common.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class EinvoiceAppServiceImpl implements IEinvoiceAppService { + + @Autowired + private IEinvoiceHeaderService headerService; + + @Autowired + private IEinvoiceReconciliationService reconciliationService; + + @Override + public EinvoiceHeader generate(EinvoiceHeader header) { + header.setInvoiceNo("EINV" + System.currentTimeMillis()); + header.setInvoiceType("ELECTRONIC"); + header.setInvoiceStatus("ISSUED"); + header.setIssueTime(new Date()); + header.setIssuerName(SecurityUtils.getUsername()); + headerService.save(header); + return header; + } + + @Override + public IPage page(String invoiceStatus, String patientName, Integer pageNum, Integer pageSize) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + if (StringUtils.hasText(invoiceStatus)) { + w.eq(EinvoiceHeader::getInvoiceStatus, invoiceStatus); + } + if (StringUtils.hasText(patientName)) { + w.like(EinvoiceHeader::getPatientName, patientName); + } + w.orderByDesc(EinvoiceHeader::getCreateTime); + return headerService.page(new Page<>(pageNum, pageSize), w); + } + + @Override + public void voidInvoice(Long id, String reason) { + EinvoiceHeader header = headerService.getById(id); + if (header == null) { + throw new RuntimeException("发票不存在"); + } + header.setInvoiceStatus("VOID"); + header.setVoidTime(new Date()); + header.setVoidReason(reason); + headerService.updateById(header); + } + + @Override + public Map getReconciliation(Integer pageNum, Integer pageSize) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(EinvoiceHeader::getInvoiceStatus, "ISSUED"); + w.orderByDesc(EinvoiceHeader::getIssueTime); + IPage page = headerService.page(new Page<>(pageNum, pageSize), w); + + Map result = new HashMap<>(); + result.put("records", page.getRecords()); + result.put("total", page.getTotal()); + + LambdaQueryWrapper totalW = new LambdaQueryWrapper<>(); + totalW.eq(EinvoiceHeader::getInvoiceStatus, "ISSUED"); + long totalCount = headerService.count(totalW); + result.put("totalCount", totalCount); + + return result; + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/controller/EinvoiceController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/controller/EinvoiceController.java new file mode 100644 index 000000000..cb6e5c27a --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/einvoice/controller/EinvoiceController.java @@ -0,0 +1,54 @@ +package com.healthlink.his.web.einvoice.controller; + +import com.core.common.core.domain.AjaxResult; +import com.healthlink.his.einvoice.domain.EinvoiceHeader; +import com.healthlink.his.web.einvoice.appservice.IEinvoiceAppService; +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.*; + +import java.util.Map; + +@Tag(name = "电子票据管理") +@RestController +@RequestMapping("/invoice") +public class EinvoiceController { + + @Autowired + private IEinvoiceAppService einvoiceAppService; + + @Operation(summary = "生成电子票据") + @PreAuthorize("@ss.hasPermi('basicmanage:invoice:edit')") + @PostMapping("/generate") + public AjaxResult generate(@RequestBody EinvoiceHeader header) { + return AjaxResult.success(einvoiceAppService.generate(header)); + } + + @Operation(summary = "电子票据分页") + @PreAuthorize("@ss.hasPermi('basicmanage:invoice:list')") + @GetMapping("/page") + public AjaxResult page(@RequestParam(required = false) String invoiceStatus, + @RequestParam(required = false) String patientName, + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + return AjaxResult.success(einvoiceAppService.page(invoiceStatus, patientName, pageNum, pageSize)); + } + + @Operation(summary = "作废电子票据") + @PreAuthorize("@ss.hasPermi('basicmanage:invoice:edit')") + @PostMapping("/void") + public AjaxResult voidInvoice(@RequestParam Long id, @RequestParam(required = false) String reason) { + einvoiceAppService.voidInvoice(id, reason); + return AjaxResult.success(); + } + + @Operation(summary = "票据对账") + @PreAuthorize("@ss.hasPermi('basicmanage:invoice:list')") + @GetMapping("/reconciliation") + public AjaxResult reconciliation(@RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + return AjaxResult.success(einvoiceAppService.getReconciliation(pageNum, pageSize)); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/IEpidemicAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/IEpidemicAppService.java index 73a38a627..07b56dc7b 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/IEpidemicAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/IEpidemicAppService.java @@ -7,4 +7,7 @@ public interface IEpidemicAppService { void confirmReport(Long id, String cdcNo); List getReports(String status); Map getStatistics(String startDate, String endDate); + EpidemicReport autoScreen(EpidemicReport r); + EpidemicReport saveReport(EpidemicReport r); + Map getReportStats(String startDate, String endDate); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/impl/EpidemicAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/impl/EpidemicAppServiceImpl.java index 28eaf7a58..fe14c256f 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/impl/EpidemicAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/appservice/impl/EpidemicAppServiceImpl.java @@ -9,6 +9,18 @@ import java.util.*; @Service public class EpidemicAppServiceImpl implements IEpidemicAppService { @Autowired private IEpidemicReportService reportService; + + private static final Set NOTIFIABLE_DISEASES = Set.of( + "鼠疫", "霍乱", "传染性非典型肺炎", "艾滋病", "病毒性肝炎", "脊髓灰质炎", + "人感染高致病性禽流感", "麻疹", "流行性出血热", "狂犬病", "流行性乙型脑炎", + "登革热", "炭疽", "细菌性和阿米巴性痢疾", "肺结核", "伤寒和副伤寒", + "流行性脑脊髓膜炎", "百日咳", "白喉", "新生儿破伤风", "猩红热", + "布鲁氏菌病", "淋病", "梅毒", "钩端螺旋体病", "血吸虫病", "疟疾", + "手足口病", "流行性感冒", "流行性腮腺炎", "风疹", "急性出血性结膜炎", + "麻风病", "流行性和地方性斑疹伤寒", "黑热病", "包虫病", "丝虫病", + "感染性腹泻", "甲型H1N1流感", "新型冠状病毒肺炎" + ); + @Override public EpidemicReport report(EpidemicReport r) { r.setStatus("PENDING"); r.setDelFlag("0"); r.setReportDate(new Date()); reportService.save(r); return r; } @Override @@ -27,4 +39,40 @@ public class EpidemicAppServiceImpl implements IEpidemicAppService { r.put("confirmed", reportService.count(new LambdaQueryWrapper().eq(EpidemicReport::getStatus, "CONFIRMED"))); return r; } + @Override + public EpidemicReport autoScreen(EpidemicReport r) { + boolean match = r.getDiseaseName() != null && NOTIFIABLE_DISEASES.stream() + .anyMatch(d -> r.getDiseaseName().contains(d)); + r.setScreenResult(match ? "MATCHED" : "NOT_MATCHED"); + r.setScreenLevel(match ? "LEVEL_A" : "NORMAL"); + r.setScreenTime(new Date()); + if (match && (r.getStatus() == null || "DRAFT".equals(r.getStatus()))) { + r.setStatus("PENDING"); + } + r.setDelFlag("0"); + r.setReportDate(new Date()); + reportService.save(r); + return r; + } + @Override + public EpidemicReport saveReport(EpidemicReport r) { + if (r.getId() == null) { + r.setStatus("DRAFT"); r.setDelFlag("0"); r.setReportDate(new Date()); + reportService.save(r); + } else { + reportService.updateById(r); + } + return r; + } + @Override + public Map getReportStats(String startDate, String endDate) { + Map r = new HashMap<>(); + LambdaQueryWrapper base = new LambdaQueryWrapper().eq(EpidemicReport::getDelFlag, "0"); + r.put("total", reportService.count(base)); + r.put("pending", reportService.count(new LambdaQueryWrapper().eq(EpidemicReport::getStatus, "PENDING").eq(EpidemicReport::getDelFlag, "0"))); + r.put("confirmed", reportService.count(new LambdaQueryWrapper().eq(EpidemicReport::getStatus, "CONFIRMED").eq(EpidemicReport::getDelFlag, "0"))); + r.put("screenMatched", reportService.count(new LambdaQueryWrapper().eq(EpidemicReport::getScreenResult, "MATCHED").eq(EpidemicReport::getDelFlag, "0"))); + r.put("screenNormal", reportService.count(new LambdaQueryWrapper().eq(EpidemicReport::getScreenResult, "NOT_MATCHED").eq(EpidemicReport::getDelFlag, "0"))); + return r; + } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/controller/EpidemicController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/controller/EpidemicController.java index dda3e923e..701305a2b 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/controller/EpidemicController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/epidemic/controller/EpidemicController.java @@ -5,16 +5,32 @@ import com.healthlink.his.web.epidemic.appservice.IEpidemicAppService; 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 @RequestMapping("/api/v1/epidemic") public class EpidemicController { @Autowired private IEpidemicAppService epidemicAppService; + @Operation(summary = "上报") @PostMapping("/report") + @PreAuthorize("hasAuthority('epidemic:edit')") public AjaxResult report(@RequestBody EpidemicReport r) { return AjaxResult.success(epidemicAppService.report(r)); } @Operation(summary = "确认") @PutMapping("/confirm/{id}") + @PreAuthorize("hasAuthority('epidemic:edit')") public AjaxResult confirm(@PathVariable Long id, @RequestParam String cdcNo) { epidemicAppService.confirmReport(id, cdcNo); return AjaxResult.success(); } @Operation(summary = "列表") @GetMapping("/list") + @PreAuthorize("hasAuthority('epidemic:list')") public AjaxResult list(@RequestParam(required = false) String status) { return AjaxResult.success(epidemicAppService.getReports(status)); } @Operation(summary = "统计") @GetMapping("/statistics") + @PreAuthorize("hasAuthority('epidemic:list')") public AjaxResult statistics(@RequestParam(required = false) String s, @RequestParam(required = false) String e) { return AjaxResult.success(epidemicAppService.getStatistics(s, e)); } + + @Operation(summary = "自动筛查") @PostMapping("/auto-screen") + @PreAuthorize("hasAuthority('epidemic:edit')") + public AjaxResult autoScreen(@RequestBody EpidemicReport r) { return AjaxResult.success(epidemicAppService.autoScreen(r)); } + @Operation(summary = "保存报告") @PostMapping("/save") + @PreAuthorize("hasAuthority('epidemic:edit')") + public AjaxResult saveReport(@RequestBody EpidemicReport r) { return AjaxResult.success(epidemicAppService.saveReport(r)); } + @Operation(summary = "报告统计") @GetMapping("/report-stats") + @PreAuthorize("hasAuthority('epidemic:list')") + public AjaxResult reportStats(@RequestParam(required = false) String s, @RequestParam(required = false) String e) { return AjaxResult.success(epidemicAppService.getReportStats(s, e)); } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/lab/controller/LabHistoryController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/lab/controller/LabHistoryController.java index 2f32f54be..d5ab78b48 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/lab/controller/LabHistoryController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/lab/controller/LabHistoryController.java @@ -7,6 +7,7 @@ import com.healthlink.his.lab.domain.LabResultComparison; import com.healthlink.his.lab.service.ILabResultComparisonService; 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.*; @@ -20,6 +21,7 @@ public class LabHistoryController { private final ILabResultComparisonService comparisonService; @GetMapping("/compare") + @PreAuthorize("@ss.hasPermi('infection:lab:list')") public R compareResults( @RequestParam Long patientId, @RequestParam(required = false) String testItem) { @@ -31,6 +33,7 @@ public class LabHistoryController { } @PostMapping("/add") + @PreAuthorize("@ss.hasPermi('infection:lab:edit')") @Transactional(rollbackFor = Exception.class) public R addResult(@RequestBody LabResultComparison result) { result.setCreateTime(new java.util.Date()); @@ -39,6 +42,7 @@ public class LabHistoryController { } @GetMapping("/trend") + @PreAuthorize("@ss.hasPermi('infection:lab:list')") public R getTrend( @RequestParam Long patientId, @RequestParam String testItem) { diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/outpatient/controller/OutpatientEnhancedController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/outpatient/controller/OutpatientEnhancedController.java index 4936b3acf..1109d531d 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/outpatient/controller/OutpatientEnhancedController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/outpatient/controller/OutpatientEnhancedController.java @@ -15,6 +15,7 @@ import com.healthlink.his.prescription.domain.PrescriptionInterceptLog; import com.healthlink.his.prescription.service.IPrescriptionInterceptLogService; 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.*; @@ -105,6 +106,7 @@ public class OutpatientEnhancedController { // ==================== 出院小结 ==================== @GetMapping("/discharge/page") + @PreAuthorize("hasAuthority('outpatient:discharge:list')") public R getDischargePage( @RequestParam(value = "status", required = false) Integer status, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @@ -116,6 +118,7 @@ public class OutpatientEnhancedController { } @PostMapping("/discharge/add") + @PreAuthorize("hasAuthority('outpatient:discharge:add')") @Transactional(rollbackFor = Exception.class) public R addDischarge(@RequestBody DischargeSummary summary) { summary.setStatus(0); @@ -125,6 +128,7 @@ public class OutpatientEnhancedController { } @PostMapping("/discharge/complete") + @PreAuthorize("hasAuthority('outpatient:discharge:edit')") @Transactional(rollbackFor = Exception.class) public R completeDischarge(@RequestParam Long id) { DischargeSummary s = dischargeService.getById(id); diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/ITcmAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/ITcmAppService.java index 70cc78044..74c93f84d 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/ITcmAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/ITcmAppService.java @@ -8,4 +8,7 @@ public interface ITcmAppService { TcmConstitutionAssessment assess(TcmConstitutionAssessment a); List getAssessmentsByEncounter(Long encounterId); Map getStatistics(); + TcmDiagnosis saveDiagnosis(TcmDiagnosis d); + List getDiagnosesByEncounter(Long encounterId); + TcmConstitutionAssessment saveConstitution(TcmConstitutionAssessment a); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/impl/TcmAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/impl/TcmAppServiceImpl.java index 50074cb2a..c8e4b025d 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/impl/TcmAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/appservice/impl/TcmAppServiceImpl.java @@ -10,6 +10,7 @@ import java.util.*; public class TcmAppServiceImpl implements ITcmAppService { @Autowired private ITcmPrescriptionService prescriptionService; @Autowired private ITcmConstitutionAssessmentService assessmentService; + @Autowired private ITcmDiagnosisService diagnosisService; @Override public List getPrescriptions(String type) { @@ -33,4 +34,13 @@ public class TcmAppServiceImpl implements ITcmAppService { r.put("totalAssessments", assessmentService.count(new LambdaQueryWrapper().eq(TcmConstitutionAssessment::getDeleteFlag, "0"))); return r; } + @Override + public TcmDiagnosis saveDiagnosis(TcmDiagnosis d) { d.setDeleteFlag("0"); d.setEnabled("1"); diagnosisService.save(d); return d; } + @Override + public List getDiagnosesByEncounter(Long encounterId) { + return diagnosisService.list(new LambdaQueryWrapper() + .eq(TcmDiagnosis::getEncounterId, encounterId).eq(TcmDiagnosis::getDeleteFlag, "0")); + } + @Override + public TcmConstitutionAssessment saveConstitution(TcmConstitutionAssessment a) { a.setDeleteFlag("0"); assessmentService.save(a); return a; } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/controller/TcmController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/controller/TcmController.java index 0ce371277..10aff86a5 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/controller/TcmController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/tcm/controller/TcmController.java @@ -5,19 +5,37 @@ import com.healthlink.his.web.tcm.appservice.ITcmAppService; 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.*; import java.util.List; @Tag(name = "壮医中医特色") @RestController @RequestMapping("/api/v1/tcm") public class TcmController { @Autowired private ITcmAppService tcmAppService; + @Operation(summary = "中医方剂列表") @GetMapping("/prescriptions") + @PreAuthorize("hasAuthority('tcm:edit')") public AjaxResult prescriptions(@RequestParam(required = false) String type) { return AjaxResult.success(tcmAppService.getPrescriptions(type)); } @Operation(summary = "新增方剂") @PostMapping("/prescription") + @PreAuthorize("hasAuthority('tcm:edit')") public AjaxResult savePrescription(@RequestBody TcmPrescription p) { return AjaxResult.success(tcmAppService.savePrescription(p)); } + @Operation(summary = "统计") @GetMapping("/statistics") + @PreAuthorize("hasAuthority('tcm:list')") + public AjaxResult statistics() { return AjaxResult.success(tcmAppService.getStatistics()); } + @Operation(summary = "体质辨识") @PostMapping("/constitution") + @PreAuthorize("hasAuthority('tcm:edit')") public AjaxResult assess(@RequestBody TcmConstitutionAssessment a) { return AjaxResult.success(tcmAppService.assess(a)); } @Operation(summary = "体质辨识记录") @GetMapping("/constitution/encounter/{encounterId}") + @PreAuthorize("hasAuthority('tcm:list')") public AjaxResult getAssessments(@PathVariable Long encounterId) { return AjaxResult.success(tcmAppService.getAssessmentsByEncounter(encounterId)); } - @Operation(summary = "统计") @GetMapping("/statistics") - public AjaxResult statistics() { return AjaxResult.success(tcmAppService.getStatistics()); } + @Operation(summary = "保存体质辨识") @PostMapping("/constitution/save") + @PreAuthorize("hasAuthority('tcm:edit')") + public AjaxResult saveConstitution(@RequestBody TcmConstitutionAssessment a) { return AjaxResult.success(tcmAppService.saveConstitution(a)); } + + @Operation(summary = "保存诊断") @PostMapping("/diagnosis") + @PreAuthorize("hasAuthority('tcm:edit')") + public AjaxResult saveDiagnosis(@RequestBody TcmDiagnosis d) { return AjaxResult.success(tcmAppService.saveDiagnosis(d)); } + @Operation(summary = "诊断记录") @GetMapping("/diagnosis/encounter/{encounterId}") + @PreAuthorize("hasAuthority('tcm:list')") + public AjaxResult getDiagnoses(@PathVariable Long encounterId) { return AjaxResult.success(tcmAppService.getDiagnosesByEncounter(encounterId)); } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/appservice/IDrgDeepAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/appservice/IDrgDeepAppService.java new file mode 100644 index 000000000..b7cde8522 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/appservice/IDrgDeepAppService.java @@ -0,0 +1,10 @@ +package com.healthlink.his.web.ybmanage.appservice; + +import com.core.common.core.domain.R; +import java.util.Map; + +public interface IDrgDeepAppService { + R analyzeDrg(Map params); + R getCostAlert(Map params); + R getOptimization(Map params); +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/appservice/impl/DrgDeepAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/appservice/impl/DrgDeepAppServiceImpl.java new file mode 100644 index 000000000..aad8b9cd6 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/appservice/impl/DrgDeepAppServiceImpl.java @@ -0,0 +1,160 @@ +package com.healthlink.his.web.ybmanage.appservice.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.core.domain.R; +import com.healthlink.his.crossmodule.domain.DrgCostAlert; +import com.healthlink.his.crossmodule.domain.DrgPerformance; +import com.healthlink.his.crossmodule.service.IDrgCostAlertService; +import com.healthlink.his.crossmodule.service.IDrgPerformanceService; +import com.healthlink.his.mrhomepage.domain.MrDrgGrouping; +import com.healthlink.his.mrhomepage.service.IMrDrgGroupingService; +import com.healthlink.his.web.ybmanage.appservice.IDrgDeepAppService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class DrgDeepAppServiceImpl implements IDrgDeepAppService { + + private final IMrDrgGroupingService drgGroupingService; + private final IDrgPerformanceService drgPerformanceService; + private final IDrgCostAlertService drgCostAlertService; + + @Override + public R analyzeDrg(Map params) { + String startDate = (String) params.get("startDate"); + String endDate = (String) params.get("endDate"); + String groupingType = (String) params.get("groupingType"); + + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(StringUtils.hasText(groupingType), MrDrgGrouping::getGroupingType, groupingType) + .eq(MrDrgGrouping::getIsValid, true); + if (StringUtils.hasText(startDate)) { + w.ge(MrDrgGrouping::getDischargeDate, startDate); + } + if (StringUtils.hasText(endDate)) { + w.le(MrDrgGrouping::getDischargeDate, endDate); + } + + List list = drgGroupingService.list(w); + + Map result = new HashMap<>(); + result.put("totalCases", list.size()); + + BigDecimal totalCost = BigDecimal.ZERO; + BigDecimal totalInsurance = BigDecimal.ZERO; + int totalLos = 0; + for (MrDrgGrouping g : list) { + if (g.getTotalCost() != null) totalCost = totalCost.add(g.getTotalCost()); + if (g.getInsurancePayment() != null) totalInsurance = totalInsurance.add(g.getInsurancePayment()); + if (g.getLosDays() != null) totalLos += g.getLosDays(); + } + int count = list.size(); + result.put("totalCost", totalCost); + result.put("totalInsurance", totalInsurance); + result.put("avgCost", count > 0 ? totalCost.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + result.put("avgLos", count > 0 ? BigDecimal.valueOf(totalLos).divide(BigDecimal.valueOf(count), 1, RoundingMode.HALF_UP) : BigDecimal.ZERO); + result.put("insuranceRate", totalCost.compareTo(BigDecimal.ZERO) > 0 + ? totalInsurance.multiply(BigDecimal.valueOf(100)).divide(totalCost, 2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + + Map typeCount = list.stream() + .collect(Collectors.groupingBy( + g -> g.getGroupingType() != null ? g.getGroupingType() : "UNKNOWN", + Collectors.summingInt(g -> 1))); + result.put("typeDistribution", typeCount); + + Map drgCostMap = new LinkedHashMap<>(); + Map drgCountMap = new LinkedHashMap<>(); + for (MrDrgGrouping g : list) { + String code = g.getDrgCode(); + if (StringUtils.hasText(code)) { + drgCostMap.merge(code, g.getTotalCost() != null ? g.getTotalCost() : BigDecimal.ZERO, BigDecimal::add); + drgCountMap.merge(code, 1, Integer::sum); + } + } + List> topDrg = drgCostMap.entrySet().stream() + .sorted(Map.Entry.comparingByValue().reversed()) + .limit(10) + .map(e -> { + Map item = new HashMap<>(); + item.put("drgCode", e.getKey()); + item.put("count", drgCountMap.getOrDefault(e.getKey(), 0)); + item.put("totalCost", e.getValue()); + return item; + }) + .collect(Collectors.toList()); + result.put("topDrgByCost", topDrg); + + return R.ok(result); + } + + @Override + public R getCostAlert(Map params) { + String alertLevel = (String) params.get("alertLevel"); + String handleStatus = (String) params.get("handleStatus"); + + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + if (StringUtils.hasText(alertLevel)) { + w.eq(DrgCostAlert::getAlertLevel, alertLevel); + } + if (StringUtils.hasText(handleStatus)) { + w.eq(DrgCostAlert::getHandleStatus, handleStatus); + } + w.orderByDesc(DrgCostAlert::getCreateTime); + + List list = drgCostAlertService.list(w); + + Map result = new HashMap<>(); + result.put("total", list.size()); + + long unhandled = list.stream().filter(a -> "PENDING".equals(a.getHandleStatus())).count(); + long highLevel = list.stream().filter(a -> "HIGH".equals(a.getAlertLevel())).count(); + result.put("unhandledCount", unhandled); + result.put("highLevelCount", highLevel); + result.put("records", list); + + return R.ok(result); + } + + @Override + public R getOptimization(Map params) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.orderByDesc(DrgPerformance::getStatMonth); + List perfList = drgPerformanceService.list(w); + + Map result = new HashMap<>(); + + if (!perfList.isEmpty()) { + DrgPerformance latest = perfList.get(0); + result.put("latestMonth", latest.getStatMonth()); + result.put("totalCases", latest.getTotalCases()); + result.put("drgCoveredRate", latest.getDrgCoveredRate()); + result.put("avgWeight", latest.getAvgWeight()); + result.put("avgCost", latest.getAvgCost()); + result.put("costControlRate", latest.getCostControlRate()); + result.put("cmiValue", latest.getCmiValue()); + result.put("avgLos", latest.getAvgLos()); + } + + List> trend = new ArrayList<>(); + for (DrgPerformance p : perfList) { + Map item = new HashMap<>(); + item.put("month", p.getStatMonth()); + item.put("totalCases", p.getTotalCases()); + item.put("avgWeight", p.getAvgWeight()); + item.put("avgCost", p.getAvgCost()); + item.put("costControlRate", p.getCostControlRate()); + item.put("cmiValue", p.getCmiValue()); + trend.add(item); + } + result.put("trend", trend); + + return R.ok(result); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/controller/DrgDeepController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/controller/DrgDeepController.java new file mode 100644 index 000000000..29a6c566d --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/ybmanage/controller/DrgDeepController.java @@ -0,0 +1,41 @@ +package com.healthlink.his.web.ybmanage.controller; + +import com.core.common.core.domain.AjaxResult; +import com.healthlink.his.web.ybmanage.appservice.IDrgDeepAppService; +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.*; + +import java.util.Map; + +@Tag(name = "DRG/DIP深化分析") +@RestController +@RequestMapping("/ybmanage/drg-deep") +public class DrgDeepController { + + @Autowired + private IDrgDeepAppService drgDeepAppService; + + @Operation(summary = "DRG分组分析") + @PreAuthorize("@ss.hasPermi('ybmanage:drgdeep:edit')") + @PostMapping("/analyze") + public AjaxResult analyzeDrg(@RequestBody Map params) { + return AjaxResult.success(drgDeepAppService.analyzeDrg(params).getData()); + } + + @Operation(summary = "费用预警查询") + @PreAuthorize("@ss.hasPermi('ybmanage:drgdeep:list')") + @PostMapping("/cost-alert") + public AjaxResult getCostAlert(@RequestBody Map params) { + return AjaxResult.success(drgDeepAppService.getCostAlert(params).getData()); + } + + @Operation(summary = "优化建议") + @PreAuthorize("@ss.hasPermi('ybmanage:drgdeep:list')") + @PostMapping("/optimization") + public AjaxResult getOptimization(@RequestBody Map params) { + return AjaxResult.success(drgDeepAppService.getOptimization(params).getData()); + } +} 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/V66__update_menu_icons.sql new file mode 100644 index 000000000..a2875aa34 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V66__update_menu_icons.sql @@ -0,0 +1,338 @@ +-- V66__update_menu_icons.sql +-- 更新菜单图标 - 根据菜单功能名称匹配合适的图标 +-- 仅使用 src/assets/icons/svg/ 目录下实际存在的图标 + +SET search_path TO healthlink_his; + +-- ========== 一级菜单(顶级目录)========== +UPDATE sys_menu SET icon = 'system' WHERE menu_id = 1; -- 系统管理 +UPDATE sys_menu SET icon = 'monitor' WHERE menu_id = 2; -- 系统监控 +UPDATE sys_menu SET icon = 'tool' WHERE menu_id = 3; -- 系统工具 +UPDATE sys_menu SET icon = 'log' WHERE menu_id = 108; -- 日志管理 +UPDATE sys_menu SET icon = 'inpatient' WHERE menu_id = 235; -- 住院管理 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 268; -- 药库管理 +UPDATE sys_menu SET icon = 'outpatient' WHERE menu_id = 270; -- 门诊管理 +UPDATE sys_menu SET icon = 'inventory' WHERE menu_id = 313; -- 库房管理 +UPDATE sys_menu SET icon = 'drug-dispensing' WHERE menu_id = 342; -- 发药管理 +UPDATE sys_menu SET icon = 'finance' WHERE menu_id = 350; -- 财务管理 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 360; -- 报表管理 +UPDATE sys_menu SET icon = 'insurance' WHERE menu_id = 386; -- 医保管理 +UPDATE sys_menu SET icon = 'connection' WHERE menu_id = 418; -- 接口管理 +UPDATE sys_menu SET icon = 'workflow' WHERE menu_id = 2020; -- 流程管理 +UPDATE sys_menu SET icon = 'task' WHERE menu_id = 2023; -- 任务管理 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 2078; -- 收费工作站 +UPDATE sys_menu SET icon = 'pharmacy' WHERE menu_id = 2079; -- 药房管理 +UPDATE sys_menu SET icon = 'tool' WHERE menu_id = 2083; -- 维护系统 +UPDATE sys_menu SET icon = 'doctor' WHERE menu_id = 2084; -- 门诊医生工作站 +UPDATE sys_menu SET icon = 'appointment' WHERE menu_id = 2092; -- 预约管理 +UPDATE sys_menu SET icon = 'triage' WHERE menu_id = 2110; -- 分诊排队管理 +UPDATE sys_menu SET icon = 'surgery' WHERE menu_id = 2119; -- 手术管理 +UPDATE sys_menu SET icon = 'user' WHERE menu_id = 2140; -- 患者管理 +UPDATE sys_menu SET icon = 'consultation' WHERE menu_id = 2147; -- 会诊管理 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 2159; -- 疾病报告管理 +UPDATE sys_MENU SET icon = 'infection' WHERE menu_id = 10001; -- 院感管理 +UPDATE sys_menu SET icon = 'log' WHERE menu_id = 10011; -- 药品追溯管理 +UPDATE sys_menu SET icon = 'edit' WHERE menu_id = 10021; -- 电子签名管理 +UPDATE sys_menu SET icon = 'alert' WHERE menu_id = 10031; -- 危急值管理 +UPDATE sys_menu SET icon = 'peoples' WHERE menu_id = 10041; -- 患者主索引(EMPI) +UPDATE sys_menu SET icon = 'peoples' WHERE menu_id = 10051; -- 质量管理 +UPDATE sys_menu SET icon = 'shopping' WHERE menu_id = 10061; -- 手术安全核查 +UPDATE sys_menu SET icon = 'guide' WHERE menu_id = 10071; -- 临床路径 +UPDATE sys_menu SET icon = 'anesthesia' WHERE menu_id = 20001; -- 麻醉管理 +UPDATE sys_menu SET icon = 'medication' WHERE menu_id = 20011; -- 合理用药 +UPDATE sys_menu SET icon = 'emergency' WHERE menu_id = 20021; -- 急诊管理 +UPDATE sys_menu SET icon = 'nursing' WHERE menu_id = 20031; -- 护理管理 +UPDATE sys_menu SET icon = 'pathology' WHERE menu_id = 20041; -- 病理管理 +UPDATE sys_menu SET icon = 'medical-record' WHERE menu_id = 20051; -- 病案管理 +UPDATE sys_menu SET icon = 'radiology' WHERE menu_id = 20061; -- 影像管理 +UPDATE sys_menu SET icon = 'follow-up' WHERE menu_id = 20071; -- 随访管理 +UPDATE sys_menu SET icon = 'monitor' WHERE menu_id = 20081; -- ESB管理 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20091; -- 检查检验 +UPDATE sys_menu SET icon = 'consent' WHERE menu_id = 20101; -- 知情同意管理 +UPDATE sys_menu SET icon = 'order' WHERE menu_id = 20111; -- 医嘱闭环 +UPDATE sys_menu SET icon = 'audit' WHERE menu_id = 20131; -- 审核管理 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20141; -- 跨模块协同 +UPDATE sys_menu SET icon = 'sample' WHERE menu_id = 20151; -- 标本管理 +UPDATE sys_menu SET icon = 'standard' WHERE menu_id = 20161; -- FHIR/CDA标准 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20201; -- 电子病历管理 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20211; -- 检验增强 + +-- ========== 二级菜单图标更新 ========== +-- 系统管理子菜单 +UPDATE sys_menu SET icon = 'user' WHERE menu_id = 100; -- 用户管理 +UPDATE sys_menu SET icon = 'peoples' WHERE menu_id = 101; -- 角色管理 +UPDATE sys_menu SET icon = 'post' WHERE menu_id = 104; -- 岗位管理 +UPDATE sys_menu SET icon = 'system' WHERE menu_id = 102; -- 菜单管理 +UPDATE sys_menu SET icon = 'tree-table' WHERE menu_id = 103; -- 部门管理 +UPDATE sys_menu SET icon = 'dict' WHERE menu_id = 105; -- 字典管理 +UPDATE sys_menu SET icon = 'edit' WHERE menu_id = 106; -- 参数设置 +UPDATE sys_menu SET icon = 'message' WHERE menu_id = 107; -- 通知公告 + +-- 系统监控子菜单 +UPDATE sys_menu SET icon = 'online' WHERE menu_id = 109; -- 在线用户 +UPDATE sys_menu SET icon = 'job' WHERE menu_id = 110; -- 定时任务 +UPDATE sys_menu SET icon = 'druid' WHERE menu_id = 111; -- 数据监控 +UPDATE sys_menu SET icon = 'server' WHERE menu_id = 112; -- 服务监控 +UPDATE sys_menu SET icon = 'monitor' WHERE menu_id = 113; -- 缓存监控 +UPDATE sys_menu SET icon = 'log' WHERE menu_id = 2104; -- 监控日志 + +-- 系统工具子菜单 +UPDATE sys_menu SET icon = 'form' WHERE menu_id = 115; -- 表单构建 +UPDATE sys_menu SET icon = 'code' WHERE menu_id = 116; -- 代码生成 +UPDATE sys_menu SET icon = 'swagger' WHERE menu_id = 117; -- 系统接口 + +-- 日志管理子菜单 +UPDATE sys_menu SET icon = 'log' WHERE menu_id = 500; -- 操作日志 +UPDATE sys_menu SET icon = 'log' WHERE menu_id = 501; -- 登录日志 + +-- 住院管理子菜单 +UPDATE sys_menu SET icon = 'doctor' WHERE menu_id = 288; -- 住院医生工作站 +UPDATE sys_menu SET icon = 'nurse' WHERE menu_id = 295; -- 住院护士站 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 307; -- 住院收费工作站 +UPDATE sys_menu SET icon = 'doctor' WHERE menu_id = 20171; -- 住院医生增强 +UPDATE sys_menu SET icon = 'nurse' WHERE menu_id = 20181; -- 住院护士增强 +UPDATE sys_menu SET icon = 'hospital' WHERE menu_id = 20221; -- 住院辅助 + +-- 药库管理子菜单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2049; -- 药库订货单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2050; -- 药库退货单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2051; -- 药库进货单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2053; -- 药库出库单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2054; -- 药库退库单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2055; -- 药库损益单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2056; -- 药库盘点单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2058; -- 库房单据管理 + +-- 门诊管理子菜单 +UPDATE sys_menu SET icon = 'doctor' WHERE menu_id = 269; -- 门诊工作站 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 277; -- 医技工作站 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 282; -- 门诊收费工作站 + +-- 门诊工作站子菜单 +UPDATE sys_MENU SET icon = 'drug' WHERE menu_id = 272; -- 门诊退药 +UPDATE sys_menu SET icon = 'registration' WHERE menu_id = 274; -- 门诊退号 + +-- 门诊收费工作站子菜单 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 283; -- 门诊收费 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 284; -- 门诊退费 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 285; -- 门诊划价 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 287; -- 收费详情查询 + +-- 药房管理子菜单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 343; -- 门诊发药 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 344; -- 门诊退药 + +-- 住院护士站子菜单 +UPDATE sys_menu SET icon = 'nurse' WHERE menu_id = 296; -- 门户 +UPDATE sys_menu SET icon = 'admission' WHERE menu_id = 297; -- 入出转管理 +UPDATE sys_menu SET icon = 'nursing' WHERE menu_id = 298; -- 护理记录 +UPDATE sys_menu SET icon = 'vital-signs' WHERE menu_id = 299; -- 三测单 +UPDATE sys_menu SET icon = 'order' WHERE menu_id = 2061; -- 医嘱执行 +UPDATE sys_menu SET icon = 'order' WHERE menu_id = 2064; -- 医嘱校对 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 301; -- 汇总发药申请 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 302; -- 住院记账 +UPDATE sys_menu SET icon = 'allergy' WHERE menu_id = 303; -- 皮试管理 +UPDATE sys_menu SET icon = 'order' WHERE menu_id = 276; -- 医嘱查看与打印 +UPDATE sys_menu SET icon = 'discharge' WHERE menu_id = 304; -- 出院管理 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 305; -- 退药管理 +UPDATE sys_menu SET icon = 'surgery' WHERE menu_id = 306; -- 手术记录 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 2062; -- 住院领药 + +-- 住院收费工作站子菜单 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 308; -- 费用管理 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 309; -- 住院费用结算 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 311; -- 住院收费详情 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 312; -- 中途结算 + +-- 财务管理子菜单 +UPDATE sys_menu SET icon = 'finance' WHERE menu_id = 354; -- 日结结算单管理 +UPDATE sys_menu SET icon = 'finance' WHERE menu_id = 356; -- 药房对账 +UPDATE sys_menu SET icon = 'finance' WHERE menu_id = 357; -- 库房审批 +UPDATE sys_menu SET icon = 'insurance' WHERE menu_id = 358; -- 医保结算 +UPDATE sys_menu SET icon = 'insurance' WHERE menu_id = 359; -- 医保对账 + +-- 报表管理子菜单 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 213; -- 门诊就诊记录 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 208; -- 项目定价 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 262; -- 门诊收费报表 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 363; -- 费用整体查询 + +-- 医保管理子菜单 +UPDATE sys_menu SET icon = 'insurance' WHERE menu_id = 390; -- 省医保 +UPDATE sys_menu SET icon = 'insurance' WHERE menu_id = 391; -- 市医保 +UPDATE sys_menu SET icon = 'insurance' WHERE menu_id = 392; -- 医保对账 +UPDATE sys_menu SET icon = 'insurance' WHERE menu_id = 394; -- 医保结算 + +-- 检查检验子菜单 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20092; -- 检查申请 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20093; -- 检查仪器 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20094; -- LIS配置 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20095; -- 检验组套 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20096; -- 标本采集 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20097; -- 标本类型 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20098; -- 观察项目 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20099; -- 检验增强 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20100; -- 检验ICD10 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20102; -- 检验预约 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20103; -- 检验路径 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20104; -- 参考范围 +UPDATE sys_menu SET icon = 'radiology' WHERE menu_id = 20105; -- 放射报告 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 20106; -- 检验历史 + +-- 院感管理子菜单 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10002; -- 感染病例监测 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10003; -- 手卫生监测 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10004; -- 环境监测 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10005; -- 抗菌药物使用 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10006; -- 多重耐药菌 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10007; -- 职业暴露 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10008; -- 疫情预警 +UPDATE sys_menu SET icon = 'infection' WHERE menu_id = 10009; -- 目标性监测 + +-- 药品追溯管理子菜单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 10012; -- 追溯码管理 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 10013; -- 批次管理 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 10014; -- 扫码记录 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 10015; -- 追溯预警 + +-- 麻醉管理子菜单 +UPDATE sys_menu SET icon = 'anesthesia' WHERE menu_id = 20002; -- 麻醉记录 +UPDATE sys_menu SET icon = 'anesthesia' WHERE menu_id = 20003; -- 麻醉增强 + +-- 合理用药子菜单 +UPDATE sys_menu SET icon = 'medication' WHERE menu_id = 20012; -- 抗菌药物规则 +UPDATE sys_menu SET icon = 'medication' WHERE menu_id = 20013; -- 药物相互作用 +UPDATE sys_menu SET icon = 'medication' WHERE menu_id = 20014; -- 审核日志 +UPDATE sys_menu SET icon = 'medication' WHERE menu_id = 20015; -- 合理用药统计 + +-- 急诊管理子菜单 +UPDATE sys_menu SET icon = 'emergency' WHERE menu_id = 20022; -- 急诊分诊 +UPDATE sys_menu SET icon = 'emergency' WHERE menu_id = 20023; -- 急诊抢救 +UPDATE sys_menu SET icon = 'emergency' WHERE menu_id = 20024; -- 急诊观察 +UPDATE sys_menu SET icon = 'emergency' WHERE menu_id = 20025; -- 绿色通道 + +-- 护理管理子菜单 +UPDATE sys_menu SET icon = 'nursing' WHERE menu_id = 20032; -- 护理评估 +UPDATE sys_menu SET icon = 'nursing' WHERE menu_id = 20033; -- 护理增强 +UPDATE sys_menu SET icon = 'nursing' WHERE menu_id = 20034; -- 护理执行 +UPDATE sys_menu SET icon = 'nursing' WHERE menu_id = 20035; -- 护理质量 +UPDATE sys_menu SET icon = 'vital-signs' WHERE menu_id = 20036; -- 生命体征图表 + +-- 病理管理子菜单 +UPDATE sys_menu SET icon = 'pathology' WHERE menu_id = 20042; -- 病理医嘱 +UPDATE sys_menu SET icon = 'pathology' WHERE menu_id = 20043; -- 病理报告 +UPDATE sys_menu SET icon = 'pathology' WHERE menu_id = 20044; -- 病理标本 + +-- 病案管理子菜单 +UPDATE sys_menu SET icon = 'medical-record' WHERE menu_id = 20052; -- 病案管理 +UPDATE sys_menu SET icon = 'medical-record' WHERE menu_id = 20053; -- 病案首页管理 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 20054; -- DRG分析 +UPDATE sys_menu SET icon = 'report' WHERE menu_id = 20055; -- 病案统计 + +-- 影像管理子菜单 +UPDATE sys_menu SET icon = 'radiology' WHERE menu_id = 20062; -- 影像增强 +UPDATE sys_menu SET icon = 'radiology' WHERE menu_id = 20063; -- 影像对比 +UPDATE sys_menu SET icon = 'radiology' WHERE menu_id = 20064; -- 3D重建 + +-- 随访管理子菜单 +UPDATE sys_menu SET icon = 'follow-up' WHERE menu_id = 20072; -- 随访计划 +UPDATE sys_menu SET icon = 'follow-up' WHERE menu_id = 20073; -- 随访记录 +UPDATE sys_menu SET icon = 'follow-up' WHERE menu_id = 20074; -- 随访任务 +UPDATE sys_menu SET icon = 'follow-up' WHERE menu_id = 20075; -- 随访调查 + +-- 电子病历管理子菜单 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20202; -- 病案归档 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20203; -- 修订历史 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20204; -- 病历时效 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20205; -- 病历检索 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20206; -- 进程记录 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20207; -- 知识库 + +-- 审核管理子菜单 +UPDATE sys_menu SET icon = 'audit' WHERE menu_id = 20132; -- 审核统计 +UPDATE sys_menu SET icon = 'audit' WHERE menu_id = 20133; -- 点评计划 +UPDATE sys_menu SET icon = 'audit' WHERE menu_id = 20134; -- 点评工作台 +UPDATE sys_menu SET icon = 'audit' WHERE menu_id = 20135; -- 点评记录 +UPDATE sys_menu SET icon = 'audit' WHERE menu_id = 20136; -- 医生排名 + +-- 跨模块协同子菜单 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20142; -- 会诊反馈 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20143; -- 会诊超时 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20144; -- DRG绩效 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20145; -- 药品效期 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20146; -- 增强救护 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20147; -- 增强抗菌 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20148; -- 增强知情 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20149; -- DRG预警 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20150; -- 增强护理 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20152; -- 交接统计 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20153; -- 检验预警 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20154; -- 病案质量 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20155; -- 护士执行 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20156; -- 报告反馈 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20157; -- 审核统计 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20158; -- 库存拦截 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20159; -- 手术闭环 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20160; -- 手术关联 +UPDATE sys_menu SET icon = 'teamwork' WHERE menu_id = 20162; -- 患者转运 + +-- 门诊医生工作站子菜单 +UPDATE sys_menu SET icon = 'doctor' WHERE menu_id = 2114; -- 医生常用语 +UPDATE sys_menu SET icon = 'doctor' WHERE menu_id = 2143; -- 今日门诊 + +-- 预约管理子菜单 +UPDATE sys_menu SET icon = 'schedule' WHERE menu_id = 2105; -- 医生排班管理 +UPDATE sys_menu SET icon = 'appointment' WHERE menu_id = 2097; -- 门诊出诊医生诊室设置 +UPDATE sys_menu SET icon = 'appointment' WHERE menu_id = 2112; -- 科室预约工作时间维护 +UPDATE sys_menu SET icon = 'appointment' WHERE menu_id = 2113; -- 门诊预约挂号 + +-- 手术管理子菜单 +UPDATE sys_menu SET icon = 'surgery' WHERE menu_id = 2120; -- 手术管理 +UPDATE sys_menu SET icon = 'surgery' WHERE menu_id = 2144; -- 手术室管理 + +-- 住院医生增强子菜单 +UPDATE sys_menu SET icon = 'doctor' WHERE menu_id = 20172; -- 住院病历 + +-- 住院护士增强子菜单 +UPDATE sys_menu SET icon = 'nurse' WHERE menu_id = 20182; -- 护士工作站 +UPDATE sys_menu SET icon = 'nurse' WHERE menu_id = 20183; -- 退药管理 +UPDATE sys_menu SET icon = 'nurse' WHERE menu_id = 20184; -- 滚费管理 +UPDATE sys_menu SET icon = 'vital-signs' WHERE menu_id = 20185; -- TPR表 + +-- 住院辅助子菜单 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 20222; -- 住院结算 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 20223; -- 费用类型转换 +UPDATE sys_menu SET icon = 'diagnosis' WHERE menu_id = 20224; -- 住院诊断 +UPDATE sys_menu SET icon = 'emr' WHERE menu_id = 20225; -- 住院病历 +UPDATE sys_menu SET icon = 'order' WHERE menu_id = 20226; -- 医嘱管理 +UPDATE sys_menu SET icon = 'surgery' WHERE menu_id = 20228; -- 住院手术 + +-- 基础数据子菜单 +UPDATE sys_menu SET icon = 'patient' WHERE menu_id = 205; -- 患者管理 +UPDATE sys_menu SET icon = 'patient' WHERE menu_id = 206; -- 患者档案管理 +UPDATE sys_menu SET icon = 'department' WHERE menu_id = 212; -- 科室管理 +UPDATE sys_menu SET icon = 'supplier' WHERE menu_id = 214; -- 供应商管理 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 216; -- 挂号收费项目 +UPDATE sys_menu SET icon = 'pharmacy' WHERE menu_id = 238; -- 库房/药房管理 +UPDATE sys_menu SET icon = 'appointment' WHERE menu_id = 245; -- 门诊号源管理 +UPDATE sys_menu SET icon = 'user' WHERE menu_id = 246; -- 客户数据 +UPDATE sys_menu SET icon = 'bed-management' WHERE menu_id = 247; -- 病区/床位管理 + +-- 目录管理子菜单 +UPDATE sys_menu SET icon = 'drug' WHERE menu_id = 201; -- 药品目录 +UPDATE sys_menu SET icon = 'laboratory' WHERE menu_id = 202; -- 诊疗目录 +UPDATE sys_menu SET icon = 'inventory' WHERE menu_id = 203; -- 耗材目录 +UPDATE sys_menu SET icon = 'diagnosis' WHERE menu_id = 204; -- 诊断目录 + +-- 基础数据子菜单 - 新增 +UPDATE sys_menu SET icon = 'bed-management' WHERE menu_id = 20257; -- 床体管理 +UPDATE sys_menu SET icon = 'body' WHERE menu_id = 20258; -- 体表结构 +UPDATE sys_menu SET icon = 'diagnosis' WHERE menu_id = 20259; -- 常用诊断 +UPDATE sys_menu SET icon = 'billing' WHERE menu_id = 20260; -- 费用管理 +UPDATE sys_menu SET icon = 'location' WHERE menu_id = 20261; -- 位置管理 +UPDATE sys_menu SET icon = 'order' WHERE menu_id = 20262; -- 医嘱组合 +UPDATE sys_menu SET icon = 'medication' WHERE menu_id = 20263; -- 中医处方 + +-- 为剩余没有图标的菜单设置默认图标 +UPDATE sys_menu SET icon = 'list' WHERE menu_type = 'C' AND (icon IS NULL OR icon = ''); +UPDATE sys_menu SET icon = 'list' WHERE menu_type = 'M' AND (icon IS NULL OR icon = ''); diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V68__ehcard.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V68__ehcard.sql new file mode 100644 index 000000000..8ae307c2b --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V68__ehcard.sql @@ -0,0 +1,42 @@ +CREATE TABLE IF NOT EXISTS ehcard_card ( + id BIGINT PRIMARY KEY, + patient_id BIGINT NOT NULL, + patient_name VARCHAR(64), + id_card VARCHAR(32), + phone VARCHAR(20), + card_no VARCHAR(64) NOT NULL, + card_type VARCHAR(20) NOT NULL DEFAULT 'HEALTH', + status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', + qr_code TEXT, + apply_time TIMESTAMP, + lock_time TIMESTAMP, + unlock_time TIMESTAMP, + lock_reason VARCHAR(256), + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + tenant_id INT DEFAULT 1, + delete_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE IF NOT EXISTS ehcard_usage_log ( + id BIGINT PRIMARY KEY, + card_id BIGINT NOT NULL, + patient_id BIGINT, + usage_type VARCHAR(32) NOT NULL, + usage_desc VARCHAR(256), + operator_name VARCHAR(64), + usage_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + tenant_id INT DEFAULT 1, + delete_flag VARCHAR(1) DEFAULT '0' +); + +CREATE INDEX idx_ehcard_card_patient ON ehcard_card(patient_id); +CREATE INDEX idx_ehcard_card_no ON ehcard_card(card_no); +CREATE INDEX idx_ehcard_card_status ON ehcard_card(status); +CREATE INDEX idx_ehcard_log_card ON ehcard_usage_log(card_id); 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/V68__tcm_diagnosis_table.sql new file mode 100644 index 000000000..8fcc59dc9 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V68__tcm_diagnosis_table.sql @@ -0,0 +1,22 @@ +-- TCM diagnosis table +CREATE TABLE IF NOT EXISTS healthlink_his.tcm_diagnosis ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT, + patient_id BIGINT, + diagnosis_type VARCHAR(50), + diagnosis_name VARCHAR(200), + diagnosis_code VARCHAR(50), + syndrome_type VARCHAR(50), + syndrome_name VARCHAR(200), + syndrome_code VARCHAR(50), + remark TEXT, + enabled CHAR(1) DEFAULT '1', + tenant_id INTEGER DEFAULT 0, + delete_flag CHAR(1) DEFAULT '0', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_tcm_diagnosis_encounter ON healthlink_his.tcm_diagnosis(encounter_id); diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V69__einvoice.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V69__einvoice.sql new file mode 100644 index 000000000..61cc9934c --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V69__einvoice.sql @@ -0,0 +1,82 @@ +CREATE TABLE IF NOT EXISTS invoice_header ( + id BIGINT PRIMARY KEY, + invoice_no VARCHAR(64) NOT NULL, + invoice_type VARCHAR(20) NOT NULL DEFAULT 'ELECTRONIC', + encounter_id BIGINT, + patient_id BIGINT, + patient_name VARCHAR(64), + total_amount NUMERIC(12,2) NOT NULL DEFAULT 0, + discount_amount NUMERIC(12,2) DEFAULT 0, + payable_amount NUMERIC(12,2) NOT NULL DEFAULT 0, + paid_amount NUMERIC(12,2) DEFAULT 0, + invoice_status VARCHAR(20) NOT NULL DEFAULT 'ISSUED', + issue_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + void_time TIMESTAMP, + void_reason VARCHAR(256), + issuer_id BIGINT, + issuer_name VARCHAR(64), + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + tenant_id INT DEFAULT 1, + delete_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE IF NOT EXISTS invoice_detail ( + id BIGINT PRIMARY KEY, + header_id BIGINT NOT NULL, + item_code VARCHAR(64), + item_name VARCHAR(128) NOT NULL, + item_type VARCHAR(20), + quantity NUMERIC(10,2) DEFAULT 1, + unit_price NUMERIC(12,2) DEFAULT 0, + amount NUMERIC(12,2) NOT NULL DEFAULT 0, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + tenant_id INT DEFAULT 1, + delete_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE IF NOT EXISTS invoice_segment ( + id BIGINT PRIMARY KEY, + segment_name VARCHAR(128) NOT NULL, + start_no VARCHAR(64) NOT NULL, + end_no VARCHAR(64) NOT NULL, + current_no VARCHAR(64), + status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', + invoice_type VARCHAR(20) DEFAULT 'ELECTRONIC', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + tenant_id INT DEFAULT 1, + delete_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE IF NOT EXISTS invoice_reconciliation ( + id BIGINT PRIMARY KEY, + recon_date DATE NOT NULL, + total_invoices INT DEFAULT 0, + total_amount NUMERIC(14,2) DEFAULT 0, + reconciled_count INT DEFAULT 0, + reconciled_amount NUMERIC(14,2) DEFAULT 0, + status VARCHAR(20) NOT NULL DEFAULT 'PENDING', + reconciler_id BIGINT, + reconciler_name VARCHAR(64), + reconcile_time TIMESTAMP, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + tenant_id INT DEFAULT 1, + delete_flag VARCHAR(1) DEFAULT '0' +); + +CREATE INDEX idx_inv_header_no ON invoice_header(invoice_no); +CREATE INDEX idx_inv_header_status ON invoice_header(invoice_status); +CREATE INDEX idx_inv_header_patient ON invoice_header(patient_id); +CREATE INDEX idx_inv_detail_header ON invoice_detail(header_id); +CREATE INDEX idx_inv_recon_date ON invoice_reconciliation(recon_date); 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/V69__epidemic_report_enhance.sql new file mode 100644 index 000000000..0901c3def --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V69__epidemic_report_enhance.sql @@ -0,0 +1,6 @@ +-- Add auto-screen fields to epidemic_report +ALTER TABLE healthlink_his.epidemic_report ADD COLUMN IF NOT EXISTS screen_result TEXT; +ALTER TABLE healthlink_his.epidemic_report ADD COLUMN IF NOT EXISTS screen_time TIMESTAMP; +ALTER TABLE healthlink_his.epidemic_report ADD COLUMN IF NOT EXISTS screen_level VARCHAR(20); +ALTER TABLE healthlink_his.epidemic_report ADD COLUMN IF NOT EXISTS address VARCHAR(500); +ALTER TABLE healthlink_his.epidemic_report ADD COLUMN IF NOT EXISTS contact_phone VARCHAR(50); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaAldreteScore.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaAldreteScore.java new file mode 100644 index 000000000..0ab206efe --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaAldreteScore.java @@ -0,0 +1,35 @@ +package com.healthlink.his.anesthesia.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("anes_alldrete_score") +public class AnesthesiaAldreteScore extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + private Long recordId; + private Long encounterId; + private Long patientId; + private String patientName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date assessTime; + private Integer activityScore; + private Integer respirationScore; + private Integer circulationScore; + private Integer consciousnessScore; + private Integer spo2Score; + private Integer totalScore; + private String riskLevel; + private Long assessorId; + private String assessorName; + private String remark; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaIntraopEvent.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaIntraopEvent.java new file mode 100644 index 000000000..549e3da5b --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaIntraopEvent.java @@ -0,0 +1,35 @@ +package com.healthlink.his.anesthesia.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("anes_intraop_event") +public class AnesthesiaIntraopEvent extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + private Long recordId; + private Long encounterId; + private Long patientId; + private String eventType; + private String eventDetail; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date eventTime; + private String operatorName; + private String position; + private String intubationType; + private String intubationResult; + private String extubationReason; + private String extubationResult; + private String complication; + private String action; + private String remark; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaPreopVisit.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaPreopVisit.java new file mode 100644 index 000000000..299f1fcfb --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/domain/AnesthesiaPreopVisit.java @@ -0,0 +1,45 @@ +package com.healthlink.his.anesthesia.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("anes_preop_visit") +public class AnesthesiaPreopVisit extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + private Long recordId; + private Long encounterId; + private Long patientId; + private String patientName; + private Long visitDoctorId; + private String visitDoctorName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date visitTime; + private String chiefComplaint; + private String presentIllness; + private String pastHistory; + private String allergyHistory; + private String airwayAssessment; + private String asaGrade; + private String cardiovascularStatus; + private String respiratoryStatus; + private String neurologicalStatus; + private String hepatorenalFunction; + private String coagulationStatus; + private String fastingStatus; + private String npoHours; + private String difficultAirwayRisk; + private String anesthesiaRisk; + private String riskFactors; + private String recommendation; + private String status; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaAldreteScoreMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaAldreteScoreMapper.java new file mode 100644 index 000000000..351c99cbd --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaAldreteScoreMapper.java @@ -0,0 +1,13 @@ +package com.healthlink.his.anesthesia.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.anesthesia.domain.AnesthesiaAldreteScore; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface AnesthesiaAldreteScoreMapper extends BaseMapper { + List selectByRecordId(@Param("recordId") Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaIntraopEventMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaIntraopEventMapper.java new file mode 100644 index 000000000..a3601ed36 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaIntraopEventMapper.java @@ -0,0 +1,13 @@ +package com.healthlink.his.anesthesia.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.anesthesia.domain.AnesthesiaIntraopEvent; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface AnesthesiaIntraopEventMapper extends BaseMapper { + List selectByRecordId(@Param("recordId") Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaPreopVisitMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaPreopVisitMapper.java new file mode 100644 index 000000000..704390c4c --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/mapper/AnesthesiaPreopVisitMapper.java @@ -0,0 +1,14 @@ +package com.healthlink.his.anesthesia.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.anesthesia.domain.AnesthesiaPreopVisit; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface AnesthesiaPreopVisitMapper extends BaseMapper { + List selectByRecordId(@Param("recordId") Long recordId); + List selectByEncounterId(@Param("encounterId") Long encounterId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaAldreteScoreService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaAldreteScoreService.java new file mode 100644 index 000000000..66e06c7de --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaAldreteScoreService.java @@ -0,0 +1,10 @@ +package com.healthlink.his.anesthesia.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.anesthesia.domain.AnesthesiaAldreteScore; + +import java.util.List; + +public interface IAnesthesiaAldreteScoreService extends IService { + List selectByRecordId(Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaIntraopEventService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaIntraopEventService.java new file mode 100644 index 000000000..7621c4f4d --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaIntraopEventService.java @@ -0,0 +1,10 @@ +package com.healthlink.his.anesthesia.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.anesthesia.domain.AnesthesiaIntraopEvent; + +import java.util.List; + +public interface IAnesthesiaIntraopEventService extends IService { + List selectByRecordId(Long recordId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaPreopVisitService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaPreopVisitService.java new file mode 100644 index 000000000..d7c7fda2c --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/IAnesthesiaPreopVisitService.java @@ -0,0 +1,11 @@ +package com.healthlink.his.anesthesia.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.anesthesia.domain.AnesthesiaPreopVisit; + +import java.util.List; + +public interface IAnesthesiaPreopVisitService extends IService { + List selectByRecordId(Long recordId); + List selectByEncounterId(Long encounterId); +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaAldreteScoreServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaAldreteScoreServiceImpl.java new file mode 100644 index 000000000..2616cb860 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaAldreteScoreServiceImpl.java @@ -0,0 +1,20 @@ +package com.healthlink.his.anesthesia.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.anesthesia.domain.AnesthesiaAldreteScore; +import com.healthlink.his.anesthesia.mapper.AnesthesiaAldreteScoreMapper; +import com.healthlink.his.anesthesia.service.IAnesthesiaAldreteScoreService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AnesthesiaAldreteScoreServiceImpl + extends ServiceImpl + implements IAnesthesiaAldreteScoreService { + + @Override + public List selectByRecordId(Long recordId) { + return baseMapper.selectByRecordId(recordId); + } +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaIntraopEventServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaIntraopEventServiceImpl.java new file mode 100644 index 000000000..2d7e7e0dc --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaIntraopEventServiceImpl.java @@ -0,0 +1,20 @@ +package com.healthlink.his.anesthesia.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.anesthesia.domain.AnesthesiaIntraopEvent; +import com.healthlink.his.anesthesia.mapper.AnesthesiaIntraopEventMapper; +import com.healthlink.his.anesthesia.service.IAnesthesiaIntraopEventService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AnesthesiaIntraopEventServiceImpl + extends ServiceImpl + implements IAnesthesiaIntraopEventService { + + @Override + public List selectByRecordId(Long recordId) { + return baseMapper.selectByRecordId(recordId); + } +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaPreopVisitServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaPreopVisitServiceImpl.java new file mode 100644 index 000000000..79427da42 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/anesthesia/service/impl/AnesthesiaPreopVisitServiceImpl.java @@ -0,0 +1,25 @@ +package com.healthlink.his.anesthesia.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.anesthesia.domain.AnesthesiaPreopVisit; +import com.healthlink.his.anesthesia.mapper.AnesthesiaPreopVisitMapper; +import com.healthlink.his.anesthesia.service.IAnesthesiaPreopVisitService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AnesthesiaPreopVisitServiceImpl + extends ServiceImpl + implements IAnesthesiaPreopVisitService { + + @Override + public List selectByRecordId(Long recordId) { + return baseMapper.selectByRecordId(recordId); + } + + @Override + public List selectByEncounterId(Long encounterId) { + return baseMapper.selectByEncounterId(encounterId); + } +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/domain/EhcardCard.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/domain/EhcardCard.java new file mode 100644 index 000000000..113f818d0 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/domain/EhcardCard.java @@ -0,0 +1,39 @@ +package com.healthlink.his.ehcard.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.ToStringSerializer; + +import java.util.Date; + +@Data +@TableName("ehcard_card") +@EqualsAndHashCode(callSuper = true) +public class EhcardCard extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + private String patientName; + private String idCard; + private String phone; + private String cardNo; + private String cardType; + private String status; + private String qrCode; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date applyTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date lockTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date unlockTime; + private String lockReason; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/domain/EhcardUsageLog.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/domain/EhcardUsageLog.java new file mode 100644 index 000000000..b8fcfa01a --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/domain/EhcardUsageLog.java @@ -0,0 +1,30 @@ +package com.healthlink.his.ehcard.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 tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.ToStringSerializer; + +import java.util.Date; + +@Data +@TableName("ehcard_usage_log") +@EqualsAndHashCode(callSuper = true) +public class EhcardUsageLog extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @JsonSerialize(using = ToStringSerializer.class) + private Long cardId; + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + private String usageType; + private String usageDesc; + private String operatorName; + private Date usageTime; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/mapper/EhcardCardMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/mapper/EhcardCardMapper.java new file mode 100644 index 000000000..46238b993 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/mapper/EhcardCardMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.ehcard.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.ehcard.domain.EhcardCard; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EhcardCardMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/mapper/EhcardUsageLogMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/mapper/EhcardUsageLogMapper.java new file mode 100644 index 000000000..8c350f0f9 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/mapper/EhcardUsageLogMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.ehcard.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.ehcard.domain.EhcardUsageLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EhcardUsageLogMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/IEhcardCardService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/IEhcardCardService.java new file mode 100644 index 000000000..9c6b0d49c --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/IEhcardCardService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.ehcard.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.ehcard.domain.EhcardCard; + +public interface IEhcardCardService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/IEhcardUsageLogService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/IEhcardUsageLogService.java new file mode 100644 index 000000000..3b278a288 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/IEhcardUsageLogService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.ehcard.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.ehcard.domain.EhcardUsageLog; + +public interface IEhcardUsageLogService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/impl/EhcardCardServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/impl/EhcardCardServiceImpl.java new file mode 100644 index 000000000..36cdd136b --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/impl/EhcardCardServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.ehcard.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.ehcard.domain.EhcardCard; +import com.healthlink.his.ehcard.mapper.EhcardCardMapper; +import com.healthlink.his.ehcard.service.IEhcardCardService; +import org.springframework.stereotype.Service; + +@Service +public class EhcardCardServiceImpl extends ServiceImpl implements IEhcardCardService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/impl/EhcardUsageLogServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/impl/EhcardUsageLogServiceImpl.java new file mode 100644 index 000000000..f0adbbf51 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ehcard/service/impl/EhcardUsageLogServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.ehcard.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.ehcard.domain.EhcardUsageLog; +import com.healthlink.his.ehcard.mapper.EhcardUsageLogMapper; +import com.healthlink.his.ehcard.service.IEhcardUsageLogService; +import org.springframework.stereotype.Service; + +@Service +public class EhcardUsageLogServiceImpl extends ServiceImpl implements IEhcardUsageLogService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceDetail.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceDetail.java new file mode 100644 index 000000000..9211a030f --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceDetail.java @@ -0,0 +1,29 @@ +package com.healthlink.his.einvoice.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 tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.ToStringSerializer; + +import java.math.BigDecimal; + +@Data +@TableName("invoice_detail") +@EqualsAndHashCode(callSuper = true) +public class EinvoiceDetail extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + @JsonSerialize(using = ToStringSerializer.class) + private Long headerId; + private String itemCode; + private String itemName; + private String itemType; + private BigDecimal quantity; + private BigDecimal unitPrice; + private BigDecimal amount; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceHeader.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceHeader.java new file mode 100644 index 000000000..600c40ba6 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceHeader.java @@ -0,0 +1,43 @@ +package com.healthlink.his.einvoice.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.ToStringSerializer; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@TableName("invoice_header") +@EqualsAndHashCode(callSuper = true) +public class EinvoiceHeader extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + private String invoiceNo; + private String invoiceType; + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + private String patientName; + private BigDecimal totalAmount; + private BigDecimal discountAmount; + private BigDecimal payableAmount; + private BigDecimal paidAmount; + private String invoiceStatus; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date issueTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date voidTime; + private String voidReason; + @JsonSerialize(using = ToStringSerializer.class) + private Long issuerId; + private String issuerName; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceReconciliation.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceReconciliation.java new file mode 100644 index 000000000..5f5c0cb4c --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceReconciliation.java @@ -0,0 +1,35 @@ +package com.healthlink.his.einvoice.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.ToStringSerializer; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@TableName("invoice_reconciliation") +@EqualsAndHashCode(callSuper = true) +public class EinvoiceReconciliation extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date reconDate; + private Integer totalInvoices; + private BigDecimal totalAmount; + private Integer reconciledCount; + private BigDecimal reconciledAmount; + private String status; + @JsonSerialize(using = ToStringSerializer.class) + private Long reconcilerId; + private String reconcilerName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date reconcileTime; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceSegment.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceSegment.java new file mode 100644 index 000000000..900d2c305 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/domain/EinvoiceSegment.java @@ -0,0 +1,25 @@ +package com.healthlink.his.einvoice.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 tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.ToStringSerializer; + +@Data +@TableName("invoice_segment") +@EqualsAndHashCode(callSuper = true) +public class EinvoiceSegment extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + private String segmentName; + private String startNo; + private String endNo; + private String currentNo; + private String status; + private String invoiceType; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceDetailMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceDetailMapper.java new file mode 100644 index 000000000..ca41f1bba --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceDetailMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.einvoice.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.einvoice.domain.EinvoiceDetail; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EinvoiceDetailMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceHeaderMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceHeaderMapper.java new file mode 100644 index 000000000..3769a63ce --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceHeaderMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.einvoice.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.einvoice.domain.EinvoiceHeader; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EinvoiceHeaderMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceReconciliationMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceReconciliationMapper.java new file mode 100644 index 000000000..d13ae1788 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceReconciliationMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.einvoice.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.einvoice.domain.EinvoiceReconciliation; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EinvoiceReconciliationMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceSegmentMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceSegmentMapper.java new file mode 100644 index 000000000..cbd360f67 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/mapper/EinvoiceSegmentMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.einvoice.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.einvoice.domain.EinvoiceSegment; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EinvoiceSegmentMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceDetailService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceDetailService.java new file mode 100644 index 000000000..477dd49a0 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceDetailService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.einvoice.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.einvoice.domain.EinvoiceDetail; + +public interface IEinvoiceDetailService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceHeaderService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceHeaderService.java new file mode 100644 index 000000000..6f910d67e --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceHeaderService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.einvoice.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.einvoice.domain.EinvoiceHeader; + +public interface IEinvoiceHeaderService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceReconciliationService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceReconciliationService.java new file mode 100644 index 000000000..084d4b4b7 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceReconciliationService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.einvoice.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.einvoice.domain.EinvoiceReconciliation; + +public interface IEinvoiceReconciliationService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceSegmentService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceSegmentService.java new file mode 100644 index 000000000..9858c2f62 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/IEinvoiceSegmentService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.einvoice.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.einvoice.domain.EinvoiceSegment; + +public interface IEinvoiceSegmentService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceDetailServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceDetailServiceImpl.java new file mode 100644 index 000000000..3f05e1098 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceDetailServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.einvoice.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.einvoice.domain.EinvoiceDetail; +import com.healthlink.his.einvoice.mapper.EinvoiceDetailMapper; +import com.healthlink.his.einvoice.service.IEinvoiceDetailService; +import org.springframework.stereotype.Service; + +@Service +public class EinvoiceDetailServiceImpl extends ServiceImpl implements IEinvoiceDetailService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceHeaderServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceHeaderServiceImpl.java new file mode 100644 index 000000000..c18f160db --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceHeaderServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.einvoice.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.einvoice.domain.EinvoiceHeader; +import com.healthlink.his.einvoice.mapper.EinvoiceHeaderMapper; +import com.healthlink.his.einvoice.service.IEinvoiceHeaderService; +import org.springframework.stereotype.Service; + +@Service +public class EinvoiceHeaderServiceImpl extends ServiceImpl implements IEinvoiceHeaderService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceReconciliationServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceReconciliationServiceImpl.java new file mode 100644 index 000000000..ea9d1502e --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceReconciliationServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.einvoice.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.einvoice.domain.EinvoiceReconciliation; +import com.healthlink.his.einvoice.mapper.EinvoiceReconciliationMapper; +import com.healthlink.his.einvoice.service.IEinvoiceReconciliationService; +import org.springframework.stereotype.Service; + +@Service +public class EinvoiceReconciliationServiceImpl extends ServiceImpl implements IEinvoiceReconciliationService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceSegmentServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceSegmentServiceImpl.java new file mode 100644 index 000000000..7fc52c263 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/einvoice/service/impl/EinvoiceSegmentServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.einvoice.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.einvoice.domain.EinvoiceSegment; +import com.healthlink.his.einvoice.mapper.EinvoiceSegmentMapper; +import com.healthlink.his.einvoice.service.IEinvoiceSegmentService; +import org.springframework.stereotype.Service; + +@Service +public class EinvoiceSegmentServiceImpl extends ServiceImpl implements IEinvoiceSegmentService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/epidemic/domain/EpidemicReport.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/epidemic/domain/EpidemicReport.java index 656298cf9..dfd1339d7 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/epidemic/domain/EpidemicReport.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/epidemic/domain/EpidemicReport.java @@ -13,4 +13,6 @@ public class EpidemicReport extends HisBaseEntity { private String reporterId; private String reporterName; private Date reportDate; private String status; private String cdcConfirmNo; private String delFlag; + private String screenResult; private Date screenTime; private String screenLevel; + private String address; private String contactPhone; } diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmDiagnosis.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmDiagnosis.java new file mode 100644 index 000000000..169794e42 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmDiagnosis.java @@ -0,0 +1,28 @@ +package com.healthlink.his.tcm.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("tcm_diagnosis") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class TcmDiagnosis extends HisBaseEntity { + @TableId(type = IdType.ASSIGN_ID) + private Long id; + private Long encounterId; + private Long patientId; + private String diagnosisType; + private String diagnosisName; + private String diagnosisCode; + private String syndromeType; + private String syndromeName; + private String syndromeCode; + private String remark; + private String enabled; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/mapper/TcmDiagnosisMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/mapper/TcmDiagnosisMapper.java new file mode 100644 index 000000000..c424501cf --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/mapper/TcmDiagnosisMapper.java @@ -0,0 +1,5 @@ +package com.healthlink.his.tcm.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.tcm.domain.TcmDiagnosis; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface TcmDiagnosisMapper extends BaseMapper {} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/service/ITcmDiagnosisService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/service/ITcmDiagnosisService.java new file mode 100644 index 000000000..4d587b471 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/service/ITcmDiagnosisService.java @@ -0,0 +1,4 @@ +package com.healthlink.his.tcm.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.tcm.domain.TcmDiagnosis; +public interface ITcmDiagnosisService extends IService {} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/service/impl/TcmDiagnosisServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/service/impl/TcmDiagnosisServiceImpl.java new file mode 100644 index 000000000..55e0d8587 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/service/impl/TcmDiagnosisServiceImpl.java @@ -0,0 +1,7 @@ +package com.healthlink.his.tcm.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.tcm.domain.TcmDiagnosis; +import com.healthlink.his.tcm.mapper.TcmDiagnosisMapper; +import com.healthlink.his.tcm.service.ITcmDiagnosisService; +import org.springframework.stereotype.Service; +@Service public class TcmDiagnosisServiceImpl extends ServiceImpl implements ITcmDiagnosisService {} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaAldreteScoreMapper.xml b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaAldreteScoreMapper.xml new file mode 100644 index 000000000..d1aacad8f --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaAldreteScoreMapper.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaIntraopEventMapper.xml b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaIntraopEventMapper.xml new file mode 100644 index 000000000..ed3ed38bd --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaIntraopEventMapper.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaPreopVisitMapper.xml b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaPreopVisitMapper.xml new file mode 100644 index 000000000..20070598b --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/resources/mapper/anesthesia/AnesthesiaPreopVisitMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/healthlink-his-ui/src/views/drganalysis/DrgDeepAnalysis.vue b/healthlink-his-ui/src/views/drganalysis/DrgDeepAnalysis.vue new file mode 100644 index 000000000..bcd8a5a69 --- /dev/null +++ b/healthlink-his-ui/src/views/drganalysis/DrgDeepAnalysis.vue @@ -0,0 +1,199 @@ + + + diff --git a/healthlink-his-ui/src/views/drganalysis/deepApi.js b/healthlink-his-ui/src/views/drganalysis/deepApi.js new file mode 100644 index 000000000..877b52649 --- /dev/null +++ b/healthlink-his-ui/src/views/drganalysis/deepApi.js @@ -0,0 +1,13 @@ +import request from '@/utils/request' + +export function analyzeDrgDeep(data) { + return request({ url: '/ybmanage/drg-deep/analyze', method: 'post', data }) +} + +export function getCostAlert(data) { + return request({ url: '/ybmanage/drg-deep/cost-alert', method: 'post', data }) +} + +export function getOptimization(data) { + return request({ url: '/ybmanage/drg-deep/optimization', method: 'post', data }) +} diff --git a/healthlink-his-ui/src/views/ehcard/EhcardManagement.vue b/healthlink-his-ui/src/views/ehcard/EhcardManagement.vue new file mode 100644 index 000000000..6efad5368 --- /dev/null +++ b/healthlink-his-ui/src/views/ehcard/EhcardManagement.vue @@ -0,0 +1,160 @@ + + + diff --git a/healthlink-his-ui/src/views/ehcard/api.js b/healthlink-his-ui/src/views/ehcard/api.js new file mode 100644 index 000000000..8059ff577 --- /dev/null +++ b/healthlink-his-ui/src/views/ehcard/api.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +export function applyEhcard(data) { + return request({ url: '/api/v1/ehcard/apply', method: 'post', data }) +} + +export function getEhcardPage(params) { + return request({ url: '/api/v1/ehcard/page', method: 'get', params }) +} + +export function lockEhcard(params) { + return request({ url: '/api/v1/ehcard/lock', method: 'post', params }) +} + +export function unlockEhcard(params) { + return request({ url: '/api/v1/ehcard/unlock', method: 'post', params }) +} diff --git a/healthlink-his-ui/src/views/einvoice/InvoiceManagement.vue b/healthlink-his-ui/src/views/einvoice/InvoiceManagement.vue new file mode 100644 index 000000000..78411dee7 --- /dev/null +++ b/healthlink-his-ui/src/views/einvoice/InvoiceManagement.vue @@ -0,0 +1,204 @@ + + + diff --git a/healthlink-his-ui/src/views/einvoice/api.js b/healthlink-his-ui/src/views/einvoice/api.js new file mode 100644 index 000000000..0d131e1f7 --- /dev/null +++ b/healthlink-his-ui/src/views/einvoice/api.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +export function generateInvoice(data) { + return request({ url: '/invoice/generate', method: 'post', data }) +} + +export function getInvoicePage(params) { + return request({ url: '/invoice/page', method: 'get', params }) +} + +export function voidInvoice(params) { + return request({ url: '/invoice/void', method: 'post', params }) +} + +export function getReconciliation(params) { + return request({ url: '/invoice/reconciliation', method: 'get', params }) +} diff --git a/healthlink-his-ui/src/views/epidemic/EpidemicReport.vue b/healthlink-his-ui/src/views/epidemic/EpidemicReport.vue new file mode 100644 index 000000000..f2c1dcbf5 --- /dev/null +++ b/healthlink-his-ui/src/views/epidemic/EpidemicReport.vue @@ -0,0 +1,225 @@ + + + diff --git a/healthlink-his-ui/src/views/tcm/TcmDiagnosis.vue b/healthlink-his-ui/src/views/tcm/TcmDiagnosis.vue new file mode 100644 index 000000000..a02dc9976 --- /dev/null +++ b/healthlink-his-ui/src/views/tcm/TcmDiagnosis.vue @@ -0,0 +1,300 @@ + + +