Files
YwxAppThink/addon/appmall/install.sql
T

235 lines
13 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.
-- ============================================================
-- 插件应用市场(服务端)建表脚本
-- 由框架插件安装流程(AddonService::executeInstall)自动导入。
-- 部署「插件服务器(中心站)」并启用 market 插件后即生效。
-- 接口契约见 addons/appmall/controller/api/Market.php
-- ============================================================
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_list` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '插件标识符,如 mqttbroker',
`type` varchar(20) NOT NULL DEFAULT 'addon' COMMENT '商品类型:addon=插件 template=模板',
`developer_id` int unsigned DEFAULT '0' COMMENT '发布者(wxapp_appmall_developers.id),用于收益归属',
`title` varchar(100) NOT NULL COMMENT '插件名称',
`version` varchar(20) NOT NULL COMMENT '版本号',
`price` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '价格,0 为免费',
`author` varchar(100) DEFAULT '' COMMENT '作者',
`description` text COMMENT '简介/描述',
`changelog` text COMMENT '更新日志',
`require_framework` varchar(20) DEFAULT '' COMMENT '最低兼容框架版本,如 1.2.0',
`logo` varchar(255) DEFAULT '' COMMENT '封面图 URL',
`category` varchar(50) DEFAULT '' COMMENT '分类(如:工具/电商/社交)',
`tags` varchar(255) DEFAULT '' COMMENT '标签(逗号分隔)',
`screenshots` text COMMENT '截图 URL(逗号分隔或 JSON 数组)',
`rating` decimal(2,1) DEFAULT '0.0' COMMENT '评分(0.0~5.0',
`file_path` varchar(255) NOT NULL COMMENT 'zip 物理路径(非 Web 可访问目录)',
`file_hash` varchar(64) NOT NULL COMMENT 'SHA256 校验值',
`status` tinyint DEFAULT 1 COMMENT '1=上架 0=下架',
`download_count` int DEFAULT 0 COMMENT '下载次数',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name_version` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件市场商品表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_submissions` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned DEFAULT '0' COMMENT '提交者(wxapp_appmall_developers.id',
`name` varchar(50) NOT NULL COMMENT '插件标识符',
`type` varchar(20) NOT NULL DEFAULT 'addon' COMMENT '商品类型:addon=插件 template=模板',
`title` varchar(100) NOT NULL COMMENT '插件名称',
`author` varchar(100) DEFAULT '' COMMENT '作者',
`description` text COMMENT '简介/描述',
`changelog` text COMMENT '更新日志',
`require_framework` varchar(20) DEFAULT '' COMMENT '最低兼容框架版本,如 1.2.0',
`version` varchar(20) NOT NULL COMMENT '版本号',
`price` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '价格',
`category` varchar(50) DEFAULT '' COMMENT '分类',
`tags` varchar(255) DEFAULT '' COMMENT '标签(逗号分隔)',
`logo` varchar(255) DEFAULT '' COMMENT '封面图',
`file_path` varchar(255) NOT NULL COMMENT '待审 zip 物理路径',
`file_hash` varchar(64) NOT NULL COMMENT 'SHA256',
`status` tinyint DEFAULT 0 COMMENT '0=待审核 1=已通过 2=已驳回',
`reject_reason` varchar(255) DEFAULT '' COMMENT '驳回原因',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name_version` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件市场提交审核表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_developers` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL COMMENT '开发者名称',
`email` varchar(120) NOT NULL COMMENT '邮箱(接收令牌/通知)',
`token` varchar(64) NOT NULL COMMENT '开发者令牌(发布插件时校验)',
`status` tinyint DEFAULT 0 COMMENT '0=待审核 1=正常 -1=禁用',
`balance` decimal(10,2) DEFAULT '0.00' COMMENT '可提现余额',
`frozen_balance` decimal(10,2) DEFAULT '0.00' COMMENT '待结算/冻结金额',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_email` (`email`),
UNIQUE KEY `uk_token` (`token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场开发者表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_revenues` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned NOT NULL DEFAULT '0' COMMENT '受益开发者',
`order_id` int unsigned NOT NULL DEFAULT '0' COMMENT 'wxapp_appmall_addon_orders.id',
`aid` int unsigned NOT NULL DEFAULT '0' COMMENT 'wxapp_appmall_addon_list.id',
`uid` int unsigned NOT NULL DEFAULT '0' COMMENT '购买用户',
`amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单金额',
`commission` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '平台抽成',
`income` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '开发者应得',
`status` tinyint DEFAULT 0 COMMENT '0=待结算 1=已结算',
`create_at` int DEFAULT 0,
`settle_at` int DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_developer` (`developer_id`),
KEY `idx_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件销售收益账本';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_withdrawals` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned NOT NULL DEFAULT '0',
`amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现金额',
`channel` varchar(20) DEFAULT 'alipay' COMMENT '提现渠道',
`account` varchar(100) DEFAULT '' COMMENT '收款账号',
`status` tinyint DEFAULT 0 COMMENT '0=待处理 1=已打款 -1=驳回',
`remark` varchar(255) DEFAULT '',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_developer` (`developer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开发者提现单';
-- ============================================================
-- 以下三张表是「购买/授权闭环」的运行表(订单 / 授权 / 下载日志)。
-- 旧版 install.sql 漏建,导致新装中心站一调 buy/notify/下载就报「表不存在」。
-- 与 docs/appmall_schema.sql、客户端 app/api/controller/v1/Addon.php::ensureTables() 字段保持一致。
-- ============================================================
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_licenses` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL COMMENT '用户ID',
`aid` int unsigned NOT NULL COMMENT '对应 appmall_addon_list.id',
`license_key` varchar(64) NOT NULL COMMENT '授权码',
`site_id` int unsigned NOT NULL DEFAULT '0' COMMENT '绑定站点(wxapp_appmall_sites.id)0=未绑定',
`domain` varchar(255) DEFAULT NULL COMMENT '绑定域名(站点授权,对齐 Discuz!)',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '1=有效 0=已吊销(退款)',
`expire_time` int unsigned DEFAULT '0' COMMENT '0 为永久',
`download_count` int DEFAULT '0' COMMENT '下载次数限制',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `license_key` (`license_key`),
UNIQUE KEY `uk_uid_aid` (`uid`, `aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件授权表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_orders` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL DEFAULT '0',
`aid` int unsigned NOT NULL DEFAULT '0' COMMENT 'appmall_addon_list.id',
`site_id` int unsigned NOT NULL DEFAULT '0' COMMENT '下单站点',
`amount` decimal(10,2) NOT NULL DEFAULT '0' COMMENT '订单金额',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '0=待支付 1=已支付 2=已退款',
`trade_no` varchar(64) NOT NULL DEFAULT '' COMMENT '商户订单号',
`pay_time` int unsigned DEFAULT '0' COMMENT '支付时间',
`create_at` int unsigned DEFAULT 0,
`update_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_uid` (`uid`),
KEY `idx_trade` (`trade_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件购买订单表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_download_logs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`license_id` int unsigned NOT NULL DEFAULT '0',
`uid` int unsigned NOT NULL DEFAULT '0',
`aid` int unsigned NOT NULL DEFAULT '0',
`operator_id` int unsigned NOT NULL DEFAULT '0' COMMENT '运营后台下载审计(Addons::downloadInstall 透传,0=会员自助下载)',
`ip` varchar(45) DEFAULT '',
`create_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_license` (`license_id`),
KEY `idx_operator` (`operator_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件下载日志表';
-- 市场客户端站点(授权绑定的维度,对齐 Discuz!「授权绑定站点域名」)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_sites` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`site_token` varchar(64) NOT NULL DEFAULT '' COMMENT '站点令牌(客户端 install 时生成/上报)',
`domain` varchar(255) NOT NULL DEFAULT '' COMMENT '主域名',
`owner_uid` int unsigned NOT NULL DEFAULT '0' COMMENT '站点所有者用户ID',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '1=正常 0=禁用',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_domain` (`domain`),
KEY `idx_token` (`site_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场客户端站点(授权绑定维度)';
-- ============================================================
-- 主框架升级(原 upgrade 插件,已合并进 market
-- 客户端 ywxapp\service\FrameworkService 经 /api/framework/* 拉取版本与核心包。
-- ============================================================
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_framework_list` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`version` varchar(20) NOT NULL COMMENT '框架版本号',
`title` varchar(100) DEFAULT '' COMMENT '版本标题',
`changelog` text COMMENT '更新日志',
`file_path` varchar(255) DEFAULT '' COMMENT '整包 zip 物理路径(非 Web 可访问目录)',
`file_hash` varchar(64) DEFAULT '' COMMENT '整包 SHA256 校验值',
`patch_path` varchar(255) DEFAULT '' COMMENT '增量补丁 zip 物理路径(与整包同版本共存)',
`patch_hash` varchar(64) DEFAULT '' COMMENT '补丁 SHA256 校验值',
`patch_from` varchar(20) DEFAULT '' COMMENT '补丁适用的基础版本',
`type` tinyint DEFAULT 0 COMMENT '兼容旧客户端:0=含整包 1=仅补丁(逻辑以 patch_path 是否为空为准)',
`from_version` varchar(20) DEFAULT '' COMMENT '兼容旧客户端:补丁基础版本镜像',
`install_path` varchar(255) DEFAULT '' COMMENT '完整安装包 zip 物理路径(全新部署用,含占位符 .env,非 Web 可访问目录)',
`install_hash` varchar(64) DEFAULT '' COMMENT '完整安装包 SHA256 校验值',
`status` tinyint DEFAULT 0 COMMENT '0=草稿 1=已发布(可下载)',
`download_count` int DEFAULT 0 COMMENT '下载次数',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主框架版本表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_framework_download_log` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`version` varchar(20) NOT NULL COMMENT '下载的版本号',
`uid` int DEFAULT 0 COMMENT '下载用户ID(来自客户端)',
`ip` varchar(45) DEFAULT '' COMMENT '下载来源IP',
`create_at` int DEFAULT 0 COMMENT '下载时间',
PRIMARY KEY (`id`),
KEY `idx_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主框架下载日志表';
-- 接口频率限制(buy/notify/download/submit 等防刷)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_throttle` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`action` varchar(30) NOT NULL COMMENT '限流动作(buy/notify/download/submit',
`ident` varchar(80) NOT NULL COMMENT '限流标识(uid 或 IP',
`count` int unsigned NOT NULL DEFAULT 0 COMMENT '窗口内已请求次数',
`expire_at` int unsigned NOT NULL DEFAULT 0 COMMENT '窗口过期时间戳',
`create_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_action_ident` (`action`, `ident`),
KEY `idx_expire` (`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='接口频率限制表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_review_log` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`submission_id` int unsigned NOT NULL DEFAULT 0 COMMENT 'appmall_addon_submissions.id',
`operator_id` int unsigned NOT NULL DEFAULT 0 COMMENT '操作管理员ID',
`action` varchar(20) NOT NULL COMMENT '操作:submit/approve/reject',
`from_status` tinyint NOT NULL DEFAULT 0 COMMENT '变更前状态',
`to_status` tinyint NOT NULL DEFAULT 0 COMMENT '变更后状态',
`reason` varchar(255) NOT NULL DEFAULT '' COMMENT '审核意见/驳回理由',
`create_at` int unsigned NOT NULL DEFAULT 0 COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_submission` (`submission_id`),
KEY `idx_create` (`create_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件审核历史日志(可视化时间线数据源)';