146 lines
5.5 KiB
MySQL
146 lines
5.5 KiB
MySQL
|
|
-- 拆分账户信息表:账户基础信息保留在 ccdi_account_info,动态交易画像迁移到 ccdi_account_result。
|
|||
|
|
-- 执行说明:涉及中文内容时请使用 bin/mysql_utf8_exec.sh 执行,确保会话字符集为 utf8mb4。
|
|||
|
|
|
|||
|
|
CREATE TABLE IF NOT EXISTS `ccdi_account_result` (
|
|||
|
|
`result_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键,唯一标识',
|
|||
|
|
`account_no` VARCHAR(240) NOT NULL COMMENT '账户号码(加密存储)',
|
|||
|
|
`is_self_account` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否本人实控账户:0-否 1-是',
|
|||
|
|
`monthly_avg_trans_count` INT DEFAULT 0 COMMENT '近6个月平均交易笔数',
|
|||
|
|
`monthly_avg_trans_amount` DECIMAL(18,2) DEFAULT 0.00 COMMENT '近6个月平均交易金额',
|
|||
|
|
`trans_freq_type` VARCHAR(20) DEFAULT 'MEDIUM' COMMENT 'LOW:低频, MEDIUM:中频, HIGH:高频',
|
|||
|
|
`dr_max_single_amount` DECIMAL(18,2) COMMENT '借方单笔交易最高额',
|
|||
|
|
`cr_max_single_amount` DECIMAL(18,2) COMMENT '贷方单笔交易最高额',
|
|||
|
|
`dr_max_daily_amount` DECIMAL(18,2) COMMENT '借方日累计交易最高额',
|
|||
|
|
`cr_max_daily_amount` DECIMAL(18,2) COMMENT '贷方日累计交易最高额',
|
|||
|
|
`trans_risk_level` VARCHAR(10) DEFAULT 'LOW' COMMENT '交易风险等级',
|
|||
|
|
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|||
|
|
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|||
|
|
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|||
|
|
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|||
|
|
PRIMARY KEY (`result_id`),
|
|||
|
|
UNIQUE KEY `uk_ccdi_account_result_account_no` (`account_no`),
|
|||
|
|
KEY `idx_ccdi_account_result_risk_level` (`trans_risk_level`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账户结果表';
|
|||
|
|
|
|||
|
|
DELIMITER //
|
|||
|
|
|
|||
|
|
DROP PROCEDURE IF EXISTS `migrate_ccdi_account_info_split`//
|
|||
|
|
CREATE PROCEDURE `migrate_ccdi_account_info_split`()
|
|||
|
|
BEGIN
|
|||
|
|
DECLARE dynamic_column_count INT DEFAULT 0;
|
|||
|
|
|
|||
|
|
SELECT COUNT(*)
|
|||
|
|
INTO dynamic_column_count
|
|||
|
|
FROM information_schema.COLUMNS
|
|||
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|||
|
|
AND TABLE_NAME = 'ccdi_account_info'
|
|||
|
|
AND COLUMN_NAME IN (
|
|||
|
|
'is_self_account',
|
|||
|
|
'monthly_avg_trans_count',
|
|||
|
|
'monthly_avg_trans_amount',
|
|||
|
|
'trans_freq_type',
|
|||
|
|
'dr_max_single_amount',
|
|||
|
|
'cr_max_single_amount',
|
|||
|
|
'dr_max_daily_amount',
|
|||
|
|
'cr_max_daily_amount',
|
|||
|
|
'trans_risk_level'
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
IF dynamic_column_count = 9 THEN
|
|||
|
|
INSERT INTO `ccdi_account_result` (
|
|||
|
|
`account_no`,
|
|||
|
|
`is_self_account`,
|
|||
|
|
`monthly_avg_trans_count`,
|
|||
|
|
`monthly_avg_trans_amount`,
|
|||
|
|
`trans_freq_type`,
|
|||
|
|
`dr_max_single_amount`,
|
|||
|
|
`cr_max_single_amount`,
|
|||
|
|
`dr_max_daily_amount`,
|
|||
|
|
`cr_max_daily_amount`,
|
|||
|
|
`trans_risk_level`,
|
|||
|
|
`create_by`,
|
|||
|
|
`create_time`,
|
|||
|
|
`update_by`,
|
|||
|
|
`update_time`
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
`account_no`,
|
|||
|
|
COALESCE(`is_self_account`, 1),
|
|||
|
|
COALESCE(CAST(`monthly_avg_trans_count` AS SIGNED), 0),
|
|||
|
|
COALESCE(`monthly_avg_trans_amount`, 0.00),
|
|||
|
|
COALESCE(`trans_freq_type`, 'MEDIUM'),
|
|||
|
|
`dr_max_single_amount`,
|
|||
|
|
`cr_max_single_amount`,
|
|||
|
|
`dr_max_daily_amount`,
|
|||
|
|
`cr_max_daily_amount`,
|
|||
|
|
COALESCE(`trans_risk_level`, 'LOW'),
|
|||
|
|
`create_by`,
|
|||
|
|
COALESCE(`create_time`, CURRENT_TIMESTAMP),
|
|||
|
|
`update_by`,
|
|||
|
|
COALESCE(`update_time`, CURRENT_TIMESTAMP)
|
|||
|
|
FROM `ccdi_account_info`
|
|||
|
|
ON DUPLICATE KEY UPDATE
|
|||
|
|
`is_self_account` = VALUES(`is_self_account`),
|
|||
|
|
`monthly_avg_trans_count` = VALUES(`monthly_avg_trans_count`),
|
|||
|
|
`monthly_avg_trans_amount` = VALUES(`monthly_avg_trans_amount`),
|
|||
|
|
`trans_freq_type` = VALUES(`trans_freq_type`),
|
|||
|
|
`dr_max_single_amount` = VALUES(`dr_max_single_amount`),
|
|||
|
|
`cr_max_single_amount` = VALUES(`cr_max_single_amount`),
|
|||
|
|
`dr_max_daily_amount` = VALUES(`dr_max_daily_amount`),
|
|||
|
|
`cr_max_daily_amount` = VALUES(`cr_max_daily_amount`),
|
|||
|
|
`trans_risk_level` = VALUES(`trans_risk_level`),
|
|||
|
|
`update_by` = VALUES(`update_by`),
|
|||
|
|
`update_time` = VALUES(`update_time`);
|
|||
|
|
|
|||
|
|
ALTER TABLE `ccdi_account_info`
|
|||
|
|
DROP COLUMN `is_self_account`,
|
|||
|
|
DROP COLUMN `monthly_avg_trans_count`,
|
|||
|
|
DROP COLUMN `monthly_avg_trans_amount`,
|
|||
|
|
DROP COLUMN `trans_freq_type`,
|
|||
|
|
DROP COLUMN `dr_max_single_amount`,
|
|||
|
|
DROP COLUMN `cr_max_single_amount`,
|
|||
|
|
DROP COLUMN `dr_max_daily_amount`,
|
|||
|
|
DROP COLUMN `cr_max_daily_amount`,
|
|||
|
|
DROP COLUMN `trans_risk_level`;
|
|||
|
|
ELSEIF dynamic_column_count <> 0 THEN
|
|||
|
|
SIGNAL SQLSTATE '45000'
|
|||
|
|
SET MESSAGE_TEXT = 'ccdi_account_info dynamic columns are partially migrated; please check schema before running this migration.';
|
|||
|
|
END IF;
|
|||
|
|
END//
|
|||
|
|
|
|||
|
|
CALL `migrate_ccdi_account_info_split`()//
|
|||
|
|
DROP PROCEDURE IF EXISTS `migrate_ccdi_account_info_split`//
|
|||
|
|
|
|||
|
|
DELIMITER ;
|
|||
|
|
|
|||
|
|
DELIMITER //
|
|||
|
|
|
|||
|
|
DROP PROCEDURE IF EXISTS `add_ccdi_account_info_bank_scope`//
|
|||
|
|
CREATE PROCEDURE `add_ccdi_account_info_bank_scope`()
|
|||
|
|
BEGIN
|
|||
|
|
DECLARE column_count INT DEFAULT 0;
|
|||
|
|
|
|||
|
|
SELECT COUNT(*)
|
|||
|
|
INTO column_count
|
|||
|
|
FROM information_schema.COLUMNS
|
|||
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|||
|
|
AND TABLE_NAME = 'ccdi_account_info'
|
|||
|
|
AND COLUMN_NAME = 'bank_scope';
|
|||
|
|
|
|||
|
|
IF column_count = 0 THEN
|
|||
|
|
ALTER TABLE `ccdi_account_info`
|
|||
|
|
ADD COLUMN `bank_scope` VARCHAR(20) NOT NULL DEFAULT 'INTERNAL' COMMENT '账户范围:INTERNAL-行内,EXTERNAL-行外'
|
|||
|
|
AFTER `account_type`;
|
|||
|
|
END IF;
|
|||
|
|
|
|||
|
|
UPDATE `ccdi_account_info`
|
|||
|
|
SET `bank_scope` = 'INTERNAL'
|
|||
|
|
WHERE `bank_scope` IS NULL
|
|||
|
|
OR `bank_scope` = '';
|
|||
|
|
END//
|
|||
|
|
|
|||
|
|
CALL `add_ccdi_account_info_bank_scope`()//
|
|||
|
|
DROP PROCEDURE IF EXISTS `add_ccdi_account_info_bank_scope`//
|
|||
|
|
|
|||
|
|
DELIMITER ;
|