57 lines
3.0 KiB
SQL
57 lines
3.0 KiB
SQL
-- 20261010 消费机日志记录卡号转换信息(可重复执行)
|
||
--
|
||
-- 背景:部分商户(首个 2078051759222632449)的消费机上报 10 位十进制卡号,服务端按
|
||
-- “十进制 → 8 位大写十六进制 → 字节反转”规则换算成库内卡号后查询钱包
|
||
-- (如 2506198930 → 95618F92 → 928F6195);排查对账需要在日志表直接看到
|
||
-- 转换前后卡号与转换方式,而不是从 req 原文里人工换算。
|
||
-- 方案:hard_xfj_log 新增三列,均可空,仅刷卡综合接口(consumTransactions)日志填充:
|
||
-- source_card_no 转换前卡号(设备上报原始卡号)
|
||
-- target_card_no 转换后卡号(库内查询卡号,未转换时与转换前一致)
|
||
-- card_convert_type 卡号转换方式(NONE=未转换,DECIMAL_UID_REVERSE=十进制转十六进制字节反转)
|
||
-- 执行:Online DDL,小字段变更,秒级完成。
|
||
-- 回滚:文末 DROP COLUMN。
|
||
|
||
USE pjcloudx_hardware;
|
||
|
||
SET @ddl = IF(
|
||
(SELECT COUNT(*) FROM information_schema.columns
|
||
WHERE table_schema = 'pjcloudx_hardware' AND table_name = 'hard_xfj_log'
|
||
AND column_name = 'source_card_no') = 0,
|
||
'ALTER TABLE hard_xfj_log ADD COLUMN source_card_no varchar(64) DEFAULT NULL COMMENT ''转换前卡号(设备上报原始卡号)'' AFTER req',
|
||
'SELECT ''skip: source_card_no 已存在'' AS msg');
|
||
PREPARE stmt FROM @ddl;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
SET @ddl = IF(
|
||
(SELECT COUNT(*) FROM information_schema.columns
|
||
WHERE table_schema = 'pjcloudx_hardware' AND table_name = 'hard_xfj_log'
|
||
AND column_name = 'target_card_no') = 0,
|
||
'ALTER TABLE hard_xfj_log ADD COLUMN target_card_no varchar(64) DEFAULT NULL COMMENT ''转换后卡号(库内查询卡号,未转换时与转换前一致)'' AFTER source_card_no',
|
||
'SELECT ''skip: target_card_no 已存在'' AS msg');
|
||
PREPARE stmt FROM @ddl;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
SET @ddl = IF(
|
||
(SELECT COUNT(*) FROM information_schema.columns
|
||
WHERE table_schema = 'pjcloudx_hardware' AND table_name = 'hard_xfj_log'
|
||
AND column_name = 'card_convert_type') = 0,
|
||
'ALTER TABLE hard_xfj_log ADD COLUMN card_convert_type varchar(32) DEFAULT NULL COMMENT ''卡号转换方式(NONE=未转换,DECIMAL_UID_REVERSE=十进制转十六进制字节反转)'' AFTER target_card_no',
|
||
'SELECT ''skip: card_convert_type 已存在'' AS msg');
|
||
PREPARE stmt FROM @ddl;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
-- ============ 执行后验证(期望三列均为 YES) ============
|
||
-- SELECT column_name, data_type, character_maximum_length
|
||
-- FROM information_schema.columns
|
||
-- WHERE table_schema = 'pjcloudx_hardware' AND table_name = 'hard_xfj_log'
|
||
-- AND column_name IN ('source_card_no', 'target_card_no', 'card_convert_type');
|
||
|
||
-- ============ 回滚(如需) ============
|
||
-- ALTER TABLE hard_xfj_log
|
||
-- DROP COLUMN source_card_no,
|
||
-- DROP COLUMN target_card_no,
|
||
-- DROP COLUMN card_convert_type;
|