WARCH1 实现企微审批最小历史留存
这个提交包含在:
@@ -0,0 +1,257 @@
|
||||
CREATE TABLE "wecom_approval_archives" (
|
||||
"id" UUID NOT NULL,
|
||||
"corp_id_hash" VARCHAR(64) NOT NULL,
|
||||
"sp_no" VARCHAR(160) NOT NULL,
|
||||
"template_id" VARCHAR(160),
|
||||
"template_type" VARCHAR(40) NOT NULL DEFAULT 'unknown',
|
||||
"sp_name" VARCHAR(160),
|
||||
"normalized_status" VARCHAR(32) NOT NULL DEFAULT 'unknown',
|
||||
"wecom_status" VARCHAR(40),
|
||||
"applicant_employee_id" UUID,
|
||||
"applicant_external_user_id" VARCHAR(128),
|
||||
"submitted_at" TIMESTAMP(3),
|
||||
"applied_at" TIMESTAMP(3),
|
||||
"completed_at" TIMESTAMP(3),
|
||||
"status_observed_at" TIMESTAMP(3),
|
||||
"last_callback_at" TIMESTAMP(3),
|
||||
"last_compensation_at" TIMESTAMP(3),
|
||||
"last_source" VARCHAR(40),
|
||||
"last_detail_digest" VARCHAR(64),
|
||||
"readability_status" VARCHAR(40),
|
||||
"single_tap_approve_risk" BOOLEAN NOT NULL DEFAULT false,
|
||||
"template_adjustment_required" BOOLEAN NOT NULL DEFAULT false,
|
||||
"external_config_status" VARCHAR(40),
|
||||
"source_summary" JSONB,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_archives_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_participants" (
|
||||
"id" UUID NOT NULL,
|
||||
"archive_id" UUID NOT NULL,
|
||||
"role" VARCHAR(32) NOT NULL,
|
||||
"node_index" INTEGER NOT NULL DEFAULT 0,
|
||||
"external_user_id" VARCHAR(128) NOT NULL,
|
||||
"employee_id" UUID,
|
||||
"is_current" BOOLEAN NOT NULL DEFAULT false,
|
||||
"mapping_status" VARCHAR(32) NOT NULL DEFAULT 'unknown',
|
||||
"display_summary" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_participants_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_actions" (
|
||||
"id" UUID NOT NULL,
|
||||
"archive_id" UUID NOT NULL,
|
||||
"action_type" VARCHAR(40) NOT NULL,
|
||||
"operator_external_user_id" VARCHAR(128),
|
||||
"operator_employee_id" UUID,
|
||||
"action_time" TIMESTAMP(3),
|
||||
"node_index" INTEGER NOT NULL DEFAULT 0,
|
||||
"comment_summary" TEXT,
|
||||
"source" VARCHAR(40) NOT NULL,
|
||||
"idempotency_key" VARCHAR(96) NOT NULL,
|
||||
"evidence_digest" VARCHAR(64),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_actions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_field_summaries" (
|
||||
"id" UUID NOT NULL,
|
||||
"archive_id" UUID NOT NULL,
|
||||
"field_key" VARCHAR(120) NOT NULL,
|
||||
"field_index" INTEGER NOT NULL DEFAULT 0,
|
||||
"field_name" VARCHAR(160),
|
||||
"field_type" VARCHAR(80),
|
||||
"normalized_value" TEXT,
|
||||
"value_preview" TEXT,
|
||||
"sensitive_level" VARCHAR(32) NOT NULL DEFAULT 'normal',
|
||||
"display_allowed" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_field_summaries_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_attachment_summaries" (
|
||||
"id" UUID NOT NULL,
|
||||
"archive_id" UUID NOT NULL,
|
||||
"attachment_index" INTEGER NOT NULL DEFAULT 0,
|
||||
"attachment_type" VARCHAR(80),
|
||||
"external_ref_summary" TEXT,
|
||||
"downloaded" BOOLEAN NOT NULL DEFAULT false,
|
||||
"sensitive_level" VARCHAR(32) NOT NULL DEFAULT 'restricted',
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_attachment_summaries_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_callback_events" (
|
||||
"id" UUID NOT NULL,
|
||||
"archive_id" UUID,
|
||||
"corp_id_hash" VARCHAR(64) NOT NULL,
|
||||
"sp_no" VARCHAR(160) NOT NULL,
|
||||
"template_id" VARCHAR(160),
|
||||
"event_type" VARCHAR(80) NOT NULL,
|
||||
"callback_kind" VARCHAR(80) NOT NULL,
|
||||
"approval_type" VARCHAR(40) NOT NULL DEFAULT 'unknown',
|
||||
"normalized_status" VARCHAR(32) NOT NULL DEFAULT 'unknown',
|
||||
"wecom_status" VARCHAR(40),
|
||||
"received_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"event_time" TIMESTAMP(3),
|
||||
"apply_time" TIMESTAMP(3),
|
||||
"processing_status" VARCHAR(40) NOT NULL DEFAULT 'accepted',
|
||||
"processing_error_code" VARCHAR(80),
|
||||
"processing_error_message" TEXT,
|
||||
"retry_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"idempotency_key" VARCHAR(96) NOT NULL,
|
||||
"event_digest" VARCHAR(64) NOT NULL,
|
||||
"source_summary" JSONB,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_callback_events_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_compensation_runs" (
|
||||
"id" UUID NOT NULL,
|
||||
"run_key" VARCHAR(64),
|
||||
"mode" VARCHAR(32) NOT NULL DEFAULT 'live_read',
|
||||
"status" VARCHAR(32) NOT NULL DEFAULT 'running',
|
||||
"start_time" TIMESTAMP(3) NOT NULL,
|
||||
"end_time" TIMESTAMP(3) NOT NULL,
|
||||
"template_filter" JSONB,
|
||||
"cursor_summary" TEXT,
|
||||
"page_size" INTEGER NOT NULL DEFAULT 100,
|
||||
"page_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"item_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"detail_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"finding_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"error_code" VARCHAR(80),
|
||||
"error_message" TEXT,
|
||||
"started_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"finished_at" TIMESTAMP(3),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_compensation_runs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_compensation_items" (
|
||||
"id" UUID NOT NULL,
|
||||
"run_id" UUID NOT NULL,
|
||||
"archive_id" UUID,
|
||||
"sp_no" VARCHAR(160) NOT NULL,
|
||||
"template_id" VARCHAR(160),
|
||||
"template_type" VARCHAR(40) NOT NULL DEFAULT 'unknown',
|
||||
"normalized_status" VARCHAR(32) NOT NULL DEFAULT 'unknown',
|
||||
"detail_status" VARCHAR(40) NOT NULL DEFAULT 'pending',
|
||||
"detail_digest" VARCHAR(64),
|
||||
"error_code" VARCHAR(80),
|
||||
"error_message" TEXT,
|
||||
"source_summary" JSONB,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_compensation_items_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wecom_approval_reconcile_findings" (
|
||||
"id" UUID NOT NULL,
|
||||
"archive_id" UUID,
|
||||
"run_id" UUID,
|
||||
"finding_type" VARCHAR(80) NOT NULL,
|
||||
"status" VARCHAR(32) NOT NULL DEFAULT 'open',
|
||||
"severity" VARCHAR(32) NOT NULL DEFAULT 'info',
|
||||
"evidence_digest" VARCHAR(64) NOT NULL,
|
||||
"source" VARCHAR(40) NOT NULL,
|
||||
"description" TEXT,
|
||||
"detected_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"resolved_at" TIMESTAMP(3),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "wecom_approval_reconcile_findings_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "wecom_approval_archives_corp_sp_no_ux" ON "wecom_approval_archives"("corp_id_hash", "sp_no");
|
||||
CREATE INDEX "idx_wecom_approval_arch_applicant_status_at" ON "wecom_approval_archives"("applicant_employee_id", "status_observed_at");
|
||||
CREATE INDEX "idx_wecom_approval_arch_type_status" ON "wecom_approval_archives"("template_type", "normalized_status");
|
||||
CREATE INDEX "idx_wecom_approval_arch_last_source" ON "wecom_approval_archives"("last_source");
|
||||
|
||||
CREATE UNIQUE INDEX "wecom_approval_participants_node_user_ux" ON "wecom_approval_participants"("archive_id", "role", "node_index", "external_user_id");
|
||||
CREATE INDEX "idx_wecom_approval_part_employee_role" ON "wecom_approval_participants"("employee_id", "role");
|
||||
CREATE INDEX "idx_wecom_approval_part_external_user" ON "wecom_approval_participants"("external_user_id");
|
||||
|
||||
CREATE UNIQUE INDEX "wecom_approval_actions_archive_key_ux" ON "wecom_approval_actions"("archive_id", "idempotency_key");
|
||||
CREATE INDEX "idx_wecom_approval_actions_operator_time" ON "wecom_approval_actions"("operator_employee_id", "action_time");
|
||||
CREATE INDEX "idx_wecom_approval_actions_type_time" ON "wecom_approval_actions"("action_type", "action_time");
|
||||
|
||||
CREATE UNIQUE INDEX "wecom_approval_fields_archive_key_ux" ON "wecom_approval_field_summaries"("archive_id", "field_key", "field_index");
|
||||
CREATE INDEX "idx_wecom_approval_fields_key" ON "wecom_approval_field_summaries"("field_key");
|
||||
|
||||
CREATE INDEX "idx_wecom_approval_attach_archive_idx" ON "wecom_approval_attachment_summaries"("archive_id", "attachment_index");
|
||||
|
||||
CREATE UNIQUE INDEX "wecom_approval_callback_events_idempotency_key_key" ON "wecom_approval_callback_events"("idempotency_key");
|
||||
CREATE INDEX "idx_wecom_approval_callbacks_sp_no" ON "wecom_approval_callback_events"("sp_no");
|
||||
CREATE INDEX "idx_wecom_approval_callbacks_archive_at" ON "wecom_approval_callback_events"("archive_id", "received_at");
|
||||
CREATE INDEX "idx_wecom_approval_callbacks_status_at" ON "wecom_approval_callback_events"("processing_status", "received_at");
|
||||
|
||||
CREATE INDEX "idx_wecom_approval_comp_runs_key" ON "wecom_approval_compensation_runs"("run_key");
|
||||
CREATE INDEX "idx_wecom_approval_comp_runs_status" ON "wecom_approval_compensation_runs"("status", "started_at");
|
||||
CREATE INDEX "idx_wecom_approval_comp_runs_window" ON "wecom_approval_compensation_runs"("start_time", "end_time");
|
||||
|
||||
CREATE UNIQUE INDEX "wecom_approval_comp_items_run_sp_no_ux" ON "wecom_approval_compensation_items"("run_id", "sp_no");
|
||||
CREATE INDEX "idx_wecom_approval_comp_items_archive" ON "wecom_approval_compensation_items"("archive_id");
|
||||
CREATE INDEX "idx_wecom_approval_comp_items_status" ON "wecom_approval_compensation_items"("detail_status");
|
||||
|
||||
CREATE UNIQUE INDEX "wecom_approval_findings_archive_digest_ux" ON "wecom_approval_reconcile_findings"("archive_id", "finding_type", "evidence_digest");
|
||||
CREATE UNIQUE INDEX "wecom_approval_findings_run_digest_ux" ON "wecom_approval_reconcile_findings"("run_id", "finding_type", "evidence_digest");
|
||||
CREATE INDEX "idx_wecom_approval_findings_status_at" ON "wecom_approval_reconcile_findings"("status", "detected_at");
|
||||
CREATE INDEX "idx_wecom_approval_findings_run" ON "wecom_approval_reconcile_findings"("run_id");
|
||||
|
||||
ALTER TABLE "wecom_approval_archives"
|
||||
ADD CONSTRAINT "wecom_approval_archives_applicant_employee_id_fkey"
|
||||
FOREIGN KEY ("applicant_employee_id") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_participants"
|
||||
ADD CONSTRAINT "wecom_approval_participants_archive_id_fkey"
|
||||
FOREIGN KEY ("archive_id") REFERENCES "wecom_approval_archives"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_participants"
|
||||
ADD CONSTRAINT "wecom_approval_participants_employee_id_fkey"
|
||||
FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_actions"
|
||||
ADD CONSTRAINT "wecom_approval_actions_archive_id_fkey"
|
||||
FOREIGN KEY ("archive_id") REFERENCES "wecom_approval_archives"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_actions"
|
||||
ADD CONSTRAINT "wecom_approval_actions_operator_employee_id_fkey"
|
||||
FOREIGN KEY ("operator_employee_id") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_field_summaries"
|
||||
ADD CONSTRAINT "wecom_approval_field_summaries_archive_id_fkey"
|
||||
FOREIGN KEY ("archive_id") REFERENCES "wecom_approval_archives"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_attachment_summaries"
|
||||
ADD CONSTRAINT "wecom_approval_attachment_summaries_archive_id_fkey"
|
||||
FOREIGN KEY ("archive_id") REFERENCES "wecom_approval_archives"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_callback_events"
|
||||
ADD CONSTRAINT "wecom_approval_callback_events_archive_id_fkey"
|
||||
FOREIGN KEY ("archive_id") REFERENCES "wecom_approval_archives"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_compensation_items"
|
||||
ADD CONSTRAINT "wecom_approval_compensation_items_run_id_fkey"
|
||||
FOREIGN KEY ("run_id") REFERENCES "wecom_approval_compensation_runs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_compensation_items"
|
||||
ADD CONSTRAINT "wecom_approval_compensation_items_archive_id_fkey"
|
||||
FOREIGN KEY ("archive_id") REFERENCES "wecom_approval_archives"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_reconcile_findings"
|
||||
ADD CONSTRAINT "wecom_approval_reconcile_findings_archive_id_fkey"
|
||||
FOREIGN KEY ("archive_id") REFERENCES "wecom_approval_archives"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "wecom_approval_reconcile_findings"
|
||||
ADD CONSTRAINT "wecom_approval_reconcile_findings_run_id_fkey"
|
||||
FOREIGN KEY ("run_id") REFERENCES "wecom_approval_compensation_runs"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
在新工单中引用
屏蔽一个用户