Files
RuoYi-Vue/sql/virtual_pay_resource.sql

80 lines
4.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 资源直购虚拟支付改造
-- 执行前请先备份数据库。适用于当前项目的 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. 在微信公众平台创建各价格档位的道具并发布;
-- 2. 在若依后台编辑付费资源,填写“价格(分)”和对应的 productId
-- 3. 同一价格填写同一个 productId后台会自动维护 app_virtual_product 映射。
-- 当前小程序已发布的微信虚拟道具价格映射。
-- 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();