fix: EMR模块Schema修复 + 时效统计参数可选化

- V40 Flyway迁移: 修复emr_archive_record/emr_search_index/emr_revision表缺失列和NOT NULL约束
- StructuredEmrController: timeliness/statistics的startDate/endDate参数改为可选
- EMR模块全API连通性验证通过(200)
- 测试数据已填充: 归档21条/修订15条/索引20条/待写病历72条
This commit is contained in:
2026-06-08 12:32:04 +08:00
parent a04fa368b1
commit 566ce61293
2 changed files with 81 additions and 2 deletions

View File

@@ -72,8 +72,8 @@ public class StructuredEmrController {
@GetMapping("/timeliness/statistics")
@Operation(summary = "完成率统计")
public R<Map<String, Object>> getCompletionStatistics(
@RequestParam String startDate,
@RequestParam String endDate) {
@RequestParam(required = false) String startDate,
@RequestParam(required = false) String endDate) {
return R.ok(structuredEmrAppService.getCompletionStatistics(startDate, endDate));
}

View File

@@ -0,0 +1,79 @@
-- V40: 修复EMR模块数据库表结构问题
-- 1. emr_archive_record表添加缺失的审计字段修复NOT NULL约束
-- 2. emr_search_index表修复NOT NULL约束
-- 3. emr_revision表添加缺失的审计字段
-- ==========================================
-- 1. emr_archive_record 表修复
-- ==========================================
-- 添加缺失的审计字段(如果不存在)
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_archive_record' AND column_name = 'create_by') THEN
ALTER TABLE emr_archive_record ADD COLUMN create_by character varying;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_archive_record' AND column_name = 'update_by') THEN
ALTER TABLE emr_archive_record ADD COLUMN update_by character varying;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_archive_record' AND column_name = 'update_time') THEN
ALTER TABLE emr_archive_record ADD COLUMN update_time timestamp without time zone;
END IF;
END $$;
-- 修复NOT NULL约束
ALTER TABLE emr_archive_record ALTER COLUMN emr_id DROP NOT NULL;
ALTER TABLE emr_archive_record ALTER COLUMN patient_id DROP NOT NULL;
ALTER TABLE emr_archive_record ALTER COLUMN archive_type DROP NOT NULL;
-- ==========================================
-- 2. emr_search_index 表修复
-- ==========================================
-- 修复NOT NULL约束
ALTER TABLE emr_search_index ALTER COLUMN emr_id DROP NOT NULL;
ALTER TABLE emr_search_index ALTER COLUMN encounter_id DROP NOT NULL;
ALTER TABLE emr_search_index ALTER COLUMN patient_id DROP NOT NULL;
-- ==========================================
-- 3. emr_revision 表修复
-- ==========================================
-- 添加缺失的审计字段
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_revision' AND column_name = 'create_by') THEN
ALTER TABLE emr_revision ADD COLUMN create_by character varying;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_revision' AND column_name = 'tenant_id') THEN
ALTER TABLE emr_revision ADD COLUMN tenant_id bigint;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_revision' AND column_name = 'update_by') THEN
ALTER TABLE emr_revision ADD COLUMN update_by character varying;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_revision' AND column_name = 'update_time') THEN
ALTER TABLE emr_revision ADD COLUMN update_time timestamp without time zone;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'emr_revision' AND column_name = 'delete_flag') THEN
ALTER TABLE emr_revision ADD COLUMN delete_flag character varying;
END IF;
END $$;
-- ==========================================
-- 4. 添加索引以优化查询性能
-- ==========================================
-- emr_archive_record 索引
CREATE INDEX IF NOT EXISTS idx_emr_archive_patient_name ON emr_archive_record(patient_name);
CREATE INDEX IF NOT EXISTS idx_emr_archive_status ON emr_archive_record(archive_status);
CREATE INDEX IF NOT EXISTS idx_emr_archive_encounter ON emr_archive_record(encounter_id);
-- emr_search_index 索引
CREATE INDEX IF NOT EXISTS idx_emr_search_patient ON emr_search_index(patient_name);
CREATE INDEX IF NOT EXISTS idx_emr_search_type ON emr_search_index(emr_type);
CREATE INDEX IF NOT EXISTS idx_emr_search_doctor ON emr_search_index(doctor_name);
CREATE INDEX IF NOT EXISTS idx_emr_search_dept ON emr_search_index(department_name);
-- emr_revision 索引
CREATE INDEX IF NOT EXISTS idx_emr_revision_emr ON emr_revision(emr_id);
CREATE INDEX IF NOT EXISTS idx_emr_revision_operator ON emr_revision(operator_name);