|
|
CREATE TABLE IF NOT EXISTS sys_user (
|
|
|
user_id VARCHAR(36) PRIMARY KEY,
|
|
|
student_id VARCHAR(255) NULL,
|
|
|
password VARCHAR(255) NOT NULL,
|
|
|
user_name VARCHAR(100) NULL,
|
|
|
class_id VARCHAR(36) NULL,
|
|
|
class_name VARCHAR(100) NULL,
|
|
|
phone VARCHAR(100) NULL,
|
|
|
school_name VARCHAR(100) NULL,
|
|
|
school_id VARCHAR(36) NULL,
|
|
|
authorize_time DATE NULL,
|
|
|
authorize_end_time DATE NULL,
|
|
|
role_id TINYINT NULL,
|
|
|
create_time DATETIME NULL,
|
|
|
is_deleted TINYINT NOT NULL DEFAULT 0,
|
|
|
zy_user_id VARCHAR(50) NULL,
|
|
|
UNIQUE KEY uk_sys_user_student_id (student_id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS platform_user_snapshot (
|
|
|
platform_user_id VARCHAR(36) PRIMARY KEY,
|
|
|
account VARCHAR(64) NOT NULL,
|
|
|
display_name VARCHAR(64) NOT NULL,
|
|
|
source_updated_at TIMESTAMP NOT NULL,
|
|
|
synced_at TIMESTAMP NOT NULL,
|
|
|
school_id VARCHAR(64) NULL,
|
|
|
school_name VARCHAR(128) NULL,
|
|
|
college_id VARCHAR(64) NULL,
|
|
|
college_name VARCHAR(128) NULL,
|
|
|
major_id VARCHAR(64) NULL,
|
|
|
major_name VARCHAR(128) NULL,
|
|
|
class_id VARCHAR(64) NULL,
|
|
|
class_name VARCHAR(128) NULL,
|
|
|
student_id VARCHAR(64) NULL
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS auth_login_exchange_code (
|
|
|
code_hash CHAR(64) PRIMARY KEY,
|
|
|
platform_user_id VARCHAR(36) NOT NULL,
|
|
|
expires_at TIMESTAMP NOT NULL,
|
|
|
consumed_at TIMESTAMP NULL
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS auth_refresh_token (
|
|
|
token_hash CHAR(64) PRIMARY KEY,
|
|
|
platform_user_id VARCHAR(36) NOT NULL,
|
|
|
expires_at TIMESTAMP NOT NULL,
|
|
|
revoked_at TIMESTAMP NULL
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS stu_module_score_details (
|
|
|
id VARCHAR(64) NOT NULL,
|
|
|
moudule VARCHAR(100) NOT NULL,
|
|
|
learning_projects VARCHAR(100),
|
|
|
assessment_items VARCHAR(100),
|
|
|
scoring_criteria VARCHAR(100),
|
|
|
completion_status VARCHAR(100),
|
|
|
score_project DOUBLE,
|
|
|
user_id VARCHAR(64) NOT NULL,
|
|
|
total_score DECIMAL(10, 2) NOT NULL DEFAULT 100.00,
|
|
|
serial_number INT,
|
|
|
schedule DOUBLE,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
PRIMARY KEY (id),
|
|
|
CONSTRAINT uk_user_moudule_serial UNIQUE (user_id, moudule, serial_number)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS user_step_progress (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id VARCHAR(64),
|
|
|
school_name VARCHAR(128),
|
|
|
class_id VARCHAR(64),
|
|
|
class_name VARCHAR(128),
|
|
|
module_code VARCHAR(64) NOT NULL,
|
|
|
step_code VARCHAR(32) NOT NULL,
|
|
|
step_name VARCHAR(128),
|
|
|
status TINYINT NOT NULL DEFAULT 0,
|
|
|
completed_at TIMESTAMP NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
UNIQUE (user_id, module_code, step_code)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS institution_sm2_key (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
key_id VARCHAR(64) NOT NULL,
|
|
|
key_name VARCHAR(64) NOT NULL,
|
|
|
key_owner VARCHAR(32) NOT NULL,
|
|
|
key_purpose VARCHAR(32) NOT NULL,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
public_key VARCHAR(256) NOT NULL,
|
|
|
encrypted_private_key VARCHAR(512) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS control_system_signature (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
transaction_identifier_id BIGINT NOT NULL,
|
|
|
control_id VARCHAR(32) NOT NULL,
|
|
|
amount DECIMAL(18, 2) NOT NULL,
|
|
|
institution_identifier VARCHAR(32) NOT NULL,
|
|
|
transaction_identifier VARCHAR(80) NOT NULL,
|
|
|
original_text VARCHAR(256) NOT NULL,
|
|
|
digest CHAR(64),
|
|
|
signing_key_id VARCHAR(64),
|
|
|
signature VARCHAR(512),
|
|
|
control_signature VARCHAR(256),
|
|
|
response_message VARCHAR(2048),
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS quota_control_bit (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
control_signature_id BIGINT NOT NULL,
|
|
|
quota_id VARCHAR(32) NOT NULL,
|
|
|
amount DECIMAL(18, 2) NOT NULL,
|
|
|
institution_identifier VARCHAR(32) NOT NULL,
|
|
|
transaction_identifier VARCHAR(80) NOT NULL,
|
|
|
static_original_text VARCHAR(256),
|
|
|
static_segment VARCHAR(80),
|
|
|
random_value VARCHAR(16),
|
|
|
segment_timestamp CHAR(14),
|
|
|
dynamic_segment VARCHAR(64),
|
|
|
central_bank_signature_segment VARCHAR(512),
|
|
|
complete_control_bit VARCHAR(2048),
|
|
|
signing_key_id VARCHAR(64),
|
|
|
hash_algorithm VARCHAR(16),
|
|
|
bank_signature VARCHAR(512),
|
|
|
request_message VARCHAR(4096),
|
|
|
receive_status INT NOT NULL DEFAULT 1,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS standard_currency_batch (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
quota_control_bit_id BIGINT NOT NULL,
|
|
|
batch_number VARCHAR(32) NOT NULL,
|
|
|
total_amount DECIMAL(18, 2) NOT NULL,
|
|
|
total_count INT NOT NULL,
|
|
|
denomination_summary VARCHAR(1024) NOT NULL,
|
|
|
prefix VARCHAR(8),
|
|
|
id_rule VARCHAR(128),
|
|
|
currency_status VARCHAR(16),
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS standard_currency (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
batch_id BIGINT NOT NULL,
|
|
|
sequence_number INT NOT NULL,
|
|
|
denomination DECIMAL(18, 2) NOT NULL,
|
|
|
random_check_code CHAR(6) NOT NULL,
|
|
|
currency_id VARCHAR(64) NOT NULL,
|
|
|
institution_identifier VARCHAR(32) NOT NULL,
|
|
|
bank_signature_segment VARCHAR(512) NOT NULL,
|
|
|
central_bank_signature_segment VARCHAR(512) NOT NULL,
|
|
|
complete_currency VARCHAR(2048) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL,
|
|
|
issuance_request_id CHAR(36),
|
|
|
reserved_at TIMESTAMP NULL,
|
|
|
reserved_by_user_id VARCHAR(36),
|
|
|
reserved_by VARCHAR(64),
|
|
|
issued_at TIMESTAMP NULL,
|
|
|
issued_by_user_id VARCHAR(36),
|
|
|
issued_by VARCHAR(64),
|
|
|
ownership_signature VARCHAR(512),
|
|
|
issued_complete_currency TEXT,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS issuance_source_currency_usage (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
source_currency_id BIGINT NOT NULL,
|
|
|
source_batch_id BIGINT NOT NULL,
|
|
|
issuance_request_id CHAR(36) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL,
|
|
|
reserved_at TIMESTAMP NOT NULL,
|
|
|
released_at TIMESTAMP NULL,
|
|
|
issued_at TIMESTAMP NULL,
|
|
|
audit_user_id VARCHAR(36) NOT NULL,
|
|
|
audit_username VARCHAR(64) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
CONSTRAINT uk_issuance_source_currency UNIQUE (source_currency_id),
|
|
|
INDEX idx_issuance_source_request (issuance_request_id, status)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS institution_sm2_key_audit (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
key_record_id BIGINT NOT NULL,
|
|
|
key_id VARCHAR(64) NOT NULL,
|
|
|
operation VARCHAR(32) NOT NULL,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
operation_detail VARCHAR(512) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
CONSTRAINT fk_institution_key_audit_key
|
|
|
FOREIGN KEY (key_record_id) REFERENCES institution_sm2_key(id)
|
|
|
);
|
|
|
|
|
|
INSERT INTO sys_user (
|
|
|
user_id, student_id, password, user_name, class_id, class_name, school_id, school_name,
|
|
|
role_id, is_deleted, zy_user_id
|
|
|
)
|
|
|
VALUES (
|
|
|
'00000000-0000-0000-0000-000000000487',
|
|
|
'tzs001',
|
|
|
'$2a$10$ufcw5KFHtOmLzxAsV4C.MuIDOErMlw0iw5J5hc8OMzaTx0u9QYxG6',
|
|
|
'tzs001',
|
|
|
'2001',
|
|
|
'数字人民币测试班',
|
|
|
'1001',
|
|
|
'延安大学',
|
|
|
4,
|
|
|
0,
|
|
|
'487'
|
|
|
)
|
|
|
ON DUPLICATE KEY UPDATE
|
|
|
student_id = VALUES(student_id),
|
|
|
password = VALUES(password),
|
|
|
user_name = VALUES(user_name),
|
|
|
role_id = VALUES(role_id),
|
|
|
is_deleted = 0;
|
|
|
|
|
|
INSERT INTO platform_user_snapshot (
|
|
|
platform_user_id, account, display_name, source_updated_at, synced_at
|
|
|
)
|
|
|
VALUES (
|
|
|
'00000000-0000-0000-0000-000000000487',
|
|
|
'tzs001',
|
|
|
'tzs001',
|
|
|
CURRENT_TIMESTAMP,
|
|
|
CURRENT_TIMESTAMP
|
|
|
)
|
|
|
ON DUPLICATE KEY UPDATE
|
|
|
account = VALUES(account),
|
|
|
display_name = VALUES(display_name),
|
|
|
source_updated_at = CURRENT_TIMESTAMP,
|
|
|
synced_at = CURRENT_TIMESTAMP;
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS issuance_bank_inventory (
|
|
|
bank_code VARCHAR(32) PRIMARY KEY,
|
|
|
current_balance DECIMAL(20, 2) NOT NULL,
|
|
|
warning_threshold DECIMAL(20, 2) NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS issuance_request (
|
|
|
id CHAR(36) PRIMARY KEY,
|
|
|
request_no VARCHAR(64) NOT NULL UNIQUE,
|
|
|
bank_code VARCHAR(32) NOT NULL,
|
|
|
organization_id VARCHAR(64) NOT NULL,
|
|
|
total_amount DECIMAL(20, 2) NOT NULL,
|
|
|
currency VARCHAR(16) NOT NULL,
|
|
|
request_timestamp VARCHAR(32),
|
|
|
message_text TEXT,
|
|
|
digest CHAR(64),
|
|
|
signature TEXT,
|
|
|
signing_key_ref VARCHAR(64),
|
|
|
payload_json TEXT,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
central_receive_status VARCHAR(32) NOT NULL,
|
|
|
central_received_at TIMESTAMP NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
created_by_user_id VARCHAR(36) NOT NULL,
|
|
|
updated_by_user_id VARCHAR(36) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS issuance_request_denomination (
|
|
|
request_id CHAR(36) NOT NULL,
|
|
|
denomination DECIMAL(10, 2) NOT NULL,
|
|
|
quantity INT NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
created_by_user_id VARCHAR(36) NOT NULL,
|
|
|
updated_by_user_id VARCHAR(36) NOT NULL,
|
|
|
PRIMARY KEY (request_id, denomination)
|
|
|
);
|
|
|
|
|
|
ALTER TABLE issuance_request
|
|
|
ALTER COLUMN created_by_user_id VARCHAR(36) NOT NULL;
|
|
|
ALTER TABLE issuance_request
|
|
|
ALTER COLUMN updated_by_user_id VARCHAR(36) NOT NULL;
|
|
|
ALTER TABLE issuance_request_denomination
|
|
|
ALTER COLUMN created_by_user_id VARCHAR(36) NOT NULL;
|
|
|
ALTER TABLE issuance_request_denomination
|
|
|
ALTER COLUMN updated_by_user_id VARCHAR(36) NOT NULL;
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS central_bank_issuance_receipt (
|
|
|
request_id CHAR(36) PRIMARY KEY,
|
|
|
request_no VARCHAR(64) NOT NULL,
|
|
|
payload_json TEXT NOT NULL,
|
|
|
received_at TIMESTAMP NOT NULL,
|
|
|
received_by_user_id VARCHAR(36) NOT NULL,
|
|
|
received_by VARCHAR(64) NOT NULL
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS central_bank_issuance_verification (
|
|
|
request_id CHAR(36) PRIMARY KEY,
|
|
|
h1_digest CHAR(64) NULL,
|
|
|
h2_digest CHAR(64) NULL,
|
|
|
digest_matched BOOLEAN NOT NULL,
|
|
|
signature_verified BOOLEAN NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL,
|
|
|
failure_reason VARCHAR(512) NULL,
|
|
|
verified_at TIMESTAMP NOT NULL,
|
|
|
verified_by_user_id VARCHAR(36) NOT NULL,
|
|
|
verified_by VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT fk_central_bank_issuance_verification_receipt
|
|
|
FOREIGN KEY (request_id) REFERENCES central_bank_issuance_receipt(request_id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS central_bank_institution_account (
|
|
|
bank_code VARCHAR(32) PRIMARY KEY,
|
|
|
organization_id VARCHAR(64) NOT NULL,
|
|
|
reserve_account_no VARCHAR(64) NOT NULL,
|
|
|
reserve_account_name VARCHAR(128) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL,
|
|
|
opened_on DATE NOT NULL,
|
|
|
reserve_balance DECIMAL(20, 2) NOT NULL
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS central_bank_currency_vault (
|
|
|
currency VARCHAR(16) PRIMARY KEY,
|
|
|
available_balance DECIMAL(20, 2) NOT NULL
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS reserve_deduction_notification (
|
|
|
request_id CHAR(36) PRIMARY KEY, transaction_id VARCHAR(64) NOT NULL UNIQUE,
|
|
|
bank_code VARCHAR(32) NOT NULL, organization_id VARCHAR(64) NOT NULL,
|
|
|
reserve_account_no VARCHAR(64) NOT NULL, reserve_account_name VARCHAR(128) NOT NULL,
|
|
|
currency VARCHAR(16) NOT NULL, deduction_amount DECIMAL(20, 2) NOT NULL, status VARCHAR(32) NOT NULL,
|
|
|
sent_at TIMESTAMP NOT NULL, sent_by_user_id VARCHAR(36) NOT NULL, sent_by VARCHAR(64) NOT NULL,
|
|
|
received_at TIMESTAMP NULL, received_by_user_id VARCHAR(36) NULL, received_by VARCHAR(64) NULL,
|
|
|
submitted_at TIMESTAMP NULL, submitted_by_user_id VARCHAR(36) NULL, submitted_by VARCHAR(64) NULL,
|
|
|
CONSTRAINT fk_reserve_deduction_notification_receipt FOREIGN KEY (request_id) REFERENCES central_bank_issuance_receipt(request_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS reserve_deduction_execution (
|
|
|
transaction_id VARCHAR(64) PRIMARY KEY, request_id CHAR(36) NOT NULL UNIQUE,
|
|
|
before_balance DECIMAL(20, 2) NOT NULL, deduction_amount DECIMAL(20, 2) NOT NULL,
|
|
|
after_balance DECIMAL(20, 2) NOT NULL, status VARCHAR(32) NOT NULL, executed_at TIMESTAMP NOT NULL,
|
|
|
executed_by_user_id VARCHAR(36) NOT NULL, executed_by VARCHAR(64) NOT NULL,
|
|
|
reversed_balance DECIMAL(20, 2) NULL, reversed_at TIMESTAMP NULL,
|
|
|
reversed_by_user_id VARCHAR(36) NULL, reversed_by VARCHAR(64) NULL,
|
|
|
CONSTRAINT fk_reserve_deduction_execution_notification FOREIGN KEY (request_id) REFERENCES reserve_deduction_notification(request_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS digital_currency_production_batch (
|
|
|
batch_id VARCHAR(64) PRIMARY KEY, request_id CHAR(36) NOT NULL UNIQUE, deduction_transaction_id VARCHAR(64) NOT NULL UNIQUE,
|
|
|
organization_id VARCHAR(64) NOT NULL, currency VARCHAR(16) NOT NULL, total_amount DECIMAL(20, 2) NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL, created_at TIMESTAMP NOT NULL, created_by_user_id VARCHAR(36) NOT NULL, created_by VARCHAR(64) NOT NULL,
|
|
|
quota_control_bit_id BIGINT, control_system_signature_id BIGINT, complete_control_bit TEXT, control_system_signature VARCHAR(512),
|
|
|
CONSTRAINT fk_digital_currency_production_batch_execution FOREIGN KEY (deduction_transaction_id) REFERENCES reserve_deduction_execution(transaction_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS draft_digital_currency (
|
|
|
coin_id VARCHAR(96) PRIMARY KEY, batch_id VARCHAR(64) NOT NULL, sequence_no INT NOT NULL,
|
|
|
denomination DECIMAL(20, 2) NOT NULL, organization_id VARCHAR(64) NOT NULL, currency VARCHAR(16) NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL, created_at TIMESTAMP NOT NULL, created_by_user_id VARCHAR(36) NOT NULL, created_by VARCHAR(64) NOT NULL,
|
|
|
source_currency_id BIGINT, source_currency_batch_id BIGINT, source_complete_currency TEXT,
|
|
|
complete_control_bit TEXT, control_system_signature VARCHAR(512), ownership_original_text TEXT,
|
|
|
ownership_signature VARCHAR(512), complete_currency TEXT, confirmed_at TIMESTAMP NULL,
|
|
|
confirmed_by_user_id VARCHAR(36), confirmed_by VARCHAR(64),
|
|
|
CONSTRAINT uk_draft_digital_currency_batch_sequence UNIQUE (batch_id, sequence_no),
|
|
|
CONSTRAINT fk_draft_digital_currency_batch FOREIGN KEY (batch_id) REFERENCES digital_currency_production_batch(batch_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS digital_currency_ownership_confirmation (
|
|
|
request_id CHAR(36) PRIMARY KEY, batch_id VARCHAR(64) NOT NULL UNIQUE, status VARCHAR(32) NOT NULL,
|
|
|
confirmed_at TIMESTAMP NOT NULL, confirmed_by_user_id VARCHAR(36) NOT NULL, confirmed_by VARCHAR(64) NOT NULL,
|
|
|
signing_key_id VARCHAR(64) NOT NULL,
|
|
|
confirmation_original_text TEXT, confirmation_digest CHAR(64), central_bank_signature VARCHAR(512),
|
|
|
verified_at TIMESTAMP, verified_by_user_id VARCHAR(36), verified_by VARCHAR(64),
|
|
|
receipt_original_text TEXT, receipt_digest CHAR(64), receipt_signature VARCHAR(512),
|
|
|
receipt_signing_key_id VARCHAR(64), receipt_at TIMESTAMP,
|
|
|
CONSTRAINT fk_digital_currency_ownership_batch FOREIGN KEY (batch_id) REFERENCES digital_currency_production_batch(batch_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS commercial_bank_currency (
|
|
|
currency_id VARCHAR(96) PRIMARY KEY, source_currency_id BIGINT NOT NULL UNIQUE, source_batch_id BIGINT NOT NULL,
|
|
|
issuance_request_id CHAR(36) NOT NULL, bank_code VARCHAR(32) NOT NULL, organization_id VARCHAR(64) NOT NULL,
|
|
|
denomination DECIMAL(20, 2) NOT NULL, currency VARCHAR(16) NOT NULL, complete_currency TEXT NOT NULL,
|
|
|
issuance_ownership_original_text TEXT NOT NULL, issuance_ownership_signature VARCHAR(512) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL, received_at TIMESTAMP NOT NULL, received_by_user_id VARCHAR(36) NOT NULL,
|
|
|
received_by VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT uk_commercial_bank_currency_request_source UNIQUE (issuance_request_id, source_currency_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS digital_wallet (
|
|
|
wallet_id VARCHAR(96) PRIMARY KEY, user_id VARCHAR(36) NOT NULL UNIQUE, wallet_type VARCHAR(16) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL, balance DECIMAL(20,2) NOT NULL,
|
|
|
central_bank_confirmation_signature VARCHAR(512) NOT NULL, opened_at TIMESTAMP NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS wallet_certificate (
|
|
|
certificate_serial VARCHAR(64) PRIMARY KEY, wallet_id VARCHAR(96) NOT NULL UNIQUE,
|
|
|
public_key VARCHAR(256) NOT NULL, encrypted_private_key VARCHAR(512) NOT NULL,
|
|
|
filing_status VARCHAR(16) NOT NULL, central_bank_root_signature VARCHAR(512) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL, issued_at TIMESTAMP NOT NULL,
|
|
|
CONSTRAINT fk_wallet_certificate_wallet FOREIGN KEY(wallet_id) REFERENCES digital_wallet(wallet_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS wallet_contract (
|
|
|
contract_id VARCHAR(96) PRIMARY KEY, wallet_id VARCHAR(96) NOT NULL UNIQUE, wallet_type VARCHAR(16) NOT NULL,
|
|
|
single_payment_limit DECIMAL(20,2) NOT NULL, daily_payment_limit DECIMAL(20,2) NOT NULL,
|
|
|
annual_payment_limit DECIMAL(20,2) NOT NULL, balance_limit DECIMAL(20,2) NOT NULL,
|
|
|
valid_until TIMESTAMP NULL, original_text TEXT NOT NULL, digest CHAR(64) NOT NULL, status VARCHAR(16) NOT NULL,
|
|
|
daily_used_amount DECIMAL(20,2) NOT NULL, daily_counter_date DATE NULL,
|
|
|
annual_used_amount DECIMAL(20,2) NOT NULL, annual_counter_year INT NULL,
|
|
|
created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL,
|
|
|
CONSTRAINT fk_wallet_contract_wallet FOREIGN KEY(wallet_id) REFERENCES digital_wallet(wallet_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS simulated_bank_account (
|
|
|
account_id VARCHAR(96) PRIMARY KEY, user_id VARCHAR(36) NOT NULL, bank_code VARCHAR(32) NOT NULL,
|
|
|
bank_name VARCHAR(128) NOT NULL, card_number VARCHAR(32) NOT NULL, card_last4 CHAR(4) NOT NULL, balance DECIMAL(20,2) NOT NULL,
|
|
|
frozen_amount DECIMAL(20,2) NOT NULL, status VARCHAR(16) NOT NULL, created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL, CONSTRAINT uk_simulated_bank_account_user_bank UNIQUE(user_id,bank_code)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS wallet_bank_binding (
|
|
|
wallet_id VARCHAR(96) NOT NULL, bank_account_id VARCHAR(96) NOT NULL, status VARCHAR(16) NOT NULL,
|
|
|
bound_at TIMESTAMP NOT NULL, PRIMARY KEY(wallet_id,bank_account_id),
|
|
|
CONSTRAINT fk_wallet_bank_binding_wallet FOREIGN KEY(wallet_id) REFERENCES digital_wallet(wallet_id),
|
|
|
CONSTRAINT fk_wallet_bank_binding_account FOREIGN KEY(bank_account_id) REFERENCES simulated_bank_account(account_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS corporate_wallet_application (
|
|
|
id BIGINT PRIMARY KEY COMMENT '主键ID(雪花算法生成)',
|
|
|
user_id VARCHAR(36) NOT NULL COMMENT '用户ID(关联登录用户)',
|
|
|
school_id BIGINT NOT NULL COMMENT '学校ID',
|
|
|
class_id BIGINT NOT NULL COMMENT '班级ID',
|
|
|
corp_name VARCHAR(200) COMMENT '企业名称(如:创新科技公司)',
|
|
|
credit_code VARCHAR(32) COMMENT '统一社会信用代码(如:91440101MA5XXXXXX)',
|
|
|
legal_person VARCHAR(100) COMMENT '法人代表姓名(如:张三)',
|
|
|
capital VARCHAR(32) COMMENT '注册资本,单位元,保留两位小数(如:10000000.00)',
|
|
|
business_scope VARCHAR(500) COMMENT '经营范围(如:软件开发、技术服务)',
|
|
|
apply_time VARCHAR(20) COMMENT '申请时间,格式yyyyMMddHHmmss(如:20260801100000)',
|
|
|
concatenated_message VARCHAR(1000) COMMENT '拼接原文,格式:CORP_OPEN|企业名称|信用代码|法人|资本|经营范围|申请时间',
|
|
|
application_id VARCHAR(64) COMMENT '申请编号(如:CORP_APP_20260801_001)',
|
|
|
application_message TEXT COMMENT '申请报文JSON字符串',
|
|
|
status VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT '申请状态:DRAFT-草稿, SUBMITTED-已提交, APPROVED-已审核, ACTIVATED-已激活',
|
|
|
verify_id VARCHAR(64) COMMENT '审核编号(如:VERIFY_20260801_001)',
|
|
|
reviewer VARCHAR(100) COMMENT '审核人姓名(如:李经理)',
|
|
|
verify_time VARCHAR(20) COMMENT '审核时间,格式yyyyMMddHHmmss(如:20260801101000)',
|
|
|
extract_message VARCHAR(500) COMMENT '提取摘要原文,格式:统一社会信用代码|审核时间',
|
|
|
digest_algorithm VARCHAR(16) COMMENT '摘要算法名称(如:SM3)',
|
|
|
digest_value VARCHAR(128) COMMENT 'SM3哈希摘要值(十六进制大写)',
|
|
|
wallet_id VARCHAR(128) COMMENT '对公钱包ID(如:CORP_3A4B5C6D...)',
|
|
|
wallet_type VARCHAR(32) COMMENT '钱包类型(如:对公钱包)',
|
|
|
activate_time VARCHAR(20) COMMENT '钱包激活时间,格式yyyyMMddHHmmss',
|
|
|
created_at TIMESTAMP NOT NULL COMMENT '创建时间',
|
|
|
updated_at TIMESTAMP NOT NULL COMMENT '更新时间',
|
|
|
created_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
|
|
updated_by VARCHAR(64) NOT NULL COMMENT '更新人',
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '逻辑删除标记:false-未删除, true-已删除'
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模块六-对公钱包开通申请表';
|
|
|
CREATE TABLE IF NOT EXISTS remote_wallet_application (
|
|
|
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
|
|
user_id VARCHAR(36) NOT NULL COMMENT '用户ID',
|
|
|
school_id BIGINT NOT NULL COMMENT '学校ID',
|
|
|
class_id BIGINT NOT NULL COMMENT '班级ID',
|
|
|
corp_name VARCHAR(200) COMMENT '企业名称',
|
|
|
credit_code VARCHAR(32) COMMENT '统一社会信用代码',
|
|
|
legal_person VARCHAR(100) COMMENT '法人代表',
|
|
|
phone VARCHAR(20) COMMENT '手机号码',
|
|
|
apply_time VARCHAR(20) COMMENT '申请时间',
|
|
|
concatenated_message VARCHAR(1000) COMMENT '拼接原文',
|
|
|
application_id VARCHAR(64) COMMENT '申请编号',
|
|
|
face_recognition_status INTEGER COMMENT '人脸识别状态:1=未成功,2=已成功',
|
|
|
face_verify_time VARCHAR(20) COMMENT '人脸验证时间',
|
|
|
status VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT '状态',
|
|
|
signing_extract_message VARCHAR(500) COMMENT '签约摘要原文',
|
|
|
signing_digest_algorithm VARCHAR(16) COMMENT '签约摘要算法',
|
|
|
signing_digest_value VARCHAR(128) COMMENT '签约摘要值',
|
|
|
sign_private_key VARCHAR(512) COMMENT '签名私钥',
|
|
|
signature VARCHAR(1024) COMMENT '签名值',
|
|
|
contract_id VARCHAR(64) COMMENT '合约编号',
|
|
|
sign_time VARCHAR(20) COMMENT '签约时间',
|
|
|
wallet_extract_message VARCHAR(500) COMMENT '钱包摘要原文',
|
|
|
wallet_digest_algorithm VARCHAR(16) COMMENT '钱包摘要算法',
|
|
|
wallet_digest_value VARCHAR(128) COMMENT '钱包摘要值',
|
|
|
wallet_id VARCHAR(128) COMMENT '钱包ID',
|
|
|
wallet_type VARCHAR(32) COMMENT '钱包类型',
|
|
|
activate_time VARCHAR(20) COMMENT '激活时间',
|
|
|
created_at TIMESTAMP NOT NULL COMMENT '创建时间',
|
|
|
updated_at TIMESTAMP NOT NULL COMMENT '更新时间',
|
|
|
created_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
|
|
updated_by VARCHAR(64) NOT NULL COMMENT '更新人',
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '逻辑删除'
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模块六-对公钱包远程开立申请表';
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS wallet_application (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
user_name VARCHAR(100),
|
|
|
id_number VARCHAR(20),
|
|
|
phone VARCHAR(20),
|
|
|
input_phone VARCHAR(20),
|
|
|
input_id_number VARCHAR(20),
|
|
|
input_bank_card_number VARCHAR(30),
|
|
|
account_bank VARCHAR(100),
|
|
|
bank_card_number VARCHAR(30),
|
|
|
account_balance DECIMAL(20,2),
|
|
|
selected_bank VARCHAR(100),
|
|
|
wallet_type VARCHAR(20),
|
|
|
application_id VARCHAR(64),
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS wallet_identifier_generation (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
wallet_identifier VARCHAR(128),
|
|
|
cert_private_key VARCHAR(512),
|
|
|
cert_public_key VARCHAR(512),
|
|
|
cert_serial_number VARCHAR(64),
|
|
|
cert_issued_time VARCHAR(20),
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS central_wallet_registration (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
wallet_id VARCHAR(128),
|
|
|
cb_root_signature VARCHAR(512),
|
|
|
wallet_registered BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
sent BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS smart_contract_generation (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
wallet_id VARCHAR(128),
|
|
|
wallet_type VARCHAR(30),
|
|
|
single_payment_limit VARCHAR(30),
|
|
|
daily_payment_limit VARCHAR(30),
|
|
|
annual_payment_limit VARCHAR(30),
|
|
|
balance_ceiling VARCHAR(30),
|
|
|
validity VARCHAR(20),
|
|
|
contract_plaintext VARCHAR(1000),
|
|
|
contract_digest VARCHAR(128),
|
|
|
contract_id VARCHAR(64),
|
|
|
contract_effective_time VARCHAR(20),
|
|
|
sent BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS central_wallet_activation (
|
|
|
id BIGINT PRIMARY KEY,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
wallet_id VARCHAR(128),
|
|
|
wallet_activated BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
wallet_register_status VARCHAR(32),
|
|
|
cb_final_signature VARCHAR(512),
|
|
|
final_time VARCHAR(20),
|
|
|
final_sent BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS currency_exchange_order (
|
|
|
id CHAR(36) PRIMARY KEY, request_no VARCHAR(96) NOT NULL UNIQUE, user_id VARCHAR(36) NOT NULL,
|
|
|
wallet_id VARCHAR(96) NOT NULL, bank_account_id VARCHAR(96) NOT NULL, bank_code VARCHAR(32) NOT NULL,
|
|
|
organization_id VARCHAR(64) NOT NULL, amount DECIMAL(20,2) NOT NULL, currency VARCHAR(16) NOT NULL,
|
|
|
request_timestamp VARCHAR(32) NOT NULL, message_text TEXT NOT NULL, signing_original_text TEXT NOT NULL, digest CHAR(64) NOT NULL,
|
|
|
wallet_signature VARCHAR(512), transfer_request_no VARCHAR(128), transfer_original_text TEXT, transfer_digest CHAR(64),
|
|
|
bank_signature VARCHAR(512), transfer_transaction_id VARCHAR(128) UNIQUE,
|
|
|
central_bank_signature VARCHAR(512), confirmation_original_text TEXT, confirmation_digest CHAR(64),
|
|
|
debit_voucher_no VARCHAR(128) UNIQUE,
|
|
|
bank_balance_before DECIMAL(20,2), bank_balance_after DECIMAL(20,2), wallet_balance_after DECIMAL(20,2),
|
|
|
coin_count INT NOT NULL DEFAULT 0, status VARCHAR(32) NOT NULL, created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL, completed_at TIMESTAMP, created_by VARCHAR(64) NOT NULL, updated_by VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT fk_exchange_wallet FOREIGN KEY(wallet_id) REFERENCES digital_wallet(wallet_id),
|
|
|
CONSTRAINT fk_exchange_bank_account FOREIGN KEY(bank_account_id) REFERENCES simulated_bank_account(account_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS exchange_debit_record (
|
|
|
voucher_no VARCHAR(128) PRIMARY KEY, exchange_id CHAR(36) NOT NULL UNIQUE, bank_account_id VARCHAR(96) NOT NULL,
|
|
|
before_balance DECIMAL(20,2) NOT NULL, amount DECIMAL(20,2) NOT NULL, after_balance DECIMAL(20,2) NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL, created_at TIMESTAMP NOT NULL, created_by VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT fk_exchange_debit_order FOREIGN KEY(exchange_id) REFERENCES currency_exchange_order(id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS exchange_coin_reservation (
|
|
|
exchange_id CHAR(36) NOT NULL, currency_id VARCHAR(96) NOT NULL, denomination DECIMAL(20,2) NOT NULL,
|
|
|
source_status VARCHAR(32) NOT NULL, status VARCHAR(32) NOT NULL, reserved_at TIMESTAMP NOT NULL,
|
|
|
reserved_by VARCHAR(64) NOT NULL, transferred_at TIMESTAMP, PRIMARY KEY(exchange_id,currency_id),
|
|
|
CONSTRAINT uk_exchange_reserved_currency UNIQUE(currency_id),
|
|
|
CONSTRAINT fk_exchange_reservation_order FOREIGN KEY(exchange_id) REFERENCES currency_exchange_order(id),
|
|
|
CONSTRAINT fk_exchange_reservation_currency FOREIGN KEY(currency_id) REFERENCES commercial_bank_currency(currency_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS currency_ownership_transfer (
|
|
|
transaction_id VARCHAR(128) PRIMARY KEY, exchange_id CHAR(36) NOT NULL UNIQUE, from_owner VARCHAR(128) NOT NULL,
|
|
|
to_wallet_id VARCHAR(96) NOT NULL, amount DECIMAL(20,2) NOT NULL, coin_count INT NOT NULL,
|
|
|
confirmation_digest CHAR(64) NOT NULL, central_bank_signature VARCHAR(512) NOT NULL, status VARCHAR(32) NOT NULL,
|
|
|
confirmed_at TIMESTAMP NOT NULL, confirmed_by VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT fk_ownership_transfer_order FOREIGN KEY(exchange_id) REFERENCES currency_exchange_order(id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS central_bank_currency_ownership (
|
|
|
currency_id VARCHAR(96) PRIMARY KEY, owner_type VARCHAR(16) NOT NULL, owner_id VARCHAR(128) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL, lock_business_type VARCHAR(32) NULL, lock_business_id VARCHAR(96) NULL,
|
|
|
last_transaction_id VARCHAR(128) NULL, updated_at TIMESTAMP NOT NULL,
|
|
|
CONSTRAINT fk_currency_ownership_currency FOREIGN KEY(currency_id) REFERENCES commercial_bank_currency(currency_id),
|
|
|
INDEX idx_currency_ownership_available(owner_type,owner_id,status),
|
|
|
INDEX idx_currency_ownership_lock_business(lock_business_type,lock_business_id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS wallet_balance_ledger (
|
|
|
ledger_no VARCHAR(128) PRIMARY KEY, wallet_id VARCHAR(96) NOT NULL, exchange_id CHAR(36) NOT NULL UNIQUE,
|
|
|
direction VARCHAR(16) NOT NULL, amount DECIMAL(20,2) NOT NULL, balance_after DECIMAL(20,2) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL, created_by VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT fk_wallet_ledger_wallet FOREIGN KEY(wallet_id) REFERENCES digital_wallet(wallet_id),
|
|
|
CONSTRAINT fk_wallet_ledger_exchange FOREIGN KEY(exchange_id) REFERENCES currency_exchange_order(id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS exchange_step_log (
|
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, exchange_id CHAR(36) NOT NULL, step_code VARCHAR(16) NOT NULL,
|
|
|
step_name VARCHAR(128) NOT NULL, status VARCHAR(16) NOT NULL, output_text TEXT, operated_at TIMESTAMP NOT NULL,
|
|
|
operator_user_id VARCHAR(36) NOT NULL, operator_name VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT fk_exchange_step_order FOREIGN KEY(exchange_id) REFERENCES currency_exchange_order(id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS central_bank_issuance_business_review (
|
|
|
request_id CHAR(36) PRIMARY KEY, account_valid BOOLEAN NOT NULL, vault_sufficient BOOLEAN NOT NULL,
|
|
|
amount_consistent BOOLEAN NOT NULL, requested_amount DECIMAL(20, 2) NULL, verified_amount DECIMAL(20, 2) NULL,
|
|
|
status VARCHAR(32) NOT NULL, failure_reason VARCHAR(512) NULL, reviewed_at TIMESTAMP NOT NULL,
|
|
|
reviewed_by_user_id VARCHAR(36) NOT NULL, reviewed_by VARCHAR(64) NOT NULL,
|
|
|
bank_code VARCHAR(32) NULL, organization_id VARCHAR(64) NULL, reserve_account_no VARCHAR(64) NULL,
|
|
|
reserve_account_name VARCHAR(128) NULL, account_status VARCHAR(32) NULL, reserve_balance DECIMAL(20, 2) NULL,
|
|
|
currency VARCHAR(16) NULL, vault_available_balance DECIMAL(20, 2) NULL, denomination_summary VARCHAR(512) NULL,
|
|
|
CONSTRAINT fk_central_bank_issuance_business_review_receipt FOREIGN KEY (request_id) REFERENCES central_bank_issuance_receipt(request_id)
|
|
|
);
|
|
|
|
|
|
INSERT INTO issuance_bank_inventory (bank_code, current_balance, warning_threshold, updated_at)
|
|
|
VALUES ('BKCHCNBJ00001', 49950000.00, 50000000.00, CURRENT_TIMESTAMP)
|
|
|
ON DUPLICATE KEY UPDATE current_balance = VALUES(current_balance),
|
|
|
warning_threshold = VALUES(warning_threshold),
|
|
|
updated_at = CURRENT_TIMESTAMP;
|
|
|
|
|
|
INSERT INTO central_bank_institution_account (bank_code, organization_id, reserve_account_no, reserve_account_name, status, opened_on, reserve_balance)
|
|
|
VALUES ('BKCHCNBJ00001', 'ORG_3A4B5C6D7E8F', 'RESERVE_BKCHCNBJ00001', '北京商业银行准备金账户', 'NORMAL', '2020-01-01', 50000000000.00)
|
|
|
ON DUPLICATE KEY UPDATE bank_code = VALUES(bank_code);
|
|
|
INSERT INTO central_bank_currency_vault (currency, available_balance)
|
|
|
VALUES ('DC', 300000000.00)
|
|
|
ON DUPLICATE KEY UPDATE currency = VALUES(currency);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS business_knowledge_category (
|
|
|
code VARCHAR(64) PRIMARY KEY, name VARCHAR(128) NOT NULL, sort_no INT NOT NULL, enabled BOOLEAN NOT NULL DEFAULT TRUE
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS business_knowledge_item (
|
|
|
code VARCHAR(64) PRIMARY KEY, category_code VARCHAR(64) NOT NULL, title VARCHAR(128) NOT NULL, summary VARCHAR(512) NOT NULL,
|
|
|
content TEXT NOT NULL, version VARCHAR(32) NOT NULL, sort_no INT NOT NULL, enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL, created_by VARCHAR(64) NOT NULL, updated_by VARCHAR(64) NOT NULL,
|
|
|
CONSTRAINT fk_business_knowledge_item_category FOREIGN KEY (category_code) REFERENCES business_knowledge_category(code)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS business_knowledge_module_step (
|
|
|
module_code VARCHAR(64) NOT NULL, step_code VARCHAR(32) NOT NULL, step_name VARCHAR(128) NOT NULL, step_summary VARCHAR(512) NOT NULL,
|
|
|
sort_no INT NOT NULL, PRIMARY KEY (module_code, step_code)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS business_knowledge_step_relation (
|
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, knowledge_code VARCHAR(64) NOT NULL, module_code VARCHAR(64) NOT NULL, step_code VARCHAR(32) NOT NULL,
|
|
|
relation_type VARCHAR(32) NOT NULL, sort_no INT NOT NULL, CONSTRAINT uk_business_knowledge_step_relation UNIQUE (knowledge_code, module_code, step_code),
|
|
|
CONSTRAINT fk_business_knowledge_relation_item FOREIGN KEY (knowledge_code) REFERENCES business_knowledge_item(code),
|
|
|
CONSTRAINT fk_business_knowledge_relation_step FOREIGN KEY (module_code, step_code) REFERENCES business_knowledge_module_step(module_code, step_code)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS business_knowledge_import_log (
|
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, version VARCHAR(32) NOT NULL, source VARCHAR(256) NOT NULL, item_count INT NOT NULL,
|
|
|
operator_user_id VARCHAR(36) NOT NULL, operator_name VARCHAR(64) NOT NULL, imported_at TIMESTAMP NOT NULL
|
|
|
);
|
|
|
INSERT INTO business_knowledge_category (code, name, sort_no, enabled) VALUES
|
|
|
('KEY_AND_ALGORITHM', '密钥与算法', 10, TRUE), ('SYSTEM_COMPONENT', '系统组件', 20, TRUE), ('CURRENCY_DATA', '数字货币数据', 30, TRUE)
|
|
|
ON DUPLICATE KEY UPDATE name = VALUES(name), sort_no = VALUES(sort_no), enabled = TRUE;
|
|
|
INSERT INTO business_knowledge_module_step (module_code, step_code, step_name, step_summary, sort_no) VALUES
|
|
|
('PBOC_CURRENCY_GENERATION', '01', '机构身份信息与密钥准备', '生成机构标识,并准备第一、第二 SM2 密钥及其公钥。', 10),
|
|
|
('PBOC_CURRENCY_GENERATION', '02', '生成数字货币请求', '提交申请金额、系统标识和时间戳。', 20),
|
|
|
('PBOC_CURRENCY_GENERATION', '03', '央行验证请求', '央行使用第一私钥验证申请报文。', 30),
|
|
|
('PBOC_CURRENCY_GENERATION', '04', '生成交易流水号', '央行生成并返回交易流水号。', 40),
|
|
|
('PBOC_CURRENCY_GENERATION', '05', '申请额度控制位', '机构使用第二私钥签名后申请额度控制位。', 50),
|
|
|
('PBOC_CURRENCY_GENERATION', '06', '央行校验摘要', '央行校验申请金额与控制位申请摘要。', 60),
|
|
|
('PBOC_CURRENCY_GENERATION', '07', '央行签名', '央行确认后使用第一私钥生成签名。', 70),
|
|
|
('PBOC_CURRENCY_GENERATION', '08', '返回额度控制位', '返回静态控制位、动态控制位和央行签名。', 80),
|
|
|
('PBOC_CURRENCY_GENERATION', '09', '生成币串', '使用账户信息、额度控制位及第二私钥生成币串。', 90),
|
|
|
('PBOC_CURRENCY_ISSUANCE', '01', '查看货币需求', '读取商业银行库存余额、预警阈值及建议补充金额。', 10),
|
|
|
('PBOC_CURRENCY_ISSUANCE', '02', '生成发行申请计划', '填写机构信息、申请总额、面额结构和时间戳,拼接请求原文。', 20),
|
|
|
('PBOC_CURRENCY_ISSUANCE', '03', '发行计划数字签名', '对请求原文执行 SM3 摘要,再以第二私钥进行 SM2 签名。', 30),
|
|
|
('PBOC_CURRENCY_ISSUANCE', '04', '发送标准报文', '将请求原文、摘要与签名打包并发送至央行。', 40),
|
|
|
('PBOC_CURRENCY_ISSUANCE', '05', '央行验证与业务核查', '央行校验 H1、H2 和签名,并保存账户、发行库和金额一致性的核查快照。', 50),
|
|
|
('PBOC_CURRENCY_ISSUANCE', '06', '准备金通知与 ACS 扣减', '央行发送通知,商业银行确认接收并提交申请后,由 ACS 扣减准备金。', 60),
|
|
|
('PBOC_CURRENCY_ISSUANCE', '07', '发行并确权数字货币', '按控制位和面额锁定生成模块已有待生效币串,央行以第一私钥确权并划转至商业银行库。', 70),
|
|
|
('WALLET_OPENING', '01', '开立数字钱包', '完成用户身份校验、钱包创建和钱包密钥绑定。', 10),
|
|
|
('CURRENCY_EXCHANGE', '01', '数字货币兑换', '在账户余额和数字人民币之间完成兑换及记账。', 10),
|
|
|
('CURRENCY_PAYMENT', '01', '数字货币支付', '完成付款方、收款方和交易报文的校验与清算。', 10)
|
|
|
ON DUPLICATE KEY UPDATE step_name = VALUES(step_name), step_summary = VALUES(step_summary), sort_no = VALUES(sort_no);
|
|
|
INSERT INTO business_knowledge_item (code, category_code, title, summary, content, version, sort_no, enabled, created_at, updated_at, created_by, updated_by) VALUES
|
|
|
('FIRST_PRIVATE_KEY', 'KEY_AND_ALGORITHM', '第一私钥', '由中国人民银行侧持有,用于验证和确权签名。', '第一私钥属于央行侧密钥材料。在生成数字货币阶段用于验证机构请求并对结果签名;在发行阶段用于最终确权。私钥不能返回前端或写入业务报文。', '1.0.0', 10, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM'),
|
|
|
('SECOND_PRIVATE_KEY', 'KEY_AND_ALGORITHM', '第二私钥', '由商业银行侧持有,用于对发行及额度控制位请求进行 SM2 签名。', '第二私钥由中国人民银行生成数字货币实验模块生成并保存。发行模块按当前用户、学校和班级身份直接调用密钥服务完成签名,不向前端返回私钥。', '1.0.0', 20, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM'),
|
|
|
('SM2', 'KEY_AND_ALGORITHM', 'SM2 算法', '国产椭圆曲线公钥密码算法,用于数字签名和验签。', 'SM2 用于用私钥对摘要签名,并由对应公钥验签。原型中第二私钥签发发行计划签名,第一私钥完成央行侧签名。', '1.0.0', 30, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM'),
|
|
|
('SM3', 'KEY_AND_ALGORITHM', 'SM3 算法', '国产密码杂凑算法,用于生成固定长度摘要。', 'SM3 对请求原文生成摘要值。摘要是 SM2 签名的输入,保证报文在传输和审核过程中的完整性。', '1.0.0', 40, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM'),
|
|
|
('BANK_FRONT_END', 'SYSTEM_COMPONENT', '银行前置机', '商业银行与央行系统之间的业务接入和报文转发节点。', '银行前置机负责组织标准报文、转发请求并接收央行处理结果,是实验流程中的系统接入节点。', '1.0.0', 10, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM'),
|
|
|
('ACS', 'SYSTEM_COMPONENT', 'ACS 系统', '央行发行处理链路中的业务处理系统。', '发行审核通过后,准备金扣减及发行数据需要进入 ACS 系统;ACS 处理结果参与后续数字货币生成和确权。', '1.0.0', 20, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM'),
|
|
|
('LIMIT_CONTROL_BIT', 'CURRENCY_DATA', '额度控制位', '用于约束数字货币发行额度和使用状态的控制数据。', '额度控制位包含静态控制位、动态控制位及央行签名。机构申请控制位时使用第二私钥签名,央行校验后返回控制位数据。', '1.0.0', 10, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM'),
|
|
|
('CURRENCY_STRING', 'CURRENCY_DATA', '币串', '按面额、额度控制位、账户信息和签名生成的数字货币数据。', '币串只在生成模块铸造。发行模块按面额锁定已有待生效币串,保留源币和生成批次关联,确权后将其从央行发行库划转至商业银行库。', '1.0.0', 20, TRUE, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'SYSTEM', 'SYSTEM')
|
|
|
ON DUPLICATE KEY UPDATE category_code = VALUES(category_code), title = VALUES(title),
|
|
|
summary = VALUES(summary), content = VALUES(content), version = VALUES(version),
|
|
|
sort_no = VALUES(sort_no), enabled = VALUES(enabled), updated_at = CURRENT_TIMESTAMP,
|
|
|
updated_by = VALUES(updated_by);
|
|
|
INSERT INTO business_knowledge_step_relation (knowledge_code, module_code, step_code, relation_type, sort_no) VALUES
|
|
|
('FIRST_PRIVATE_KEY', 'PBOC_CURRENCY_GENERATION', '03', 'VERIFY', 10), ('FIRST_PRIVATE_KEY', 'PBOC_CURRENCY_GENERATION', '07', 'SIGN', 10),
|
|
|
('SECOND_PRIVATE_KEY', 'PBOC_CURRENCY_GENERATION', '01', 'KEY', 10), ('SECOND_PRIVATE_KEY', 'PBOC_CURRENCY_GENERATION', '05', 'SIGN', 10),
|
|
|
('SECOND_PRIVATE_KEY', 'PBOC_CURRENCY_GENERATION', '08', 'VERIFY', 10), ('SECOND_PRIVATE_KEY', 'PBOC_CURRENCY_GENERATION', '09', 'SIGN', 10),
|
|
|
('SM2', 'PBOC_CURRENCY_GENERATION', '05', 'ALGORITHM', 20), ('LIMIT_CONTROL_BIT', 'PBOC_CURRENCY_GENERATION', '05', 'DATA', 30),
|
|
|
('LIMIT_CONTROL_BIT', 'PBOC_CURRENCY_GENERATION', '08', 'OUTPUT', 20), ('CURRENCY_STRING', 'PBOC_CURRENCY_GENERATION', '09', 'OUTPUT', 20),
|
|
|
('SM3', 'PBOC_CURRENCY_ISSUANCE', '03', 'ALGORITHM', 10), ('SM2', 'PBOC_CURRENCY_ISSUANCE', '03', 'ALGORITHM', 20),
|
|
|
('SECOND_PRIVATE_KEY', 'PBOC_CURRENCY_ISSUANCE', '03', 'KEY', 30), ('BANK_FRONT_END', 'PBOC_CURRENCY_ISSUANCE', '04', 'SYSTEM', 10),
|
|
|
('ACS', 'PBOC_CURRENCY_ISSUANCE', '06', 'SYSTEM', 10), ('LIMIT_CONTROL_BIT', 'PBOC_CURRENCY_ISSUANCE', '07', 'DATA', 10),
|
|
|
('CURRENCY_STRING', 'PBOC_CURRENCY_ISSUANCE', '07', 'OUTPUT', 20), ('FIRST_PRIVATE_KEY', 'PBOC_CURRENCY_ISSUANCE', '07', 'SIGN', 30)
|
|
|
ON DUPLICATE KEY UPDATE knowledge_code = VALUES(knowledge_code);
|
|
|
|
|
|
-- 模块六:密钥信息表
|
|
|
CREATE TABLE IF NOT EXISTS corporate_wallet_key_info (
|
|
|
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
|
|
user_id VARCHAR(36) NOT NULL COMMENT '用户ID',
|
|
|
school_id BIGINT NOT NULL COMMENT '学校ID',
|
|
|
class_id BIGINT NOT NULL COMMENT '班级ID',
|
|
|
key_type VARCHAR(64) NOT NULL COMMENT '密钥类型',
|
|
|
holder VARCHAR(128) NOT NULL COMMENT '持有方',
|
|
|
key_algorithm VARCHAR(16) NOT NULL DEFAULT 'SM2' COMMENT '密码算法',
|
|
|
key_value TEXT NOT NULL COMMENT '完整值(十六进制)',
|
|
|
is_private_key BOOLEAN NOT NULL COMMENT '是否为私钥',
|
|
|
source VARCHAR(32) NOT NULL DEFAULT 'NEW' COMMENT '密钥来源',
|
|
|
created_at TIMESTAMP NOT NULL COMMENT '创建时间',
|
|
|
updated_at TIMESTAMP NOT NULL COMMENT '更新时间',
|
|
|
created_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
|
|
updated_by VARCHAR(64) NOT NULL COMMENT '更新人',
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '逻辑删除'
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模块六-密钥信息表';
|
|
|
|
|
|
-- 模块六:工资发放批次表
|
|
|
CREATE TABLE IF NOT EXISTS salary_batch (
|
|
|
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
|
|
user_id VARCHAR(36) NOT NULL COMMENT '用户ID',
|
|
|
school_id BIGINT NOT NULL COMMENT '学校ID',
|
|
|
class_id BIGINT NOT NULL COMMENT '班级ID',
|
|
|
batch_id VARCHAR(64) COMMENT '批次号',
|
|
|
corp_wallet_id VARCHAR(128) COMMENT '付款钱包ID',
|
|
|
operator_name VARCHAR(64) COMMENT '操作员姓名',
|
|
|
operator_timestamp VARCHAR(20) COMMENT '操作时间戳',
|
|
|
concatenated_message TEXT COMMENT '拼接原文',
|
|
|
digest_algorithm VARCHAR(16) COMMENT '摘要算法',
|
|
|
digest_value VARCHAR(128) COMMENT 'SM3摘要值',
|
|
|
signature TEXT COMMENT 'SM2签名值',
|
|
|
output_json TEXT COMMENT '输出JSON报文',
|
|
|
status VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT '状态',
|
|
|
submit_time VARCHAR(20) COMMENT '发送时间',
|
|
|
reviewer_name VARCHAR(64) COMMENT '复核员姓名',
|
|
|
review_timestamp VARCHAR(20) COMMENT '审核时间戳',
|
|
|
review_concatenated_message TEXT COMMENT '拼接审核原文',
|
|
|
review_digest_algorithm VARCHAR(16) COMMENT '审核摘要算法',
|
|
|
review_digest_value VARCHAR(128) COMMENT '审核SM3摘要值',
|
|
|
review_signature TEXT COMMENT '审核SM2签名值',
|
|
|
review_output_json TEXT COMMENT '审核输出JSON',
|
|
|
single_limit_status INT COMMENT '单笔限额状态:1-通过, 2-未通过',
|
|
|
batch_limit_status INT COMMENT '批次限额状态:1-通过, 2-未通过',
|
|
|
daily_limit_status INT COMMENT '日累计限额状态:1-通过, 2-未通过',
|
|
|
review_result VARCHAR(32) COMMENT '审核结果:APPROVED-已批准, REJECTED-已拒绝',
|
|
|
confirm_message TEXT COMMENT '交易确认原文',
|
|
|
confirm_timestamp VARCHAR(20) COMMENT '确认时间戳',
|
|
|
confirm_digest_algorithm VARCHAR(16) COMMENT '确认摘要算法',
|
|
|
confirm_digest_value VARCHAR(128) COMMENT '确认SM3摘要值',
|
|
|
cb_signature TEXT COMMENT '央行SM2签名值',
|
|
|
confirm_output_json TEXT COMMENT '交易确认输出JSON',
|
|
|
created_at TIMESTAMP NOT NULL COMMENT '创建时间',
|
|
|
updated_at TIMESTAMP NOT NULL COMMENT '更新时间',
|
|
|
created_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
|
|
updated_by VARCHAR(64) NOT NULL COMMENT '更新人',
|
|
|
deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '逻辑删除'
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模块六-工资发放批次表';
|
|
|
-- 模块五:用户支付数字货币实验模块。
|
|
|
ALTER TABLE digital_wallet
|
|
|
ADD COLUMN IF NOT EXISTS frozen_amount DECIMAL(20,2) NOT NULL DEFAULT 0;
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_order (
|
|
|
id CHAR(36) PRIMARY KEY,
|
|
|
payment_no VARCHAR(96) NOT NULL UNIQUE,
|
|
|
payer_user_id VARCHAR(36) NOT NULL,
|
|
|
payer_wallet_id VARCHAR(96) NOT NULL,
|
|
|
payer_bank_code VARCHAR(32) NOT NULL,
|
|
|
payer_organization_id VARCHAR(64) NOT NULL,
|
|
|
payee_user_id VARCHAR(36) NOT NULL,
|
|
|
payee_wallet_id VARCHAR(96) NOT NULL,
|
|
|
payee_bank_code VARCHAR(32) NOT NULL,
|
|
|
payee_organization_id VARCHAR(64) NOT NULL,
|
|
|
amount DECIMAL(20,2) NOT NULL,
|
|
|
payment_note VARCHAR(256) NOT NULL,
|
|
|
request_timestamp VARCHAR(32) NOT NULL,
|
|
|
payment_original_text TEXT NOT NULL,
|
|
|
payment_digest CHAR(64) NOT NULL,
|
|
|
payer_signature VARCHAR(512) NULL,
|
|
|
compliance_report TEXT NULL,
|
|
|
compliance_digest CHAR(64) NULL,
|
|
|
payer_bank_signature VARCHAR(512) NULL,
|
|
|
transaction_id VARCHAR(128) NULL UNIQUE,
|
|
|
clearing_no VARCHAR(128) NULL UNIQUE,
|
|
|
settlement_original_text TEXT NULL,
|
|
|
settlement_digest CHAR(64) NULL,
|
|
|
central_bank_signature VARCHAR(512) NULL,
|
|
|
coin_count INT NOT NULL DEFAULT 0,
|
|
|
payer_balance_after DECIMAL(20,2) NULL,
|
|
|
payee_balance_after DECIMAL(20,2) NULL,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
completed_at TIMESTAMP NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
updated_by VARCHAR(64) NOT NULL,
|
|
|
FOREIGN KEY (payer_wallet_id) REFERENCES digital_wallet(wallet_id),
|
|
|
FOREIGN KEY (payee_wallet_id) REFERENCES digital_wallet(wallet_id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS training_task_step_progress (
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
module_code VARCHAR(64) NOT NULL,
|
|
|
step_code VARCHAR(32) NOT NULL,
|
|
|
completed_at TIMESTAMP NOT NULL,
|
|
|
PRIMARY KEY (user_id, module_code, step_code)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_coin_reservation (
|
|
|
payment_id CHAR(36) NOT NULL,
|
|
|
currency_id VARCHAR(96) NOT NULL,
|
|
|
denomination DECIMAL(20,2) NOT NULL,
|
|
|
source_status VARCHAR(32) NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
reserved_at TIMESTAMP NOT NULL,
|
|
|
transferred_at TIMESTAMP NULL,
|
|
|
PRIMARY KEY (payment_id, currency_id),
|
|
|
FOREIGN KEY (payment_id) REFERENCES payment_order(id),
|
|
|
FOREIGN KEY (currency_id) REFERENCES commercial_bank_currency(currency_id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_ownership_transfer (
|
|
|
transaction_id VARCHAR(128) PRIMARY KEY,
|
|
|
payment_id CHAR(36) NOT NULL UNIQUE,
|
|
|
from_wallet_id VARCHAR(96) NOT NULL,
|
|
|
to_wallet_id VARCHAR(96) NOT NULL,
|
|
|
amount DECIMAL(20,2) NOT NULL,
|
|
|
coin_count INT NOT NULL,
|
|
|
settlement_digest CHAR(64) NOT NULL,
|
|
|
central_bank_signature VARCHAR(512) NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
confirmed_at TIMESTAMP NOT NULL,
|
|
|
confirmed_by VARCHAR(64) NOT NULL,
|
|
|
FOREIGN KEY (payment_id) REFERENCES payment_order(id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_clearing_record (
|
|
|
clearing_no VARCHAR(128) PRIMARY KEY,
|
|
|
payment_id CHAR(36) NOT NULL UNIQUE,
|
|
|
payer_bank_code VARCHAR(32) NOT NULL,
|
|
|
payee_bank_code VARCHAR(32) NOT NULL,
|
|
|
amount DECIMAL(20,2) NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
settled_at TIMESTAMP NOT NULL,
|
|
|
FOREIGN KEY (payment_id) REFERENCES payment_order(id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_wallet_ledger (
|
|
|
ledger_no VARCHAR(128) PRIMARY KEY,
|
|
|
payment_id CHAR(36) NOT NULL,
|
|
|
wallet_id VARCHAR(96) NOT NULL,
|
|
|
direction VARCHAR(16) NOT NULL,
|
|
|
amount DECIMAL(20,2) NOT NULL,
|
|
|
balance_after DECIMAL(20,2) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
created_by VARCHAR(64) NOT NULL,
|
|
|
UNIQUE KEY uk_payment_wallet_ledger (payment_id, wallet_id),
|
|
|
FOREIGN KEY (payment_id) REFERENCES payment_order(id),
|
|
|
FOREIGN KEY (wallet_id) REFERENCES digital_wallet(wallet_id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_notification (
|
|
|
id CHAR(36) PRIMARY KEY,
|
|
|
payment_id CHAR(36) NOT NULL,
|
|
|
recipient_user_id VARCHAR(36) NOT NULL,
|
|
|
recipient_wallet_id VARCHAR(96) NOT NULL,
|
|
|
notification_type VARCHAR(32) NOT NULL,
|
|
|
content TEXT NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
UNIQUE KEY uk_payment_notification (payment_id, notification_type),
|
|
|
FOREIGN KEY (payment_id) REFERENCES payment_order(id)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_step_log (
|
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
|
payment_id CHAR(36) NOT NULL,
|
|
|
step_code VARCHAR(16) NOT NULL,
|
|
|
step_name VARCHAR(128) NOT NULL,
|
|
|
status VARCHAR(16) NOT NULL,
|
|
|
output_text TEXT NULL,
|
|
|
operated_at TIMESTAMP NOT NULL,
|
|
|
operator_user_id VARCHAR(36) NOT NULL,
|
|
|
operator_name VARCHAR(64) NOT NULL,
|
|
|
FOREIGN KEY (payment_id) REFERENCES payment_order(id)
|
|
|
);
|
|
|
CREATE TABLE IF NOT EXISTS training_experiment_attempt (
|
|
|
id CHAR(36) PRIMARY KEY,
|
|
|
module_code VARCHAR(32) NOT NULL,
|
|
|
user_id VARCHAR(36) NOT NULL,
|
|
|
school_id BIGINT NOT NULL,
|
|
|
class_id BIGINT NOT NULL,
|
|
|
organization_id VARCHAR(64) NOT NULL DEFAULT '',
|
|
|
attempt_no INT NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
current_step_code VARCHAR(16) NULL,
|
|
|
current_action_code VARCHAR(64) NULL,
|
|
|
business_id VARCHAR(96) NULL,
|
|
|
version BIGINT NOT NULL DEFAULT 0,
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
completed_at TIMESTAMP NULL,
|
|
|
CONSTRAINT uk_experiment_attempt_no
|
|
|
UNIQUE (module_code, user_id, school_id, class_id, organization_id, attempt_no),
|
|
|
INDEX idx_experiment_attempt_current
|
|
|
(module_code, user_id, school_id, class_id, status, attempt_no)
|
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS training_experiment_action (
|
|
|
id CHAR(36) PRIMARY KEY,
|
|
|
attempt_id CHAR(36) NOT NULL,
|
|
|
step_code VARCHAR(16) NOT NULL,
|
|
|
action_code VARCHAR(64) NOT NULL,
|
|
|
status VARCHAR(32) NOT NULL,
|
|
|
request_fingerprint CHAR(64) NOT NULL,
|
|
|
output_json TEXT NULL,
|
|
|
error_code VARCHAR(32) NULL,
|
|
|
error_message VARCHAR(512) NULL,
|
|
|
started_at TIMESTAMP NOT NULL,
|
|
|
completed_at TIMESTAMP NULL,
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
version BIGINT NOT NULL DEFAULT 0,
|
|
|
CONSTRAINT uk_experiment_action UNIQUE (attempt_id, step_code, action_code),
|
|
|
INDEX idx_experiment_action_attempt (attempt_id, started_at),
|
|
|
CONSTRAINT fk_experiment_action_attempt
|
|
|
FOREIGN KEY (attempt_id) REFERENCES training_experiment_attempt(id)
|
|
|
);
|