-- =====================================================================
|
-- 付款单付款账户改为手输:erp_finance_payment.account_id -> account_name
|
-- =====================================================================
|
-- 背景:
|
-- 1. 公司没有财务模块,付款账户不再从 erp_account 主数据选择,改为普通手输文本
|
-- 2. 前端已改为 Input 手输,提交字段为 accountName(String)
|
-- 3. 后端已改为存储 accountName(对应列 account_name),不再使用 account_id
|
-- 方案:
|
-- 1. 若表缺少 account_name 列则补充(幂等,已存在则跳过)
|
-- 2. 将已有 account_id 关联的账户名称回填到 account_name(仅回填空值,不覆盖手输内容)
|
-- 3. 删除旧的 account_id 列(幂等,已删除则跳过)
|
-- 适用数据库:MySQL 8.x
|
-- 注意:SQL 脚本中不包含 tenant_id(项目未使用多租户)
|
-- =====================================================================
|
|
-- 1. 确保 account_name 列存在(已存在则跳过,兼容部分迁移过的库)
|
SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns
|
WHERE table_schema = DATABASE() AND table_name = 'erp_finance_payment' AND column_name = 'account_name');
|
SET @sql = IF(@col_exists = 0,
|
'ALTER TABLE erp_finance_payment ADD COLUMN account_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT ''付款账户'' AFTER account_id',
|
'SELECT 1');
|
PREPARE stmt FROM @sql;
|
EXECUTE stmt;
|
DEALLOCATE PREPARE stmt;
|
|
-- 2. 迁移已有数据:仅当 account_name 为空时,用 account_id 关联的账户名称回填(不覆盖已手输的值)
|
UPDATE erp_finance_payment p
|
LEFT JOIN erp_account a ON p.account_id = a.id
|
SET p.account_name = a.name
|
WHERE (p.account_name IS NULL OR p.account_name = '')
|
AND p.deleted = 0;
|
|
-- 3. 删除旧的 account_id 列(已删除则跳过)
|
SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns
|
WHERE table_schema = DATABASE() AND table_name = 'erp_finance_payment' AND column_name = 'account_id');
|
SET @sql = IF(@col_exists = 1,
|
'ALTER TABLE erp_finance_payment DROP COLUMN account_id',
|
'SELECT 1');
|
PREPARE stmt FROM @sql;
|
EXECUTE stmt;
|
DEALLOCATE PREPARE stmt;
|