Files
biz-api-cloud-zax/db/20261010_add_xfj_log_card_convert.sql
T

57 lines
3.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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;