第一次上传

This commit is contained in:
xxk
2026-06-11 10:31:24 +08:00
commit cfef094568
1523 changed files with 210650 additions and 0 deletions
@@ -0,0 +1,11 @@
ALTER TABLE `xxk_wallet_recharge_order`
ADD COLUMN `gift_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '充值赠送金额' AFTER `amount`,
ADD COLUMN `credited_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '实际到账金额' AFTER `gift_amount`,
ADD COLUMN `promotion_rule_snapshot` text NULL COMMENT '命中的充值活动规则快照' AFTER `credited_amount`;
UPDATE `xxk_wallet_recharge_order`
SET `gift_amount` = IFNULL(`gift_amount`, 0.00),
`credited_amount` = CASE
WHEN IFNULL(`credited_amount`, 0.00) > 0 THEN `credited_amount`
ELSE IFNULL(`amount`, 0.00) + IFNULL(`gift_amount`, 0.00)
END;
+19
View File
@@ -0,0 +1,19 @@
DROP TABLE IF EXISTS `xxk_proxy_region`;
CREATE TABLE `xxk_proxy_region` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`region_code` varchar(64) NOT NULL COMMENT '地区编号',
`region_name_zh` varchar(100) NOT NULL COMMENT '地区中文名',
`region_name` varchar(100) NOT NULL COMMENT '地区名称',
`icon_url` varchar(500) NOT NULL COMMENT '地区图标',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态(1-启用 0-禁用)',
`sort` int NOT NULL DEFAULT '0' COMMENT '排序',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` bigint DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除(1-已删 0-未删)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_proxy_region_code_deleted` (`region_code`,`is_deleted`),
KEY `idx_proxy_region_status` (`status`,`is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代理平台地区管理表';
+47
View File
@@ -0,0 +1,47 @@
-- 代理模式改造升级脚本
-- 适用范围:
-- 1. 将会员资料补充代理级别字段。
-- 2. 为历史会员回填默认代理级别为二级代理。
-- 3. 规范异常代理级别值,保证新代码可直接使用。
--
-- 执行建议:
-- 1. 执行前先备份数据库。
-- 2. 在业务低峰期执行。
-- 3. 执行完成后再发布本次 Java / UI / member-web 代码。
SET @current_schema = DATABASE();
-- 1) 如果 xxk_member_profile.agent_level 不存在,则新增字段
SET @has_agent_level = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @current_schema
AND TABLE_NAME = 'xxk_member_profile'
AND COLUMN_NAME = 'agent_level'
);
SET @ddl_sql = IF(
@has_agent_level = 0,
'ALTER TABLE `xxk_member_profile`
ADD COLUMN `agent_level` TINYINT NOT NULL DEFAULT 2 COMMENT ''代理级别(1一级代理 2二级代理)'' AFTER `invite_code`',
'SELECT ''xxk_member_profile.agent_level already exists'' AS message'
);
PREPARE stmt FROM @ddl_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2) 历史数据回填:
-- 空值、0、其他非法值一律收敛成二级代理
UPDATE `xxk_member_profile`
SET `agent_level` = 2
WHERE `agent_level` IS NULL
OR `agent_level` NOT IN (1, 2);
UPDATE `sys_menu` SET `name` = '代理返佣流水' WHERE `id` = 1200
ALTER TABLE `xxk_distribution_config`
ADD COLUMN IF NOT EXISTS `withdraw_threshold` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '提现门槛金额' AFTER `second_level_rate`,
ADD COLUMN IF NOT EXISTS `withdraw_fee_rate` decimal(10,4) NOT NULL DEFAULT 0.0000 COMMENT '提现手续费比例' AFTER `withdraw_threshold`;
@@ -0,0 +1,15 @@
-- 修复会员分销字段漏合并导致的后台用户中心查询报错。
-- 适用于已存在 xxk_distribution_relation / xxk_distribution_commission 老结构的数据库。
ALTER TABLE `xxk_distribution_relation`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '当前会员ID' AFTER `grand_parent_user_id`,
ADD COLUMN `parent_member_user_id` BIGINT NULL COMMENT '一级上级会员ID' AFTER `member_user_id`,
ADD COLUMN `grand_parent_member_user_id` BIGINT NULL COMMENT '二级上级会员ID' AFTER `parent_member_user_id`,
ADD UNIQUE INDEX `uk_xxk_distribution_relation_member_user_id` (`member_user_id`),
ADD KEY `idx_xxk_distribution_relation_parent_member_user_id` (`parent_member_user_id`);
ALTER TABLE `xxk_distribution_commission`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '佣金归属会员ID' AFTER `from_user_id`,
ADD COLUMN `from_member_user_id` BIGINT NULL COMMENT '消费会员ID' AFTER `member_user_id`,
ADD KEY `idx_xxk_distribution_commission_member_user_id` (`member_user_id`),
ADD KEY `idx_xxk_distribution_commission_from_member_user_id` (`from_member_user_id`);
@@ -0,0 +1,8 @@
-- 分销关系表 user_id 可空兼容升级脚本
-- 说明:
-- 1. 历史设计中 xxk_distribution_relation 仅面向 sys_useruser_id 为 NOT NULL。
-- 2. 会员体系接入后,会员邀请关系只依赖 member_user_id / parent_member_user_id。
-- 3. 若继续要求 user_id 非空,会员注册或邀请码绑定时会因未传 sys_user.user_id 而写库失败。
ALTER TABLE `xxk_distribution_relation`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '当前用户ID';
@@ -0,0 +1,3 @@
ALTER TABLE `xxk_distribution_config`
ADD COLUMN `withdraw_threshold` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '提现门槛金额' AFTER `second_level_rate`,
ADD COLUMN `withdraw_fee_rate` decimal(10,4) NOT NULL DEFAULT 0.0000 COMMENT '提现手续费比例' AFTER `withdraw_threshold`;
@@ -0,0 +1,15 @@
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`, `always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(12010, 1200, '0,1100,1200', '提现申请', 'C', 'ProxyDistributionWithdraw', 'distribution-withdraw', 'proxy/distribution-withdraw/index', NULL, 0, 1, 1, 20, 'Wallet', NULL, NOW(), NOW(), NULL),
(12011, 12010, '0,1100,1200,12010', '提现申请查询', 'B', NULL, '', NULL, 'proxy:distribution:withdraw:list', NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL),
(12012, 12010, '0,1100,1200,12010', '提现申请审核', 'B', NULL, '', NULL, 'proxy:distribution:withdraw:audit', NULL, NULL, 1, 2, '', NULL, NOW(), NOW(), NULL),
(12013, 12010, '0,1100,1200,12010', '提现确认打款', 'B', NULL, '', NULL, 'proxy:distribution:withdraw:pay', NULL, NULL, 1, 3, '', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = NOW();
@@ -0,0 +1,69 @@
-- 分销佣金提现模块升级脚本
-- 说明:
-- 1. 在分销佣金账户中增加累计提现金额。
-- 2. 在分销佣金账户流水中增加冻结余额与提现单关联字段。
-- 3. 新增会员提现收款方式表与提现申请表。
ALTER TABLE `xxk_distribution_account`
ADD COLUMN `total_withdraw_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计提现金额' AFTER `total_transfer_amount`;
ALTER TABLE `xxk_distribution_account_flow`
ADD COLUMN `before_frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动前冻结余额' AFTER `after_balance`,
ADD COLUMN `after_frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动后冻结余额' AFTER `before_frozen_balance`,
ADD COLUMN `related_withdraw_no` VARCHAR(64) DEFAULT NULL COMMENT '关联提现单号' AFTER `related_wallet_flow_no`,
ADD KEY `idx_xxk_distribution_account_flow_related_withdraw_no` (`related_withdraw_no`);
CREATE TABLE `xxk_distribution_withdraw_method` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`method_type` VARCHAR(32) NOT NULL COMMENT '收款方式(ALIPAY_ACCOUNT/ALIPAY_QR/WECHAT_QR)',
`account_name` VARCHAR(64) NOT NULL COMMENT '收款人姓名',
`account_no` VARCHAR(128) DEFAULT NULL COMMENT '收款账号',
`qr_code_url` VARCHAR(255) DEFAULT NULL COMMENT '收款码地址',
`is_default` TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认(1-是 0-否)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_xxk_distribution_withdraw_method_member_user_id` (`member_user_id`),
KEY `idx_xxk_distribution_withdraw_method_default` (`member_user_id`, `is_default`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分销提现收款方式表';
CREATE TABLE `xxk_distribution_withdraw_apply` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`withdraw_no` VARCHAR(64) NOT NULL COMMENT '提现单号',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`username_snapshot` VARCHAR(64) DEFAULT NULL COMMENT '会员账号快照',
`nickname_snapshot` VARCHAR(64) DEFAULT NULL COMMENT '会员昵称快照',
`mobile_snapshot` VARCHAR(32) DEFAULT NULL COMMENT '会员手机号快照',
`withdraw_method_id` BIGINT DEFAULT NULL COMMENT '提现方式ID',
`method_type` VARCHAR(32) NOT NULL COMMENT '收款方式类型',
`account_name_snapshot` VARCHAR(64) NOT NULL COMMENT '收款人快照',
`account_no_snapshot` VARCHAR(128) DEFAULT NULL COMMENT '收款账号快照',
`qr_code_url_snapshot` VARCHAR(255) DEFAULT NULL COMMENT '收款码快照',
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '申请提现金额',
`paid_amount` DECIMAL(18,2) DEFAULT NULL COMMENT '实际打款金额',
`status` VARCHAR(32) NOT NULL COMMENT '状态(PENDING/APPROVED/REJECTED/PAID)',
`submit_remark` VARCHAR(255) DEFAULT NULL COMMENT '申请备注',
`submit_time` DATETIME DEFAULT NULL COMMENT '申请时间',
`audit_remark` VARCHAR(255) DEFAULT NULL COMMENT '审核备注',
`audit_by` BIGINT DEFAULT NULL COMMENT '审核人',
`audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`pay_remark` VARCHAR(255) DEFAULT NULL COMMENT '打款备注',
`pay_proof_urls_json` TEXT DEFAULT NULL COMMENT '打款凭证JSON',
`pay_by` BIGINT DEFAULT NULL COMMENT '打款确认人',
`pay_time` DATETIME DEFAULT NULL COMMENT '打款时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_distribution_withdraw_apply_no` (`withdraw_no`),
KEY `idx_xxk_distribution_withdraw_apply_member_user_id` (`member_user_id`),
KEY `idx_xxk_distribution_withdraw_apply_status` (`status`),
KEY `idx_xxk_distribution_withdraw_apply_submit_time` (`submit_time`),
KEY `idx_xxk_distribution_withdraw_apply_pay_time` (`pay_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分销提现申请表';
@@ -0,0 +1,10 @@
-- 会员代理级别升级脚本
-- 1. 在会员资料表增加代理级别字段,默认二级代理。
-- 2. 回填历史空值,保证会员前台可显示代理级别和返佣比例。
ALTER TABLE `xxk_member_profile`
ADD COLUMN `agent_level` TINYINT NOT NULL DEFAULT 2 COMMENT '代理级别(1一级代理 2二级代理)' AFTER `invite_code`;
UPDATE `xxk_member_profile`
SET `agent_level` = 2
WHERE `agent_level` IS NULL;
@@ -0,0 +1,62 @@
-- 会员分销邀请码与独立佣金账户升级脚本
-- 说明:
-- 1. 为会员资料增加邀请码字段,支持邀请绑定。
-- 2. 为分销关系与佣金流水增加 member_user_id 口径,避免与后台 sys_user 混用。
-- 3. 新增独立佣金账户与账户流水,佣金可转入钱包,但不直接混入钱包口径。
ALTER TABLE `xxk_member_profile`
ADD COLUMN `invite_code` VARCHAR(32) NULL COMMENT '邀请码' AFTER `member_user_id`,
ADD UNIQUE INDEX `uk_xxk_member_profile_invite_code` (`invite_code`);
ALTER TABLE `xxk_distribution_relation`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '当前会员ID' AFTER `grand_parent_user_id`,
ADD COLUMN `parent_member_user_id` BIGINT NULL COMMENT '一级上级会员ID' AFTER `member_user_id`,
ADD COLUMN `grand_parent_member_user_id` BIGINT NULL COMMENT '二级上级会员ID' AFTER `parent_member_user_id`,
ADD UNIQUE INDEX `uk_xxk_distribution_relation_member_user_id` (`member_user_id`),
ADD KEY `idx_xxk_distribution_relation_parent_member_user_id` (`parent_member_user_id`);
ALTER TABLE `xxk_distribution_commission`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '佣金归属会员ID' AFTER `from_user_id`,
ADD COLUMN `from_member_user_id` BIGINT NULL COMMENT '消费会员ID' AFTER `member_user_id`,
ADD KEY `idx_xxk_distribution_commission_member_user_id` (`member_user_id`),
ADD KEY `idx_xxk_distribution_commission_from_member_user_id` (`from_member_user_id`);
CREATE TABLE `xxk_distribution_account` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` BIGINT DEFAULT NULL COMMENT '后台用户ID',
`member_user_id` BIGINT DEFAULT NULL COMMENT '会员ID',
`available_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '可用佣金余额',
`frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '冻结佣金余额',
`total_earned_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计获得佣金',
`total_revoked_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计回退佣金',
`total_transfer_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计转入钱包金额',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1正常 0禁用)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_distribution_account_member_user_id` (`member_user_id`),
UNIQUE KEY `uk_xxk_distribution_account_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分销佣金账户表';
CREATE TABLE `xxk_distribution_account_flow` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`flow_no` VARCHAR(64) NOT NULL COMMENT '流水号',
`user_id` BIGINT DEFAULT NULL COMMENT '后台用户ID',
`member_user_id` BIGINT DEFAULT NULL COMMENT '会员ID',
`commission_id` BIGINT DEFAULT NULL COMMENT '关联佣金记录ID',
`biz_type` VARCHAR(32) NOT NULL COMMENT '业务类型',
`change_type` VARCHAR(16) NOT NULL COMMENT '变动类型(IN/OUT)',
`change_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动金额',
`before_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动前余额',
`after_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动后余额',
`related_order_no` VARCHAR(64) DEFAULT NULL COMMENT '关联订单号',
`related_wallet_flow_no` VARCHAR(64) DEFAULT NULL COMMENT '关联钱包流水号',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`operate_by` BIGINT DEFAULT NULL COMMENT '操作人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_distribution_account_flow_no` (`flow_no`),
KEY `idx_xxk_distribution_account_flow_member_user_id` (`member_user_id`),
KEY `idx_xxk_distribution_account_flow_commission_id` (`commission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分销佣金账户流水表';
+88
View File
@@ -0,0 +1,88 @@
-- 会员体系初始化脚本
-- 执行说明:
-- 1. 本脚本只新增会员体系核心表,不影响现有后台管理员与代理业务表。
-- 2. 后续当订单、白名单、钱包正式切换到会员主账号时,再补业务迁移脚本。
CREATE TABLE IF NOT EXISTS `xxk_member_user` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` VARCHAR(64) NOT NULL COMMENT '用户名',
`nickname` VARCHAR(64) DEFAULT NULL COMMENT '昵称',
`password` VARCHAR(255) DEFAULT NULL COMMENT '密码',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像',
`mobile` VARCHAR(20) NOT NULL COMMENT '手机号',
`email` VARCHAR(128) DEFAULT NULL COMMENT '邮箱',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1正常 0禁用)',
`source` VARCHAR(32) NOT NULL DEFAULT 'MANUAL' COMMENT '注册来源',
`wx_openid` VARCHAR(64) DEFAULT NULL COMMENT '微信openid',
`wx_unionid` VARCHAR(64) DEFAULT NULL COMMENT '微信unionid',
`last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` VARCHAR(64) DEFAULT NULL COMMENT '最后登录IP',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_member_user_mobile` (`mobile`),
UNIQUE KEY `uk_xxk_member_user_username` (`username`),
KEY `idx_xxk_member_user_status` (`status`),
KEY `idx_xxk_member_user_source` (`source`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员主账号表';
CREATE TABLE IF NOT EXISTS `xxk_member_profile` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`agent_level` TINYINT NOT NULL DEFAULT 2 COMMENT '代理级别(1一级代理 2二级代理)',
`company_name` VARCHAR(128) DEFAULT NULL COMMENT '公司名称',
`contact_name` VARCHAR(64) DEFAULT NULL COMMENT '联系人',
`contact_wechat` VARCHAR(64) DEFAULT NULL COMMENT '联系微信',
`email` VARCHAR(128) DEFAULT NULL COMMENT '联系邮箱',
`qq` VARCHAR(32) DEFAULT NULL COMMENT 'QQ',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`industry` VARCHAR(64) DEFAULT NULL COMMENT '行业',
`realname_status` TINYINT NOT NULL DEFAULT 0 COMMENT '实名状态(0未认证 1已认证)',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_member_profile_user` (`member_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员资料表';
CREATE TABLE IF NOT EXISTS `xxk_member_wallet` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '余额',
`frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '冻结金额',
`total_recharge_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计充值金额',
`total_consume_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计消费金额',
`total_refund_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计退款金额',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1正常 0禁用)',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_member_wallet_user` (`member_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员钱包表';
CREATE TABLE IF NOT EXISTS `xxk_member_login_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`member_user_id` BIGINT DEFAULT NULL COMMENT '会员ID',
`mobile` VARCHAR(20) DEFAULT NULL COMMENT '登录手机号',
`login_type` VARCHAR(32) NOT NULL COMMENT '登录类型',
`login_ip` VARCHAR(64) DEFAULT NULL COMMENT '登录IP',
`login_region` VARCHAR(128) DEFAULT NULL COMMENT '登录地区',
`device_info` VARCHAR(255) DEFAULT NULL COMMENT '设备信息',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '登录结果(1成功 0失败)',
`message` VARCHAR(255) DEFAULT NULL COMMENT '结果说明',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_xxk_member_login_log_user` (`member_user_id`),
KEY `idx_xxk_member_login_log_mobile` (`mobile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员登录日志表';
+54
View File
@@ -0,0 +1,54 @@
USE youlai_admin;
-- 会员管理菜单初始化
-- 说明:
-- 1. 本脚本负责会员后台管理菜单、按钮权限和系统管理员授权。
-- 2. 会员前台站点后续独立建设,此处仅覆盖管理后台会员运营入口。
-- 一级目录:会员中心
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1300, 0, '0', '会员中心', 'C', 'Member', '/member', 'Layout', NULL,
1, NULL, 1, 11, 'user-filled', '/member/user', now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`always_show` = VALUES(`always_show`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`redirect` = VALUES(`redirect`),
`update_time` = now();
-- 会员管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1310, 1300, '0,1300', '会员管理', 'M', 'MemberUser', 'user', 'member/user/index', NULL,
0, 1, 1, 1, 'avatar', NULL, now(), now(), NULL),
(13101, 1310, '0,1300,1310', '会员查询', 'B', NULL, '', NULL, 'member:user:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(13102, 1310, '0,1300,1310', '会员新增', 'B', NULL, '', NULL, 'member:user:create',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(13103, 1310, '0,1300,1310', '会员修改', 'B', NULL, '', NULL, 'member:user:update',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = now();
-- 系统管理员授权
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 1300),
(2, 1310), (2, 13101), (2, 13102), (2, 13103);
@@ -0,0 +1,41 @@
-- 会员代理业务 user_id 兼容升级脚本
-- 说明:
-- 1. 当前代理业务表最初按 sys_user 体系设计,user_id 为 NOT NULL。
-- 2. 会员体系接入后,会员侧业务主要依赖 member_user_id,很多写入场景不会再写 user_id。
-- 3. 因此需要将相关表的 user_id 调整为可空,避免会员新增、会员下单、钱包、静态/动态资源落库时报错。
ALTER TABLE `xxk_wallet_account`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_wallet_flow`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_proxy_order`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_proxy_order_item`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_static_proxy_asset`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_static_proxy_whitelist`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_dynamic_channel`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_dynamic_channel_traffic_log`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_dynamic_proxy_generate_log`
MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
-- 会员钱包账户应保持 member_user_id 唯一,避免同一会员生成多条钱包账户
ALTER TABLE `xxk_wallet_account`
DROP INDEX `idx_xxk_wallet_account_member_user_id`,
ADD UNIQUE INDEX `uk_xxk_wallet_account_member_user_id` (`member_user_id`);
-- 会员白名单也应按 member_user_id + whitelist_ip 去重
ALTER TABLE `xxk_static_proxy_whitelist`
ADD UNIQUE INDEX `uk_member_whitelist_ip` (`member_user_id`, `whitelist_ip`);
@@ -0,0 +1,49 @@
-- 会员代理业务归属升级脚本
-- 说明:
-- 1. 为核心代理业务表增加 member_user_id 字段,逐步从 sys_user 归属切到 member_user。
-- 2. 该脚本只做结构升级,不强制迁移历史数据。
ALTER TABLE `xxk_proxy_order`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_proxy_order_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_proxy_order_item`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_proxy_order_item_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_wallet_account`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_wallet_account_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_wallet_flow`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_wallet_flow_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_static_proxy_asset`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_static_proxy_asset_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_static_proxy_whitelist`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_static_proxy_whitelist_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_dynamic_channel`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_dynamic_channel_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_dynamic_channel_traffic_log`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_dynamic_channel_traffic_log_member_user_id` (`member_user_id`);
ALTER TABLE `xxk_dynamic_proxy_generate_log`
ADD COLUMN `member_user_id` BIGINT NULL COMMENT '会员ID' AFTER `user_id`,
ADD KEY `idx_xxk_dynamic_proxy_generate_log_member_user_id` (`member_user_id`);
-- 历史数据迁移建议:
-- 可按手机号将 sys_user 关联到 xxk_member_user 后,回填 member_user_id。
-- 示例思路:
-- UPDATE xxk_wallet_account wa
-- JOIN sys_user su ON su.id = wa.user_id
-- JOIN xxk_member_user mu ON mu.mobile = su.mobile
-- SET wa.member_user_id = mu.id
-- WHERE wa.member_user_id IS NULL;
@@ -0,0 +1,61 @@
USE youlai_admin;
-- 会员认证菜单初始化
-- 说明:
-- 1. 在系统管理下新增“业务配置”统一入口,当前承载会员认证策略与会员登录注册配置。
-- 2. 在会员中心下新增“认证审核”页面,用于后台审核会员认证申请。
-- 系统管理 > 业务配置
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(271, 1, '0,1', '业务配置', 'M', 'BizConfigCenter', 'biz-config', 'system/biz-config/index', NULL,
0, 1, 1, 8, 'setting', NULL, NOW(), NOW(), NULL),
(2711, 271, '0,1,271', '会员认证策略查看', 'B', NULL, '', NULL, 'member:verify:policy:view',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL),
(2712, 271, '0,1,271', '会员认证策略修改', 'B', NULL, '', NULL, 'member:verify:policy:update',
NULL, NULL, 1, 2, '', NULL, NOW(), NOW(), NULL),
(2713, 271, '0,1,271', '会员登录注册配置查看', 'B', NULL, '', NULL, 'member:auth:config:view',
NULL, NULL, 1, 3, '', NULL, NOW(), NOW(), NULL),
(2714, 271, '0,1,271', '会员登录注册配置修改', 'B', NULL, '', NULL, 'member:auth:config:update',
NULL, NULL, 1, 4, '', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = NOW();
-- 会员中心 > 认证审核
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1320, 1300, '0,1300', '认证审核', 'M', 'MemberVerifyAudit', 'verify', 'member/verify/index', NULL,
0, 1, 1, 2, 'checked', NULL, NOW(), NOW(), NULL),
(13201, 1320, '0,1300,1320', '认证记录查询', 'B', NULL, '', NULL, 'member:verify:record:list',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL),
(13202, 1320, '0,1300,1320', '认证审核处理', 'B', NULL, '', NULL, 'member:verify:record:audit',
NULL, NULL, 1, 2, '', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = NOW();
-- 系统管理员授权
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 271), (2, 2711), (2, 2712), (2, 2713), (2, 2714),
(2, 1320), (2, 13201), (2, 13202);
@@ -0,0 +1,68 @@
-- 会员认证配置与审核升级脚本
-- 说明:
-- 1. 扩展 sys_config 配置值长度,支持结构化 JSON 策略。
-- 2. 为会员资料表补充认证状态与最近一次审核信息。
-- 3. 新增会员认证记录表,保存提交快照和审核结果。
ALTER TABLE `sys_config`
MODIFY COLUMN `config_value` TEXT NOT NULL COMMENT '配置值';
ALTER TABLE `xxk_member_profile`
ADD COLUMN `real_name` VARCHAR(64) NULL COMMENT '真实姓名' AFTER `member_user_id`,
ADD COLUMN `id_card_no` VARCHAR(32) NULL COMMENT '身份证号' AFTER `real_name`,
ADD COLUMN `id_card_front_url` VARCHAR(255) NULL COMMENT '身份证人像面' AFTER `id_card_no`,
ADD COLUMN `id_card_back_url` VARCHAR(255) NULL COMMENT '身份证国徽面' AFTER `id_card_front_url`,
ADD COLUMN `support_docs_json` TEXT NULL COMMENT '补充材料JSON' AFTER `id_card_back_url`,
MODIFY COLUMN `realname_status` TINYINT NOT NULL DEFAULT 0 COMMENT '实名状态(0未提交 1待审核 2已认证 3已驳回)',
ADD COLUMN `last_verify_record_id` BIGINT NULL COMMENT '最近认证记录ID' AFTER `realname_status`,
ADD COLUMN `last_submit_time` DATETIME NULL COMMENT '最近提交时间' AFTER `last_verify_record_id`,
ADD COLUMN `verified_time` DATETIME NULL COMMENT '认证通过时间' AFTER `last_submit_time`,
ADD COLUMN `audit_time` DATETIME NULL COMMENT '审核时间' AFTER `verified_time`,
ADD COLUMN `audit_by` BIGINT NULL COMMENT '审核人ID' AFTER `audit_time`,
ADD COLUMN `audit_remark` VARCHAR(255) NULL COMMENT '审核备注' AFTER `audit_by`;
CREATE TABLE `xxk_member_verify_record` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`verify_no` VARCHAR(64) NOT NULL COMMENT '认证单号',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`username_snapshot` VARCHAR(64) DEFAULT NULL COMMENT '用户名快照',
`nickname_snapshot` VARCHAR(64) DEFAULT NULL COMMENT '昵称快照',
`mobile_snapshot` VARCHAR(20) DEFAULT NULL COMMENT '手机号快照',
`real_name` VARCHAR(64) DEFAULT NULL COMMENT '真实姓名',
`id_card_no` VARCHAR(32) DEFAULT NULL COMMENT '身份证号',
`id_card_front_url` VARCHAR(255) DEFAULT NULL COMMENT '身份证人像面',
`id_card_back_url` VARCHAR(255) DEFAULT NULL COMMENT '身份证国徽面',
`support_docs_json` TEXT DEFAULT NULL COMMENT '补充材料JSON',
`policy_snapshot_json` LONGTEXT DEFAULT NULL COMMENT '策略快照JSON',
`form_data_json` LONGTEXT DEFAULT NULL COMMENT '提交数据JSON',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1待审核 2通过 3驳回)',
`submit_remark` VARCHAR(255) DEFAULT NULL COMMENT '提交备注',
`submit_time` DATETIME DEFAULT NULL COMMENT '提交时间',
`audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`audit_by` BIGINT DEFAULT NULL COMMENT '审核人ID',
`audit_remark` VARCHAR(255) DEFAULT NULL COMMENT '审核备注',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_member_verify_record_no` (`verify_no`),
KEY `idx_xxk_member_verify_record_member_user_id` (`member_user_id`),
KEY `idx_xxk_member_verify_record_status` (`status`),
KEY `idx_xxk_member_verify_record_submit_time` (`submit_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员认证记录表';
INSERT INTO `sys_config` (`config_name`, `config_key`, `config_value`, `remark`, `create_time`, `create_by`, `is_deleted`)
SELECT
'会员认证策略',
'member.verify.policy',
'{"enabled":true,"forceRequired":false,"forceScenes":[],"fields":[{"code":"mobile","label":"手机号","type":"TEXT","enabled":true,"required":true,"readonly":true,"source":"ACCOUNT","maxCount":1,"sort":10,"placeholder":"自动读取账号手机号"},{"code":"realName","label":"姓名","type":"TEXT","enabled":true,"required":true,"readonly":false,"source":"USER_INPUT","maxCount":1,"sort":20,"placeholder":"请输入真实姓名"},{"code":"idCardNo","label":"身份证号","type":"TEXT","enabled":true,"required":true,"readonly":false,"source":"USER_INPUT","maxCount":1,"sort":30,"placeholder":"请输入身份证号"},{"code":"idCardFrontUrl","label":"身份证人像面","type":"IMAGE","enabled":true,"required":true,"readonly":false,"source":"USER_INPUT","maxCount":1,"sort":40,"placeholder":"请上传身份证人像面"},{"code":"idCardBackUrl","label":"身份证国徽面","type":"IMAGE","enabled":true,"required":true,"readonly":false,"source":"USER_INPUT","maxCount":1,"sort":50,"placeholder":"请上传身份证国徽面"},{"code":"supportDocs","label":"其他图片辅证","type":"IMAGE_LIST","enabled":true,"required":false,"readonly":false,"source":"USER_INPUT","maxCount":5,"sort":60,"placeholder":"可上传补充图片材料"}]}',
'会员实名认证表单与强制校验策略',
NOW(),
1,
0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `sys_config` WHERE `config_key` = 'member.verify.policy'
);
@@ -0,0 +1,69 @@
-- API 独立账户初始化脚本
CREATE TABLE IF NOT EXISTS `xxk_open_api_account` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '余额',
`frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '冻结余额',
`total_recharge_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '累计充值金额',
`total_consume_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '累计消费金额',
`total_refund_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '累计退款金额',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0停用 1正常)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_account_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_account_member_user_id` (`member_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='API独立账户表';
CREATE TABLE IF NOT EXISTS `xxk_open_api_account_flow` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`flow_no` VARCHAR(64) NOT NULL COMMENT '流水号',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`biz_type` VARCHAR(64) NOT NULL COMMENT '业务类型',
`change_type` VARCHAR(16) NOT NULL COMMENT '变动类型(IN/OUT)',
`change_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '变动金额',
`before_balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '变动前余额',
`after_balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '变动后余额',
`related_order_no` VARCHAR(64) DEFAULT NULL COMMENT '关联单号',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`operate_by` BIGINT DEFAULT NULL COMMENT '操作人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_account_flow_no` (`flow_no`),
KEY `idx_xxk_open_api_account_flow_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_account_flow_related_order_no` (`related_order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='API独立账户流水表';
CREATE TABLE IF NOT EXISTS `xxk_open_api_recharge_order` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`recharge_no` VARCHAR(64) NOT NULL COMMENT '充值单号',
`pay_order_no` VARCHAR(64) NOT NULL COMMENT '支付单号',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`payment_type` VARCHAR(32) NOT NULL COMMENT '支付方式',
`pay_status` VARCHAR(32) NOT NULL COMMENT '支付状态',
`channel_order_no` VARCHAR(64) DEFAULT NULL COMMENT '渠道订单号',
`channel_response` LONGTEXT DEFAULT NULL COMMENT '渠道响应',
`client_type` VARCHAR(32) DEFAULT NULL COMMENT '客户端类型',
`return_url` VARCHAR(500) DEFAULT NULL COMMENT '回跳地址',
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '充值金额',
`gift_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '赠送金额',
`credited_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '到账金额',
`promotion_rule_snapshot` TEXT DEFAULT NULL COMMENT '活动规则快照',
`currency` VARCHAR(16) DEFAULT 'USD' COMMENT '币种',
`paid_time` DATETIME DEFAULT NULL COMMENT '支付完成时间',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_recharge_no` (`recharge_no`),
UNIQUE KEY `uk_xxk_open_api_pay_order_no` (`pay_order_no`),
KEY `idx_xxk_open_api_recharge_order_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_recharge_order_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_recharge_order_pay_status` (`pay_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='API独立账户充值单表';
+25
View File
@@ -0,0 +1,25 @@
-- 开放接口应用初始化脚本
-- 当前版本采用 appId + appSecret 换 accessToken 的轻量模式。
CREATE TABLE IF NOT EXISTS `xxk_open_api_app` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`app_name` VARCHAR(128) NOT NULL COMMENT '应用名称',
`app_secret` VARCHAR(128) NOT NULL COMMENT '应用密钥',
`member_user_id` BIGINT NOT NULL COMMENT '绑定会员ID',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0停用 1启用)',
`allow_ip_list` TEXT DEFAULT NULL COMMENT '允许访问IP列表,逗号/换行分隔',
`last_auth_time` DATETIME DEFAULT NULL COMMENT '最近换取token时间',
`last_auth_ip` VARCHAR(64) DEFAULT NULL COMMENT '最近换取token IP',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_app_app_id` (`app_id`),
UNIQUE KEY `uk_xxk_open_api_app_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_app_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_app_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放接口应用表';
@@ -0,0 +1,33 @@
-- 开放接口申请与审核初始化脚本
CREATE TABLE IF NOT EXISTS `xxk_open_api_apply` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`apply_no` VARCHAR(64) NOT NULL COMMENT '申请单号',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`username_snapshot` VARCHAR(64) DEFAULT NULL COMMENT '用户名快照',
`mobile_snapshot` VARCHAR(32) DEFAULT NULL COMMENT '手机号快照',
`contact_name` VARCHAR(64) NOT NULL COMMENT '联系人',
`contact_mobile` VARCHAR(32) DEFAULT NULL COMMENT '联系电话',
`contact_email` VARCHAR(128) DEFAULT NULL COMMENT '联系邮箱',
`company_name` VARCHAR(128) DEFAULT NULL COMMENT '公司名称',
`purpose` VARCHAR(255) NOT NULL COMMENT '申请用途',
`scenario_description` TEXT NOT NULL COMMENT '使用场景说明',
`allow_ip_list` TEXT DEFAULT NULL COMMENT 'IP白名单',
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0待审核 1已通过 2已驳回)',
`submit_remark` VARCHAR(255) DEFAULT NULL COMMENT '补充说明',
`submit_time` DATETIME DEFAULT NULL COMMENT '提交时间',
`audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`audit_by` BIGINT DEFAULT NULL COMMENT '审核人ID',
`audit_remark` VARCHAR(255) DEFAULT NULL COMMENT '审核备注',
`open_api_app_id` BIGINT DEFAULT NULL COMMENT '关联开放应用ID',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_apply_no` (`apply_no`),
KEY `idx_xxk_open_api_apply_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_apply_status` (`status`),
KEY `idx_xxk_open_api_apply_submit_time` (`submit_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放接口申请表';
@@ -0,0 +1,59 @@
-- 开放API回调能力升级
SET @schema_name = DATABASE();
SET @column_exists = (
SELECT COUNT(1)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_open_api_app'
AND COLUMN_NAME = 'callback_url'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_open_api_app` ADD COLUMN `callback_url` VARCHAR(255) DEFAULT NULL COMMENT ''订单结果回调地址'' AFTER `allow_ip_list`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(1)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_open_api_app'
AND COLUMN_NAME = 'callback_secret'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_open_api_app` ADD COLUMN `callback_secret` VARCHAR(128) DEFAULT NULL COMMENT ''订单结果回调签名密钥'' AFTER `callback_url`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
CREATE TABLE IF NOT EXISTS `xxk_open_api_callback_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`order_id` BIGINT NOT NULL COMMENT '订单ID',
`order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
`callback_url` VARCHAR(255) DEFAULT NULL COMMENT '回调地址',
`event_type` VARCHAR(64) NOT NULL COMMENT '事件类型',
`request_body` LONGTEXT DEFAULT NULL COMMENT '请求报文',
`response_body` LONGTEXT DEFAULT NULL COMMENT '响应报文',
`response_status` INT DEFAULT NULL COMMENT '响应HTTP状态码',
`delivery_status` VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态(PENDING/SUCCESS/FAIL/SKIPPED)',
`error_message` VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
`attempt_no` INT NOT NULL DEFAULT 1 COMMENT '尝试次数',
`trigger_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '触发时间',
`finish_time` DATETIME DEFAULT NULL COMMENT '完成时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_xxk_open_api_callback_log_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_callback_log_order_no` (`order_no`),
KEY `idx_xxk_open_api_callback_log_status` (`delivery_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放API订单回调日志表';
+41
View File
@@ -0,0 +1,41 @@
USE youlai_admin;
-- 开放 API 审核菜单初始化
-- 说明:
-- 1. 在“代理平台”下新增“开放API审核”菜单。
-- 2. 用于审核会员开放 API 申请,并授予管理员默认访问权限。
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1220, 1100, '0,1100', '开放API审核', 'C', NULL, '/open-api-manage', 'Layout', NULL,
1, 0, 1, 13, 'api', '/open-api-manage/open-api', NOW(), NOW(), NULL),
(1221, 1220, '0,1100,1220', '开放API申请审核', 'M', 'ProxyOpenApiApply', 'open-api', 'proxy/open-api/index', NULL,
0, 1, 1, 1, 'form', NULL, NOW(), NOW(), NULL),
(122101, 1221, '0,1100,1220,1221', '开放API申请查询', 'B', NULL, '', NULL, 'openapi:apply:list',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL),
(122102, 1221, '0,1100,1220,1221', '开放API申请审核', 'B', NULL, '', NULL, 'openapi:apply:audit',
NULL, NULL, 1, 2, '', NULL, NOW(), NOW(), NULL),
(1222, 1220, '0,1100,1220', '开放API回调日志', 'M', 'ProxyOpenApiCallback', 'open-api-callback', 'proxy/open-api-callback/index', NULL,
0, 1, 1, 2, 'notification', NULL, NOW(), NOW(), NULL),
(122201, 1222, '0,1100,1220,1222', '开放API回调日志查询', 'B', NULL, '', NULL, 'openapi:callback-log:list',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL),
(122202, 1222, '0,1100,1220,1222', '开放API回调日志重发', 'B', NULL, '', NULL, 'openapi:callback-log:retry',
NULL, NULL, 1, 2, '', NULL, NOW(), NOW(), NULL),
(1223, 1220, '0,1100,1220', '开放API账户中心', 'M', 'ProxyOpenApiAccount', 'open-api-account', 'proxy/open-api-account/index', NULL,
0, 1, 0, 3, 'wallet', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = NOW();
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 1220), (2, 1221), (2, 122101), (2, 122102), (2, 1222), (2, 122201), (2, 122202), (2, 1223);
@@ -0,0 +1,5 @@
ALTER TABLE `xxk_product_static_country_price`
DROP INDEX `uk_product_country`,
ADD UNIQUE KEY `uk_product_static_price_region` (`product_id`, `region_id`);
@@ -0,0 +1,17 @@
USE youlai_admin;
-- 分销配置演示数据
-- 说明:
-- 1. 仅当当前不存在启用中的分销配置时插入。
-- 2. 佣金比例示例:一级 10%,二级 3%。
INSERT INTO `xxk_distribution_config`
(`distribution_enabled`, `first_level_rate`, `second_level_rate`, `withdraw_threshold`, `withdraw_fee_rate`, `settle_rule`, `status`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`)
SELECT 1, 0.1000, 0.0300, 0.00, 0.0000, 'OPEN_SUCCESS_AMOUNT', 1, '代理平台演示分销配置', 1, now(), 1, now()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1
FROM `xxk_distribution_config`
WHERE `distribution_enabled` = 1
AND `status` = 1
);
+292
View File
@@ -0,0 +1,292 @@
USE youlai_admin;
-- 代理平台菜单初始化
-- 说明:
-- 1. 本脚本只负责后台菜单、按钮权限和系统管理员授权。
-- 2. 页面 component 先按约定路径预留,前端页面接入后直接对齐即可。
-- 一级目录:代理平台
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1100, 0, '0', '代理平台', 'C', 'Proxy', '/proxy', 'Layout', NULL,
1, NULL, 1, 10, 'monitor', '/proxy/product', now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`always_show` = VALUES(`always_show`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`redirect` = VALUES(`redirect`),
`update_time` = now();
-- 商品管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1110, 1100, '0,1100', '商品管理', 'M', 'ProxyProduct', 'product', 'proxy/product/index', NULL,
0, 1, 1, 1, 'goods', NULL, now(), now(), NULL),
(11101, 1110, '0,1100,1110', '商品查询', 'B', NULL, '', NULL, 'proxy:product:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11102, 1110, '0,1100,1110', '商品新增', 'B', NULL, '', NULL, 'proxy:product:create',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11103, 1110, '0,1100,1110', '商品修改', 'B', NULL, '', NULL, 'proxy:product:update',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL),
(11104, 1110, '0,1100,1110', '商品删除', 'B', NULL, '', NULL, 'proxy:product:delete',
NULL, NULL, 1, 4, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 静态价格管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1120, 1100, '0,1100', '静态价格管理', 'M', 'ProxyStaticPrice', 'static-price', 'proxy/static-price/index', NULL,
0, 1, 1, 2, 'price-tag', NULL, now(), now(), NULL),
(11201, 1120, '0,1100,1120', '静态价格查询', 'B', NULL, '', NULL, 'proxy:static-price:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11202, 1120, '0,1100,1120', '静态价格新增', 'B', NULL, '', NULL, 'proxy:static-price:create',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11203, 1120, '0,1100,1120', '静态价格修改', 'B', NULL, '', NULL, 'proxy:static-price:update',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL),
(11204, 1120, '0,1100,1120', '静态价格删除', 'B', NULL, '', NULL, 'proxy:static-price:delete',
NULL, NULL, 1, 4, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 动态套餐管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1130, 1100, '0,1100', '动态套餐管理', 'M', 'ProxyDynamicPlan', 'dynamic-plan', 'proxy/dynamic-plan/index', NULL,
0, 1, 1, 3, 'set-up', NULL, now(), now(), NULL),
(11301, 1130, '0,1100,1130', '动态套餐查询', 'B', NULL, '', NULL, 'proxy:dynamic-plan:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11302, 1130, '0,1100,1130', '动态套餐新增', 'B', NULL, '', NULL, 'proxy:dynamic-plan:create',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11303, 1130, '0,1100,1130', '动态套餐修改', 'B', NULL, '', NULL, 'proxy:dynamic-plan:update',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL),
(11304, 1130, '0,1100,1130', '动态套餐删除', 'B', NULL, '', NULL, 'proxy:dynamic-plan:delete',
NULL, NULL, 1, 4, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 时长倍率管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1140, 1100, '0,1100', '时长倍率管理', 'M', 'ProxyDurationMultiplier', 'duration-multiplier', 'proxy/duration-multiplier/index', NULL,
0, 1, 1, 4, 'timer', NULL, now(), now(), NULL),
(11401, 1140, '0,1100,1140', '时长倍率查询', 'B', NULL, '', NULL, 'proxy:duration:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11402, 1140, '0,1100,1140', '时长倍率新增', 'B', NULL, '', NULL, 'proxy:duration:create',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11403, 1140, '0,1100,1140', '时长倍率修改', 'B', NULL, '', NULL, 'proxy:duration:update',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL),
(11404, 1140, '0,1100,1140', '时长倍率删除', 'B', NULL, '', NULL, 'proxy:duration:delete',
NULL, NULL, 1, 4, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 订单管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1150, 1100, '0,1100', '订单管理', 'M', 'ProxyOrder', 'order', 'proxy/order/index', NULL,
0, 1, 1, 5, 'tickets', NULL, now(), now(), NULL),
(11501, 1150, '0,1100,1150', '订单查询', 'B', NULL, '', NULL, 'proxy:order:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11502, 1150, '0,1100,1150', '订单创建', 'B', NULL, '', NULL, 'proxy:order:create',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11503, 1150, '0,1100,1150', '订单支付', 'B', NULL, '', NULL, 'proxy:order:pay',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL),
(11504, 1150, '0,1100,1150', '订单补偿重试', 'B', NULL, '', NULL, 'proxy:order:compensate',
NULL, NULL, 1, 4, '', NULL, now(), now(), NULL),
(11505, 1150, '0,1100,1150', '订单取消', 'B', NULL, '', NULL, 'proxy:order:cancel',
NULL, NULL, 1, 5, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 静态代理管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1160, 1100, '0,1100', '静态代理管理', 'M', 'ProxyStaticAsset', 'static-asset', 'proxy/static-asset/index', NULL,
0, 1, 1, 6, 'connection', NULL, now(), now(), NULL),
(11601, 1160, '0,1100,1160', '静态代理查询', 'B', NULL, '', NULL, 'proxy:static-asset:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11602, 1160, '0,1100,1160', '静态代理续费', 'B', NULL, '', NULL, 'proxy:static-asset:renew',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11603, 1160, '0,1100,1160', '静态代理维护', 'B', NULL, '', NULL, 'proxy:static-asset:update',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 动态通道管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1170, 1100, '0,1100', '动态通道管理', 'M', 'ProxyDynamicChannel', 'dynamic-channel', 'proxy/dynamic-channel/index', NULL,
0, 1, 1, 7, 'share', NULL, now(), now(), NULL),
(11701, 1170, '0,1100,1170', '动态通道查询', 'B', NULL, '', NULL, 'proxy:dynamic-channel:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11702, 1170, '0,1100,1170', '动态通道维护', 'B', NULL, '', NULL, 'proxy:dynamic-channel:update',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 上游供应商管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1180, 1100, '0,1100', '上游供应商管理', 'M', 'ProxyUpstreamProvider', 'upstream-provider', 'proxy/upstream-provider/index', NULL,
0, 1, 1, 8, 'cpu', NULL, now(), now(), NULL),
(11801, 1180, '0,1100,1180', '上游供应商查询', 'B', NULL, '', NULL, 'proxy:upstream:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11802, 1180, '0,1100,1180', '上游供应商新增', 'B', NULL, '', NULL, 'proxy:upstream:create',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11803, 1180, '0,1100,1180', '上游供应商修改', 'B', NULL, '', NULL, 'proxy:upstream:update',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL),
(11804, 1180, '0,1100,1180', '上游供应商删除', 'B', NULL, '', NULL, 'proxy:upstream:delete',
NULL, NULL, 1, 4, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 钱包管理
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1190, 1100, '0,1100', '钱包管理', 'M', 'ProxyWallet', 'wallet', 'proxy/wallet/index', NULL,
0, 1, 1, 9, 'wallet', NULL, now(), now(), NULL),
(11901, 1190, '0,1100,1190', '钱包查询', 'B', NULL, '', NULL, 'proxy:wallet:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(11902, 1190, '0,1100,1190', '钱包加款', 'B', NULL, '', NULL, 'proxy:wallet:recharge',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(11910, 1190, '0,1100,1190', '充值订单', 'C', 'ProxyWalletRecharge', 'wallet-recharge', 'proxy/wallet-recharge/index', NULL,
0, 1, 1, 3, 'wallet', NULL, now(), now(), NULL),
(11911, 11910, '0,1100,1190,11910', '充值订单查询', 'B', NULL, '', NULL, 'proxy:wallet:recharge-order:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 分销管理(页面和接口后续继续补齐)
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1200, 1100, '0,1100', '分销管理', 'M', 'ProxyDistribution', 'distribution', 'proxy/distribution/index', NULL,
0, 1, 1, 10, 'user-filled', NULL, now(), now(), NULL),
(12001, 1200, '0,1100,1200', '分销配置查询', 'B', NULL, '', NULL, 'proxy:distribution:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL),
(12002, 1200, '0,1100,1200', '分销配置维护', 'B', NULL, '', NULL, 'proxy:distribution:update',
NULL, NULL, 1, 2, '', NULL, now(), now(), NULL),
(12003, 1200, '0,1100,1200', '佣金流水查询', 'B', NULL, '', NULL, 'proxy:distribution:commission:list',
NULL, NULL, 1, 3, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
-- 系统管理员授权
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 1100),
(2, 1110), (2, 11101), (2, 11102), (2, 11103), (2, 11104),
(2, 1120), (2, 11201), (2, 11202), (2, 11203), (2, 11204),
(2, 1130), (2, 11301), (2, 11302), (2, 11303), (2, 11304),
(2, 1140), (2, 11401), (2, 11402), (2, 11403), (2, 11404),
(2, 1150), (2, 11501), (2, 11502), (2, 11503), (2, 11504), (2, 11505),
(2, 1160), (2, 11601), (2, 11602), (2, 11603),
(2, 1170), (2, 11701), (2, 11702),
(2, 1180), (2, 11801), (2, 11802), (2, 11803), (2, 11804),
(2, 1190), (2, 11901), (2, 11902),
(2, 1200), (2, 12001), (2, 12002), (2, 12003);
@@ -0,0 +1,21 @@
USE youlai_admin;
-- 订单待支付取消能力升级脚本
-- 说明:
-- 1. 新增“订单取消”按钮权限,允许后台直接取消待支付订单。
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(11505, 1150, '0,1100,1150', '订单取消', 'B', NULL, '', NULL, 'proxy:order:cancel',
NULL, NULL, 1, 5, '', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`perm` = VALUES(`perm`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = NOW();
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 11505);
@@ -0,0 +1,29 @@
USE youlai_admin;
-- 订单补偿记录菜单升级脚本
-- 说明:
-- 1. 在代理平台下新增“订单补偿记录”菜单。
-- 2. 用于查看订单补偿尝试历史、失败原因和关联退款流水。
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1210, 1100, '0,1100', '订单补偿记录', 'M', 'ProxyOrderCompensationRecord', 'order-compensation-record', 'proxy/order-compensation-record/index', NULL,
0, 1, 1, 12, 'warning', NULL, NOW(), NOW(), NULL),
(12101, 1210, '0,1100,1210', '订单补偿记录查询', 'B', NULL, '', NULL, 'proxy:order-compensation-record:list',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = NOW();
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 1210), (2, 12101);
@@ -0,0 +1,52 @@
USE youlai_admin;
-- 订单异常补偿闭环升级脚本
-- 说明:
-- 1. 为订单主表补充补偿状态、补偿说明、重试次数和最近补偿时间。
-- 2. 新增订单补偿记录表,保留每次退款补偿尝试的结果。
-- 3. 新增“订单补偿重试”按钮权限,方便后台人工重试失败补偿。
ALTER TABLE `xxk_proxy_order`
ADD COLUMN `compensation_status` VARCHAR(32) NOT NULL DEFAULT 'NONE' COMMENT '补偿状态(NONE无需补偿 PENDING待补偿 SUCCESS补偿成功 FAIL补偿失败)' AFTER `open_status`,
ADD COLUMN `compensation_reason` VARCHAR(255) NULL COMMENT '补偿说明' AFTER `remark`,
ADD COLUMN `compensation_retry_count` INT NOT NULL DEFAULT 0 COMMENT '补偿重试次数' AFTER `compensation_reason`,
ADD COLUMN `last_compensation_time` DATETIME NULL COMMENT '最近补偿时间' AFTER `compensation_retry_count`,
ADD KEY `idx_xxk_proxy_order_compensation_status` (`compensation_status`, `update_time`);
CREATE TABLE `xxk_order_compensation_record` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_id` BIGINT NOT NULL COMMENT '订单ID',
`order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
`compensation_type` VARCHAR(32) NOT NULL COMMENT '补偿类型',
`attempt_no` INT NOT NULL DEFAULT 1 COMMENT '第几次补偿尝试',
`compensation_status` VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '补偿状态(PENDING/SUCCESS/FAIL)',
`reason` VARCHAR(255) DEFAULT NULL COMMENT '补偿原因',
`error_message` VARCHAR(500) DEFAULT NULL COMMENT '失败原因',
`related_flow_no` VARCHAR(64) DEFAULT NULL COMMENT '关联退款流水号',
`operator_id` BIGINT DEFAULT NULL COMMENT '操作人ID',
`operator_name` VARCHAR(100) DEFAULT NULL COMMENT '操作人名称',
`execute_time` DATETIME DEFAULT NULL COMMENT '执行时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_order_compensation_attempt` (`order_id`, `compensation_type`, `attempt_no`),
KEY `idx_xxk_order_compensation_order_no` (`order_no`),
KEY `idx_xxk_order_compensation_status` (`compensation_status`, `execute_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单补偿记录表';
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(11504, 1150, '0,1100,1150', '订单补偿重试', 'B', NULL, '', NULL, 'proxy:order:compensate',
NULL, NULL, 1, 4, '', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`perm` = VALUES(`perm`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = NOW();
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 11504);
@@ -0,0 +1,50 @@
USE youlai_admin;
-- 订单支付对外适配升级脚本
-- 说明:
-- 1. 新增订单支付记录表,承接支付中台 / 自研支付的统一支付单。
-- 2. 新增支付回调日志表,保留异步通知原文和处理结果。
-- 3. 当前主订单表已存在 payment_type 字段,本脚本不重复新增。
CREATE TABLE IF NOT EXISTS `xxk_proxy_order_pay` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`pay_order_no` VARCHAR(64) NOT NULL COMMENT '支付单号',
`order_id` BIGINT NOT NULL COMMENT '业务订单ID',
`order_no` VARCHAR(64) NOT NULL COMMENT '业务订单号',
`payment_type` VARCHAR(32) NOT NULL COMMENT '支付方式(BALANCE/ALIPAY/WECHAT/EXTERNAL)',
`pay_status` VARCHAR(32) NOT NULL DEFAULT 'INIT' COMMENT '支付单状态(INIT/PAYING/PAID/FAIL/CLOSED/REFUNDED)',
`channel_order_no` VARCHAR(128) DEFAULT NULL COMMENT '渠道支付单号',
`channel_response` TEXT DEFAULT NULL COMMENT '渠道原始响应',
`client_type` VARCHAR(32) DEFAULT NULL COMMENT '客户端类型(PC/H5/APP/MINI_PROGRAM)',
`return_url` VARCHAR(500) DEFAULT NULL COMMENT '支付完成跳转地址',
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '支付金额',
`currency` VARCHAR(16) DEFAULT NULL COMMENT '币种',
`paid_time` DATETIME DEFAULT NULL COMMENT '支付成功时间',
`expire_time` DATETIME DEFAULT NULL COMMENT '支付过期时间',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_proxy_order_pay_no` (`pay_order_no`),
KEY `idx_xxk_proxy_order_pay_order_no` (`order_no`),
KEY `idx_xxk_proxy_order_pay_status` (`pay_status`, `update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单支付记录表';
CREATE TABLE IF NOT EXISTS `xxk_proxy_payment_notify_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`pay_order_no` VARCHAR(64) DEFAULT NULL COMMENT '支付单号',
`order_no` VARCHAR(64) DEFAULT NULL COMMENT '业务订单号',
`payment_type` VARCHAR(32) DEFAULT NULL COMMENT '支付方式',
`notify_type` VARCHAR(32) DEFAULT NULL COMMENT '通知类型(PAY/REFUND/CLOSE)',
`notify_body` MEDIUMTEXT DEFAULT NULL COMMENT '通知原文',
`verify_status` VARCHAR(16) NOT NULL DEFAULT 'INIT' COMMENT '验签状态(INIT/SUCCESS/FAIL)',
`process_status` VARCHAR(16) NOT NULL DEFAULT 'INIT' COMMENT '处理状态(INIT/SUCCESS/FAIL)',
`error_message` VARCHAR(500) DEFAULT NULL COMMENT '失败原因',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
KEY `idx_xxk_proxy_payment_notify_order_no` (`order_no`),
KEY `idx_xxk_proxy_payment_notify_status` (`verify_status`, `process_status`, `update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付回调日志表';
+541
View File
@@ -0,0 +1,541 @@
# XXK (MySQL 5.7 ~ MySQL 8.x)
#
# 1. SQL youlai_admin
# 2. 使 xxk_
# 3. IP IP
USE youlai_admin;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for xxk_upstream_provider
-- ----------------------------
DROP TABLE IF EXISTS `xxk_upstream_provider`;
CREATE TABLE `xxk_upstream_provider` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`provider_code` varchar(64) NOT NULL COMMENT '供应商编码',
`provider_name` varchar(100) NOT NULL COMMENT '供应商名称',
`provider_type` varchar(32) NOT NULL COMMENT '供应商类型',
`base_url` varchar(255) NOT NULL COMMENT '接口基础地址',
`auth_user_id` varchar(100) DEFAULT NULL COMMENT '上游UserId',
`auth_token` varchar(255) DEFAULT NULL COMMENT '上游Token',
`success_codes` varchar(100) DEFAULT '1000,2001' COMMENT '成功业务码集合',
`http_timeout_ms` int DEFAULT 10000 COMMENT '超时时间(毫秒)',
`status` tinyint DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
`is_default` tinyint DEFAULT 0 COMMENT '默认供应商(1-是 0-否)',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` bigint DEFAULT NULL COMMENT '创建人ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人ID',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_provider_code` (`provider_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='上游供应商配置表';
-- ----------------------------
-- Table structure for xxk_product
-- ----------------------------
DROP TABLE IF EXISTS `xxk_product`;
CREATE TABLE `xxk_product` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`product_code` varchar(64) NOT NULL COMMENT '商品编码',
`product_name` varchar(100) NOT NULL COMMENT '商品名称',
`product_type` varchar(32) NOT NULL COMMENT '商品类型(STATIC_RESIDENTIAL/DYNAMIC_RESIDENTIAL)',
`upstream_provider_id` bigint NOT NULL COMMENT '上游供应商ID',
`upstream_product_code` varchar(64) DEFAULT NULL COMMENT '上游商品编码',
`proxies_type` varchar(64) DEFAULT NULL COMMENT '上游代理类型',
`proxies_format` varchar(64) DEFAULT NULL COMMENT '上游代理格式',
`purpose_web` varchar(64) DEFAULT NULL COMMENT '上游用途参数',
`upstream_params` text DEFAULT NULL COMMENT '上游扩展参数JSON',
`upstream_capabilities` text DEFAULT NULL COMMENT '上游能力JSON',
`protocols_type` tinyint DEFAULT NULL COMMENT '协议类型(1-HTTP 2-SOCKS5 3-HTTP+SOCKS5)',
`udp_status` tinyint DEFAULT 0 COMMENT '是否启用UDP(1-是 0-否)',
`currency` varchar(10) DEFAULT 'RMB' COMMENT '币种',
`enable_distribution` tinyint DEFAULT 1 COMMENT '是否参与分销(1-是 0-否)',
`status` tinyint DEFAULT 1 COMMENT '状态(1-上架 0-下架)',
`sort` int DEFAULT 0 COMMENT '排序',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` bigint DEFAULT NULL COMMENT '创建人ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人ID',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_product_code` (`product_code`) USING BTREE,
KEY `idx_product_type_status` (`product_type`, `status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品主表';
-- ----------------------------
-- Table structure for xxk_product_static_country_price
-- ----------------------------
DROP TABLE IF EXISTS `xxk_product_static_country_price`;
CREATE TABLE `xxk_product_static_country_price` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`product_id` bigint NOT NULL COMMENT '商品ID',
`price_type` varchar(20) DEFAULT NULL COMMENT '价格类型(DEFAULT默认/NODE特殊节点)',
`qiyun_product_type` varchar(32) DEFAULT NULL COMMENT '齐云产品类型',
`qiyun_pid` varchar(64) DEFAULT NULL COMMENT '齐云项目ID',
`qiyun_project_name` varchar(255) DEFAULT NULL COMMENT '齐云项目名称',
`qiyun_area_id` varchar(64) DEFAULT NULL COMMENT '齐云省份ID',
`qiyun_area_name` varchar(255) DEFAULT NULL COMMENT '齐云省份名称',
`qiyun_node_id` varchar(100) DEFAULT NULL COMMENT '齐云节点ID',
`qiyun_node_name` varchar(255) DEFAULT NULL COMMENT '齐云节点名称',
`region_id` bigint DEFAULT NULL COMMENT '地区ID',
`region_code` varchar(64) DEFAULT NULL COMMENT '地区编号',
`region_name` varchar(100) DEFAULT NULL COMMENT '地区名称',
`region_name_zh` varchar(100) DEFAULT NULL COMMENT '地区中文名',
`country_code` varchar(10) NOT NULL COMMENT '国家编码',
`country_name` varchar(100) NOT NULL COMMENT '国家名称',
`base_price` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '地区基础单价',
`currency` varchar(10) DEFAULT 'RMB' COMMENT '币种',
`status` tinyint DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
`sort` int DEFAULT 0 COMMENT '排序',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` bigint DEFAULT NULL COMMENT '创建人ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人ID',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_product_country` (`product_id`, `country_code`) USING BTREE,
KEY `idx_static_price_qiyun_node` (`product_id`, `price_type`, `qiyun_node_id`) USING BTREE,
KEY `idx_country_code` (`country_code`) USING BTREE,
KEY `idx_static_price_region_id` (`region_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='静态商品地区定价表';
-- ----------------------------
-- Table structure for xxk_product_duration_multiplier
-- ----------------------------
DROP TABLE IF EXISTS `xxk_product_duration_multiplier`;
CREATE TABLE `xxk_product_duration_multiplier` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`product_id` bigint NOT NULL COMMENT '商品ID',
`duration_days` int NOT NULL COMMENT '兼容时长天数',
`duration_unit` varchar(16) NOT NULL DEFAULT 'DAY' COMMENT '时长单位(DAY天/HOUR小时)',
`duration_value` int NOT NULL DEFAULT 1 COMMENT '时长数值',
`multiplier` decimal(10,4) NOT NULL DEFAULT 1.0000 COMMENT '价格倍率',
`status` tinyint DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` bigint DEFAULT NULL COMMENT '创建人ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人ID',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_product_duration_unit_value` (`product_id`, `duration_unit`, `duration_value`) USING BTREE,
KEY `idx_product_duration_days` (`product_id`, `duration_days`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品时长倍率表';
-- ----------------------------
-- Table structure for xxk_product_dynamic_plan
-- ----------------------------
DROP TABLE IF EXISTS `xxk_product_dynamic_plan`;
CREATE TABLE `xxk_product_dynamic_plan` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`product_id` bigint NOT NULL COMMENT '商品ID',
`plan_code` varchar(64) NOT NULL COMMENT '流量套餐编码',
`flow_gb` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '流量套餐GB',
`base_price` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '流量套餐基础价',
`allow_sticky_session` tinyint DEFAULT 1 COMMENT '允许粘性会话(1-是 0-否)',
`allow_location_select` tinyint DEFAULT 1 COMMENT '允许地区选择(1-是 0-否)',
`allow_custom_limit` tinyint DEFAULT 0 COMMENT '允许自定义通道流量上限(1-是 0-否)',
`status` tinyint DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` bigint DEFAULT NULL COMMENT '创建人ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人ID',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_plan_code` (`plan_code`) USING BTREE,
UNIQUE KEY `uk_product_flow` (`product_id`, `flow_gb`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='动态商品流量套餐表';
-- ----------------------------
-- Table structure for xxk_user_profile
-- ----------------------------
DROP TABLE IF EXISTS `xxk_user_profile`;
CREATE TABLE `xxk_user_profile` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '关联sys_user.id',
`user_type` varchar(32) DEFAULT 'CUSTOMER' COMMENT '用户类型',
`invite_code` varchar(32) DEFAULT NULL COMMENT '邀请码',
`register_source` varchar(32) DEFAULT 'ADMIN' COMMENT '注册来源',
`register_ip` varchar(64) DEFAULT NULL COMMENT '注册IP',
`last_login_ip` varchar(64) DEFAULT NULL COMMENT '最后登录IP',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`status` tinyint DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_user_id` (`user_id`) USING BTREE,
UNIQUE KEY `uk_invite_code` (`invite_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户业务扩展表';
-- ----------------------------
-- Table structure for xxk_wallet_account
-- ----------------------------
DROP TABLE IF EXISTS `xxk_wallet_account`;
CREATE TABLE `xxk_wallet_account` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '用户ID',
`balance` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '可用余额',
`frozen_balance` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '冻结余额',
`total_recharge_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计充值金额',
`total_consume_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计消费金额',
`total_refund_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '累计退款金额',
`status` tinyint DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_wallet_user_id` (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='钱包账户表';
-- ----------------------------
-- Table structure for xxk_wallet_flow
-- ----------------------------
DROP TABLE IF EXISTS `xxk_wallet_flow`;
CREATE TABLE `xxk_wallet_flow` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`flow_no` varchar(64) NOT NULL COMMENT '流水号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`biz_type` varchar(32) NOT NULL COMMENT '业务类型',
`change_type` varchar(16) NOT NULL COMMENT '变动类型(IN/OUT)',
`change_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动金额',
`before_balance` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动前余额',
`after_balance` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动后余额',
`related_order_no` varchar(64) DEFAULT NULL COMMENT '关联订单号',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`operate_by` bigint DEFAULT NULL COMMENT '操作人ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_flow_no` (`flow_no`) USING BTREE,
KEY `idx_wallet_user_time` (`user_id`, `create_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='钱包流水表';
-- ----------------------------
-- Table structure for xxk_proxy_order
-- ----------------------------
DROP TABLE IF EXISTS `xxk_proxy_order`;
CREATE TABLE `xxk_proxy_order` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`order_no` varchar(64) NOT NULL COMMENT '订单号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`product_type` varchar(32) NOT NULL COMMENT '商品类型',
`order_type` varchar(16) NOT NULL DEFAULT 'NEW' COMMENT '订单类型(NEW/RENEW)',
`order_status` varchar(32) NOT NULL DEFAULT 'WAIT_PAY' COMMENT '订单状态',
`pay_status` varchar(32) NOT NULL DEFAULT 'UNPAID' COMMENT '支付状态',
`open_status` varchar(32) NOT NULL DEFAULT 'WAIT_OPEN' COMMENT '开通状态',
`payment_type` varchar(16) DEFAULT 'BALANCE' COMMENT '支付方式',
`currency` varchar(10) DEFAULT 'RMB' COMMENT '币种',
`buy_quantity` int NOT NULL DEFAULT 1 COMMENT '购买数量',
`duration_days` int NOT NULL COMMENT '购买天数',
`sale_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '销售金额',
`paid_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '实付金额',
`cost_amount` decimal(18,2) DEFAULT 0.00 COMMENT '采购成本',
`open_success_amount` decimal(18,2) DEFAULT 0.00 COMMENT '开通成功金额',
`region_snapshot` text COMMENT '地区快照',
`product_snapshot` mediumtext COMMENT '商品快照',
`inviter_user_id` bigint DEFAULT NULL COMMENT '一级邀请人',
`parent_inviter_user_id` bigint DEFAULT NULL COMMENT '二级邀请人',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`open_time` datetime DEFAULT NULL COMMENT '开通时间',
`finish_time` datetime DEFAULT NULL COMMENT '完成时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_order_no` (`order_no`) USING BTREE,
KEY `idx_order_user_time` (`user_id`, `create_time`) USING BTREE,
KEY `idx_order_status` (`order_status`, `pay_status`, `open_status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代理订单主表';
-- ----------------------------
-- Table structure for xxk_proxy_order_item
-- ----------------------------
DROP TABLE IF EXISTS `xxk_proxy_order_item`;
CREATE TABLE `xxk_proxy_order_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`order_id` bigint NOT NULL COMMENT '订单ID',
`order_no` varchar(64) NOT NULL COMMENT '订单号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`product_type` varchar(32) NOT NULL COMMENT '商品类型',
`country_code` varchar(10) DEFAULT NULL COMMENT '国家编码',
`country_name` varchar(100) DEFAULT NULL COMMENT '国家名称',
`quantity` int NOT NULL DEFAULT 1 COMMENT '数量',
`duration_days` int NOT NULL COMMENT '时长天数',
`duration_multiplier` decimal(10,4) NOT NULL DEFAULT 1.0000 COMMENT '时长倍率',
`unit_price` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '单价',
`line_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '小计金额',
`flow_gb` decimal(12,3) DEFAULT NULL COMMENT '动态流量GB',
`upstream_payload` mediumtext COMMENT '上游请求快照',
`item_status` varchar(32) DEFAULT 'INIT' COMMENT '订单项状态',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_order_item_order_id` (`order_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代理订单项表';
-- ----------------------------
-- Table structure for xxk_static_proxy_asset
-- ----------------------------
DROP TABLE IF EXISTS `xxk_static_proxy_asset`;
CREATE TABLE `xxk_static_proxy_asset` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '用户ID',
`order_id` bigint NOT NULL COMMENT '订单ID',
`order_item_id` bigint DEFAULT NULL COMMENT '订单项ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`upstream_provider_id` bigint NOT NULL COMMENT '上游供应商ID',
`upstream_order_no` varchar(64) DEFAULT NULL COMMENT '上游订单号',
`upstream_proxy_id` varchar(64) NOT NULL COMMENT '上游代理ID',
`proxy_address` varchar(100) NOT NULL COMMENT '代理IP',
`port` int NOT NULL COMMENT '端口',
`username` varchar(100) DEFAULT NULL COMMENT '账号',
`password` varchar(100) DEFAULT NULL COMMENT '密码',
`protocols` varchar(32) DEFAULT NULL COMMENT '协议',
`country_code` varchar(10) DEFAULT NULL COMMENT '国家编码',
`country_name` varchar(100) DEFAULT NULL COMMENT '国家名称',
`city_name` varchar(100) DEFAULT NULL COMMENT '城市名称',
`proxy_status` tinyint DEFAULT 1 COMMENT '代理状态(1-正常 2-禁用 3-维护)',
`is_auto_renew` tinyint DEFAULT 0 COMMENT '自动续费(1-开 0-关)',
`expired_at` datetime DEFAULT NULL COMMENT '到期时间',
`last_sync_time` datetime DEFAULT NULL COMMENT '最后同步时间',
`raw_data` mediumtext COMMENT '原始数据快照',
`status` tinyint DEFAULT 1 COMMENT '业务状态(1-有效 0-无效)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_static_upstream_proxy_id` (`upstream_proxy_id`) USING BTREE,
KEY `idx_static_user_status` (`user_id`, `status`) USING BTREE,
KEY `idx_static_expired_at` (`expired_at`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='静态代理资产表';
-- ----------------------------
-- Table structure for xxk_static_proxy_whitelist
-- ----------------------------
DROP TABLE IF EXISTS `xxk_static_proxy_whitelist`;
CREATE TABLE `xxk_static_proxy_whitelist` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '用户ID',
`product_id` bigint DEFAULT NULL COMMENT '商品ID',
`proxy_type` varchar(64) DEFAULT NULL COMMENT '静态代理类型',
`whitelist_ip` varchar(64) NOT NULL COMMENT '白名单IP',
`upstream_address_id` varchar(64) DEFAULT NULL COMMENT '上游白名单记录ID',
`status` tinyint DEFAULT 1 COMMENT '状态(1-有效 0-删除)',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_user_whitelist_ip` (`user_id`, `whitelist_ip`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='静态代理白名单表';
-- ----------------------------
-- Table structure for xxk_static_proxy_change_log
-- ----------------------------
DROP TABLE IF EXISTS `xxk_static_proxy_change_log`;
CREATE TABLE `xxk_static_proxy_change_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`asset_id` bigint NOT NULL COMMENT '静态资产ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`change_type` varchar(32) NOT NULL COMMENT '变更类型',
`before_value` text COMMENT '变更前',
`after_value` text COMMENT '变更后',
`operator_id` bigint DEFAULT NULL COMMENT '操作人ID',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_static_change_asset_id` (`asset_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='静态代理变更日志表';
-- ----------------------------
-- Table structure for xxk_dynamic_channel
-- ----------------------------
DROP TABLE IF EXISTS `xxk_dynamic_channel`;
CREATE TABLE `xxk_dynamic_channel` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '用户ID',
`order_id` bigint NOT NULL COMMENT '订单ID',
`order_item_id` bigint DEFAULT NULL COMMENT '订单项ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`upstream_provider_id` bigint NOT NULL COMMENT '上游供应商ID',
`upstream_channel_id` varchar(64) NOT NULL COMMENT '上游通道ID',
`channel_name` varchar(100) NOT NULL COMMENT '通道名称',
`channel_password` varchar(100) DEFAULT NULL COMMENT '通道密码',
`channel_status` varchar(16) NOT NULL DEFAULT 'ENABLED' COMMENT '通道状态',
`flow_package_gb` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '购买流量包GB',
`traffic_limit_gb` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '通道流量上限GB',
`used_traffic_gb` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '已用流量GB',
`remaining_traffic_gb` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '剩余流量GB',
`expired_at` datetime DEFAULT NULL COMMENT '到期时间',
`allow_generate_proxy` tinyint DEFAULT 1 COMMENT '允许生成代理(1-是 0-否)',
`last_sync_time` datetime DEFAULT NULL COMMENT '最后同步时间',
`raw_data` mediumtext COMMENT '原始数据快照',
`status` tinyint DEFAULT 1 COMMENT '业务状态(1-有效 0-无效)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_dynamic_upstream_channel_id` (`upstream_channel_id`) USING BTREE,
KEY `idx_dynamic_user_status` (`user_id`, `status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='动态通道表';
-- ----------------------------
-- Table structure for xxk_dynamic_channel_traffic_log
-- ----------------------------
DROP TABLE IF EXISTS `xxk_dynamic_channel_traffic_log`;
CREATE TABLE `xxk_dynamic_channel_traffic_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`channel_id` bigint NOT NULL COMMENT '动态通道ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`date_type` tinyint DEFAULT NULL COMMENT '查询日期类型',
`start_date` date DEFAULT NULL COMMENT '开始日期',
`end_date` date DEFAULT NULL COMMENT '结束日期',
`used_traffic_gb` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '已用流量GB',
`total_traffic_gb` decimal(12,3) DEFAULT 0.000 COMMENT '累计流量GB',
`raw_data` mediumtext COMMENT '原始返回',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_channel_traffic_channel_id` (`channel_id`, `create_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='动态通道流量日志表';
-- ----------------------------
-- Table structure for xxk_dynamic_proxy_generate_log
-- ----------------------------
DROP TABLE IF EXISTS `xxk_dynamic_proxy_generate_log`;
CREATE TABLE `xxk_dynamic_proxy_generate_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`channel_id` bigint NOT NULL COMMENT '动态通道ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`location` varchar(32) NOT NULL COMMENT '地区参数',
`domain` varchar(32) DEFAULT 'Global' COMMENT '域名参数',
`sticky_session_time` int NOT NULL DEFAULT 0 COMMENT '粘性会话分钟',
`proxy_count` int NOT NULL DEFAULT 1 COMMENT '生成数量',
`state` varchar(100) DEFAULT NULL COMMENT '',
`city` varchar(100) DEFAULT NULL COMMENT '城市',
`generated_result` mediumtext COMMENT '生成结果',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_generate_channel_id` (`channel_id`, `create_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='动态代理生成日志表';
-- ----------------------------
-- Table structure for xxk_distribution_relation
-- ----------------------------
DROP TABLE IF EXISTS `xxk_distribution_relation`;
CREATE TABLE `xxk_distribution_relation` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint DEFAULT NULL COMMENT '当前用户ID',
`parent_user_id` bigint DEFAULT NULL COMMENT '一级上级用户ID',
`grand_parent_user_id` bigint DEFAULT NULL COMMENT '二级上级用户ID',
`bind_source` varchar(32) DEFAULT NULL COMMENT '绑定来源',
`bind_time` datetime DEFAULT NULL COMMENT '绑定时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_distribution_user_id` (`user_id`) USING BTREE,
KEY `idx_distribution_parent_user_id` (`parent_user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分销关系表';
-- ----------------------------
-- Table structure for xxk_distribution_config
-- ----------------------------
DROP TABLE IF EXISTS `xxk_distribution_config`;
CREATE TABLE `xxk_distribution_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`distribution_enabled` tinyint DEFAULT 0 COMMENT '是否启用分销(1-是 0-否)',
`first_level_rate` decimal(10,4) NOT NULL DEFAULT 0.0000 COMMENT '一级佣金比例',
`second_level_rate` decimal(10,4) NOT NULL DEFAULT 0.0000 COMMENT '二级佣金比例',
`withdraw_threshold` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '提现门槛金额',
`withdraw_fee_rate` decimal(10,4) NOT NULL DEFAULT 0.0000 COMMENT '提现手续费比例',
`settle_rule` varchar(32) DEFAULT 'OPEN_SUCCESS_AMOUNT' COMMENT '结算规则',
`status` tinyint DEFAULT 1 COMMENT '状态(1-启用 0-禁用)',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` bigint DEFAULT NULL COMMENT '创建人ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人ID',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分销配置表';
-- ----------------------------
-- Table structure for xxk_distribution_commission
-- ----------------------------
DROP TABLE IF EXISTS `xxk_distribution_commission`;
CREATE TABLE `xxk_distribution_commission` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '佣金归属用户ID',
`from_user_id` bigint NOT NULL COMMENT '消费用户ID',
`order_id` bigint NOT NULL COMMENT '订单ID',
`order_no` varchar(64) NOT NULL COMMENT '订单号',
`level_no` tinyint NOT NULL COMMENT '层级(1/2)',
`rate` decimal(10,4) NOT NULL DEFAULT 0.0000 COMMENT '佣金比例',
`base_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '佣金基数',
`commission_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '佣金金额',
`commission_status` varchar(32) NOT NULL DEFAULT 'PENDING' COMMENT '佣金状态',
`confirm_time` datetime DEFAULT NULL COMMENT '确认时间',
`settle_time` datetime DEFAULT NULL COMMENT '结算时间',
`invalid_time` datetime DEFAULT NULL COMMENT '失效时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_commission_user_status` (`user_id`, `commission_status`) USING BTREE,
KEY `idx_commission_order_id` (`order_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分销佣金流水表';
-- ----------------------------
-- Table structure for xxk_upstream_request_log
-- ----------------------------
DROP TABLE IF EXISTS `xxk_upstream_request_log`;
CREATE TABLE `xxk_upstream_request_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`provider_id` bigint NOT NULL COMMENT '供应商ID',
`biz_type` varchar(32) NOT NULL COMMENT '业务类型',
`api_name` varchar(100) NOT NULL COMMENT '接口名称',
`request_url` varchar(255) NOT NULL COMMENT '请求地址',
`request_headers` mediumtext COMMENT '请求头',
`request_body` longtext COMMENT '请求体',
`response_body` longtext COMMENT '响应体',
`http_status` int DEFAULT NULL COMMENT 'HTTP状态码',
`biz_code` varchar(32) DEFAULT NULL COMMENT '业务码',
`success_flag` tinyint DEFAULT 0 COMMENT '是否成功(1-是 0-否)',
`duration_ms` int DEFAULT NULL COMMENT '耗时毫秒',
`error_message` varchar(500) DEFAULT NULL COMMENT '异常信息',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_request_provider_time` (`provider_id`, `create_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='上游请求日志表';
-- ----------------------------
-- Table structure for xxk_order_operate_log
-- ----------------------------
DROP TABLE IF EXISTS `xxk_order_operate_log`;
CREATE TABLE `xxk_order_operate_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`order_id` bigint NOT NULL COMMENT '订单ID',
`order_no` varchar(64) NOT NULL COMMENT '订单号',
`operate_type` varchar(32) NOT NULL COMMENT '操作类型',
`before_status` varchar(64) DEFAULT NULL COMMENT '操作前状态',
`after_status` varchar(64) DEFAULT NULL COMMENT '操作后状态',
`content` text COMMENT '操作内容',
`operator_id` bigint DEFAULT NULL COMMENT '操作人ID',
`operator_name` varchar(100) DEFAULT NULL COMMENT '操作人名称',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_order_operate_order_id` (`order_id`, `create_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单操作日志表';
SET FOREIGN_KEY_CHECKS = 1;
@@ -0,0 +1,627 @@
USE youlai_admin;
-- 齐云 IP 上游适配升级脚本
SET @schema_name = DATABASE();
-- 兼容未执行会员代理归属升级脚本的数据库。
-- 当前 StaticProxyAsset 实体已包含 memberUserIdMyBatis-Plus 查询会选择 member_user_id
-- 老库缺少该字段时,静态代理自动续费/同步定时任务会报 Unknown column。
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_static_proxy_asset'
AND COLUMN_NAME = 'member_user_id'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_static_proxy_asset` ADD COLUMN `member_user_id` BIGINT NULL COMMENT ''会员ID'' AFTER `user_id`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_static_proxy_asset'
AND INDEX_NAME = 'idx_xxk_static_proxy_asset_member_user_id'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_static_proxy_asset` ADD INDEX `idx_xxk_static_proxy_asset_member_user_id` (`member_user_id`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 会员侧订单开通会写入 member_user_id;这些表如果仍是旧结构,会导致上游已开通但本地资源/白名单插入失败。
ALTER TABLE `xxk_dynamic_channel` MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_dynamic_channel'
AND COLUMN_NAME = 'member_user_id'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_dynamic_channel` ADD COLUMN `member_user_id` BIGINT NULL COMMENT ''会员ID'' AFTER `user_id`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_dynamic_channel'
AND INDEX_NAME = 'idx_xxk_dynamic_channel_member_user_id'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_dynamic_channel` ADD INDEX `idx_xxk_dynamic_channel_member_user_id` (`member_user_id`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ALTER TABLE `xxk_dynamic_channel_traffic_log` MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_dynamic_channel_traffic_log'
AND COLUMN_NAME = 'member_user_id'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_dynamic_channel_traffic_log` ADD COLUMN `member_user_id` BIGINT NULL COMMENT ''会员ID'' AFTER `user_id`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_dynamic_channel_traffic_log'
AND INDEX_NAME = 'idx_xxk_dynamic_channel_traffic_log_member_user_id'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_dynamic_channel_traffic_log` ADD INDEX `idx_xxk_dynamic_channel_traffic_log_member_user_id` (`member_user_id`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ALTER TABLE `xxk_dynamic_proxy_generate_log` MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_dynamic_proxy_generate_log'
AND COLUMN_NAME = 'member_user_id'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_dynamic_proxy_generate_log` ADD COLUMN `member_user_id` BIGINT NULL COMMENT ''会员ID'' AFTER `user_id`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_dynamic_proxy_generate_log'
AND INDEX_NAME = 'idx_xxk_dynamic_proxy_generate_log_member_user_id'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_dynamic_proxy_generate_log` ADD INDEX `idx_xxk_dynamic_proxy_generate_log_member_user_id` (`member_user_id`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ALTER TABLE `xxk_static_proxy_asset` MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
ALTER TABLE `xxk_static_proxy_whitelist` MODIFY COLUMN `user_id` BIGINT NULL COMMENT '用户ID';
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_static_proxy_whitelist'
AND COLUMN_NAME = 'member_user_id'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_static_proxy_whitelist` ADD COLUMN `member_user_id` BIGINT NULL COMMENT ''会员ID'' AFTER `user_id`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_static_proxy_whitelist'
AND INDEX_NAME = 'uk_member_whitelist_ip'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_static_proxy_whitelist` ADD UNIQUE KEY `uk_member_whitelist_ip` (`member_user_id`, `whitelist_ip`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_static_proxy_whitelist'
AND INDEX_NAME = 'idx_xxk_static_proxy_whitelist_member_user_id'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_static_proxy_whitelist` ADD INDEX `idx_xxk_static_proxy_whitelist_member_user_id` (`member_user_id`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product'
AND COLUMN_NAME = 'upstream_params'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_product` ADD COLUMN `upstream_params` text DEFAULT NULL COMMENT ''上游扩展参数JSON'' AFTER `purpose_web`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product'
AND COLUMN_NAME = 'upstream_capabilities'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_product` ADD COLUMN `upstream_capabilities` text DEFAULT NULL COMMENT ''上游能力JSON'' AFTER `upstream_params`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_duration_multiplier'
AND COLUMN_NAME = 'duration_unit'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_product_duration_multiplier` ADD COLUMN `duration_unit` varchar(16) NOT NULL DEFAULT ''DAY'' COMMENT ''时长单位(DAY天/HOUR小时)'' AFTER `duration_days`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_duration_multiplier'
AND COLUMN_NAME = 'duration_value'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_product_duration_multiplier` ADD COLUMN `duration_value` int NOT NULL DEFAULT 1 COMMENT ''时长数值'' AFTER `duration_unit`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
UPDATE `xxk_product_duration_multiplier`
SET `duration_unit` = 'DAY',
`duration_value` = `duration_days`
WHERE (`duration_unit` IS NULL OR `duration_unit` = '' OR `duration_unit` = 'DAY')
AND (`duration_value` IS NULL OR `duration_value` <= 1);
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_duration_multiplier'
AND INDEX_NAME = 'uk_product_duration'
);
SET @sql = IF(
@index_exists > 0,
'ALTER TABLE `xxk_product_duration_multiplier` DROP INDEX `uk_product_duration`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_duration_multiplier'
AND INDEX_NAME = 'uk_product_duration_unit_value'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_product_duration_multiplier` ADD UNIQUE KEY `uk_product_duration_unit_value` (`product_id`, `duration_unit`, `duration_value`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_duration_multiplier'
AND INDEX_NAME = 'idx_product_duration_days'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_product_duration_multiplier` ADD INDEX `idx_product_duration_days` (`product_id`, `duration_days`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'price_type');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `price_type` varchar(20) DEFAULT NULL COMMENT ''价格类型(DEFAULT默认/NODE特殊节点)'' AFTER `product_id`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'qiyun_product_type');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `qiyun_product_type` varchar(32) DEFAULT NULL COMMENT ''齐云产品类型'' AFTER `price_type`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'qiyun_pid');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `qiyun_pid` varchar(64) DEFAULT NULL COMMENT ''齐云项目ID'' AFTER `qiyun_product_type`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'qiyun_project_name');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `qiyun_project_name` varchar(255) DEFAULT NULL COMMENT ''齐云项目名称'' AFTER `qiyun_pid`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'qiyun_area_id');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `qiyun_area_id` varchar(64) DEFAULT NULL COMMENT ''齐云省份ID'' AFTER `qiyun_project_name`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'qiyun_area_name');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `qiyun_area_name` varchar(255) DEFAULT NULL COMMENT ''齐云省份名称'' AFTER `qiyun_area_id`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'qiyun_node_id');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `qiyun_node_id` varchar(100) DEFAULT NULL COMMENT ''齐云节点ID'' AFTER `qiyun_area_name`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @column_exists = (SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'xxk_product_static_country_price' AND COLUMN_NAME = 'qiyun_node_name');
SET @sql = IF(@column_exists = 0, 'ALTER TABLE `xxk_product_static_country_price` ADD COLUMN `qiyun_node_name` varchar(255) DEFAULT NULL COMMENT ''齐云节点名称'' AFTER `qiyun_node_id`', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
ALTER TABLE `xxk_product` MODIFY COLUMN `currency` varchar(10) DEFAULT 'RMB' COMMENT '币种';
ALTER TABLE `xxk_product_static_country_price` MODIFY COLUMN `currency` varchar(10) DEFAULT 'RMB' COMMENT '币种';
ALTER TABLE `xxk_proxy_order` MODIFY COLUMN `currency` varchar(10) DEFAULT 'RMB' COMMENT '币种';
UPDATE `xxk_product` SET `currency` = 'RMB' WHERE `currency` IS NULL OR `currency` = '' OR `currency` = 'USD';
UPDATE `xxk_product_static_country_price` SET `currency` = 'RMB' WHERE `currency` IS NULL OR `currency` = '' OR `currency` = 'USD';
UPDATE `xxk_proxy_order` SET `currency` = 'RMB' WHERE `currency` IS NULL OR `currency` = '' OR `currency` = 'USD';
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_static_country_price'
AND INDEX_NAME = 'uk_product_country'
);
SET @sql = IF(
@index_exists > 0,
'ALTER TABLE `xxk_product_static_country_price` DROP INDEX `uk_product_country`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_static_country_price'
AND INDEX_NAME = 'idx_product_country'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_product_static_country_price` ADD INDEX `idx_product_country` (`product_id`, `country_code`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @index_exists = (
SELECT COUNT(1)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_product_static_country_price'
AND INDEX_NAME = 'idx_static_price_qiyun_node'
);
SET @sql = IF(
@index_exists = 0,
'ALTER TABLE `xxk_product_static_country_price` ADD INDEX `idx_static_price_qiyun_node` (`product_id`, `price_type`, `qiyun_node_id`) USING BTREE',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
UPDATE `xxk_upstream_provider`
SET `provider_code` = 'QIYUN01',
`provider_name` = '齐云IP',
`provider_type` = 'QIYUN',
`base_url` = 'https://www.qiyunip.com',
`auth_user_id` = NULL,
`auth_token` = NULL,
`success_codes` = '1'
WHERE `provider_type` = 'IPNUX';
-- 开放 API 模块补丁:应用、申请、独立账户、充值、回调日志和后台菜单。
CREATE TABLE IF NOT EXISTS `xxk_open_api_app` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`app_name` VARCHAR(128) NOT NULL COMMENT '应用名称',
`app_secret` VARCHAR(128) NOT NULL COMMENT '应用密钥',
`member_user_id` BIGINT NOT NULL COMMENT '绑定会员ID',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0停用 1启用)',
`allow_ip_list` TEXT DEFAULT NULL COMMENT '允许访问IP列表,逗号/换行分隔',
`callback_url` VARCHAR(255) DEFAULT NULL COMMENT '订单结果回调地址',
`callback_secret` VARCHAR(128) DEFAULT NULL COMMENT '订单结果回调签名密钥',
`last_auth_time` DATETIME DEFAULT NULL COMMENT '最近换取token时间',
`last_auth_ip` VARCHAR(64) DEFAULT NULL COMMENT '最近换取token IP',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_app_app_id` (`app_id`),
UNIQUE KEY `uk_xxk_open_api_app_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_app_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_app_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放接口应用表';
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_open_api_app'
AND COLUMN_NAME = 'callback_url'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_open_api_app` ADD COLUMN `callback_url` VARCHAR(255) DEFAULT NULL COMMENT ''订单结果回调地址'' AFTER `allow_ip_list`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @column_exists = (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'xxk_open_api_app'
AND COLUMN_NAME = 'callback_secret'
);
SET @sql = IF(
@column_exists = 0,
'ALTER TABLE `xxk_open_api_app` ADD COLUMN `callback_secret` VARCHAR(128) DEFAULT NULL COMMENT ''订单结果回调签名密钥'' AFTER `callback_url`',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
CREATE TABLE IF NOT EXISTS `xxk_open_api_apply` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`apply_no` VARCHAR(64) NOT NULL COMMENT '申请单号',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`username_snapshot` VARCHAR(64) DEFAULT NULL COMMENT '用户名快照',
`mobile_snapshot` VARCHAR(32) DEFAULT NULL COMMENT '手机号快照',
`contact_name` VARCHAR(64) NOT NULL COMMENT '联系人',
`contact_mobile` VARCHAR(32) DEFAULT NULL COMMENT '联系电话',
`contact_email` VARCHAR(128) DEFAULT NULL COMMENT '联系邮箱',
`company_name` VARCHAR(128) DEFAULT NULL COMMENT '公司名称',
`purpose` VARCHAR(255) NOT NULL COMMENT '申请用途',
`scenario_description` TEXT NOT NULL COMMENT '使用场景说明',
`allow_ip_list` TEXT DEFAULT NULL COMMENT 'IP白名单',
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0待审核 1已通过 2已驳回)',
`submit_remark` VARCHAR(255) DEFAULT NULL COMMENT '补充说明',
`submit_time` DATETIME DEFAULT NULL COMMENT '提交时间',
`audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`audit_by` BIGINT DEFAULT NULL COMMENT '审核人ID',
`audit_remark` VARCHAR(255) DEFAULT NULL COMMENT '审核备注',
`open_api_app_id` BIGINT DEFAULT NULL COMMENT '关联开放应用ID',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_apply_no` (`apply_no`),
KEY `idx_xxk_open_api_apply_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_apply_status` (`status`),
KEY `idx_xxk_open_api_apply_submit_time` (`submit_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放接口申请表';
CREATE TABLE IF NOT EXISTS `xxk_open_api_account` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '余额',
`frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '冻结余额',
`total_recharge_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '累计充值金额',
`total_consume_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '累计消费金额',
`total_refund_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '累计退款金额',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0停用 1正常)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_account_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_account_member_user_id` (`member_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='API独立账户表';
CREATE TABLE IF NOT EXISTS `xxk_open_api_account_flow` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`flow_no` VARCHAR(64) NOT NULL COMMENT '流水号',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`biz_type` VARCHAR(64) NOT NULL COMMENT '业务类型',
`change_type` VARCHAR(16) NOT NULL COMMENT '变动类型(IN/OUT)',
`change_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '变动金额',
`before_balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '变动前余额',
`after_balance` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '变动后余额',
`related_order_no` VARCHAR(64) DEFAULT NULL COMMENT '关联单号',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`operate_by` BIGINT DEFAULT NULL COMMENT '操作人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_account_flow_no` (`flow_no`),
KEY `idx_xxk_open_api_account_flow_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_account_flow_related_order_no` (`related_order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='API独立账户流水表';
CREATE TABLE IF NOT EXISTS `xxk_open_api_recharge_order` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`recharge_no` VARCHAR(64) NOT NULL COMMENT '充值单号',
`pay_order_no` VARCHAR(64) NOT NULL COMMENT '支付单号',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`payment_type` VARCHAR(32) NOT NULL COMMENT '支付方式',
`pay_status` VARCHAR(32) NOT NULL COMMENT '支付状态',
`channel_order_no` VARCHAR(64) DEFAULT NULL COMMENT '渠道订单号',
`channel_response` LONGTEXT DEFAULT NULL COMMENT '渠道响应',
`client_type` VARCHAR(32) DEFAULT NULL COMMENT '客户端类型',
`return_url` VARCHAR(500) DEFAULT NULL COMMENT '回跳地址',
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '充值金额',
`gift_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '赠送金额',
`credited_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '到账金额',
`promotion_rule_snapshot` TEXT DEFAULT NULL COMMENT '活动规则快照',
`currency` VARCHAR(16) DEFAULT 'USD' COMMENT '币种',
`paid_time` DATETIME DEFAULT NULL COMMENT '支付完成时间',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_open_api_recharge_no` (`recharge_no`),
UNIQUE KEY `uk_xxk_open_api_pay_order_no` (`pay_order_no`),
KEY `idx_xxk_open_api_recharge_order_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_recharge_order_member_user_id` (`member_user_id`),
KEY `idx_xxk_open_api_recharge_order_pay_status` (`pay_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='API独立账户充值单表';
CREATE TABLE IF NOT EXISTS `xxk_open_api_callback_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`open_api_app_id` BIGINT NOT NULL COMMENT '开放应用ID',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`order_id` BIGINT NOT NULL COMMENT '订单ID',
`order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
`callback_url` VARCHAR(255) DEFAULT NULL COMMENT '回调地址',
`event_type` VARCHAR(64) NOT NULL COMMENT '事件类型',
`request_body` LONGTEXT DEFAULT NULL COMMENT '请求报文',
`response_body` LONGTEXT DEFAULT NULL COMMENT '响应报文',
`response_status` INT DEFAULT NULL COMMENT '响应HTTP状态码',
`delivery_status` VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态(PENDING/SUCCESS/FAIL/SKIPPED)',
`error_message` VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
`attempt_no` INT NOT NULL DEFAULT 1 COMMENT '尝试次数',
`trigger_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '触发时间',
`finish_time` DATETIME DEFAULT NULL COMMENT '完成时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_xxk_open_api_callback_log_app_id` (`open_api_app_id`),
KEY `idx_xxk_open_api_callback_log_order_no` (`order_no`),
KEY `idx_xxk_open_api_callback_log_status` (`delivery_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放API订单回调日志表';
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1220, 1100, '0,1100', '开放API管理', 'C', NULL, '/open-api-manage', 'Layout', NULL,
1, 0, 1, 13, 'api', '/open-api-manage/open-api', NOW(), NOW(), NULL),
(1221, 1220, '0,1100,1220', '开放API申请审核', 'M', 'ProxyOpenApiApply', 'open-api', 'proxy/open-api/index', NULL,
0, 1, 1, 1, 'form', NULL, NOW(), NOW(), NULL),
(122101, 1221, '0,1100,1220,1221', '开放API申请查询', 'B', NULL, '', NULL, 'openapi:apply:list',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL),
(122102, 1221, '0,1100,1220,1221', '开放API申请审核', 'B', NULL, '', NULL, 'openapi:apply:audit',
NULL, NULL, 1, 2, '', NULL, NOW(), NOW(), NULL),
(1222, 1220, '0,1100,1220', '开放API回调日志', 'M', 'ProxyOpenApiCallback', 'open-api-callback', 'proxy/open-api-callback/index', NULL,
0, 1, 1, 2, 'notification', NULL, NOW(), NOW(), NULL),
(122201, 1222, '0,1100,1220,1222', '开放API回调日志查询', 'B', NULL, '', NULL, 'openapi:callback-log:list',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL),
(122202, 1222, '0,1100,1220,1222', '开放API回调日志重发', 'B', NULL, '', NULL, 'openapi:callback-log:retry',
NULL, NULL, 1, 2, '', NULL, NOW(), NOW(), NULL),
(1223, 1220, '0,1100,1220', '开放API账户中心', 'M', 'ProxyOpenApiAccount', 'open-api-account', 'proxy/open-api-account/index', NULL,
0, 1, 0, 3, 'wallet', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = NOW();
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 1220), (2, 1221), (2, 122101), (2, 122102), (2, 1222), (2, 122201), (2, 122202), (2, 1223);
@@ -0,0 +1,26 @@
ALTER TABLE `xxk_proxy_city_library`
RENAME TO `xxk_proxy_region`;
ALTER TABLE `xxk_proxy_region`
CHANGE COLUMN `city_code` `region_code` varchar(64) NOT NULL COMMENT '地区编号',
CHANGE COLUMN `city_name_zh` `region_name_zh` varchar(100) NOT NULL COMMENT '地区中文名',
CHANGE COLUMN `city_name_en` `region_name` varchar(100) NOT NULL COMMENT '地区名称',
CHANGE COLUMN `icon_url` `icon_url` varchar(500) NOT NULL COMMENT '地区图标',
DROP COLUMN `country_code`,
DROP COLUMN `country_name`;
ALTER TABLE `xxk_product_static_country_price`
ADD COLUMN `region_id` bigint DEFAULT NULL COMMENT '地区ID' AFTER `product_id`,
ADD COLUMN `region_code` varchar(64) DEFAULT NULL COMMENT '地区编号' AFTER `region_id`,
ADD COLUMN `region_name` varchar(100) DEFAULT NULL COMMENT '地区名称' AFTER `region_code`,
ADD COLUMN `region_name_zh` varchar(100) DEFAULT NULL COMMENT '地区中文名' AFTER `region_name`;
UPDATE `xxk_product_static_country_price`
SET
`region_code` = `country_code`,
`region_name` = IFNULL(`region_name`, `country_name`),
`region_name_zh` = IFNULL(`region_name_zh`, `country_name`)
WHERE `region_code` IS NULL OR `region_name_zh` IS NULL;
ALTER TABLE `xxk_product_static_country_price`
ADD KEY `idx_static_price_region_id` (`region_id`);
+38
View File
@@ -0,0 +1,38 @@
USE youlai_admin;
-- 代理平台主管演示角色
SET @proxy_role_code = 'PROXY_MANAGER';
INSERT INTO `sys_role`
(`name`, `code`, `sort`, `status`, `data_scope`, `create_by`, `create_time`, `update_by`, `update_time`, `is_deleted`)
SELECT '代理平台主管', @proxy_role_code, 80, 1, 1, 1, now(), 1, now(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1
FROM `sys_role`
WHERE `code` = @proxy_role_code
);
SET @proxy_role_id = (
SELECT `id`
FROM `sys_role`
WHERE `code` = @proxy_role_code
LIMIT 1
);
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT @proxy_role_id, `id`
FROM `sys_menu`
WHERE `id` IN (
1100,
1110, 11101, 11102, 11103, 11104,
1120, 11201, 11202, 11203, 11204,
1130, 11301, 11302, 11303, 11304,
1140, 11401, 11402, 11403, 11404,
1150, 11501, 11502, 11503,
1160, 11601, 11602, 11603,
1170, 11701, 11702,
1180, 11801, 11802, 11803, 11804,
1190, 11901, 11902,
1200, 12001, 12002, 12003
);
@@ -0,0 +1,29 @@
USE youlai_admin;
-- 上游请求日志菜单升级脚本
-- 说明:
-- 1. 在代理平台下新增“上游请求日志”菜单。
-- 2. 用于查看上游代理平台请求与响应日志,辅助联调和失败排查。
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(1185, 1100, '0,1100', '上游请求日志', 'M', 'ProxyUpstreamRequestLog', 'upstream-request-log', 'proxy/upstream-request-log/index', NULL,
0, 1, 1, 11, 'histogram', NULL, NOW(), NOW(), NULL),
(11851, 1185, '0,1100,1185', '上游请求日志查询', 'B', NULL, '', NULL, 'proxy:upstream-request-log:list',
NULL, NULL, 1, 1, '', NULL, NOW(), NOW(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`icon` = VALUES(`icon`),
`update_time` = NOW();
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(2, 1185), (2, 11851);
@@ -0,0 +1,9 @@
USE youlai_admin;
-- 钱包流水表 update_time 字段补齐脚本
-- 说明:
-- 1. 当前代码中的钱包流水实体继承了 BaseEntity,插入时会自动写入 update_time。
-- 2. 部分旧库的 xxk_wallet_flow 表缺少 update_time,导致支付、退款等钱包流水写入时报错。
ALTER TABLE `xxk_wallet_flow`
ADD COLUMN `update_time` DATETIME NULL COMMENT '更新时间' AFTER `create_time`;
@@ -0,0 +1,22 @@
USE youlai_admin;
-- 钱包充值订单管理菜单
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(11910, 1190, '0,1100,1190', '充值订单', 'C', 'ProxyWalletRecharge', 'wallet-recharge', 'proxy/wallet-recharge/index', NULL,
0, 1, 1, 3, 'wallet', NULL, now(), now(), NULL),
(11911, 11910, '0,1100,1190,11910', '充值订单查询', 'B', NULL, '', NULL, 'proxy:wallet:recharge-order:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
@@ -0,0 +1,50 @@
-- 钱包在线充值单升级脚本
-- 说明:
-- 1. 新增会员钱包在线充值单,独立承接 DaxPay 支付链路。
-- 2. 钱包入账仍然落到 xxk_wallet_account / xxk_wallet_flow。
CREATE TABLE IF NOT EXISTS `xxk_wallet_recharge_order` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`recharge_no` VARCHAR(64) NOT NULL COMMENT '充值单号',
`pay_order_no` VARCHAR(64) NOT NULL COMMENT '支付单号',
`member_user_id` BIGINT NOT NULL COMMENT '会员ID',
`payment_type` VARCHAR(32) NOT NULL COMMENT '支付方式(ALIPAY/WECHAT)',
`pay_status` VARCHAR(32) NOT NULL DEFAULT 'INIT' COMMENT '支付状态(INIT/PAYING/PAID/FAIL/CLOSED)',
`channel_order_no` VARCHAR(128) DEFAULT NULL COMMENT '渠道支付单号',
`channel_response` TEXT DEFAULT NULL COMMENT '渠道原始响应',
`client_type` VARCHAR(32) DEFAULT NULL COMMENT '客户端类型(PC/H5/APP/MINI_PROGRAM)',
`return_url` VARCHAR(500) DEFAULT NULL COMMENT '支付完成跳转地址',
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '充值金额',
`currency` VARCHAR(16) DEFAULT 'CNY' COMMENT '币种',
`paid_time` DATETIME DEFAULT NULL COMMENT '支付成功时间',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_xxk_wallet_recharge_no` (`recharge_no`),
UNIQUE KEY `uk_xxk_wallet_recharge_pay_order_no` (`pay_order_no`),
KEY `idx_xxk_wallet_recharge_member_status` (`member_user_id`, `pay_status`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='钱包在线充值单';
-- 钱包充值订单管理菜单
INSERT INTO `sys_menu`
(`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`,
`always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
VALUES
(11910, 1190, '0,1100,1190', '充值订单', 'C', 'ProxyWalletRecharge', 'wallet-recharge', 'proxy/wallet-recharge/index', NULL,
0, 1, 1, 3, 'wallet', NULL, now(), now(), NULL),
(11911, 11910, '0,1100,1190,11910', '充值订单查询', 'B', NULL, '', NULL, 'proxy:wallet:recharge-order:list',
NULL, NULL, 1, 1, '', NULL, now(), now(), NULL)
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`route_name` = VALUES(`route_name`),
`route_path` = VALUES(`route_path`),
`component` = VALUES(`component`),
`perm` = VALUES(`perm`),
`keep_alive` = VALUES(`keep_alive`),
`visible` = VALUES(`visible`),
`sort` = VALUES(`sort`),
`update_time` = now();
+586
View File
@@ -0,0 +1,586 @@
# YouLai_Admin (MySQL 5.7 ~ MySQL 8.x)
# Copyright (c) 2021-present, youlai.tech
-- ----------------------------
-- 1. 创建数据库
-- ----------------------------
CREATE DATABASE IF NOT EXISTS youlai_admin CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
-- ----------------------------
-- 2. 创建表 && 数据初始化
-- ----------------------------
USE youlai_admin;
SET NAMES utf8mb4; #
SET FOREIGN_KEY_CHECKS = 0; #
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(100) NOT NULL COMMENT '部门名称',
`code` varchar(100) NOT NULL COMMENT '部门编号',
`parent_id` bigint DEFAULT 0 COMMENT '父节点id',
`tree_path` varchar(255) NOT NULL COMMENT '父节点id路径',
`sort` smallint DEFAULT 0 COMMENT '显示顺序',
`status` tinyint DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
`create_by` bigint NULL COMMENT '创建人ID',
`create_time` datetime NULL COMMENT '创建时间',
`update_by` bigint NULL COMMENT '修改人ID',
`update_time` datetime NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除标识(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '部门编号唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '部门管理表';
-- ----------------------------
-- Records of sys_dept
-- ----------------------------
INSERT INTO `sys_dept` VALUES (1, '有来技术', 'YOULAI', 0, '0', 1, 1, 1, NULL, 1, now(), 0);
INSERT INTO `sys_dept` VALUES (2, '研发部门', 'RD001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0);
INSERT INTO `sys_dept` VALUES (3, '测试部门', 'QA001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0);
-- ----------------------------
-- Table structure for sys_dict
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键 ',
`dict_code` varchar(50) COMMENT '类型编码',
`name` varchar(50) COMMENT '类型名称',
`status` tinyint(1) DEFAULT '0' COMMENT '状态(0:正常;1:禁用)',
`remark` varchar(255) COMMENT '备注',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '修改人ID',
`is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(1-删除,0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_dict_code` (`dict_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据字典类型表';
-- ----------------------------
-- Records of sys_dict
-- ----------------------------
INSERT INTO `sys_dict` VALUES (1, 'gender', '性别', 1, NULL, now() , 1,now(), 1,0);
INSERT INTO `sys_dict` VALUES (2, 'notice_type', '通知类型', 1, NULL, now(), 1,now(), 1,0);
INSERT INTO `sys_dict` VALUES (3, 'notice_level', '通知级别', 1, NULL, now(), 1,now(), 1,0);
-- ----------------------------
-- Table structure for sys_dict_item
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_item`;
CREATE TABLE `sys_dict_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`dict_code` varchar(50) COMMENT '关联字典编码,与sys_dict表中的dict_code对应',
`value` varchar(50) COMMENT '字典项值',
`label` varchar(100) COMMENT '字典项标签',
`tag_type` varchar(50) COMMENT '标签类型,用于前端样式展示(如success、warning等)',
`status` tinyint DEFAULT '0' COMMENT '状态(1-正常,0-禁用)',
`sort` int DEFAULT '0' COMMENT '排序',
`remark` varchar(255) COMMENT '备注',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '修改人ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据字典项表';
-- ----------------------------
-- Records of sys_dict_item
-- ----------------------------
INSERT INTO `sys_dict_item` VALUES (1, 'gender', '1', '', 'primary', 1, 1, NULL, now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (2, 'gender', '2', '', 'danger', 1, 2, NULL, now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (3, 'gender', '0', '保密', 'info', 1, 3, NULL, now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (4, 'notice_type', '1', '系统升级', 'success', 1, 1, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (5, 'notice_type', '2', '系统维护', 'primary', 1, 2, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (6, 'notice_type', '3', '安全警告', 'danger', 1, 3, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (7, 'notice_type', '4', '假期通知', 'success', 1, 4, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (8, 'notice_type', '5', '公司新闻', 'primary', 1, 5, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (9, 'notice_type', '99', '其他', 'info', 1, 99, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (10, 'notice_level', 'L', '', 'info', 1, 1, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (11, 'notice_level', 'M', '', 'warning', 1, 2, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (12, 'notice_level', 'H', '', 'danger', 1, 3, '', now(), 1,now(),1);
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`parent_id` bigint NOT NULL COMMENT '父菜单ID',
`tree_path` varchar(255) COMMENT '父节点ID路径',
`name` varchar(64) NOT NULL COMMENT '菜单名称',
`type` char(1) NOT NULL COMMENT '菜单类型(C-目录 M-菜单 B-按钮)',
`route_name` varchar(255) COMMENT '路由名称(Vue Router 中用于命名路由)',
`route_path` varchar(128) COMMENT '路由路径(Vue Router 中定义的 URL 路径)',
`component` varchar(128) COMMENT '组件路径(组件页面完整路径,相对于 src/views/,缺省后缀 .vue',
`perm` varchar(128) COMMENT '【按钮】权限标识',
`always_show` tinyint DEFAULT 0 COMMENT '【目录】只有一个子路由是否始终显示(1-是 0-否)',
`keep_alive` tinyint DEFAULT 0 COMMENT '【菜单】是否开启页面缓存(1-是 0-否)',
`visible` tinyint(1) DEFAULT 1 COMMENT '显示状态(1-显示 0-隐藏)',
`sort` int DEFAULT 0 COMMENT '排序',
`icon` varchar(64) COMMENT '菜单图标',
`redirect` varchar(128) COMMENT '跳转路径',
`create_time` datetime NULL COMMENT '创建时间',
`update_time` datetime NULL COMMENT '更新时间',
`params` json NULL COMMENT '路由参数',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统菜单表';
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
-- 顶级目录(1-9):系统/代码生成/文档/接口文档/组件/演示/多级/路由
INSERT INTO `sys_menu` VALUES (1, 0, '0', '系统管理', 'C', '', '/system', 'Layout', NULL, NULL, NULL, 1, 1, 'system', '/system/user', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2, 0, '0', '代码生成', 'C', '', '/codegen', 'Layout', NULL, NULL, NULL, 1, 2, 'code', '/codegen/index', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (4, 0, '0', '平台文档', 'C', '', '/doc', 'Layout', NULL, NULL, NULL, 1, 4, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (5, 0, '0', '接口文档', 'C', '', '/api', 'Layout', NULL, NULL, NULL, 1, 5, 'api', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (6, 0, '0', '组件封装', 'C', '', '/component', 'Layout', NULL, NULL, NULL, 1, 6, 'menu', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (7, 0, '0', '功能演示', 'C', '', '/function', 'Layout', NULL, NULL, NULL, 1, 7, 'menu', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (8, 0, '0', '多级菜单', 'C', NULL, '/multi-level', 'Layout', NULL, 1, NULL, 1, 8, 'cascader', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (9, 0, '0', '路由参数', 'C', '', '/route-param', 'Layout', NULL, NULL, NULL, 1, 9, 'el-icon-ElementPlus', '', now(), now(), NULL);
-- 系统管理
INSERT INTO `sys_menu` VALUES (210, 1, '0,1', '用户管理', 'M', 'User', 'user', 'system/user/index', NULL, NULL, 1, 1, 1, 'el-icon-User', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2101, 210, '0,1,210', '用户查询', 'B', NULL, '', NULL, 'sys:user:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2102, 210, '0,1,210', '用户新增', 'B', NULL, '', NULL, 'sys:user:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2103, 210, '0,1,210', '用户编辑', 'B', NULL, '', NULL, 'sys:user:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2104, 210, '0,1,210', '用户删除', 'B', NULL, '', NULL, 'sys:user:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2105, 210, '0,1,210', '重置密码', 'B', NULL, '', NULL, 'sys:user:reset-password', NULL, NULL, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2106, 210, '0,1,210', '用户导入', 'B', NULL, '', NULL, 'sys:user:import', NULL, NULL, 1, 6, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2107, 210, '0,1,210', '用户导出', 'B', NULL, '', NULL, 'sys:user:export', NULL, NULL, 1, 7, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (220, 1, '0,1', '角色管理', 'M', 'Role', 'role', 'system/role/index', NULL, NULL, 1, 1, 2, 'role', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2201, 220, '0,1,220', '角色查询', 'B', NULL, '', NULL, 'sys:role:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2202, 220, '0,1,220', '角色新增', 'B', NULL, '', NULL, 'sys:role:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2203, 220, '0,1,220', '角色编辑', 'B', NULL, '', NULL, 'sys:role:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2204, 220, '0,1,220', '角色删除', 'B', NULL, '', NULL, 'sys:role:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2205, 220, '0,1,220', '角色分配权限', 'B', NULL, '', NULL, 'sys:role:assign', NULL, NULL, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (230, 1, '0,1', '菜单管理', 'M', 'SysMenu', 'menu', 'system/menu/index', NULL, NULL, 1, 1, 3, 'menu', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2301, 230, '0,1,230', '菜单查询', 'B', NULL, '', NULL, 'sys:menu:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2302, 230, '0,1,230', '菜单新增', 'B', NULL, '', NULL, 'sys:menu:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2303, 230, '0,1,230', '菜单编辑', 'B', NULL, '', NULL, 'sys:menu:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2304, 230, '0,1,230', '菜单删除', 'B', NULL, '', NULL, 'sys:menu:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (240, 1, '0,1', '部门管理', 'M', 'Dept', 'dept', 'system/dept/index', NULL, NULL, 1, 1, 4, 'tree', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2401, 240, '0,1,240', '部门查询', 'B', NULL, '', NULL, 'sys:dept:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2402, 240, '0,1,240', '部门新增', 'B', NULL, '', NULL, 'sys:dept:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2403, 240, '0,1,240', '部门编辑', 'B', NULL, '', NULL, 'sys:dept:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2404, 240, '0,1,240', '部门删除', 'B', NULL, '', NULL, 'sys:dept:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (250, 1, '0,1', '字典管理', 'M', 'Dict', 'dict', 'system/dict/index', NULL, NULL, 1, 1, 5, 'dict', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2501, 250, '0,1,250', '字典查询', 'B', NULL, '', NULL, 'sys:dict:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2502, 250, '0,1,250', '字典新增', 'B', NULL, '', NULL, 'sys:dict:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2503, 250, '0,1,250', '字典编辑', 'B', NULL, '', NULL, 'sys:dict:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2504, 250, '0,1,250', '字典删除', 'B', NULL, '', NULL, 'sys:dict:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (251, 1, '0,1', '字典项', 'M', 'DictItem', 'dict-item', 'system/dict/dict-item', NULL, 0, 1, 0, 6, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2511, 251, '0,1,251', '字典项查询', 'B', NULL, '', NULL, 'sys:dict-item:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2512, 251, '0,1,251', '字典项新增', 'B', NULL, '', NULL, 'sys:dict-item:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2513, 251, '0,1,251', '字典项编辑', 'B', NULL, '', NULL, 'sys:dict-item:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2514, 251, '0,1,251', '字典项删除', 'B', NULL, '', NULL, 'sys:dict-item:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (260, 1, '0,1', '系统日志', 'M', 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 7, 'document', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2601, 260, '0,1,260', '日志查询', 'B', NULL, '', NULL, 'sys:log:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (270, 1, '0,1', '系统配置', 'M', 'Config', 'config', 'system/config/index', NULL, 0, 1, 1, 8, 'setting', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2701, 270, '0,1,270', '系统配置查询', 'B', NULL, '', NULL, 'sys:config:list', 0, 1, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2702, 270, '0,1,270', '系统配置新增', 'B', NULL, '', NULL, 'sys:config:create', 0, 1, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2703, 270, '0,1,270', '系统配置修改', 'B', NULL, '', NULL, 'sys:config:update', 0, 1, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2704, 270, '0,1,270', '系统配置删除', 'B', NULL, '', NULL, 'sys:config:delete', 0, 1, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2705, 270, '0,1,270', '系统配置刷新', 'B', NULL, '', NULL, 'sys:config:refresh', 0, 1, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (280, 1, '0,1', '通知公告', 'M', 'Notice', 'notice', 'system/notice/index', NULL, NULL, NULL, 1, 9, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2801, 280, '0,1,280', '通知查询', 'B', NULL, '', NULL, 'sys:notice:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2802, 280, '0,1,280', '通知新增', 'B', NULL, '', NULL, 'sys:notice:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2803, 280, '0,1,280', '通知编辑', 'B', NULL, '', NULL, 'sys:notice:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2804, 280, '0,1,280', '通知删除', 'B', NULL, '', NULL, 'sys:notice:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2805, 280, '0,1,280', '通知发布', 'B', NULL, '', NULL, 'sys:notice:publish', 0, 1, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2806, 280, '0,1,280', '通知撤回', 'B', NULL, '', NULL, 'sys:notice:revoke', 0, 1, 1, 6, '', NULL, now(), now(), NULL);
-- 代码生成
INSERT INTO `sys_menu` VALUES (310, 2, '0,2', '代码生成', 'M', 'Codegen', 'codegen', 'codegen/index', NULL, NULL, 1, 1, 1, 'code', NULL, now(), now(), NULL);
-- 平台文档(外链通过 route_path 识别)
INSERT INTO `sys_menu` VALUES (501, 4, '0,4', '平台文档(外链)', 'M', NULL, 'https://juejin.cn/post/7228990409909108793', '', NULL, NULL, NULL, 1, 1, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (502, 4, '0,4', '后端文档', 'M', NULL, 'https://youlai.blog.csdn.net/article/details/145178880', '', NULL, NULL, NULL, 1, 2, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (503, 4, '0,4', '移动端文档', 'M', NULL, 'https://youlai.blog.csdn.net/article/details/143222890', '', NULL, NULL, NULL, 1, 3, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (504, 4, '0,4', '内部文档', 'M', NULL, 'internal-doc', 'demo/internal-doc', NULL, NULL, NULL, 1, 4, 'document', '', now(), now(), NULL);
-- 接口文档
INSERT INTO `sys_menu` VALUES (601, 5, '0,5', 'Apifox', 'M', 'Apifox', 'apifox', 'demo/api/apifox', NULL, NULL, 1, 1, 1, 'api', '', now(), now(), NULL);
-- 组件封装
INSERT INTO `sys_menu` VALUES (701, 6, '0,6', '富文本编辑器', 'M', 'WangEditor', 'wang-editor', 'demo/wang-editor', NULL, NULL, 1, 1, 2, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (702, 6, '0,6', '图片上传', 'M', 'Upload', 'upload', 'demo/upload', NULL, NULL, 1, 1, 3, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (703, 6, '0,6', '图标选择器', 'M', 'IconSelect', 'icon-select', 'demo/icon-select', NULL, NULL, 1, 1, 4, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (704, 6, '0,6', '字典组件', 'M', 'DictDemo', 'dict-demo', 'demo/dictionary', NULL, NULL, 1, 1, 4, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (705, 6, '0,6', '增删改查', 'M', 'Curd', 'curd', 'demo/curd/index', NULL, NULL, 1, 1, 0, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (706, 6, '0,6', '列表选择器', 'M', 'TableSelect', 'table-select', 'demo/table-select/index', NULL, NULL, 1, 1, 1, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (707, 6, '0,6', '拖拽组件', 'M', 'Drag', 'drag', 'demo/drag', NULL, NULL, NULL, 1, 5, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (708, 6, '0,6', '滚动文本', 'M', 'TextScroll', 'text-scroll', 'demo/text-scroll', NULL, NULL, NULL, 1, 6, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (709, 6, '0,6', '自适应表格操作列', 'M', 'AutoOperationColumn', 'operation-column', 'demo/auto-operation-column', NULL, NULL, 1, 1, 1, '', '', now(), now(), NULL);
-- 功能演示
INSERT INTO `sys_menu` VALUES (801, 7, '0,7', 'Icons', 'M', 'IconDemo', 'icon-demo', 'demo/icons', NULL, NULL, 1, 1, 2, 'el-icon-Notification', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (802, 7, '0,7', '字典实时同步', 'M', 'DictSync', 'dict-sync', 'demo/dict-sync', NULL, NULL, NULL, 1, 3, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (803, 7, '0,7', 'VxeTable', 'M', 'VxeTable', 'vxe-table', 'demo/vxe-table/index', NULL, NULL, 1, 1, 4, 'el-icon-MagicStick', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (804, 7, '0,7', 'CURD单文件', 'M', 'CurdSingle', 'curd-single', 'demo/curd-single', NULL, NULL, 1, 1, 5, 'el-icon-Reading', '', now(), now(), NULL);
-- 多级菜单示例
INSERT INTO `sys_menu` VALUES (910, 8, '0,8', '菜单一级', 'C', NULL, 'multi-level1', 'Layout', NULL, 1, NULL, 1, 1, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (911, 910, '0,8,910', '菜单二级', 'C', NULL, 'multi-level2', 'Layout', NULL, 0, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (912, 911, '0,8,910,911', '菜单三级-1', 'M', NULL, 'multi-level3-1', 'demo/multi-level/children/children/level3-1', NULL, 0, 1, 1, 1, '', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (913, 911, '0,8,910,911', '菜单三级-2', 'M', NULL, 'multi-level3-2', 'demo/multi-level/children/children/level3-2', NULL, 0, 1, 1, 2, '', '', now(), now(), NULL);
-- 路由参数
INSERT INTO `sys_menu` VALUES (1001, 9, '0,9', '参数(type=1)', 'M', 'RouteParamType1', 'route-param-type1', 'demo/route-param', NULL, 0, 1, 1, 1, 'el-icon-Star', NULL, now(), now(), '{\"type\": \"1\"}');
INSERT INTO `sys_menu` VALUES (1002, 9, '0,9', '参数(type=2)', 'M', 'RouteParamType2', 'route-param-type2', 'demo/route-param', NULL, 0, 1, 1, 2, 'el-icon-StarFilled', NULL, now(), now(), '{\"type\": \"2\"}');
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '角色名称',
`code` varchar(32) NOT NULL COMMENT '角色编码',
`sort` int NULL COMMENT '显示顺序',
`status` tinyint(1) DEFAULT 1 COMMENT '角色状态(1-正常 0-停用)',
`data_scope` tinyint NULL COMMENT '数据权限(1-所有数据 2-部门及子部门数据 3-本部门数据 4-本人数据 5-自定义部门数据)',
`create_by` bigint NULL COMMENT '创建人 ID',
`create_time` datetime NULL COMMENT '创建时间',
`update_by` bigint NULL COMMENT '更新人ID',
`update_time` datetime NULL COMMENT '更新时间',
`is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_name`(`name` ASC) USING BTREE COMMENT '角色名称唯一索引',
UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '角色编码唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统角色表';
-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES (1, '超级管理员', 'ROOT', 1, 1, 1, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (2, '系统管理员', 'ADMIN', 2, 1, 1, NULL, now(), NULL, NULL, 0);
INSERT INTO `sys_role` VALUES (3, '访问游客', 'GUEST', 3, 1, 3, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (4, '部门主管', 'DEPT_MANAGER', 4, 1, 2, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (5, '部门成员', 'DEPT_MEMBER', 5, 1, 3, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (6, '普通员工', 'EMPLOYEE', 6, 1, 4, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (7, '自定义权限用户', 'CUSTOM_USER', 7, 1, 5, NULL, now(), NULL, now(), 0);
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
`role_id` bigint NOT NULL COMMENT '角色ID',
`menu_id` bigint NOT NULL COMMENT '菜单ID',
UNIQUE INDEX `uk_roleid_menuid`(`role_id` ASC, `menu_id` ASC) USING BTREE COMMENT '角色菜单唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色菜单关联表';
-- ----------------------------
-- Table structure for sys_role_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_dept`;
CREATE TABLE `sys_role_dept` (
`role_id` bigint NOT NULL COMMENT '角色ID',
`dept_id` bigint NOT NULL COMMENT '部门ID',
UNIQUE INDEX `uk_roleid_deptid`(`role_id` ASC, `dept_id` ASC) USING BTREE COMMENT '角色部门唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色部门关联表';
-- ----------------------------
-- Records of sys_role_dept
-- ----------------------------
INSERT IGNORE INTO `sys_role_dept` VALUES (7, 1);
INSERT IGNORE INTO `sys_role_dept` VALUES (7, 2);
-- ============================================
-- 系统管理员角色菜单权限(role_id=2)
-- 顶级目录
INSERT INTO `sys_role_menu` VALUES (2, 1), (2, 2), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9);
-- 系统管理
INSERT INTO `sys_role_menu` VALUES (2, 210), (2, 2101), (2, 2102), (2, 2103), (2, 2104), (2, 2105), (2, 2106), (2, 2107);
INSERT INTO `sys_role_menu` VALUES (2, 220), (2, 2201), (2, 2202), (2, 2203), (2, 2204), (2, 2205);
INSERT INTO `sys_role_menu` VALUES (2, 230), (2, 2301), (2, 2302), (2, 2303), (2, 2304);
INSERT INTO `sys_role_menu` VALUES (2, 240), (2, 2401), (2, 2402), (2, 2403), (2, 2404);
INSERT INTO `sys_role_menu` VALUES (2, 250), (2, 2501), (2, 2502), (2, 2503), (2, 2504);
INSERT INTO `sys_role_menu` VALUES (2, 251), (2, 2511), (2, 2512), (2, 2513), (2, 2514);
INSERT INTO `sys_role_menu` VALUES (2, 260), (2, 2601);
INSERT INTO `sys_role_menu` VALUES (2, 270), (2, 2701), (2, 2702), (2, 2703), (2, 2704), (2, 2705);
INSERT INTO `sys_role_menu` VALUES (2, 280), (2, 2801), (2, 2802), (2, 2803), (2, 2804), (2, 2805), (2, 2806);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 210), (4, 2101), (4, 2102), (4, 2103), (4, 2104), (4, 2105), (4, 2106), (4, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 220), (4, 2201), (4, 2202), (4, 2203), (4, 2204), (4, 2205);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 210), (5, 2101), (5, 2102), (5, 2103), (5, 2104), (5, 2105), (5, 2106), (5, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 220), (5, 2201), (5, 2202), (5, 2203), (5, 2204), (5, 2205);
INSERT IGNORE INTO `sys_role_menu` VALUES (6, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (6, 210), (6, 2101), (6, 2102), (6, 2103), (6, 2104), (6, 2105), (6, 2106), (6, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (6, 220), (6, 2201), (6, 2202), (6, 2203), (6, 2204), (6, 2205);
INSERT IGNORE INTO `sys_role_menu` VALUES (7, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (7, 210), (7, 2101), (7, 2102), (7, 2103), (7, 2104), (7, 2105), (7, 2106), (7, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (7, 220), (7, 2201), (7, 2202), (7, 2203), (7, 2204), (7, 2205);
-- 代码生成
INSERT INTO `sys_role_menu` VALUES (2, 310);
-- 平台文档
INSERT INTO `sys_role_menu` VALUES (2, 501), (2, 502), (2, 503), (2, 504);
-- 接口文档
INSERT INTO `sys_role_menu` VALUES (2, 601);
-- 组件封装
INSERT INTO `sys_role_menu` VALUES (2, 701), (2, 702), (2, 703), (2, 704), (2, 705), (2, 706), (2, 707), (2, 708), (2, 709);
-- 功能演示 / 多级菜单
INSERT INTO `sys_role_menu` VALUES (2, 801), (2, 802), (2, 803), (2, 804), (2, 910), (2, 911), (2, 912), (2, 913);
-- 路由参数
INSERT INTO `sys_role_menu` VALUES (2, 1001), (2, 1002);
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(64) COMMENT '用户名',
`nickname` varchar(64) COMMENT '昵称',
`gender` tinyint(1) DEFAULT 1 COMMENT '性别((1-男 2-女 0-保密)',
`password` varchar(100) COMMENT '密码',
`dept_id` int COMMENT '部门ID',
`avatar` varchar(255) COMMENT '用户头像',
`mobile` varchar(20) COMMENT '联系方式',
`status` tinyint(1) DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
`email` varchar(128) COMMENT '用户邮箱',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '修改人ID',
`is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统用户表';
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 'root', '有来技术', 0, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', NULL, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345677', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (2, 'admin', '系统管理员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18888888888', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (3, 'test', '测试小用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345679', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (4, 'dept_manager', '部门主管', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345680', 1, 'manager@youlaitech.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (5, 'dept_member', '部门成员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345681', 1, 'member@youlaitech.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (6, 'employee', '普通员工', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 2, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345682', 1, 'employee@youlaitech.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (7, 'custom_user', '自定义权限用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345683', 1, 'custom@youlaitech.com', now(), NULL, now(), NULL, 0);
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`user_id` bigint NOT NULL COMMENT '用户ID',
`role_id` bigint NOT NULL COMMENT '角色ID',
PRIMARY KEY (`user_id`, `role_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '用户角色关联表';
-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT IGNORE INTO `sys_user_role` VALUES (1, 1);
INSERT IGNORE INTO `sys_user_role` VALUES (2, 2);
INSERT IGNORE INTO `sys_user_role` VALUES (3, 3);
INSERT IGNORE INTO `sys_user_role` VALUES (4, 4);
INSERT IGNORE INTO `sys_user_role` VALUES (5, 5);
INSERT IGNORE INTO `sys_user_role` VALUES (6, 6);
INSERT IGNORE INTO `sys_user_role` VALUES (7, 7);
-- ----------------------------
-- Table structure for sys_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`module` TINYINT NOT NULL COMMENT '模块,数字枚举,参考 LogModule 枚举',
`action_type` TINYINT NOT NULL COMMENT '操作类型,数字枚举,参考 ActionType 枚举',
`title` VARCHAR(100) NOT NULL COMMENT '前端显示标题',
`content` TEXT COMMENT '自定义日志内容',
`operator_id` BIGINT COMMENT '操作人ID',
`operator_name` VARCHAR(50) COMMENT '操作人名称',
`request_uri` VARCHAR(255) COMMENT '请求路径',
`request_method` VARCHAR(10) COMMENT '请求方法',
`ip` VARCHAR(45) COMMENT 'IP地址',
`province` VARCHAR(100) COMMENT '省份',
`city` VARCHAR(100) COMMENT '城市',
`device` VARCHAR(100) COMMENT '设备',
`os` VARCHAR(100) COMMENT '操作系统',
`browser` VARCHAR(100) COMMENT '浏览器',
`status` TINYINT DEFAULT 1 COMMENT '0失败 1成功',
`error_msg` VARCHAR(255) COMMENT '错误信息',
`execution_time` INT COMMENT '执行时间(ms)',
`create_time` DATETIME COMMENT '操作时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_module_action_time` (`module`, `action_type`, `create_time`),
KEY `idx_operator_time` (`operator_id`, `create_time`),
KEY `idx_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统操作日志表';
-- ----------------------------
-- Table structure for gen_table
-- ----------------------------
DROP TABLE IF EXISTS `gen_table`;
CREATE TABLE `gen_table` (
`id` bigint NOT NULL AUTO_INCREMENT,
`table_name` varchar(100) NOT NULL COMMENT '表名',
`module_name` varchar(100) COMMENT '模块名',
`package_name` varchar(255) NOT NULL COMMENT '包名',
`business_name` varchar(100) NOT NULL COMMENT '业务名',
`entity_name` varchar(100) NOT NULL COMMENT '实体类名',
`author` varchar(50) NOT NULL COMMENT '作者',
`parent_menu_id` bigint COMMENT '上级菜单ID,对应sys_menu的id ',
`remove_table_prefix` varchar(20) COMMENT '要移除的表前缀,如: sys_',
`page_type` varchar(20) COMMENT '页面类型(classic|curd)',
`create_time` datetime COMMENT '创建时间',
`update_time` datetime COMMENT '更新时间',
`is_deleted` tinyint(4) DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tablename` (`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成配置表';
-- ----------------------------
-- Table structure for gen_table_column
-- ----------------------------
DROP TABLE IF EXISTS `gen_table_column`;
CREATE TABLE `gen_table_column` (
`id` bigint NOT NULL AUTO_INCREMENT,
`table_id` bigint NOT NULL COMMENT '关联的表配置ID',
`column_name` varchar(100) ,
`column_type` varchar(50) ,
`column_length` int ,
`field_name` varchar(100) NOT NULL COMMENT '字段名称',
`field_type` varchar(100) COMMENT '字段类型',
`field_sort` int COMMENT '字段排序',
`field_comment` varchar(255) COMMENT '字段描述',
`max_length` int ,
`is_required` tinyint(1) COMMENT '是否必填',
`is_show_in_list` tinyint(1) DEFAULT '0' COMMENT '是否在列表显示',
`is_show_in_form` tinyint(1) DEFAULT '0' COMMENT '是否在表单显示',
`is_show_in_query` tinyint(1) DEFAULT '0' COMMENT '是否在查询条件显示',
`query_type` tinyint COMMENT '查询方式',
`form_type` tinyint COMMENT '表单类型',
`dict_type` varchar(50) COMMENT '字典类型',
`create_time` datetime COMMENT '创建时间',
`update_time` datetime COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_table_id` (`table_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成字段配置表';
-- ----------------------------
-- 系统配置表
-- ----------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`config_name` varchar(50) NOT NULL COMMENT '配置名称',
`config_key` varchar(50) NOT NULL COMMENT '配置key',
`config_value` text NOT NULL COMMENT '配置值',
`remark` varchar(255) COMMENT '备注',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '更新人ID',
`is_deleted` tinyint(4) DEFAULT '0' NOT NULL COMMENT '逻辑删除标识(0-未删除 1-已删除)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='系统配置表';
INSERT INTO `sys_config` VALUES (1, '系统限流QPS', 'IP_QPS_THRESHOLD_LIMIT', '10', '单个IP请求的最大每秒查询数(QPS)阈值Key', now(), 1, NULL, NULL, 0);
-- ----------------------------
-- 通知公告表
-- ----------------------------
DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice` (
`id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(50) COMMENT '通知标题',
`content` text COMMENT '通知内容',
`type` tinyint NOT NULL COMMENT '通知类型(关联字典编码:notice_type',
`level` varchar(5) NOT NULL COMMENT '通知等级(字典codenotice_level',
`target_type` tinyint NOT NULL COMMENT '目标类型(1: 全体, 2: 指定)',
`target_user_ids` varchar(255) COMMENT '目标人ID集合(多个使用英文逗号,分割)',
`publisher_id` bigint COMMENT '发布人ID',
`publish_status` tinyint DEFAULT '0' COMMENT '发布状态(0: 未发布, 1: 已发布, -1: 已撤回)',
`publish_time` datetime COMMENT '发布时间',
`revoke_time` datetime COMMENT '撤回时间',
`create_by` bigint NOT NULL COMMENT '创建人ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` bigint COMMENT '更新人ID',
`update_time` datetime COMMENT '更新时间',
`is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除(0: 未删除, 1: 已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统通知公告表';
INSERT INTO `sys_notice` VALUES (1, 'v3.0.0 版本发布 - 多租户功能上线', '<p>🎉 新版本发布,主要更新内容:</p><p>1. 新增多租户功能,支持租户隔离和数据管理</p><p>2. 优化系统性能,提升响应速度</p><p>3. 完善权限管理,增强安全性</p><p>4. 修复已知问题,提升系统稳定性</p>', 1, 'H', 1, NULL, 1, 1, '2024-12-15 10:00:00', NULL, 1, '2024-12-15 10:00:00', 1, '2024-12-15 10:00:00', 0);
INSERT INTO `sys_notice` VALUES (2, '系统维护通知 - 2024年12月20日', '<p>⏰ 系统维护通知</p><p>系统将于 <strong>2024年12月20日(本周五)凌晨 2:00-4:00</strong> 进行例行维护升级。</p><p>维护期间系统将暂停服务,请提前做好数据备份工作。</p><p>给您带来的不便,敬请谅解!</p>', 2, 'H', 1, NULL, 1, 1, '2024-12-18 14:30:00', NULL, 1, '2024-12-18 14:30:00', 1, '2024-12-18 14:30:00', 0);
INSERT INTO `sys_notice` VALUES (3, '安全提醒 - 防范钓鱼邮件', '<p>⚠️ 安全提醒</p><p>近期发现有不法分子通过钓鱼邮件进行网络攻击,请大家提高警惕:</p><p>1. 不要点击来源不明的邮件链接</p><p>2. 不要下载可疑附件</p><p>3. 遇到可疑邮件请及时联系IT部门</p><p>4. 定期修改密码,使用强密码策略</p>', 3, 'H', 1, NULL, 1, 1, '2024-12-10 09:00:00', NULL, 1, '2024-12-10 09:00:00', 1, '2024-12-10 09:00:00', 0);
INSERT INTO `sys_notice` VALUES (4, '元旦假期安排通知', '<p>📅 元旦假期安排</p><p>根据国家法定节假日安排,公司元旦假期时间为:</p><p><strong>2024年12月30日(周一)至 2025年1月1日(周三)</strong>,共3天。</p><p>2024年12月29日(周日)正常上班。</p><p>祝大家元旦快乐,假期愉快!</p>', 4, 'M', 1, NULL, 1, 1, '2024-12-25 16:00:00', NULL, 1, '2024-12-25 16:00:00', 1, '2024-12-25 16:00:00', 0);
INSERT INTO `sys_notice` VALUES (5, '新产品发布会邀请', '<p>🎊 新产品发布会邀请</p><p>公司将于 <strong>2025年1月15日下午14:00</strong> 在总部会议室举办新产品发布会。</p><p>届时将展示最新研发的产品和技术成果,欢迎全体员工参加。</p><p>请各部门提前安排好工作,准时参加。</p>', 5, 'M', 1, NULL, 1, 1, '2024-12-28 11:00:00', NULL, 1, '2024-12-28 11:00:00', 1, '2024-12-28 11:00:00', 0);
INSERT INTO `sys_notice` VALUES (6, 'v2.16.1 版本更新', '<p>✨ 版本更新</p><p>v2.16.1 版本已发布,主要修复内容:</p><p>1. 修复 WebSocket 重复连接导致的后台线程阻塞问题</p><p>2. 优化通知公告功能,提升用户体验</p><p>3. 修复部分已知bug</p><p>建议尽快更新到最新版本。</p>', 1, 'M', 1, NULL, 1, 1, '2024-12-05 15:30:00', NULL, 1, '2024-12-05 15:30:00', 1, '2024-12-05 15:30:00', 0);
INSERT INTO `sys_notice` VALUES (7, '年终总结会议通知', '<p>📋 年终总结会议通知</p><p>各部门年终总结会议将于 <strong>2024年12月30日上午9:00</strong> 召开。</p><p>请各部门负责人提前准备好年度工作总结和下年度工作计划。</p><p>会议地点:总部大会议室</p>', 5, 'M', 2, '1,2', 1, 1, '2024-12-22 10:00:00', NULL, 1, '2024-12-22 10:00:00', 1, '2024-12-22 10:00:00', 0);
INSERT INTO `sys_notice` VALUES (8, '系统功能优化完成', '<p>✅ 系统功能优化</p><p>已完成以下功能优化:</p><p>1. 优化用户管理界面,提升操作体验</p><p>2. 增强数据导出功能,支持更多格式</p><p>3. 优化搜索功能,提升查询效率</p><p>4. 修复部分界面显示问题</p>', 1, 'L', 1, NULL, 1, 1, '2024-12-12 14:20:00', NULL, 1, '2024-12-12 14:20:00', 1, '2024-12-12 14:20:00', 0);
INSERT INTO `sys_notice` VALUES (9, '员工培训计划', '<p>📚 员工培训计划</p><p>为提升员工专业技能,公司将于 <strong>2025年1月8日-10日</strong> 组织技术培训。</p><p>培训内容:</p><p>1. 新技术框架应用</p><p>2. 代码规范与最佳实践</p><p>3. 系统架构设计</p><p>请各部门合理安排工作,确保培训顺利进行。</p>', 5, 'M', 1, NULL, 1, 1, '2024-12-20 09:30:00', NULL, 1, '2024-12-20 09:30:00', 1, '2024-12-20 09:30:00', 0);
INSERT INTO `sys_notice` VALUES (10, '数据备份提醒', '<p>💾 数据备份提醒</p><p>请各部门注意定期备份重要数据,建议每周至少备份一次。</p><p>备份方式:</p><p>1. 使用系统自带备份功能</p><p>2. 手动导出重要数据</p><p>3. 联系IT部门协助备份</p><p>数据安全,人人有责!</p>', 3, 'L', 1, NULL, 1, 1, '2024-12-08 08:00:00', NULL, 1, '2024-12-08 08:00:00', 1, '2024-12-08 08:00:00', 0);
-- ----------------------------
-- 用户通知公告表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_notice`;
CREATE TABLE `sys_user_notice` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`notice_id` bigint NOT NULL COMMENT '公共通知id',
`user_id` bigint NOT NULL COMMENT '用户id',
`is_read` tinyint DEFAULT '0' COMMENT '读取状态(0: 未读, 1: 已读)',
`read_time` datetime COMMENT '阅读时间',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime COMMENT '更新时间',
`is_deleted` tinyint DEFAULT '0' COMMENT '逻辑删除(0: 未删除, 1: 已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户通知公告关联表';
INSERT INTO `sys_user_notice` VALUES (1, 1, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (2, 2, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (3, 3, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (4, 4, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (5, 5, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (6, 6, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (7, 7, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (8, 8, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (9, 9, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (10, 10, 2, 1, NULL, now(), now(), 0);
-- ----------------------------
-- Table structure for sys_user_social
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_social`;
CREATE TABLE `sys_user_social` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`platform` varchar(20) NOT NULL COMMENT '平台类型(WECHAT_MINI/WECHAT_MP/ALIPAY/QQ/APPLE)',
`openid` varchar(64) NOT NULL COMMENT '平台openid',
`unionid` varchar(64) DEFAULT NULL COMMENT '微信unionid',
`nickname` varchar(64) DEFAULT NULL COMMENT '第三方昵称',
`avatar` varchar(255) DEFAULT NULL COMMENT '第三方头像URL',
`session_key` varchar(128) DEFAULT NULL COMMENT '微信session_key',
`verified` tinyint(1) DEFAULT 1 COMMENT '是否已验证(1-已验证 0-未验证)',
`create_time` datetime DEFAULT NULL COMMENT '绑定时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_platform_openid` (`platform`, `openid`),
KEY `idx_user_id` (`user_id`),
KEY `idx_unionid` (`unionid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户第三方账号绑定表';
+524
View File
@@ -0,0 +1,524 @@
# YouLai_Admin (MySQL 5.7 ~ MySQL 8.x)
# Copyright (c) 2021-present, youlai.tech
-- ----------------------------
-- 1. 创建数据库
-- ----------------------------
CREATE DATABASE IF NOT EXISTS youlai_admin_template CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
-- ----------------------------
-- 2. 创建表 && 数据初始化
-- ----------------------------
USE youlai_admin_template;
SET NAMES utf8mb4; #
SET FOREIGN_KEY_CHECKS = 0; #
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(100) NOT NULL COMMENT '部门名称',
`code` varchar(100) NOT NULL COMMENT '部门编号',
`parent_id` bigint DEFAULT 0 COMMENT '父节点id',
`tree_path` varchar(255) NOT NULL COMMENT '父节点id路径',
`sort` smallint DEFAULT 0 COMMENT '显示顺序',
`status` tinyint DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
`create_by` bigint NULL COMMENT '创建人ID',
`create_time` datetime NULL COMMENT '创建时间',
`update_by` bigint NULL COMMENT '修改人ID',
`update_time` datetime NULL COMMENT '更新时间',
`is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除标识(1-已删除 0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '部门编号唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '部门管理表';
-- ----------------------------
-- Records of sys_dept
-- ----------------------------
INSERT INTO `sys_dept` VALUES (1, '有来技术', 'YOULAI', 0, '0', 1, 1, 1, NULL, 1, now(), 0);
INSERT INTO `sys_dept` VALUES (2, '研发部门', 'RD001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0);
INSERT INTO `sys_dept` VALUES (3, '测试部门', 'QA001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0);
-- ----------------------------
-- Table structure for sys_dict
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键 ',
`dict_code` varchar(50) COMMENT '类型编码',
`name` varchar(50) COMMENT '类型名称',
`status` tinyint(1) DEFAULT '0' COMMENT '状态(0:正常;1:禁用)',
`remark` varchar(255) COMMENT '备注',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '修改人ID',
`is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(1-删除,0-未删除)',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_dict_code` (`dict_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据字典类型表';
-- ----------------------------
-- Records of sys_dict
-- ----------------------------
INSERT INTO `sys_dict` VALUES (1, 'gender', '性别', 1, NULL, now() , 1,now(), 1,0);
INSERT INTO `sys_dict` VALUES (2, 'notice_type', '通知类型', 1, NULL, now(), 1,now(), 1,0);
INSERT INTO `sys_dict` VALUES (3, 'notice_level', '通知级别', 1, NULL, now(), 1,now(), 1,0);
-- ----------------------------
-- Table structure for sys_dict_item
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_item`;
CREATE TABLE `sys_dict_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`dict_code` varchar(50) COMMENT '关联字典编码,与sys_dict表中的dict_code对应',
`value` varchar(50) COMMENT '字典项值',
`label` varchar(100) COMMENT '字典项标签',
`tag_type` varchar(50) COMMENT '标签类型,用于前端样式展示(如success、warning等)',
`status` tinyint DEFAULT '0' COMMENT '状态(1-正常,0-禁用)',
`sort` int DEFAULT '0' COMMENT '排序',
`remark` varchar(255) COMMENT '备注',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '修改人ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据字典项表';
-- ----------------------------
-- Records of sys_dict_item
-- ----------------------------
INSERT INTO `sys_dict_item` VALUES (1, 'gender', '1', '', 'primary', 1, 1, NULL, now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (2, 'gender', '2', '', 'danger', 1, 2, NULL, now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (3, 'gender', '0', '保密', 'info', 1, 3, NULL, now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (4, 'notice_type', '1', '系统升级', 'success', 1, 1, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (5, 'notice_type', '2', '系统维护', 'primary', 1, 2, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (6, 'notice_type', '3', '安全警告', 'danger', 1, 3, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (7, 'notice_type', '4', '假期通知', 'success', 1, 4, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (8, 'notice_type', '5', '公司新闻', 'primary', 1, 5, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (9, 'notice_type', '99', '其他', 'info', 1, 99, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (10, 'notice_level', 'L', '', 'info', 1, 1, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (11, 'notice_level', 'M', '', 'warning', 1, 2, '', now(), 1,now(),1);
INSERT INTO `sys_dict_item` VALUES (12, 'notice_level', 'H', '', 'danger', 1, 3, '', now(), 1,now(),1);
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`parent_id` bigint NOT NULL COMMENT '父菜单ID',
`tree_path` varchar(255) COMMENT '父节点ID路径',
`name` varchar(64) NOT NULL COMMENT '菜单名称',
`type` char(1) NOT NULL COMMENT '菜单类型(C-目录 M-菜单 B-按钮)',
`route_name` varchar(255) COMMENT '路由名称(Vue Router 中用于命名路由)',
`route_path` varchar(128) COMMENT '路由路径(Vue Router 中定义的 URL 路径)',
`component` varchar(128) COMMENT '组件路径(组件页面完整路径,相对于 src/views/,缺省后缀 .vue',
`perm` varchar(128) COMMENT '【按钮】权限标识',
`always_show` tinyint DEFAULT 0 COMMENT '【目录】只有一个子路由是否始终显示(1-是 0-否)',
`keep_alive` tinyint DEFAULT 0 COMMENT '【菜单】是否开启页面缓存(1-是 0-否)',
`visible` tinyint(1) DEFAULT 1 COMMENT '显示状态(1-显示 0-隐藏)',
`sort` int DEFAULT 0 COMMENT '排序',
`icon` varchar(64) COMMENT '菜单图标',
`redirect` varchar(128) COMMENT '跳转路径',
`create_time` datetime NULL COMMENT '创建时间',
`update_time` datetime NULL COMMENT '更新时间',
`params` varchar(255) NULL COMMENT '路由参数',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统菜单表';
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
-- 顶级目录:系统管理/代码生成/平台文档/接口文档
INSERT INTO `sys_menu` VALUES (1, 0, '0', '系统管理', 'C', '', '/system', 'Layout', NULL, NULL, NULL, 1, 1, 'system', '/system/user', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2, 0, '0', '代码生成', 'C', '', '/codegen', 'Layout', NULL, NULL, NULL, 1, 2, 'code', '/codegen/index', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (4, 0, '0', '平台文档', 'C', '', '/doc', 'Layout', NULL, NULL, NULL, 1, 4, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (5, 0, '0', '接口文档', 'C', '', '/api', 'Layout', NULL, NULL, NULL, 1, 5, 'api', '', now(), now(), NULL);
-- 系统管理
INSERT INTO `sys_menu` VALUES (210, 1, '0,1', '用户管理', 'M', 'User', 'user', 'system/user/index', NULL, NULL, 1, 1, 1, 'el-icon-User', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2101, 210, '0,1,210', '用户查询', 'B', NULL, '', NULL, 'sys:user:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2102, 210, '0,1,210', '用户新增', 'B', NULL, '', NULL, 'sys:user:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2103, 210, '0,1,210', '用户编辑', 'B', NULL, '', NULL, 'sys:user:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2104, 210, '0,1,210', '用户删除', 'B', NULL, '', NULL, 'sys:user:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2105, 210, '0,1,210', '重置密码', 'B', NULL, '', NULL, 'sys:user:reset-password', NULL, NULL, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2106, 210, '0,1,210', '用户导入', 'B', NULL, '', NULL, 'sys:user:import', NULL, NULL, 1, 6, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2107, 210, '0,1,210', '用户导出', 'B', NULL, '', NULL, 'sys:user:export', NULL, NULL, 1, 7, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (220, 1, '0,1', '角色管理', 'M', 'Role', 'role', 'system/role/index', NULL, NULL, 1, 1, 2, 'role', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2201, 220, '0,1,220', '角色查询', 'B', NULL, '', NULL, 'sys:role:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2202, 220, '0,1,220', '角色新增', 'B', NULL, '', NULL, 'sys:role:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2203, 220, '0,1,220', '角色编辑', 'B', NULL, '', NULL, 'sys:role:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2204, 220, '0,1,220', '角色删除', 'B', NULL, '', NULL, 'sys:role:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2205, 220, '0,1,220', '角色分配权限', 'B', NULL, '', NULL, 'sys:role:assign', NULL, NULL, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (230, 1, '0,1', '菜单管理', 'M', 'SysMenu', 'menu', 'system/menu/index', NULL, NULL, 1, 1, 3, 'menu', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2301, 230, '0,1,230', '菜单查询', 'B', NULL, '', NULL, 'sys:menu:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2302, 230, '0,1,230', '菜单新增', 'B', NULL, '', NULL, 'sys:menu:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2303, 230, '0,1,230', '菜单编辑', 'B', NULL, '', NULL, 'sys:menu:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2304, 230, '0,1,230', '菜单删除', 'B', NULL, '', NULL, 'sys:menu:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (240, 1, '0,1', '部门管理', 'M', 'Dept', 'dept', 'system/dept/index', NULL, NULL, 1, 1, 4, 'tree', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2401, 240, '0,1,240', '部门查询', 'B', NULL, '', NULL, 'sys:dept:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2402, 240, '0,1,240', '部门新增', 'B', NULL, '', NULL, 'sys:dept:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2403, 240, '0,1,240', '部门编辑', 'B', NULL, '', NULL, 'sys:dept:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2404, 240, '0,1,240', '部门删除', 'B', NULL, '', NULL, 'sys:dept:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (250, 1, '0,1', '字典管理', 'M', 'Dict', 'dict', 'system/dict/index', NULL, NULL, 1, 1, 5, 'dict', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2501, 250, '0,1,250', '字典查询', 'B', NULL, '', NULL, 'sys:dict:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2502, 250, '0,1,250', '字典新增', 'B', NULL, '', NULL, 'sys:dict:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2503, 250, '0,1,250', '字典编辑', 'B', NULL, '', NULL, 'sys:dict:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2504, 250, '0,1,250', '字典删除', 'B', NULL, '', NULL, 'sys:dict:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (251, 1, '0,1', '字典项', 'M', 'DictItem', 'dict-item', 'system/dict/dict-item', NULL, 0, 1, 0, 6, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2511, 251, '0,1,251', '字典项查询', 'B', NULL, '', NULL, 'sys:dict-item:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2512, 251, '0,1,251', '字典项新增', 'B', NULL, '', NULL, 'sys:dict-item:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2513, 251, '0,1,251', '字典项编辑', 'B', NULL, '', NULL, 'sys:dict-item:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2514, 251, '0,1,251', '字典项删除', 'B', NULL, '', NULL, 'sys:dict-item:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (260, 1, '0,1', '系统日志', 'M', 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 7, 'document', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (270, 1, '0,1', '系统配置', 'M', 'Config', 'config', 'system/config/index', NULL, 0, 1, 1, 8, 'setting', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2701, 270, '0,1,270', '系统配置查询', 'B', NULL, '', NULL, 'sys:config:list', 0, 1, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2702, 270, '0,1,270', '系统配置新增', 'B', NULL, '', NULL, 'sys:config:create', 0, 1, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2703, 270, '0,1,270', '系统配置修改', 'B', NULL, '', NULL, 'sys:config:update', 0, 1, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2704, 270, '0,1,270', '系统配置删除', 'B', NULL, '', NULL, 'sys:config:delete', 0, 1, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2705, 270, '0,1,270', '系统配置刷新', 'B', NULL, '', NULL, 'sys:config:refresh', 0, 1, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (280, 1, '0,1', '通知公告', 'M', 'Notice', 'notice', 'system/notice/index', NULL, NULL, NULL, 1, 9, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2801, 280, '0,1,280', '通知查询', 'B', NULL, '', NULL, 'sys:notice:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2802, 280, '0,1,280', '通知新增', 'B', NULL, '', NULL, 'sys:notice:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2803, 280, '0,1,280', '通知编辑', 'B', NULL, '', NULL, 'sys:notice:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2804, 280, '0,1,280', '通知删除', 'B', NULL, '', NULL, 'sys:notice:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2805, 280, '0,1,280', '通知发布', 'B', NULL, '', NULL, 'sys:notice:publish', 0, 1, 1, 5, '', NULL, now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (2806, 280, '0,1,280', '通知撤回', 'B', NULL, '', NULL, 'sys:notice:revoke', 0, 1, 1, 6, '', NULL, now(), now(), NULL);
-- 代码生成
INSERT INTO `sys_menu` VALUES (310, 2, '0,2', '代码生成', 'M', 'Codegen', 'codegen', 'codegen/index', NULL, NULL, 1, 1, 1, 'code', NULL, now(), now(), NULL);
-- 平台文档(外链通过 route_path 识别)
INSERT INTO `sys_menu` VALUES (501, 4, '0,4', '平台文档(外链)', 'M', NULL, 'https://juejin.cn/post/7228990409909108793', '', NULL, NULL, NULL, 1, 1, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (502, 4, '0,4', '后端文档', 'M', NULL, 'https://youlai.blog.csdn.net/article/details/145178880', '', NULL, NULL, NULL, 1, 2, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (503, 4, '0,4', '移动端文档', 'M', NULL, 'https://youlai.blog.csdn.net/article/details/143222890', '', NULL, NULL, NULL, 1, 3, 'document', '', now(), now(), NULL);
INSERT INTO `sys_menu` VALUES (504, 4, '0,4', '内部文档', 'M', NULL, 'internal-doc', 'demo/internal-doc', NULL, NULL, NULL, 1, 4, 'document', '', now(), now(), NULL);
-- 接口文档
INSERT INTO `sys_menu` VALUES (601, 5, '0,5', 'Apifox', 'M', 'Apifox', 'apifox', 'demo/api/apifox', NULL, NULL, 1, 1, 1, 'api', '', now(), now(), NULL);
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '角色名称',
`code` varchar(32) NOT NULL COMMENT '角色编码',
`sort` int NULL COMMENT '显示顺序',
`status` tinyint(1) DEFAULT 1 COMMENT '角色状态(1-正常 0-停用)',
`data_scope` tinyint NULL COMMENT '数据权限(1-所有数据 2-部门及子部门数据 3-本部门数据 4-本人数据 5-自定义部门数据)',
`create_by` bigint NULL COMMENT '创建人 ID',
`create_time` datetime NULL COMMENT '创建时间',
`update_by` bigint NULL COMMENT '更新人ID',
`update_time` datetime NULL COMMENT '更新时间',
`is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_name`(`name` ASC) USING BTREE COMMENT '角色名称唯一索引',
UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '角色编码唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统角色表';
-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES (1, '超级管理员', 'ROOT', 1, 1, 1, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (2, '系统管理员', 'ADMIN', 2, 1, 1, NULL, now(), NULL, NULL, 0);
INSERT INTO `sys_role` VALUES (3, '访问游客', 'GUEST', 3, 1, 3, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (4, '部门主管', 'DEPT_MANAGER', 4, 1, 2, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (5, '部门成员', 'DEPT_MEMBER', 5, 1, 3, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (6, '普通员工', 'EMPLOYEE', 6, 1, 4, NULL, now(), NULL, now(), 0);
INSERT INTO `sys_role` VALUES (7, '自定义权限用户', 'CUSTOM_USER', 7, 1, 5, NULL, now(), NULL, now(), 0);
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
`role_id` bigint NOT NULL COMMENT '角色ID',
`menu_id` bigint NOT NULL COMMENT '菜单ID',
UNIQUE INDEX `uk_roleid_menuid`(`role_id` ASC, `menu_id` ASC) USING BTREE COMMENT '角色菜单唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色菜单关联表';
-- ----------------------------
-- Table structure for sys_role_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_dept`;
CREATE TABLE `sys_role_dept` (
`role_id` bigint NOT NULL COMMENT '角色ID',
`dept_id` bigint NOT NULL COMMENT '部门ID',
UNIQUE INDEX `uk_roleid_deptid`(`role_id` ASC, `dept_id` ASC) USING BTREE COMMENT '角色部门唯一索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色部门关联表';
-- ----------------------------
-- Records of sys_role_dept
-- ----------------------------
INSERT IGNORE INTO `sys_role_dept` VALUES (7, 1);
INSERT IGNORE INTO `sys_role_dept` VALUES (7, 2);
-- ============================================
-- 系统管理员角色菜单权限(role_id=2)
-- 顶级目录
INSERT INTO `sys_role_menu` VALUES (2, 1), (2, 2), (2, 4), (2, 5);
-- 系统管理
INSERT INTO `sys_role_menu` VALUES (2, 210), (2, 2101), (2, 2102), (2, 2103), (2, 2104), (2, 2105), (2, 2106), (2, 2107);
INSERT INTO `sys_role_menu` VALUES (2, 220), (2, 2201), (2, 2202), (2, 2203), (2, 2204), (2, 2205);
INSERT INTO `sys_role_menu` VALUES (2, 230), (2, 2301), (2, 2302), (2, 2303), (2, 2304);
INSERT INTO `sys_role_menu` VALUES (2, 240), (2, 2401), (2, 2402), (2, 2403), (2, 2404);
INSERT INTO `sys_role_menu` VALUES (2, 250), (2, 2501), (2, 2502), (2, 2503), (2, 2504);
INSERT INTO `sys_role_menu` VALUES (2, 251), (2, 2511), (2, 2512), (2, 2513), (2, 2514);
INSERT INTO `sys_role_menu` VALUES (2, 260), (2, 2601);
INSERT INTO `sys_role_menu` VALUES (2, 270), (2, 2701), (2, 2702), (2, 2703), (2, 2704), (2, 2705);
INSERT INTO `sys_role_menu` VALUES (2, 280), (2, 2801), (2, 2802), (2, 2803), (2, 2804), (2, 2805), (2, 2806);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 210), (4, 2101), (4, 2102), (4, 2103), (4, 2104), (4, 2105), (4, 2106), (4, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 220), (4, 2201), (4, 2202), (4, 2203), (4, 2204), (4, 2205);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 210), (5, 2101), (5, 2102), (5, 2103), (5, 2104), (5, 2105), (5, 2106), (5, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 220), (5, 2201), (5, 2202), (5, 2203), (5, 2204), (5, 2205);
INSERT IGNORE INTO `sys_role_menu` VALUES (6, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (6, 210), (6, 2101), (6, 2102), (6, 2103), (6, 2104), (6, 2105), (6, 2106), (6, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (6, 220), (6, 2201), (6, 2202), (6, 2203), (6, 2204), (6, 2205);
INSERT IGNORE INTO `sys_role_menu` VALUES (7, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (7, 210), (7, 2101), (7, 2102), (7, 2103), (7, 2104), (7, 2105), (7, 2106), (7, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (7, 220), (7, 2201), (7, 2202), (7, 2203), (7, 2204), (7, 2205);
-- 代码生成
INSERT INTO `sys_role_menu` VALUES (2, 310);
-- 平台文档
INSERT INTO `sys_role_menu` VALUES (2, 501), (2, 502), (2, 503), (2, 504);
-- 接口文档
INSERT INTO `sys_role_menu` VALUES (2, 601);
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(64) COMMENT '用户名',
`nickname` varchar(64) COMMENT '昵称',
`gender` tinyint(1) DEFAULT 1 COMMENT '性别((1-男 2-女 0-保密)',
`password` varchar(100) COMMENT '密码',
`dept_id` int COMMENT '部门ID',
`avatar` varchar(255) COMMENT '用户头像',
`mobile` varchar(20) COMMENT '联系方式',
`status` tinyint(1) DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
`email` varchar(128) COMMENT '用户邮箱',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '修改人ID',
`is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统用户表';
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 'root', '有来技术', 0, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', NULL, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345677', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (2, 'admin', '系统管理员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18888888888', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (3, 'test', '测试小用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345679', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (4, 'dept_manager', '部门主管', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345680', 1, 'manager@youlaitech.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (5, 'dept_member', '部门成员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345681', 1, 'member@youlaitech.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (6, 'employee', '普通员工', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 2, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345682', 1, 'employee@youlaitech.com', now(), NULL, now(), NULL, 0);
INSERT INTO `sys_user` VALUES (7, 'custom_user', '自定义权限用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345683', 1, 'custom@youlaitech.com', now(), NULL, now(), NULL, 0);
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`user_id` bigint NOT NULL COMMENT '用户ID',
`role_id` bigint NOT NULL COMMENT '角色ID',
PRIMARY KEY (`user_id`, `role_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '用户角色关联表';
-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES (1, 1);
INSERT INTO `sys_user_role` VALUES (2, 2);
INSERT INTO `sys_user_role` VALUES (3, 3);
INSERT IGNORE INTO `sys_user_role` VALUES (4, 4);
INSERT IGNORE INTO `sys_user_role` VALUES (5, 5);
INSERT IGNORE INTO `sys_user_role` VALUES (6, 6);
INSERT IGNORE INTO `sys_user_role` VALUES (7, 7);
-- ----------------------------
-- Table structure for sys_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`module` TINYINT NOT NULL COMMENT '模块,数字枚举,参考 LogModule 枚举',
`action_type` TINYINT NOT NULL COMMENT '操作类型,数字枚举,参考 ActionType 枚举',
`title` VARCHAR(100) NOT NULL COMMENT '前端显示标题',
`content` TEXT COMMENT '自定义日志内容',
`operator_id` BIGINT COMMENT '操作人ID',
`operator_name` VARCHAR(50) COMMENT '操作人名称',
`request_uri` VARCHAR(255) COMMENT '请求路径',
`request_method` VARCHAR(10) COMMENT '请求方法',
`ip` VARCHAR(45) COMMENT 'IP地址',
`province` VARCHAR(100) COMMENT '省份',
`city` VARCHAR(100) COMMENT '城市',
`device` VARCHAR(100) COMMENT '设备',
`os` VARCHAR(100) COMMENT '操作系统',
`browser` VARCHAR(100) COMMENT '浏览器',
`status` TINYINT DEFAULT 1 COMMENT '0失败 1成功',
`error_msg` VARCHAR(255) COMMENT '错误信息',
`execution_time` INT COMMENT '执行时间(ms)',
`create_time` DATETIME COMMENT '操作时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_module_action_time` (`module`, `action_type`, `create_time`),
KEY `idx_operator_time` (`operator_id`, `create_time`),
KEY `idx_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统操作日志表';
-- ----------------------------
-- Table structure for gen_table
-- ----------------------------
DROP TABLE IF EXISTS `gen_table`;
CREATE TABLE `gen_table` (
`id` bigint NOT NULL AUTO_INCREMENT,
`table_name` varchar(100) NOT NULL COMMENT '表名',
`module_name` varchar(100) COMMENT '模块名',
`package_name` varchar(255) NOT NULL COMMENT '包名',
`business_name` varchar(100) NOT NULL COMMENT '业务名',
`entity_name` varchar(100) NOT NULL COMMENT '实体类名',
`author` varchar(50) NOT NULL COMMENT '作者',
`parent_menu_id` bigint COMMENT '上级菜单ID,对应sys_menu的id ',
`remove_table_prefix` varchar(20) COMMENT '要移除的表前缀,如: sys_',
`page_type` varchar(20) COMMENT '页面类型(classic|curd)',
`create_time` datetime COMMENT '创建时间',
`update_time` datetime COMMENT '更新时间',
`is_deleted` tinyint(4) DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tablename` (`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成配置表';
-- ----------------------------
-- Table structure for gen_table_column
-- ----------------------------
DROP TABLE IF EXISTS `gen_table_column`;
CREATE TABLE `gen_table_column` (
`id` bigint NOT NULL AUTO_INCREMENT,
`table_id` bigint NOT NULL COMMENT '关联的表配置ID',
`column_name` varchar(100) ,
`column_type` varchar(50) ,
`column_length` int ,
`field_name` varchar(100) NOT NULL COMMENT '字段名称',
`field_type` varchar(100) COMMENT '字段类型',
`field_sort` int COMMENT '字段排序',
`field_comment` varchar(255) COMMENT '字段描述',
`max_length` int ,
`is_required` tinyint(1) COMMENT '是否必填',
`is_show_in_list` tinyint(1) DEFAULT '0' COMMENT '是否在列表显示',
`is_show_in_form` tinyint(1) DEFAULT '0' COMMENT '是否在表单显示',
`is_show_in_query` tinyint(1) DEFAULT '0' COMMENT '是否在查询条件显示',
`query_type` tinyint COMMENT '查询方式',
`form_type` tinyint COMMENT '表单类型',
`dict_type` varchar(50) COMMENT '字典类型',
`create_time` datetime COMMENT '创建时间',
`update_time` datetime COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_table_id` (`table_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成字段配置表';
-- ----------------------------
-- 系统配置表
-- ----------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`config_name` varchar(50) NOT NULL COMMENT '配置名称',
`config_key` varchar(50) NOT NULL COMMENT '配置key',
`config_value` text NOT NULL COMMENT '配置值',
`remark` varchar(255) COMMENT '备注',
`create_time` datetime COMMENT '创建时间',
`create_by` bigint COMMENT '创建人ID',
`update_time` datetime COMMENT '更新时间',
`update_by` bigint COMMENT '更新人ID',
`is_deleted` tinyint(4) DEFAULT '0' NOT NULL COMMENT '逻辑删除标识(0-未删除 1-已删除)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='系统配置表';
INSERT INTO `sys_config` VALUES (1, '系统限流QPS', 'IP_QPS_THRESHOLD_LIMIT', '10', '单个IP请求的最大每秒查询数(QPS)阈值Key', now(), 1, NULL, NULL, 0);
-- ----------------------------
-- 通知公告表
-- ----------------------------
DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice` (
`id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(50) COMMENT '通知标题',
`content` text COMMENT '通知内容',
`type` tinyint NOT NULL COMMENT '通知类型(关联字典编码:notice_type',
`level` varchar(5) NOT NULL COMMENT '通知等级(字典codenotice_level',
`target_type` tinyint NOT NULL COMMENT '目标类型(1: 全体, 2: 指定)',
`target_user_ids` varchar(255) COMMENT '目标人ID集合(多个使用英文逗号,分割)',
`publisher_id` bigint COMMENT '发布人ID',
`publish_status` tinyint DEFAULT '0' COMMENT '发布状态(0: 未发布, 1: 已发布, -1: 已撤回)',
`publish_time` datetime COMMENT '发布时间',
`revoke_time` datetime COMMENT '撤回时间',
`create_by` bigint NOT NULL COMMENT '创建人ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` bigint COMMENT '更新人ID',
`update_time` datetime COMMENT '更新时间',
`is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除(0: 未删除, 1: 已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统通知公告表';
INSERT INTO `sys_notice` VALUES (1, 'v3.0.0 版本发布 - 多租户功能上线', '<p>🎉 新版本发布,主要更新内容:</p><p>1. 新增多租户功能,支持租户隔离和数据管理</p><p>2. 优化系统性能,提升响应速度</p><p>3. 完善权限管理,增强安全性</p><p>4. 修复已知问题,提升系统稳定性</p>', 1, 'H', 1, NULL, 1, 1, '2024-12-15 10:00:00', NULL, 1, '2024-12-15 10:00:00', 1, '2024-12-15 10:00:00', 0);
INSERT INTO `sys_notice` VALUES (2, '系统维护通知 - 2024年12月20日', '<p>⏰ 系统维护通知</p><p>系统将于 <strong>2024年12月20日(本周五)凌晨 2:00-4:00</strong> 进行例行维护升级。</p><p>维护期间系统将暂停服务,请提前做好数据备份工作。</p><p>给您带来的不便,敬请谅解!</p>', 2, 'H', 1, NULL, 1, 1, '2024-12-18 14:30:00', NULL, 1, '2024-12-18 14:30:00', 1, '2024-12-18 14:30:00', 0);
INSERT INTO `sys_notice` VALUES (3, '安全提醒 - 防范钓鱼邮件', '<p>⚠️ 安全提醒</p><p>近期发现有不法分子通过钓鱼邮件进行网络攻击,请大家提高警惕:</p><p>1. 不要点击来源不明的邮件链接</p><p>2. 不要下载可疑附件</p><p>3. 遇到可疑邮件请及时联系IT部门</p><p>4. 定期修改密码,使用强密码策略</p>', 3, 'H', 1, NULL, 1, 1, '2024-12-10 09:00:00', NULL, 1, '2024-12-10 09:00:00', 1, '2024-12-10 09:00:00', 0);
INSERT INTO `sys_notice` VALUES (4, '元旦假期安排通知', '<p>📅 元旦假期安排</p><p>根据国家法定节假日安排,公司元旦假期时间为:</p><p><strong>2024年12月30日(周一)至 2025年1月1日(周三)</strong>,共3天。</p><p>2024年12月29日(周日)正常上班。</p><p>祝大家元旦快乐,假期愉快!</p>', 4, 'M', 1, NULL, 1, 1, '2024-12-25 16:00:00', NULL, 1, '2024-12-25 16:00:00', 1, '2024-12-25 16:00:00', 0);
INSERT INTO `sys_notice` VALUES (5, '新产品发布会邀请', '<p>🎊 新产品发布会邀请</p><p>公司将于 <strong>2025年1月15日下午14:00</strong> 在总部会议室举办新产品发布会。</p><p>届时将展示最新研发的产品和技术成果,欢迎全体员工参加。</p><p>请各部门提前安排好工作,准时参加。</p>', 5, 'M', 1, NULL, 1, 1, '2024-12-28 11:00:00', NULL, 1, '2024-12-28 11:00:00', 1, '2024-12-28 11:00:00', 0);
INSERT INTO `sys_notice` VALUES (6, 'v2.16.1 版本更新', '<p>✨ 版本更新</p><p>v2.16.1 版本已发布,主要修复内容:</p><p>1. 修复 WebSocket 重复连接导致的后台线程阻塞问题</p><p>2. 优化通知公告功能,提升用户体验</p><p>3. 修复部分已知bug</p><p>建议尽快更新到最新版本。</p>', 1, 'M', 1, NULL, 1, 1, '2024-12-05 15:30:00', NULL, 1, '2024-12-05 15:30:00', 1, '2024-12-05 15:30:00', 0);
INSERT INTO `sys_notice` VALUES (7, '年终总结会议通知', '<p>📋 年终总结会议通知</p><p>各部门年终总结会议将于 <strong>2024年12月30日上午9:00</strong> 召开。</p><p>请各部门负责人提前准备好年度工作总结和下年度工作计划。</p><p>会议地点:总部大会议室</p>', 5, 'M', 2, '1,2', 1, 1, '2024-12-22 10:00:00', NULL, 1, '2024-12-22 10:00:00', 1, '2024-12-22 10:00:00', 0);
INSERT INTO `sys_notice` VALUES (8, '系统功能优化完成', '<p>✅ 系统功能优化</p><p>已完成以下功能优化:</p><p>1. 优化用户管理界面,提升操作体验</p><p>2. 增强数据导出功能,支持更多格式</p><p>3. 优化搜索功能,提升查询效率</p><p>4. 修复部分界面显示问题</p>', 1, 'L', 1, NULL, 1, 1, '2024-12-12 14:20:00', NULL, 1, '2024-12-12 14:20:00', 1, '2024-12-12 14:20:00', 0);
INSERT INTO `sys_notice` VALUES (9, '员工培训计划', '<p>📚 员工培训计划</p><p>为提升员工专业技能,公司将于 <strong>2025年1月8日-10日</strong> 组织技术培训。</p><p>培训内容:</p><p>1. 新技术框架应用</p><p>2. 代码规范与最佳实践</p><p>3. 系统架构设计</p><p>请各部门合理安排工作,确保培训顺利进行。</p>', 5, 'M', 1, NULL, 1, 1, '2024-12-20 09:30:00', NULL, 1, '2024-12-20 09:30:00', 1, '2024-12-20 09:30:00', 0);
INSERT INTO `sys_notice` VALUES (10, '数据备份提醒', '<p>💾 数据备份提醒</p><p>请各部门注意定期备份重要数据,建议每周至少备份一次。</p><p>备份方式:</p><p>1. 使用系统自带备份功能</p><p>2. 手动导出重要数据</p><p>3. 联系IT部门协助备份</p><p>数据安全,人人有责!</p>', 3, 'L', 1, NULL, 1, 1, '2024-12-08 08:00:00', NULL, 1, '2024-12-08 08:00:00', 1, '2024-12-08 08:00:00', 0);
-- ----------------------------
-- 用户通知公告表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_notice`;
CREATE TABLE `sys_user_notice` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`notice_id` bigint NOT NULL COMMENT '公共通知id',
`user_id` bigint NOT NULL COMMENT '用户id',
`is_read` bigint DEFAULT '0' COMMENT '读取状态(0: 未读, 1: 已读)',
`read_time` datetime COMMENT '阅读时间',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime COMMENT '更新时间',
`is_deleted` tinyint DEFAULT '0' COMMENT '逻辑删除(0: 未删除, 1: 已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户通知公告关联表';
INSERT INTO `sys_user_notice` VALUES (1, 1, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (2, 2, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (3, 3, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (4, 4, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (5, 5, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (6, 6, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (7, 7, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (8, 8, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (9, 9, 2, 1, NULL, now(), now(), 0);
INSERT INTO `sys_user_notice` VALUES (10, 10, 2, 1, NULL, now(), now(), 0);