2026-05-11 99e26030611fdc06ee3dd523072fe5516b78dc5b
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
-- 销售订单模块新增字段(2026-05-11)
-- 说明:
-- 1) 脚本按“存在则跳过,不存在则新增”执行,可重复执行。
-- 2) 物料号统一字段为 material_no;若历史存在 material,会回填到 material_no。
 
SET @db_name = DATABASE();
 
-- ----------------------------
-- sales_ledger 新增字段
-- ----------------------------
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger'
  AND COLUMN_NAME = 'order_type';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger ADD COLUMN order_type VARCHAR(64) NULL COMMENT ''订单类型''',
              'SELECT ''skip: sales_ledger.order_type exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger'
  AND COLUMN_NAME = 'order_line';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger ADD COLUMN order_line VARCHAR(64) NULL COMMENT ''订单行''',
              'SELECT ''skip: sales_ledger.order_line exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger'
  AND COLUMN_NAME = 'demand_date';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger ADD COLUMN demand_date DATE NULL COMMENT ''需求日期''',
              'SELECT ''skip: sales_ledger.demand_date exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
-- ----------------------------
-- sales_ledger_product 新增字段
-- ----------------------------
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'delivery_quantity';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger_product ADD COLUMN delivery_quantity DECIMAL(18,6) NULL COMMENT ''交货数量''',
              'SELECT ''skip: sales_ledger_product.delivery_quantity exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'remaining_quantity';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger_product ADD COLUMN remaining_quantity DECIMAL(18,6) NULL COMMENT ''剩余数量''',
              'SELECT ''skip: sales_ledger_product.remaining_quantity exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'sub_inventory';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger_product ADD COLUMN sub_inventory VARCHAR(128) NULL COMMENT ''子库存''',
              'SELECT ''skip: sales_ledger_product.sub_inventory exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'location';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger_product ADD COLUMN location VARCHAR(128) NULL COMMENT ''货位''',
              'SELECT ''skip: sales_ledger_product.location exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'is_spray';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger_product ADD COLUMN is_spray TINYINT(1) NULL COMMENT ''是否喷砂''',
              'SELECT ''skip: sales_ledger_product.is_spray exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SELECT COUNT(*) INTO @cnt
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'material_no';
SET @sql = IF(@cnt = 0,
              'ALTER TABLE sales_ledger_product ADD COLUMN material_no VARCHAR(128) NULL COMMENT ''物料号''',
              'SELECT ''skip: sales_ledger_product.material_no exists''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
-- ----------------------------
-- 历史数据兼容:material -> material_no
-- ----------------------------
SELECT COUNT(*) INTO @has_old_material
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'material';
 
SELECT COUNT(*) INTO @has_new_material_no
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
  AND TABLE_NAME = 'sales_ledger_product'
  AND COLUMN_NAME = 'material_no';
 
SET @sql = IF(@has_old_material = 1 AND @has_new_material_no = 1,
              'UPDATE sales_ledger_product
               SET material_no = material
               WHERE (material_no IS NULL OR material_no = '''')
                 AND material IS NOT NULL',
              'SELECT ''skip: material -> material_no backfill''');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
-- 可选:确认前端/后端都已切换后,再评估是否删除旧列 material
-- ALTER TABLE sales_ledger_product DROP COLUMN material;