feat: 新增数据库迁移,重命名 device_no 为 virtual_no,新增 iot_card.virtual_no 和 package.virtual_ratio 字段
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m3s

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-03-14 18:27:28 +08:00
parent b5147d1acb
commit b9c3875c08
77 changed files with 5832 additions and 2393 deletions

View File

@@ -0,0 +1,7 @@
-- 回滚:将 virtual_no 改回 device_no
ALTER TABLE tb_device RENAME COLUMN virtual_no TO device_no;
ALTER INDEX IF EXISTS idx_device_virtual_no RENAME TO idx_device_no;
ALTER TABLE tb_personal_customer_device RENAME COLUMN virtual_no TO device_no;

View File

@@ -0,0 +1,11 @@
-- 将 tb_device 和 tb_personal_customer_device 中的 device_no 字段改名为 virtual_no
-- 原因:统一"虚拟号"的字段命名,与 tb_iot_card.virtual_no 保持一致
-- 重命名 tb_device.device_no → virtual_no
ALTER TABLE tb_device RENAME COLUMN device_no TO virtual_no;
-- 同步重命名唯一索引(可选,保持命名一致性)
ALTER INDEX IF EXISTS idx_device_no RENAME TO idx_device_virtual_no;
-- 重命名 tb_personal_customer_device.device_no → virtual_no
ALTER TABLE tb_personal_customer_device RENAME COLUMN device_no TO virtual_no;

View File

@@ -0,0 +1,2 @@
DROP INDEX IF EXISTS idx_iot_card_virtual_no;
ALTER TABLE tb_iot_card DROP COLUMN IF EXISTS virtual_no;

View File

@@ -0,0 +1,7 @@
ALTER TABLE tb_iot_card ADD COLUMN IF NOT EXISTS virtual_no VARCHAR(50);
CREATE UNIQUE INDEX IF NOT EXISTS idx_iot_card_virtual_no
ON tb_iot_card(virtual_no)
WHERE deleted_at IS NULL AND virtual_no IS NOT NULL AND virtual_no <> '';
COMMENT ON COLUMN tb_iot_card.virtual_no IS '虚拟号(可空,全局唯一)';

View File

@@ -0,0 +1 @@
ALTER TABLE tb_package DROP COLUMN IF EXISTS virtual_ratio;

View File

@@ -0,0 +1,11 @@
ALTER TABLE tb_package ADD COLUMN IF NOT EXISTS virtual_ratio DECIMAL(18,6) NOT NULL DEFAULT 1.0;
COMMENT ON COLUMN tb_package.virtual_ratio IS '虚流量比例(real_data_mb/virtual_data_mb)创建套餐时计算存储默认1.0';
UPDATE tb_package
SET virtual_ratio = CASE
WHEN enable_virtual_data = true AND virtual_data_mb > 0
THEN (real_data_mb::DECIMAL / virtual_data_mb::DECIMAL)
ELSE 1.0
END
WHERE deleted_at IS NULL;