715 lines
36 KiB
SQL
715 lines
36 KiB
SQL
SET FOREIGN_KEY_CHECKS=0;
|
|
CREATE TABLE `sys_role` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `role_code` VARCHAR(32) NOT NULL UNIQUE, `role_name` VARCHAR(64) NOT NULL, `status` VARCHAR(16) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `sys_permission` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `permission_code` VARCHAR(64) NOT NULL UNIQUE, `resource` VARCHAR(64) NOT NULL, `action` VARCHAR(32) NOT NULL, `data_scope` VARCHAR(32) NOT NULL, `field_policy` JSON NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_sys_permission_resource_action` (`resource`,`action`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `sys_user_role` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `user_id` BIGINT UNSIGNED NOT NULL, `role_id` BIGINT UNSIGNED NOT NULL, `assigned_at` DATETIME NOT NULL, `expires_at` DATETIME NULL, UNIQUE KEY `uk_sys_user_role` (`user_id`,`role_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `sys_role_permission` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `role_id` BIGINT UNSIGNED NOT NULL, `permission_id` BIGINT UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_sys_role_permission` (`role_id`,`permission_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `episodes` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `episode_uuid` CHAR(36) NULL UNIQUE, `customer_id` BIGINT UNSIGNED NOT NULL, `session_id` VARCHAR(64) NOT NULL, `start_message_no` INT NULL, `end_message_no` INT NULL, `portals_involved` JSON NOT NULL, `summary` TEXT NOT NULL, `extraction_status` VARCHAR(16) NOT NULL DEFAULT '待提取', `content_hash` CHAR(64) NULL UNIQUE, `retry_count` INT NOT NULL DEFAULT 0, `started_at` DATETIME NULL, `ended_at` DATETIME NULL, `handoff_to_employee_id` BIGINT UNSIGNED NULL, `start_at` DATETIME NULL, `end_at` DATETIME NULL, `promoted_to_ltm` TINYINT(1) NOT NULL DEFAULT 0, `created_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `memory_unit` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `memory_uuid` CHAR(36) NOT NULL UNIQUE, `customer_id` BIGINT UNSIGNED NOT NULL, `memory_key` VARCHAR(128) NOT NULL, `content` TEXT NOT NULL, `structured_value` JSON NULL, `memory_type` VARCHAR(24) NOT NULL, `source_type` VARCHAR(24) NOT NULL, `source_confidence` DECIMAL(5,4) NOT NULL, `confidence` DECIMAL(5,4) NOT NULL, `evidence_count` INT NOT NULL DEFAULT 0, `conflict_count` INT NOT NULL DEFAULT 0, `recall_count` INT NOT NULL DEFAULT 0, `status` VARCHAR(16) NOT NULL, `valid_from` DATETIME NOT NULL, `valid_until` DATETIME NULL, `last_evidenced_at` DATETIME NULL, `last_recall_at` DATETIME NULL, `promoted_at` DATETIME NULL, `version` BIGINT UNSIGNED NOT NULL DEFAULT 1, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_memory_unit_customer` (`customer_id`,`status`,`confidence`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `memory_evidence` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `memory_id` BIGINT UNSIGNED NOT NULL, `evidence_type` VARCHAR(24) NOT NULL, `source_table` VARCHAR(64) NULL, `source_record_id` VARCHAR(64) NULL, `source_episode_id` BIGINT UNSIGNED NULL, `evidence_excerpt` TEXT NULL, `evidence_snapshot` JSON NULL, `weight` DECIMAL(5,4) NOT NULL, `idempotency_key` VARCHAR(128) NOT NULL UNIQUE, `occurred_at` DATETIME NOT NULL, `created_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `memory_conflict` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `left_memory_id` BIGINT UNSIGNED NOT NULL, `right_memory_id` BIGINT UNSIGNED NOT NULL, `conflict_type` VARCHAR(24) NOT NULL, `severity` VARCHAR(8) NOT NULL, `status` VARCHAR(16) NOT NULL, `resolution` TEXT NULL, `winner_memory_id` BIGINT UNSIGNED NULL, `resolved_by` BIGINT UNSIGNED NULL, `resolved_at` DATETIME NULL, `created_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `profile_snapshots` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `profile_uuid` CHAR(36) NULL UNIQUE, `customer_id` BIGINT UNSIGNED NOT NULL, `version` BIGINT UNSIGNED NOT NULL, `snapshot` JSON NOT NULL, `generation_basis` JSON NULL, `snapshot_hash` CHAR(64) NULL, `is_current` TINYINT(1) NOT NULL DEFAULT 0, `current_customer_id` BIGINT UNSIGNED NULL, `generated_at` DATETIME NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_profile_snapshot_version` (`customer_id`,`version`), UNIQUE KEY `uk_profile_snapshot_current` (`current_customer_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `memory_sync_outbox` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `event_uuid` CHAR(36) NOT NULL, `aggregate_type` VARCHAR(24) NOT NULL, `aggregate_uuid` CHAR(36) NOT NULL, `aggregate_version` BIGINT UNSIGNED NOT NULL, `target_store` VARCHAR(16) NOT NULL, `operation` VARCHAR(16) NOT NULL, `payload` JSON NOT NULL, `status` VARCHAR(16) NOT NULL, `retry_count` INT NOT NULL DEFAULT 0, `next_retry_at` DATETIME NULL, `last_error` TEXT NULL, `created_at` DATETIME NOT NULL, `processed_at` DATETIME NULL, UNIQUE KEY `uk_memory_sync_event` (`event_uuid`,`target_store`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `interaction_audit` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `actor_type` VARCHAR(16) NOT NULL, `actor_id` BIGINT UNSIGNED NULL, `target_customer_id` BIGINT UNSIGNED NULL, `session_id` VARCHAR(64) NULL, `portal` VARCHAR(32) NULL, `action_type` VARCHAR(64) NOT NULL, `detail` JSON NOT NULL, `created_at` DATETIME NOT NULL, KEY `idx_audit_actor` (`actor_type`,`actor_id`,`created_at`), KEY `idx_audit_customer` (`target_customer_id`,`created_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `client_facing_content` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `customer_id` BIGINT UNSIGNED NOT NULL, `content_type` VARCHAR(32) NOT NULL, `draft_content` JSON NOT NULL, `generated_by_portal` VARCHAR(32) NOT NULL, `review_status` VARCHAR(16) NOT NULL, `reviewer_user_id` BIGINT UNSIGNED NULL, `reviewed_at` DATETIME NULL, `published_at` DATETIME NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_content_customer_status` (`customer_id`,`review_status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `conversation_message` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `session_id` VARCHAR(64) NOT NULL, `message_no` INT NULL, `customer_id` BIGINT UNSIGNED NULL, `portal` VARCHAR(32) NOT NULL, `role` VARCHAR(16) NOT NULL, `content` MEDIUMTEXT NOT NULL, `tool_calls` JSON NULL, `trace_id` VARCHAR(64) NULL, `intent` VARCHAR(32) NULL, `confidence` DECIMAL(5,4) NULL, `source_references` JSON NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_message_session_no` (`session_id`,`message_no`), KEY `idx_message_customer_created` (`customer_id`,`created_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_knowledge_meta` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `knowledge_type` VARCHAR(32) NOT NULL, `title` VARCHAR(256) NOT NULL, `source_file` VARCHAR(256) NULL, `minio_path` VARCHAR(512) NULL, `milvus_collection` VARCHAR(64) NOT NULL, `version` VARCHAR(16) NULL, `effective_date` DATE NULL, `expire_date` DATE NULL, `content_text` MEDIUMTEXT NOT NULL, `tags` JSON NULL, `reviewer_id` BIGINT UNSIGNED NULL, `review_status` VARCHAR(16) NOT NULL DEFAULT 'pending', `status` VARCHAR(16) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_knowledge_status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `sys_user` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`user_no` VARCHAR(32) NOT NULL,
|
|
`username` VARCHAR(64) NOT NULL,
|
|
`email` VARCHAR(128) NULL,
|
|
`password_hash` VARCHAR(255) NOT NULL,
|
|
`user_type` VARCHAR(16) NOT NULL,
|
|
`employee_role` VARCHAR(32) NULL,
|
|
`customer_tier` VARCHAR(16) NULL,
|
|
`investor_type` VARCHAR(8) NULL,
|
|
`investor_type_assessed_at` DATETIME NULL,
|
|
`is_professional_investor` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`professional_investor_status` VARCHAR(16) NOT NULL,
|
|
`professional_investor_certified_at` DATETIME NULL,
|
|
`fund_account_status` VARCHAR(16) NOT NULL,
|
|
`fund_account_opened_at` DATETIME NULL,
|
|
`status` VARCHAR(16) NOT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_sys_user_user_no` (`user_no`),
|
|
UNIQUE KEY `uk_sys_user_username` (`username`),
|
|
UNIQUE KEY `uk_sys_user_email` (`email`),
|
|
KEY `idx_sys_user_user_type` (`user_type`),
|
|
KEY `idx_sys_user_employee_role` (`employee_role`),
|
|
KEY `idx_sys_user_status` (`status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `sys_customer_assignment` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`employee_id` BIGINT UNSIGNED NOT NULL,
|
|
`employee_role` VARCHAR(32) NOT NULL,
|
|
`assigned_at` DATETIME NOT NULL,
|
|
`unassigned_at` DATETIME NULL,
|
|
UNIQUE KEY `uk_sys_customer_assignment_customer_id` (`customer_id`),
|
|
UNIQUE KEY `uk_sys_customer_assignment_employee_role` (`employee_role`),
|
|
KEY `idx_sys_customer_assignment_customer_id` (`customer_id`),
|
|
KEY `idx_sys_customer_assignment_employee_id` (`employee_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_customer_profile` (
|
|
`customer_id` BIGINT UNSIGNED NOT NULL PRIMARY KEY,
|
|
`trade_account` VARCHAR(32) NOT NULL,
|
|
`real_name` VARCHAR(64) NOT NULL,
|
|
`birth_date` DATE NULL,
|
|
`occupation` VARCHAR(64) NULL,
|
|
`mobile_masked` VARCHAR(32) NULL,
|
|
`investor_type` VARCHAR(8) NOT NULL,
|
|
`investment_horizon` VARCHAR(32) NULL,
|
|
`preferred_asset_class` JSON NULL,
|
|
`trading_frequency` VARCHAR(32) NULL,
|
|
`last_active_at` DATETIME NULL,
|
|
`total_asset` DECIMAL(18,2) NOT NULL,
|
|
`behavior_score` INT NOT NULL,
|
|
`risk_tags` JSON NULL,
|
|
`opened_at` DATETIME NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_customer_profile_trade_account` (`trade_account`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_risk_assessment` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`questionnaire_version` VARCHAR(32) NOT NULL,
|
|
`answers` JSON NOT NULL,
|
|
`total_score` INT NOT NULL,
|
|
`investor_type` VARCHAR(8) NOT NULL,
|
|
`assessed_at` DATETIME NOT NULL,
|
|
`valid_until` DATETIME NOT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
KEY `idx_fin_risk_assessment_customer_id` (`customer_id`),
|
|
KEY `idx_fin_risk_assessment_questionnaire_version` (`questionnaire_version`),
|
|
KEY `idx_fin_risk_assessment_valid_until` (`valid_until`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `user_facts` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`fact_key` VARCHAR(128) NOT NULL,
|
|
`fact_value` JSON NOT NULL,
|
|
`source_portal` VARCHAR(16) NOT NULL,
|
|
`source_episode_id` BIGINT UNSIGNED NULL,
|
|
`confidence` FLOAT NOT NULL DEFAULT 1.0,
|
|
`is_critical` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`created_at` DATETIME NOT NULL,
|
|
KEY `idx_user_facts_customer_id` (`customer_id`),
|
|
KEY `idx_user_facts_fact_key` (`fact_key`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_product` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`product_code` VARCHAR(32) NOT NULL,
|
|
`product_name` VARCHAR(128) NOT NULL,
|
|
`exchange_code` VARCHAR(16) NOT NULL,
|
|
`product_category` VARCHAR(32) NOT NULL,
|
|
`risk_level` VARCHAR(8) NOT NULL,
|
|
`fund_manager` VARCHAR(64) NULL,
|
|
`currency` VARCHAR(8) NOT NULL DEFAULT 'CNY',
|
|
`lot_size` DECIMAL(18,4) NOT NULL,
|
|
`price_tick` DECIMAL(18,6) NOT NULL,
|
|
`current_nav` DECIMAL(18,6) NULL,
|
|
`current_nav_at` DATETIME NULL,
|
|
`min_amount` DECIMAL(18,2) NOT NULL DEFAULT 0,
|
|
`open_start_at` DATETIME NULL,
|
|
`open_end_at` DATETIME NULL,
|
|
`open_period_start` DATE NULL,
|
|
`open_period_end` DATE NULL,
|
|
`transaction_fee_rate` DECIMAL(10,6) NULL,
|
|
`single_investor_max_holding_ratio` DECIMAL(7,4) NOT NULL DEFAULT 100,
|
|
`management_fee_rate` DECIMAL(7,4) NULL,
|
|
`custodian_fee_rate` DECIMAL(7,4) NULL,
|
|
`risk_disclosure_required` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`second_confirmation_required` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`recording_required` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`status` VARCHAR(16) NOT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_product_product_code` (`product_code`),
|
|
KEY `idx_fin_product_exchange_code` (`exchange_code`),
|
|
KEY `idx_fin_product_product_category` (`product_category`),
|
|
KEY `idx_fin_product_risk_level` (`risk_level`),
|
|
KEY `idx_fin_product_status` (`status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_market_price` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|
`trade_date` DATE NOT NULL,
|
|
`open_price` DECIMAL(18,6) NOT NULL,
|
|
`high_price` DECIMAL(18,6) NOT NULL,
|
|
`low_price` DECIMAL(18,6) NOT NULL,
|
|
`close_price` DECIMAL(18,6) NOT NULL,
|
|
`volume` DECIMAL(24,4) NULL,
|
|
`turnover_amount` DECIMAL(24,2) NULL,
|
|
`total_fund_shares` DECIMAL(24,4) NOT NULL,
|
|
`source` VARCHAR(32) NOT NULL,
|
|
`source_updated_at` DATETIME NOT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_market_price_product_id` (`product_id`),
|
|
UNIQUE KEY `uk_fin_market_price_trade_date` (`trade_date`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_nav_history` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|
`nav_date` DATE NOT NULL,
|
|
`nav` DECIMAL(12,6) NOT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_nav_history_product_id` (`product_id`),
|
|
UNIQUE KEY `uk_fin_nav_history_nav_date` (`nav_date`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_sim_account` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`account_no` VARCHAR(32) NOT NULL,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`currency` VARCHAR(8) NOT NULL DEFAULT 'CNY',
|
|
`cash_balance` DECIMAL(18,2) NOT NULL,
|
|
`available_cash` DECIMAL(18,2) NOT NULL,
|
|
`frozen_cash` DECIMAL(18,2) NOT NULL DEFAULT 0,
|
|
`initial_balance` DECIMAL(18,2) NOT NULL,
|
|
`status` VARCHAR(16) NOT NULL,
|
|
`version` BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_sim_account_account_no` (`account_no`),
|
|
UNIQUE KEY `uk_fin_sim_account_customer_id` (`customer_id`),
|
|
KEY `idx_fin_sim_account_status` (`status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_cash_ledger` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`ledger_no` VARCHAR(64) NOT NULL,
|
|
`account_id` BIGINT UNSIGNED NOT NULL,
|
|
`transaction_id` BIGINT UNSIGNED NULL,
|
|
`entry_type` VARCHAR(24) NOT NULL,
|
|
`amount` DECIMAL(18,2) NOT NULL,
|
|
`balance_after` DECIMAL(18,2) NOT NULL,
|
|
`available_cash_after` DECIMAL(18,2) NOT NULL,
|
|
`frozen_cash_after` DECIMAL(18,2) NOT NULL,
|
|
`idempotency_key` VARCHAR(128) NOT NULL,
|
|
`occurred_at` DATETIME NOT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_cash_ledger_ledger_no` (`ledger_no`),
|
|
UNIQUE KEY `uk_fin_cash_ledger_idempotency_key` (`idempotency_key`),
|
|
KEY `idx_fin_cash_ledger_account_id` (`account_id`),
|
|
KEY `idx_fin_cash_ledger_transaction_id` (`transaction_id`),
|
|
KEY `idx_fin_cash_ledger_occurred_at` (`occurred_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_capital_flow` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`flow_no` VARCHAR(64) NOT NULL,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`account_id` BIGINT UNSIGNED NULL,
|
|
`transaction_id` BIGINT UNSIGNED NULL,
|
|
`flow_type` VARCHAR(16) NOT NULL,
|
|
`amount` DECIMAL(18,2) NOT NULL,
|
|
`balance_after` DECIMAL(18,2) NULL,
|
|
`status` VARCHAR(16) NOT NULL,
|
|
`settled_at` DATETIME NULL,
|
|
`occurred_at` DATETIME NULL,
|
|
`payer_name` VARCHAR(64) NULL,
|
|
`source_type` VARCHAR(16) NOT NULL,
|
|
`related_work_order_id` BIGINT UNSIGNED NULL,
|
|
`match_status` VARCHAR(16) NOT NULL DEFAULT '不适用',
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_capital_flow_flow_no` (`flow_no`),
|
|
KEY `idx_fin_capital_flow_customer_id` (`customer_id`),
|
|
KEY `idx_fin_capital_flow_account_id` (`account_id`),
|
|
KEY `idx_fin_capital_flow_transaction_id` (`transaction_id`),
|
|
KEY `idx_fin_capital_flow_status` (`status`),
|
|
KEY `idx_fin_capital_flow_settled_at` (`settled_at`),
|
|
KEY `idx_fin_capital_flow_occurred_at` (`occurred_at`),
|
|
KEY `idx_fin_capital_flow_related_work_order_id` (`related_work_order_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_fee_rule` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`rule_code` VARCHAR(64) NOT NULL,
|
|
`product_id` BIGINT UNSIGNED NULL,
|
|
`exchange_code` VARCHAR(16) NULL,
|
|
`order_side` VARCHAR(8) NOT NULL,
|
|
`customer_tier` VARCHAR(16) NULL,
|
|
`min_trade_amount` DECIMAL(18,2) NULL,
|
|
`max_trade_amount` DECIMAL(18,2) NULL,
|
|
`fee_rate` DECIMAL(10,6) NOT NULL,
|
|
`minimum_fee` DECIMAL(18,2) NOT NULL DEFAULT 0,
|
|
`fixed_fee` DECIMAL(18,2) NOT NULL DEFAULT 0,
|
|
`priority` INT NOT NULL DEFAULT 0,
|
|
`effective_from` DATETIME NOT NULL,
|
|
`effective_until` DATETIME NULL,
|
|
`status` VARCHAR(16) NOT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_fee_rule_rule_code` (`rule_code`),
|
|
KEY `idx_fin_fee_rule_product_id` (`product_id`),
|
|
KEY `idx_fin_fee_rule_exchange_code` (`exchange_code`),
|
|
KEY `idx_fin_fee_rule_customer_tier` (`customer_tier`),
|
|
KEY `idx_fin_fee_rule_status` (`status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_sim_order` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`order_no` VARCHAR(64) NOT NULL,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`account_id` BIGINT UNSIGNED NOT NULL,
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|
`order_side` VARCHAR(8) NOT NULL,
|
|
`price_type` VARCHAR(8) NOT NULL,
|
|
`quantity` DECIMAL(18,4) NOT NULL,
|
|
`limit_price` DECIMAL(18,6) NULL,
|
|
`quote_price` DECIMAL(18,6) NOT NULL,
|
|
`quote_at` DATETIME NOT NULL,
|
|
`quote_source` VARCHAR(32) NOT NULL,
|
|
`channel` VARCHAR(32) NULL,
|
|
`advisor_id` BIGINT UNSIGNED NULL,
|
|
`filled_quantity` DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
`average_executed_price` DECIMAL(18,6) NULL,
|
|
`status` VARCHAR(24) NOT NULL,
|
|
`risk_rule_hits` JSON NULL,
|
|
`risk_disclosure_ack_at` DATETIME NULL,
|
|
`second_confirmation_at` DATETIME NULL,
|
|
`recording_reference` VARCHAR(64) NULL,
|
|
`ops_handler_id` BIGINT UNSIGNED NULL,
|
|
`ops_handled_at` DATETIME NULL,
|
|
`compliance_handler_id` BIGINT UNSIGNED NULL,
|
|
`compliance_handled_at` DATETIME NULL,
|
|
`reject_reason` TEXT NULL,
|
|
`submitted_at` DATETIME NOT NULL,
|
|
`cancelled_at` DATETIME NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_sim_order_order_no` (`order_no`),
|
|
KEY `idx_fin_sim_order_customer_id` (`customer_id`),
|
|
KEY `idx_fin_sim_order_account_id` (`account_id`),
|
|
KEY `idx_fin_sim_order_product_id` (`product_id`),
|
|
KEY `idx_fin_sim_order_advisor_id` (`advisor_id`),
|
|
KEY `idx_fin_sim_order_status` (`status`),
|
|
KEY `idx_fin_sim_order_submitted_at` (`submitted_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_transaction` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`transaction_no` VARCHAR(64) NOT NULL,
|
|
`order_id` BIGINT UNSIGNED NOT NULL,
|
|
`work_order_id` BIGINT UNSIGNED NULL,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`account_id` BIGINT UNSIGNED NOT NULL,
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|
`order_side` VARCHAR(8) NOT NULL,
|
|
`transaction_type` VARCHAR(16) NOT NULL,
|
|
`executed_price` DECIMAL(18,6) NOT NULL,
|
|
`nav` DECIMAL(12,6) NOT NULL,
|
|
`executed_quantity` DECIMAL(18,4) NOT NULL,
|
|
`shares` DECIMAL(18,4) NOT NULL,
|
|
`gross_amount` DECIMAL(18,2) NOT NULL,
|
|
`amount` DECIMAL(18,2) NOT NULL,
|
|
`fee_rule_id` BIGINT UNSIGNED NULL,
|
|
`fee_rate_snapshot` DECIMAL(10,6) NOT NULL,
|
|
`fee_amount` DECIMAL(18,2) NOT NULL,
|
|
`fee` DECIMAL(18,2) NULL,
|
|
`net_amount` DECIMAL(18,2) NOT NULL,
|
|
`quote_at` DATETIME NOT NULL,
|
|
`quote_source` VARCHAR(32) NOT NULL,
|
|
`executed_at` DATETIME NOT NULL,
|
|
`confirmed_at` DATETIME NOT NULL,
|
|
`confirmed_by` INT NULL,
|
|
`auto_confirmed` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`created_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_transaction_transaction_no` (`transaction_no`),
|
|
UNIQUE KEY `uk_fin_transaction_work_order_id` (`work_order_id`),
|
|
KEY `idx_fin_transaction_order_id` (`order_id`),
|
|
KEY `idx_fin_transaction_customer_id` (`customer_id`),
|
|
KEY `idx_fin_transaction_account_id` (`account_id`),
|
|
KEY `idx_fin_transaction_product_id` (`product_id`),
|
|
KEY `idx_fin_transaction_transaction_type` (`transaction_type`),
|
|
KEY `idx_fin_transaction_fee_rule_id` (`fee_rule_id`),
|
|
KEY `idx_fin_transaction_executed_at` (`executed_at`),
|
|
KEY `idx_fin_transaction_confirmed_at` (`confirmed_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_holding` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`trade_account` VARCHAR(32) NOT NULL,
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|
`total_quantity` DECIMAL(18,4) NOT NULL,
|
|
`shares` DECIMAL(18,4) NOT NULL,
|
|
`available_quantity` DECIMAL(18,4) NOT NULL,
|
|
`frozen_quantity` DECIMAL(18,4) NOT NULL DEFAULT 0,
|
|
`average_cost` DECIMAL(18,6) NOT NULL,
|
|
`cost_amount` DECIMAL(18,2) NOT NULL,
|
|
`market_value` DECIMAL(18,2) NULL,
|
|
`current_value` DECIMAL(18,2) NOT NULL,
|
|
`profit_loss` DECIMAL(18,2) NULL,
|
|
`profit_loss_ratio` DECIMAL(10,4) NULL,
|
|
`status` VARCHAR(16) NOT NULL,
|
|
`first_acquired_at` DATETIME NULL,
|
|
`version` BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_holding_customer_id` (`customer_id`),
|
|
UNIQUE KEY `uk_fin_holding_product_id` (`product_id`),
|
|
KEY `idx_fin_holding_trade_account` (`trade_account`),
|
|
KEY `idx_fin_holding_status` (`status`),
|
|
KEY `idx_fin_holding_first_acquired_at` (`first_acquired_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `sys_login_record` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|
`login_at` DATETIME NOT NULL,
|
|
`login_result` VARCHAR(16) NOT NULL,
|
|
`ip_region` VARCHAR(64) NULL,
|
|
`device_id` VARCHAR(128) NULL,
|
|
`is_common_device` TINYINT(1) NOT NULL DEFAULT 1,
|
|
`failure_reason` VARCHAR(128) NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
KEY `idx_sys_login_record_user_id` (`user_id`),
|
|
KEY `idx_sys_login_record_login_at` (`login_at`),
|
|
KEY `idx_sys_login_record_login_result` (`login_result`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `biz_work_order` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`work_order_no` VARCHAR(64) NOT NULL,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`order_type` VARCHAR(16) NULL,
|
|
`product_id` BIGINT UNSIGNED NULL,
|
|
`amount` DECIMAL(18,2) NULL,
|
|
`channel` VARCHAR(32) NULL,
|
|
`advisor_id` BIGINT UNSIGNED NULL,
|
|
`risk_rule_hits` JSON NULL,
|
|
`risk_disclosure_ack_at` DATETIME NULL,
|
|
`second_confirmation_at` DATETIME NULL,
|
|
`recording_reference` VARCHAR(64) NULL,
|
|
`ops_handler_id` BIGINT UNSIGNED NULL,
|
|
`ops_handled_at` DATETIME NULL,
|
|
`compliance_handler_id` BIGINT UNSIGNED NULL,
|
|
`compliance_handled_at` DATETIME NULL,
|
|
`reject_reason` TEXT NULL,
|
|
`alert_id` BIGINT UNSIGNED NULL,
|
|
`work_order_type` VARCHAR(32) NULL,
|
|
`submitter_id` BIGINT UNSIGNED NULL,
|
|
`handler_id` BIGINT UNSIGNED NULL,
|
|
`priority` VARCHAR(8) NULL,
|
|
`status` VARCHAR(24) NOT NULL DEFAULT '待风控扫描',
|
|
`request_detail` JSON NULL,
|
|
`handle_result` JSON NULL,
|
|
`submitted_at` DATETIME NULL,
|
|
`accepted_at` DATETIME NULL,
|
|
`completed_at` DATETIME NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_biz_work_order_work_order_no` (`work_order_no`),
|
|
KEY `idx_biz_work_order_customer_id` (`customer_id`),
|
|
KEY `idx_biz_work_order_product_id` (`product_id`),
|
|
KEY `idx_biz_work_order_advisor_id` (`advisor_id`),
|
|
KEY `idx_biz_work_order_alert_id` (`alert_id`),
|
|
KEY `idx_biz_work_order_work_order_type` (`work_order_type`),
|
|
KEY `idx_biz_work_order_submitter_id` (`submitter_id`),
|
|
KEY `idx_biz_work_order_handler_id` (`handler_id`),
|
|
KEY `idx_biz_work_order_priority` (`priority`),
|
|
KEY `idx_biz_work_order_status` (`status`),
|
|
KEY `idx_biz_work_order_submitted_at` (`submitted_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_risk_alert` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`alert_no` VARCHAR(64) NOT NULL,
|
|
`customer_id` BIGINT UNSIGNED NOT NULL,
|
|
`related_transaction_id` BIGINT UNSIGNED NULL,
|
|
`related_order_id` BIGINT UNSIGNED NULL,
|
|
`related_work_order_id` BIGINT UNSIGNED NULL,
|
|
`primary_risk_work_order_id` BIGINT UNSIGNED NULL,
|
|
`alert_type` VARCHAR(64) NOT NULL,
|
|
`alert_level` VARCHAR(8) NOT NULL,
|
|
`trigger_rule_codes` JSON NOT NULL,
|
|
`evidence_summary` TEXT NOT NULL,
|
|
`evidence_snapshot` JSON NOT NULL,
|
|
`priority_score` INT NOT NULL,
|
|
`event_status` VARCHAR(16) NOT NULL,
|
|
`status` VARCHAR(16) NOT NULL,
|
|
`ack_status` VARCHAR(16) NOT NULL,
|
|
`ack_at` DATETIME NULL,
|
|
`handler_id` BIGINT UNSIGNED NULL,
|
|
`due_at` DATETIME NULL,
|
|
`is_escalated` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`escalated_at` DATETIME NULL,
|
|
`escalation_reason` TEXT NULL,
|
|
`handle_result` TEXT NULL,
|
|
`closed_at` DATETIME NULL,
|
|
`close_reason` TEXT NULL,
|
|
`ai_analysis` JSON NULL,
|
|
`manual_remark` TEXT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
`updated_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_risk_alert_alert_no` (`alert_no`),
|
|
KEY `idx_fin_risk_alert_customer_id` (`customer_id`),
|
|
KEY `idx_fin_risk_alert_related_transaction_id` (`related_transaction_id`),
|
|
KEY `idx_fin_risk_alert_related_order_id` (`related_order_id`),
|
|
KEY `idx_fin_risk_alert_related_work_order_id` (`related_work_order_id`),
|
|
KEY `idx_fin_risk_alert_primary_risk_work_order_id` (`primary_risk_work_order_id`),
|
|
KEY `idx_fin_risk_alert_alert_type` (`alert_type`),
|
|
KEY `idx_fin_risk_alert_alert_level` (`alert_level`),
|
|
KEY `idx_fin_risk_alert_priority_score` (`priority_score`),
|
|
KEY `idx_fin_risk_alert_status` (`status`),
|
|
KEY `idx_fin_risk_alert_handler_id` (`handler_id`),
|
|
KEY `idx_fin_risk_alert_due_at` (`due_at`),
|
|
KEY `idx_fin_risk_alert_created_at` (`created_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE `fin_risk_notification` (
|
|
`id` BIGINT UNSIGNED PRIMARY KEY,
|
|
`notification_no` VARCHAR(64) NOT NULL,
|
|
`alert_id` BIGINT UNSIGNED NOT NULL,
|
|
`channel` VARCHAR(16) NOT NULL,
|
|
`receiver_user_id` BIGINT UNSIGNED NULL,
|
|
`receiver_email` VARCHAR(128) NULL,
|
|
`title` VARCHAR(128) NOT NULL,
|
|
`content` TEXT NOT NULL,
|
|
`send_status` VARCHAR(16) NOT NULL,
|
|
`sent_at` DATETIME NULL,
|
|
`read_at` DATETIME NULL,
|
|
`acknowledged_at` DATETIME NULL,
|
|
`fail_reason` TEXT NULL,
|
|
`created_at` DATETIME NOT NULL,
|
|
UNIQUE KEY `uk_fin_risk_notification_notification_no` (`notification_no`),
|
|
KEY `idx_fin_risk_notification_alert_id` (`alert_id`),
|
|
KEY `idx_fin_risk_notification_channel` (`channel`),
|
|
KEY `idx_fin_risk_notification_receiver_user_id` (`receiver_user_id`),
|
|
KEY `idx_fin_risk_notification_send_status` (`send_status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE agent_negative_word (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
rule_code VARCHAR(64) NOT NULL,
|
|
word_pattern VARCHAR(256) NOT NULL,
|
|
match_type VARCHAR(16) NOT NULL DEFAULT 'contains',
|
|
category VARCHAR(32) NOT NULL,
|
|
severity VARCHAR(16) NOT NULL DEFAULT 'block',
|
|
applicable_agents JSON NULL,
|
|
safe_reply_template_code VARCHAR(64) NULL,
|
|
status VARCHAR(16) NOT NULL DEFAULT 'draft',
|
|
version INT UNSIGNED NOT NULL DEFAULT 1,
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
reviewer_id BIGINT UNSIGNED NULL,
|
|
reviewed_at DATETIME(6) NULL,
|
|
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
|
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
|
|
ON UPDATE CURRENT_TIMESTAMP(6),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_negative_rule_code (rule_code),
|
|
KEY idx_negative_status_category (status, category),
|
|
KEY idx_negative_reviewer (reviewer_id),
|
|
CONSTRAINT fk_negative_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id),
|
|
CONSTRAINT fk_negative_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id),
|
|
CONSTRAINT chk_negative_match_type
|
|
CHECK (match_type IN ('exact', 'contains', 'regex')),
|
|
CONSTRAINT chk_negative_severity
|
|
CHECK (severity IN ('warn', 'regenerate', 'block')),
|
|
CONSTRAINT chk_negative_status
|
|
CHECK (status IN ('draft', 'active', 'disabled', 'archived'))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
COMMENT='Agent禁止表达配置';
|
|
|
|
CREATE TABLE svc_handover_ticket (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
ticket_no VARCHAR(32) NOT NULL,
|
|
session_id VARCHAR(64) NOT NULL,
|
|
customer_id BIGINT UNSIGNED NULL,
|
|
source_agent VARCHAR(32) NOT NULL DEFAULT 'customer_service',
|
|
source_message_id BIGINT UNSIGNED NULL,
|
|
intent VARCHAR(32) NULL,
|
|
confidence DECIMAL(5,4) NULL,
|
|
priority VARCHAR(8) NOT NULL DEFAULT 'P1',
|
|
reason_code VARCHAR(64) NOT NULL,
|
|
reason_detail VARCHAR(500) NULL,
|
|
conversation_summary MEDIUMTEXT NULL,
|
|
source_references JSON NULL,
|
|
status VARCHAR(16) NOT NULL DEFAULT 'pending',
|
|
assigned_to BIGINT UNSIGNED NULL,
|
|
assigned_at DATETIME(6) NULL,
|
|
accepted_at DATETIME(6) NULL,
|
|
resolved_at DATETIME(6) NULL,
|
|
closed_at DATETIME(6) NULL,
|
|
resolution TEXT NULL,
|
|
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
|
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
|
|
ON UPDATE CURRENT_TIMESTAMP(6),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_handoff_ticket_no (ticket_no),
|
|
KEY idx_handoff_session (session_id, created_at),
|
|
KEY idx_handoff_customer (customer_id, created_at),
|
|
KEY idx_handoff_queue (status, priority, created_at),
|
|
KEY idx_handoff_assignee (assigned_to, status),
|
|
CONSTRAINT fk_handoff_customer FOREIGN KEY (customer_id) REFERENCES sys_user(id),
|
|
CONSTRAINT fk_handoff_source_message
|
|
FOREIGN KEY (source_message_id) REFERENCES conversation_message(id),
|
|
CONSTRAINT fk_handoff_assignee FOREIGN KEY (assigned_to) REFERENCES sys_user(id),
|
|
CONSTRAINT chk_handoff_confidence
|
|
CHECK (confidence IS NULL OR confidence BETWEEN 0 AND 1),
|
|
CONSTRAINT chk_handoff_priority CHECK (priority IN ('P0', 'P1', 'P2')),
|
|
CONSTRAINT chk_handoff_status
|
|
CHECK (status IN ('pending', 'assigned', 'processing', 'resolved', 'closed', 'cancelled'))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
COMMENT='客服转人工工单';
|
|
|
|
CREATE TABLE agent_faq_synonym (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
knowledge_id BIGINT UNSIGNED NOT NULL,
|
|
phrase VARCHAR(500) NOT NULL,
|
|
normalized_phrase VARCHAR(500) NOT NULL,
|
|
phrase_hash CHAR(64) NOT NULL,
|
|
language_code VARCHAR(16) NOT NULL DEFAULT 'zh-CN',
|
|
source_type VARCHAR(24) NOT NULL DEFAULT 'manual',
|
|
hit_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
status VARCHAR(16) NOT NULL DEFAULT 'pending',
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
reviewer_id BIGINT UNSIGNED NULL,
|
|
reviewed_at DATETIME(6) NULL,
|
|
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
|
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
|
|
ON UPDATE CURRENT_TIMESTAMP(6),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_faq_synonym (knowledge_id, phrase_hash),
|
|
KEY idx_faq_synonym_status (status),
|
|
KEY idx_faq_synonym_normalized (normalized_phrase(191)),
|
|
CONSTRAINT fk_synonym_knowledge FOREIGN KEY (knowledge_id) REFERENCES fin_knowledge_meta(id),
|
|
CONSTRAINT fk_synonym_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id),
|
|
CONSTRAINT fk_synonym_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id),
|
|
CONSTRAINT chk_synonym_source
|
|
CHECK (source_type IN ('manual', 'conversation', 'ticket', 'import')),
|
|
CONSTRAINT chk_synonym_status
|
|
CHECK (status IN ('pending', 'approved', 'disabled', 'archived'))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
COMMENT='FAQ同义问法';
|
|
|
|
CREATE TABLE conversation_feedback (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
feedback_no VARCHAR(32) NOT NULL,
|
|
session_id VARCHAR(64) NOT NULL,
|
|
message_id BIGINT UNSIGNED NOT NULL,
|
|
customer_id BIGINT UNSIGNED NULL,
|
|
rating TINYINT NOT NULL,
|
|
feedback_type VARCHAR(32) NULL,
|
|
feedback_content VARCHAR(1000) NULL,
|
|
status VARCHAR(16) NOT NULL DEFAULT 'open',
|
|
handler_id BIGINT UNSIGNED NULL,
|
|
handled_at DATETIME(6) NULL,
|
|
handling_note VARCHAR(1000) NULL,
|
|
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
|
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
|
|
ON UPDATE CURRENT_TIMESTAMP(6),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_feedback_no (feedback_no),
|
|
UNIQUE KEY uk_feedback_message_customer (message_id, customer_id),
|
|
KEY idx_feedback_session (session_id, created_at),
|
|
KEY idx_feedback_status_type (status, feedback_type),
|
|
CONSTRAINT fk_feedback_message FOREIGN KEY (message_id) REFERENCES conversation_message(id),
|
|
CONSTRAINT fk_feedback_customer FOREIGN KEY (customer_id) REFERENCES sys_user(id),
|
|
CONSTRAINT fk_feedback_handler FOREIGN KEY (handler_id) REFERENCES sys_user(id),
|
|
CONSTRAINT chk_feedback_rating CHECK (rating IN (-1, 1)),
|
|
CONSTRAINT chk_feedback_status CHECK (status IN ('open', 'reviewed', 'resolved', 'ignored'))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
COMMENT='对话回复反馈';
|
|
|
|
CREATE TABLE agent_reply_template (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
template_code VARCHAR(64) NOT NULL,
|
|
scene VARCHAR(32) NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
content_text MEDIUMTEXT NOT NULL,
|
|
variables JSON NULL,
|
|
locale VARCHAR(16) NOT NULL DEFAULT 'zh-CN',
|
|
version INT UNSIGNED NOT NULL DEFAULT 1,
|
|
status VARCHAR(16) NOT NULL DEFAULT 'draft',
|
|
active_key VARCHAR(128) GENERATED ALWAYS AS
|
|
(IF(status = 'active', CONCAT(template_code, ':', locale), NULL)) STORED,
|
|
effective_at DATETIME(6) NULL,
|
|
expire_at DATETIME(6) NULL,
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
reviewer_id BIGINT UNSIGNED NULL,
|
|
reviewed_at DATETIME(6) NULL,
|
|
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
|
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
|
|
ON UPDATE CURRENT_TIMESTAMP(6),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_reply_template_version (template_code, version),
|
|
UNIQUE KEY uk_reply_template_active_one (active_key),
|
|
KEY idx_reply_template_active (scene, status, effective_at, expire_at),
|
|
CONSTRAINT fk_template_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id),
|
|
CONSTRAINT fk_template_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id),
|
|
CONSTRAINT chk_template_scene
|
|
CHECK (scene IN ('disclaimer', 'low_confidence', 'compliance_block',
|
|
'transfer', 'model_failure', 'system_busy', 'clarification')),
|
|
CONSTRAINT chk_template_status
|
|
CHECK (status IN ('draft', 'approved', 'active', 'archived')),
|
|
CONSTRAINT chk_template_window
|
|
CHECK (expire_at IS NULL OR effective_at IS NULL OR expire_at > effective_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
COMMENT='Agent回复模板';
|
|
|
|
CREATE TABLE agent_intent_config (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
agent_type VARCHAR(32) NOT NULL,
|
|
intent_code VARCHAR(64) NOT NULL,
|
|
intent_name VARCHAR(128) NOT NULL,
|
|
description VARCHAR(500) NULL,
|
|
examples JSON NOT NULL,
|
|
classifier_instruction TEXT NULL,
|
|
confidence_threshold DECIMAL(5,4) NOT NULL DEFAULT 0.6000,
|
|
max_clarification_rounds TINYINT UNSIGNED NOT NULL DEFAULT 2,
|
|
transfer_on_failure TINYINT(1) NOT NULL DEFAULT 1,
|
|
collection_routes JSON NULL,
|
|
allowed_tools JSON NULL,
|
|
priority INT NOT NULL DEFAULT 100,
|
|
version INT UNSIGNED NOT NULL DEFAULT 1,
|
|
status VARCHAR(16) NOT NULL DEFAULT 'draft',
|
|
active_key VARCHAR(128) GENERATED ALWAYS AS
|
|
(IF(status = 'active', CONCAT(agent_type, ':', intent_code), NULL)) STORED,
|
|
effective_at DATETIME(6) NULL,
|
|
expire_at DATETIME(6) NULL,
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
reviewer_id BIGINT UNSIGNED NULL,
|
|
reviewed_at DATETIME(6) NULL,
|
|
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
|
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
|
|
ON UPDATE CURRENT_TIMESTAMP(6),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_intent_config_version (agent_type, intent_code, version),
|
|
UNIQUE KEY uk_intent_config_active_one (active_key),
|
|
KEY idx_intent_config_active (agent_type, status, priority),
|
|
CONSTRAINT fk_intent_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id),
|
|
CONSTRAINT fk_intent_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id),
|
|
CONSTRAINT chk_intent_confidence
|
|
CHECK (confidence_threshold BETWEEN 0 AND 1),
|
|
CONSTRAINT chk_intent_status
|
|
CHECK (status IN ('draft', 'approved', 'active', 'archived')),
|
|
CONSTRAINT chk_intent_window
|
|
CHECK (expire_at IS NULL OR effective_at IS NULL OR expire_at > effective_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
COMMENT='Agent意图路由配置';
|
|
SET FOREIGN_KEY_CHECKS=1;
|