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 026b8aaac..50074cb2a 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 @@ -15,22 +15,22 @@ public class TcmAppServiceImpl implements ITcmAppService { public List getPrescriptions(String type) { return prescriptionService.list(new LambdaQueryWrapper() .eq(type != null, TcmPrescription::getPrescriptionType, type) - .eq(TcmPrescription::getEnabled, "1").eq(TcmPrescription::getDelFlag, "0")); + .eq(TcmPrescription::getEnabled, "1").eq(TcmPrescription::getDeleteFlag, "0")); } @Override - public TcmPrescription savePrescription(TcmPrescription p) { p.setDelFlag("0"); p.setEnabled("1"); prescriptionService.save(p); return p; } + public TcmPrescription savePrescription(TcmPrescription p) { p.setDeleteFlag("0"); p.setEnabled("1"); prescriptionService.save(p); return p; } @Override - public TcmConstitutionAssessment assess(TcmConstitutionAssessment a) { a.setDelFlag("0"); assessmentService.save(a); return a; } + public TcmConstitutionAssessment assess(TcmConstitutionAssessment a) { a.setDeleteFlag("0"); assessmentService.save(a); return a; } @Override public List getAssessmentsByEncounter(Long encounterId) { return assessmentService.list(new LambdaQueryWrapper() - .eq(TcmConstitutionAssessment::getEncounterId, encounterId).eq(TcmConstitutionAssessment::getDelFlag, "0")); + .eq(TcmConstitutionAssessment::getEncounterId, encounterId).eq(TcmConstitutionAssessment::getDeleteFlag, "0")); } @Override public Map getStatistics() { Map r = new HashMap<>(); - r.put("totalPrescriptions", prescriptionService.count(new LambdaQueryWrapper().eq(TcmPrescription::getDelFlag, "0"))); - r.put("totalAssessments", assessmentService.count(new LambdaQueryWrapper().eq(TcmConstitutionAssessment::getDelFlag, "0"))); + r.put("totalPrescriptions", prescriptionService.count(new LambdaQueryWrapper().eq(TcmPrescription::getDeleteFlag, "0"))); + r.put("totalAssessments", assessmentService.count(new LambdaQueryWrapper().eq(TcmConstitutionAssessment::getDeleteFlag, "0"))); return r; } } diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V39__tcm_and_esb_tables.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V39__tcm_and_esb_tables.sql new file mode 100644 index 000000000..682d21089 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V39__tcm_and_esb_tables.sql @@ -0,0 +1,166 @@ +-- 中医方剂表 +CREATE TABLE IF NOT EXISTS healthlink_his.tcm_prescription ( + id BIGSERIAL PRIMARY KEY, + prescription_name VARCHAR(200) NOT NULL, + prescription_type VARCHAR(50), + herbs TEXT, + dosage VARCHAR(500), + usage VARCHAR(500), + indication TEXT, + source VARCHAR(200), + 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 TABLE IF NOT EXISTS healthlink_his.tcm_constitution_assessment ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT, + patient_id BIGINT, + constitution_type VARCHAR(50), + score INTEGER, + recommendation TEXT, + assessor_id BIGINT, + assessment_time TIMESTAMP, + 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 +); + +-- ESB消息表 +CREATE TABLE IF NOT EXISTS healthlink_his.sys_esb_message ( + id BIGSERIAL PRIMARY KEY, + message_id VARCHAR(100) NOT NULL, + message_type VARCHAR(50), + source_system VARCHAR(100), + target_system VARCHAR(100), + message_content TEXT, + message_format VARCHAR(50), + status VARCHAR(20) DEFAULT 'PENDING', + retry_count INTEGER DEFAULT 0, + error_message TEXT, + 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 +); + +-- ESB服务注册表 +CREATE TABLE IF NOT EXISTS healthlink_his.sys_esb_service_registry ( + id BIGSERIAL PRIMARY KEY, + service_name VARCHAR(200) NOT NULL, + service_version VARCHAR(50), + service_endpoint VARCHAR(500), + service_description TEXT, + service_status VARCHAR(20) DEFAULT 'ACTIVE', + protocol VARCHAR(50), + timeout_ms INTEGER DEFAULT 5000, + 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 +); + +-- ESB监控统计表 +CREATE TABLE IF NOT EXISTS healthlink_his.esb_monitor_stats ( + id BIGSERIAL PRIMARY KEY, + stat_hour TIMESTAMP, + source_system VARCHAR(100), + target_system VARCHAR(100), + total_count INTEGER DEFAULT 0, + success_count INTEGER DEFAULT 0, + fail_count INTEGER DEFAULT 0, + retry_count INTEGER DEFAULT 0, + avg_duration_ms INTEGER DEFAULT 0, + tenant_id INTEGER DEFAULT 0, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- ESB死信队列表 +CREATE TABLE IF NOT EXISTS healthlink_his.esb_dead_letter ( + id BIGSERIAL PRIMARY KEY, + message_id VARCHAR(100) NOT NULL, + source_system VARCHAR(100), + target_system VARCHAR(100), + message_type VARCHAR(50), + message_content TEXT, + error_message TEXT, + retry_count INTEGER DEFAULT 0, + max_retry INTEGER DEFAULT 3, + first_fail_time TIMESTAMP, + 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 +); + +-- ESB CDA文档表 +CREATE TABLE IF NOT EXISTS healthlink_his.esb_cda_document ( + id BIGSERIAL PRIMARY KEY, + document_type VARCHAR(50), + document_title VARCHAR(200), + encounter_id BIGINT, + patient_id BIGINT, + cda_xml TEXT, + status VARCHAR(20) DEFAULT 'DRAFT', + version_id INTEGER 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 +); + +-- ESB编码映射表 +CREATE TABLE IF NOT EXISTS healthlink_his.esb_code_mapping ( + id BIGSERIAL PRIMARY KEY, + source_system VARCHAR(100), + source_code VARCHAR(100), + target_system VARCHAR(100), + target_code VARCHAR(100), + mapping_type VARCHAR(50), + description TEXT, + tenant_id INTEGER DEFAULT 0, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- ESB FHIR资源表 +CREATE TABLE IF NOT EXISTS healthlink_his.esb_fhir_resource ( + id BIGSERIAL PRIMARY KEY, + resource_type VARCHAR(50), + resource_id VARCHAR(100), + encounter_id BIGINT, + patient_id BIGINT, + resource_json TEXT, + status VARCHAR(20) DEFAULT 'ACTIVE', + version_id INTEGER 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_prescription_type ON healthlink_his.tcm_prescription(prescription_type); +CREATE INDEX IF NOT EXISTS idx_tcm_constitution_encounter ON healthlink_his.tcm_constitution_assessment(encounter_id); +CREATE INDEX IF NOT EXISTS idx_esb_message_status ON healthlink_his.sys_esb_message(status); +CREATE INDEX IF NOT EXISTS idx_esb_message_source ON healthlink_his.sys_esb_message(source_system); +CREATE INDEX IF NOT EXISTS idx_esb_dead_letter_msg ON healthlink_his.esb_dead_letter(message_id); +CREATE INDEX IF NOT EXISTS idx_esb_monitor_hour ON healthlink_his.esb_monitor_stats(stat_hour); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmConstitutionAssessment.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmConstitutionAssessment.java index 346e7ec74..b6569617a 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmConstitutionAssessment.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmConstitutionAssessment.java @@ -3,13 +3,23 @@ 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 lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import java.util.Date; -@Data @TableName("tcm_constitution_assessment") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) + +@Data +@TableName("tcm_constitution_assessment") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) public class TcmConstitutionAssessment extends HisBaseEntity { - @TableId(type = IdType.ASSIGN_ID) private Long id; - private Long encounterId; private Long patientId; - private String constitutionType; private Integer score; - private String recommendation; private Long assessorId; - private Date assessmentTime; private String delFlag; + @TableId(type = IdType.ASSIGN_ID) + private Long id; + private Long encounterId; + private Long patientId; + private String constitutionType; + private Integer score; + private String recommendation; + private Long assessorId; + private Date assessmentTime; } diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmPrescription.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmPrescription.java index 3ed051459..12a80bc04 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmPrescription.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/tcm/domain/TcmPrescription.java @@ -1,13 +1,27 @@ package com.healthlink.his.tcm.domain; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; 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; -@Data @TableName("tcm_prescription") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@TableName("tcm_prescription") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) public class TcmPrescription extends HisBaseEntity { - @TableId(type = IdType.ASSIGN_ID) private Long id; - private String prescriptionName; private String prescriptionType; - private String herbs; private String dosage; private String usage; - private String indication; private String source; private String enabled; private String delFlag; + @TableId(type = IdType.ASSIGN_ID) + private Long id; + private String prescriptionName; + private String prescriptionType; + private String herbs; + private String dosage; + @TableField("\"usage\"") + private String usage; + private String indication; + private String source; + private String enabled; } diff --git a/healthlink-his-ui/src/views/tcm/constitution/index.vue b/healthlink-his-ui/src/views/tcm/constitution/index.vue new file mode 100644 index 000000000..f40f4c18d --- /dev/null +++ b/healthlink-his-ui/src/views/tcm/constitution/index.vue @@ -0,0 +1,88 @@ + + diff --git a/healthlink-his-ui/src/views/tcm/traditional/index.vue b/healthlink-his-ui/src/views/tcm/traditional/index.vue new file mode 100644 index 000000000..a7b5f09f9 --- /dev/null +++ b/healthlink-his-ui/src/views/tcm/traditional/index.vue @@ -0,0 +1,104 @@ + +