liu
2 天以前 cff970c90a81c307ace673ff0bb4c31c7c0cdad9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-- =====================================================================
-- 付款单付款账户改为手输: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;