Files
RuoYi-Vue/sql/virtual_pay_resource.sql

80 lines
4.0 KiB
MySQL
Raw Normal View History

-- 资源直购虚拟支付改造
-- 执行前请先备份数据库。适用于当前项目的 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();