-- 资源虚拟支付:简版多规格迁移 -- 前置条件:已经执行 sql/virtual_pay_resource.sql。 -- 约定:app_resource_list 的每一行就是一个可单独购买的规格。 -- 执行前请备份数据库。 ALTER TABLE app_resource_list ADD COLUMN price_fen INT NOT NULL DEFAULT 0 COMMENT '规格价格,单位分' AFTER password, ADD COLUMN status TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用' AFTER price_fen, ADD COLUMN sort_order INT NOT NULL DEFAULT 0 COMMENT '显示顺序' AFTER status; -- 现有付费资源的下载项继承原资源价格;非付费资源价格保持0。 UPDATE app_resource_list rl INNER JOIN app_resource r ON r.id = rl.app_resource_id SET rl.price_fen = r.price_fen WHERE r.is_ad = 3 AND rl.price_fen = 0; ALTER TABLE app_virtual_order ADD COLUMN resource_list_id BIGINT NULL COMMENT '购买的资源规格ID,NULL表示旧版整项购买' AFTER resource_id, ADD COLUMN spec_name_snapshot VARCHAR(255) NULL COMMENT '下单时的规格名称快照' AFTER resource_list_id, ADD KEY idx_virtual_order_resource_list (resource_list_id); ALTER TABLE app_resource_entitlement ADD COLUMN resource_list_id BIGINT NULL COMMENT '解锁的资源规格ID,NULL表示旧版整项权益' AFTER resource_id, DROP INDEX uk_resource_entitlement_user_resource, ADD UNIQUE KEY uk_entitlement_user_resource_spec (user_id, resource_id, resource_list_id), ADD KEY idx_entitlement_resource_list (resource_list_id); -- 旧订单和旧权益保留 resource_list_id=NULL,继续拥有整项资源访问权限。 -- 新订单必须写入具体 resource_list_id,只解锁所购买的规格。