2026-07-28 13:42:30 +08:00
|
|
|
|
-- 资源直购虚拟支付改造
|
|
|
|
|
|
-- 执行前请先备份数据库。适用于当前项目的 MySQL 数据库。
|
|
|
|
|
|
|
|
|
|
|
|
ALTER TABLE app_resource
|
|
|
|
|
|
ADD COLUMN price_fen INT NOT NULL DEFAULT 0 COMMENT '虚拟支付价格,单位分' AFTER ad_number;
|
|
|
|
|
|
|
|
|
|
|
|
-- 兼容已有“is_ad=3 且 ad_number 表示人民币元”的资源。
|
|
|
|
|
|
UPDATE app_resource
|
|
|
|
|
|
SET price_fen = ad_number * 100
|
|
|
|
|
|
WHERE is_ad = 3 AND price_fen = 0 AND ad_number > 0;
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE app_virtual_product (
|
|
|
|
|
|
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
|
|
|
|
|
product_id VARCHAR(64) NOT NULL COMMENT '微信虚拟道具productId',
|
|
|
|
|
|
price_fen INT NOT NULL COMMENT '价格档位,单位分',
|
|
|
|
|
|
product_name VARCHAR(100) NOT NULL COMMENT '档位名称',
|
|
|
|
|
|
status TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
|
|
|
|
|
|
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
update_time DATETIME NULL,
|
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
|
UNIQUE KEY uk_virtual_product_id (product_id),
|
|
|
|
|
|
UNIQUE KEY uk_virtual_product_price (price_fen)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信虚拟道具价格档位';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE app_virtual_order (
|
|
|
|
|
|
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
|
|
|
|
|
order_no VARCHAR(32) NOT NULL COMMENT '业务订单号',
|
|
|
|
|
|
user_id BIGINT NOT NULL COMMENT '用户ID',
|
|
|
|
|
|
resource_id BIGINT NOT NULL COMMENT '资源ID',
|
|
|
|
|
|
product_id VARCHAR(64) NOT NULL COMMENT '微信虚拟道具ID',
|
|
|
|
|
|
price_fen INT NOT NULL COMMENT '支付金额,单位分',
|
|
|
|
|
|
open_id VARCHAR(64) NOT NULL COMMENT '微信OpenID',
|
|
|
|
|
|
status TINYINT NOT NULL DEFAULT 0 COMMENT '0待支付 1已支付发货 2已退款 3已关闭',
|
|
|
|
|
|
wx_order_no VARCHAR(64) NULL COMMENT '微信内部订单号',
|
|
|
|
|
|
transaction_id VARCHAR(64) NULL COMMENT '微信支付交易单号',
|
|
|
|
|
|
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
pay_time DATETIME NULL,
|
|
|
|
|
|
provide_time DATETIME NULL,
|
|
|
|
|
|
refund_time DATETIME NULL,
|
|
|
|
|
|
last_query_time DATETIME NULL,
|
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
|
UNIQUE KEY uk_virtual_order_no (order_no),
|
|
|
|
|
|
KEY idx_virtual_order_user (user_id, create_time),
|
|
|
|
|
|
KEY idx_virtual_order_resource (resource_id)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资源虚拟支付订单';
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE app_resource_entitlement (
|
|
|
|
|
|
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
|
|
|
|
|
user_id BIGINT NOT NULL COMMENT '用户ID',
|
|
|
|
|
|
resource_id BIGINT NOT NULL COMMENT '资源ID',
|
|
|
|
|
|
order_no VARCHAR(32) NOT NULL COMMENT '来源虚拟支付订单号',
|
|
|
|
|
|
status TINYINT NOT NULL DEFAULT 1 COMMENT '1有效 0已撤销',
|
|
|
|
|
|
granted_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
revoked_time DATETIME NULL,
|
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
|
UNIQUE KEY uk_resource_entitlement_order (order_no),
|
|
|
|
|
|
UNIQUE KEY uk_resource_entitlement_user_resource (user_id, resource_id),
|
|
|
|
|
|
KEY idx_resource_entitlement_resource (resource_id)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='付费资源访问权益';
|
|
|
|
|
|
|
|
|
|
|
|
-- 执行迁移后:
|
|
|
|
|
|
-- 1. 在微信公众平台创建各价格档位的道具并发布;
|
2026-09-30 11:00:01 +08:00
|
|
|
|
-- 2. 执行 sql/virtual_product_menu.sql,重新登录后在“虚拟道具管理”中维护相同的 productId 和价格;
|
|
|
|
|
|
-- 3. 在若依后台编辑付费资源,规格只需填写“价格(分)”,系统按价格自动匹配已启用道具。
|
2026-07-28 13:42:30 +08:00
|
|
|
|
|
|
|
|
|
|
-- 当前小程序已发布的微信虚拟道具价格映射。
|
|
|
|
|
|
-- product_id 必须与微信后台保持完全一致(包括 resourse 的现有拼写)。
|
|
|
|
|
|
INSERT INTO app_virtual_product
|
|
|
|
|
|
(product_id, price_fen, product_name, status, create_time)
|
|
|
|
|
|
VALUES
|
|
|
|
|
|
('resourse_1', 100, '1元资源', 1, NOW()),
|
|
|
|
|
|
('resourse_10', 1000, '10元资源', 1, NOW()),
|
|
|
|
|
|
('resourse_50', 5000, '50元资源', 1, NOW()),
|
|
|
|
|
|
('resourse_99', 9900, '99元资源', 1, NOW()),
|
|
|
|
|
|
('resourse_300', 30000, '300元资源', 1, NOW())
|
|
|
|
|
|
ON DUPLICATE KEY UPDATE
|
|
|
|
|
|
product_name = VALUES(product_name),
|
|
|
|
|
|
status = 1,
|
|
|
|
|
|
update_time = NOW();
|