877 lines
47 KiB
SQL
877 lines
47 KiB
SQL
-- ============================================
|
||
-- 数据库初始化脚本 (合并版本)
|
||
-- 包含所有表结构、索引和基础数据
|
||
-- 创建时间: 2026-06-05
|
||
-- ============================================
|
||
|
||
-- +goose Up
|
||
|
||
SET NAMES utf8mb4;
|
||
SET FOREIGN_KEY_CHECKS = 0;
|
||
|
||
-- -------------------------------------------
|
||
-- 用户相关表
|
||
-- -------------------------------------------
|
||
|
||
-- 用户主表:存储用户基本信息、实名状态、风控状态等
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
phone VARCHAR(32) NOT NULL COMMENT '手机号',
|
||
nickname VARCHAR(64) NOT NULL DEFAULT '' COMMENT '昵称',
|
||
avatar_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '头像URL',
|
||
realname_status VARCHAR(32) NOT NULL DEFAULT 'unverified' COMMENT '实名状态: unverified未实名, pending审核中, verified已实名, failed失败',
|
||
risk_status VARCHAR(32) NOT NULL DEFAULT 'normal' COMMENT '风控状态: normal正常, warning警告, frozen冻结',
|
||
credit_score INT NOT NULL DEFAULT 100 COMMENT '信用分',
|
||
deposit_free_quota_cent BIGINT NOT NULL DEFAULT 0 COMMENT '免押总额度(分)',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT '账号状态: active活跃, inactive停用, banned封禁',
|
||
last_login_at DATETIME NULL COMMENT '最后登录时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_users_phone (phone),
|
||
KEY idx_users_realname_status (realname_status, status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||
|
||
-- 用户实名认证记录表
|
||
CREATE TABLE IF NOT EXISTS user_realname (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
|
||
provider VARCHAR(32) NOT NULL COMMENT '认证服务商',
|
||
provider_order_no VARCHAR(128) NOT NULL DEFAULT '' COMMENT '服务商订单号',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '认证状态: pending待处理, success成功, failed失败',
|
||
masked_name VARCHAR(64) NOT NULL DEFAULT '' COMMENT '脱敏姓名',
|
||
encrypted_name VARCHAR(255) NOT NULL DEFAULT '' COMMENT '加密的完整姓名',
|
||
masked_id_no VARCHAR(64) NOT NULL DEFAULT '' COMMENT '脱敏身份证号',
|
||
encrypted_id_no VARCHAR(255) NOT NULL DEFAULT '' COMMENT '加密的完整身份证号',
|
||
verified_at DATETIME NULL COMMENT '认证通过时间',
|
||
fail_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '失败原因',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_user_realname_user_id (user_id),
|
||
KEY idx_user_realname_provider_order_no (provider_order_no)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户实名认证记录';
|
||
|
||
-- -------------------------------------------
|
||
-- 游戏账号和商品表
|
||
-- -------------------------------------------
|
||
|
||
-- 游戏账号表:存储用户的游戏账号信息
|
||
CREATE TABLE IF NOT EXISTS game_accounts (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
owner_id BIGINT UNSIGNED NOT NULL COMMENT '账号所有者ID',
|
||
game_name VARCHAR(64) NOT NULL DEFAULT 'delta_force' COMMENT '游戏名称',
|
||
server_region VARCHAR(64) NOT NULL COMMENT '服务器区域',
|
||
login_platform VARCHAR(64) NOT NULL COMMENT '登录平台: steam/epic/wegame等',
|
||
title VARCHAR(128) NOT NULL COMMENT '账号标题',
|
||
description TEXT NULL COMMENT '账号描述',
|
||
rank_level VARCHAR(64) NOT NULL DEFAULT '' COMMENT '段位等级',
|
||
haf_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT 'HAF币数量',
|
||
asset_summary JSON NULL COMMENT '资产摘要(JSON格式)',
|
||
season_tags JSON NULL COMMENT '赛季标签(JSON数组)',
|
||
screenshot_urls JSON NULL COMMENT '截图URL列表(JSON数组)',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态: draft草稿, active使用中, deleted已删除',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY idx_game_accounts_owner_id (owner_id),
|
||
KEY idx_game_accounts_filter (game_name, server_region, login_platform)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏账号表';
|
||
|
||
-- 租号商品列表:用户发布的出租商品
|
||
CREATE TABLE IF NOT EXISTS rental_listings (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
listing_no VARCHAR(20) NOT NULL COMMENT '商品编号,格式yyyyMMddNNNN',
|
||
account_id BIGINT UNSIGNED NOT NULL COMMENT '关联的游戏账号ID',
|
||
owner_id BIGINT UNSIGNED NOT NULL COMMENT '号主ID',
|
||
price_cent BIGINT NOT NULL DEFAULT 0 COMMENT '租金(分/小时)',
|
||
deposit_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '押金金额(分)',
|
||
in_transaction TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否正在交易中: 0否, 1是',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '商品状态: draft草稿, active上架, offline下架, deleted删除',
|
||
review_status VARCHAR(32) NOT NULL DEFAULT 'none' COMMENT '审核状态: none无需审核, pending待审核, approved通过, rejected拒绝',
|
||
review_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '审核拒绝原因',
|
||
published_at DATETIME NULL COMMENT '发布时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_rental_listings_listing_no (listing_no),
|
||
KEY idx_rental_listings_account_id (account_id),
|
||
KEY idx_rental_listings_owner_id (owner_id),
|
||
KEY idx_rental_listings_filter (status, review_status, in_transaction, price_cent),
|
||
KEY idx_rental_listings_published (status, review_status, published_at DESC)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租号商品列表';
|
||
|
||
-- 商品编号日序列表:记录每天已分配的最大序号
|
||
CREATE TABLE IF NOT EXISTS listing_no_sequences (
|
||
biz_date CHAR(8) PRIMARY KEY COMMENT '业务日期yyyyMMdd',
|
||
next_seq INT NOT NULL DEFAULT 0 COMMENT '当日已分配最大序号',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品编号日序列表';
|
||
|
||
-- -------------------------------------------
|
||
-- 订单相关表
|
||
-- -------------------------------------------
|
||
|
||
-- 租号订单表:核心订单信息
|
||
CREATE TABLE IF NOT EXISTS rental_orders (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
order_no VARCHAR(64) NOT NULL COMMENT '订单号',
|
||
listing_id BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
|
||
account_id BIGINT UNSIGNED NOT NULL COMMENT '游戏账号ID',
|
||
owner_id BIGINT UNSIGNED NOT NULL COMMENT '号主ID',
|
||
renter_id BIGINT UNSIGNED NOT NULL COMMENT '租客ID',
|
||
rented_at DATETIME NULL COMMENT '租用开始时间',
|
||
estimated_duration_hours INT NOT NULL DEFAULT 24 COMMENT '预计租用时长(小时)',
|
||
rent_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '租金总额(分)',
|
||
owner_rent_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '号主实得租金(分)',
|
||
deposit_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '实际收取押金(分)',
|
||
deposit_original_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '商品原始押金(分)',
|
||
deposit_waived_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '免押抵扣金额(分)',
|
||
platform_fee_cent BIGINT NOT NULL DEFAULT 0 COMMENT '平台手续费(分)',
|
||
account_snapshot JSON NULL COMMENT '账号快照(下单时的账号状态)',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'pending_payment' COMMENT '订单状态: pending_payment待支付, active进行中, completed已完成, cancelled已取消, closed已关闭',
|
||
handoff_status VARCHAR(32) NOT NULL DEFAULT 'none' COMMENT '交接状态: none未开始, owner_delivered号主已交, renter_confirmed租客已确认, renter_returned租客已还, owner_received号主已收',
|
||
settlement_status VARCHAR(32) NOT NULL DEFAULT 'unsettled' COMMENT '结算状态: unsettled未结算, owner_settled号主已结算, settled完全结算',
|
||
refund_status VARCHAR(32) NOT NULL DEFAULT 'none' COMMENT '退款状态: none无退款, pending待退款, processing退款中, success退款成功, failed退款失败',
|
||
refund_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '退款金额(分)',
|
||
refunded_at DATETIME NULL COMMENT '退款完成时间',
|
||
owner_settled_at DATETIME NULL COMMENT '号主结算时间',
|
||
settled_at DATETIME NULL COMMENT '订单结算时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_rental_orders_order_no (order_no),
|
||
KEY idx_rental_orders_renter_status (renter_id, status),
|
||
KEY idx_rental_orders_owner_status (owner_id, status),
|
||
KEY idx_rental_orders_listing_id (listing_id),
|
||
KEY idx_rental_orders_refund_status (refund_status),
|
||
KEY idx_rental_orders_rented_at (status, rented_at),
|
||
KEY idx_rental_orders_status_created_at (status, created_at DESC),
|
||
KEY idx_rental_orders_settlement (settlement_status, owner_id, created_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租号订单表';
|
||
|
||
-- 订单结算记录表:记录租用完成后的结算信息
|
||
CREATE TABLE IF NOT EXISTS order_checkouts (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
|
||
initiated_by BIGINT UNSIGNED NOT NULL COMMENT '发起者ID',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'submitted' COMMENT '结算状态: submitted已提交, renter_confirmed租客确认, renter_rejected租客拒绝, completed完成',
|
||
rent_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '租金(分)',
|
||
owner_rent_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '号主实得租金(分)',
|
||
platform_fee_cent BIGINT NOT NULL DEFAULT 0 COMMENT '平台手续费(分)',
|
||
deposit_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '押金(分)',
|
||
consumable_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '消耗品扣费(分)',
|
||
coin_consumed_m DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '游戏币消耗(百万为单位)',
|
||
other_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '其他费用(分)',
|
||
deposit_deduct_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '押金扣除金额(分)',
|
||
renter_refund_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '租客退款金额(分)',
|
||
owner_income_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '号主收入金额(分)',
|
||
content TEXT NULL COMMENT '结算说明',
|
||
evidence_urls JSON NULL COMMENT '证据截图URL列表',
|
||
owner_adjustment_reason TEXT NULL COMMENT '号主调整原因',
|
||
owner_adjusted_at DATETIME NULL COMMENT '号主调整时间',
|
||
renter_confirmed_at DATETIME NULL COMMENT '租客确认时间',
|
||
renter_rejected_at DATETIME NULL COMMENT '租客拒绝时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY idx_order_checkouts_order_id (order_id),
|
||
KEY idx_order_checkouts_status (status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单结算记录表';
|
||
|
||
-- 账号交接记录表:记录号主和租客之间的账号交接
|
||
CREATE TABLE IF NOT EXISTS handoff_records (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
|
||
from_user_id BIGINT UNSIGNED NOT NULL COMMENT '交出方用户ID',
|
||
to_user_id BIGINT UNSIGNED NOT NULL COMMENT '接收方用户ID',
|
||
type VARCHAR(32) NOT NULL COMMENT '交接类型: deliver交付, return归还',
|
||
content TEXT NULL COMMENT '交接内容(账号密码等)',
|
||
attachment_urls JSON NULL COMMENT '附件URL列表',
|
||
confirmed_by_renter_at DATETIME NULL COMMENT '租客确认时间',
|
||
confirmed_by_owner_at DATETIME NULL COMMENT '号主确认时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
KEY idx_handoff_records_order_id (order_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='账号交接记录表';
|
||
|
||
-- -------------------------------------------
|
||
-- 钱包相关表
|
||
-- -------------------------------------------
|
||
|
||
-- 钱包账户表:用户的虚拟钱包
|
||
CREATE TABLE IF NOT EXISTS wallet_accounts (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
|
||
available_balance_cent BIGINT NOT NULL DEFAULT 0 COMMENT '可用余额(分)',
|
||
frozen_balance_cent BIGINT NOT NULL DEFAULT 0 COMMENT '冻结余额(分)',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT '钱包状态: active正常, frozen冻结, closed关闭',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_wallet_accounts_user_id (user_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='钱包账户表';
|
||
|
||
-- 钱包流水表:记录所有的资金变动
|
||
CREATE TABLE IF NOT EXISTS wallet_ledger (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
ledger_no VARCHAR(64) NOT NULL COMMENT '流水号',
|
||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
|
||
order_id BIGINT UNSIGNED NULL COMMENT '关联订单ID',
|
||
direction VARCHAR(16) NOT NULL COMMENT '方向: in收入, out支出',
|
||
amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '金额(分)',
|
||
balance_after_cent BIGINT NOT NULL DEFAULT 0 COMMENT '变动后余额(分)',
|
||
balance_type VARCHAR(32) NOT NULL COMMENT '余额类型: available可用, frozen冻结',
|
||
biz_type VARCHAR(32) NOT NULL COMMENT '业务类型: rent_payment租金支付, deposit_freeze押金冻结, settlement结算, refund退款等',
|
||
biz_no VARCHAR(64) NOT NULL COMMENT '业务单号',
|
||
remark VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_wallet_ledger_ledger_no (ledger_no),
|
||
KEY idx_wallet_ledger_user_created (user_id, created_at),
|
||
KEY idx_wallet_ledger_order_id (order_id),
|
||
KEY idx_wallet_ledger_biz (biz_type, biz_no),
|
||
KEY idx_wallet_ledger_user_biz_created (user_id, biz_type, created_at DESC)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='钱包流水表';
|
||
|
||
-- -------------------------------------------
|
||
-- 支付渠道订单表
|
||
-- -------------------------------------------
|
||
|
||
-- 支付订单表:对接第三方支付的订单记录
|
||
CREATE TABLE IF NOT EXISTS payment_orders (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
payment_no VARCHAR(64) NOT NULL COMMENT '支付单号',
|
||
order_id BIGINT UNSIGNED NOT NULL COMMENT '关联订单ID',
|
||
order_no VARCHAR(64) NOT NULL COMMENT '业务订单号',
|
||
user_id BIGINT UNSIGNED NOT NULL COMMENT '支付用户ID',
|
||
provider VARCHAR(32) NOT NULL COMMENT '支付服务商: leshua乐刷, lakala拉卡拉, mock模拟',
|
||
merchant_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '商户号',
|
||
third_order_id VARCHAR(64) NOT NULL COMMENT '第三方订单ID',
|
||
provider_order_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '支付渠道订单号',
|
||
pay_way VARCHAR(16) NOT NULL DEFAULT '' COMMENT '支付方式',
|
||
jspay_flag VARCHAR(8) NOT NULL DEFAULT '' COMMENT 'JS支付标识',
|
||
amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '支付金额(分)',
|
||
biz_type VARCHAR(32) NOT NULL DEFAULT 'order_pay' COMMENT '业务类型: order_pay订单支付, wallet_recharge钱包充值',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'created' COMMENT '支付状态: created已创建, pending待支付, paid已支付, failed失败, cancelled取消',
|
||
td_code VARCHAR(512) NOT NULL DEFAULT '' COMMENT '交易码',
|
||
jspay_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'JS支付URL',
|
||
jspay_info TEXT NULL COMMENT 'JS支付信息',
|
||
raw_request JSON NULL COMMENT '原始请求(JSON)',
|
||
raw_response JSON NULL COMMENT '原始响应(JSON)',
|
||
paid_at DATETIME NULL COMMENT '支付完成时间',
|
||
notified_at DATETIME NULL COMMENT '通知回调时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_payment_orders_payment_no (payment_no),
|
||
UNIQUE KEY uk_payment_orders_third_order_id (third_order_id),
|
||
KEY idx_payment_orders_order_id (order_id),
|
||
KEY idx_payment_orders_order_no (order_no),
|
||
KEY idx_payment_orders_user_id (user_id),
|
||
KEY idx_payment_orders_provider_order_id (provider_order_id),
|
||
KEY idx_payment_orders_biz_type (biz_type),
|
||
KEY idx_payment_orders_status (status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付订单表';
|
||
|
||
-- 支付商户配置表:支持多商户、多渠道支付配置
|
||
CREATE TABLE IF NOT EXISTS payment_merchant_configs (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
name VARCHAR(128) NOT NULL COMMENT '商户配置名称(用于识别)',
|
||
provider VARCHAR(32) NOT NULL COMMENT '支付服务商: leshua乐刷, lakala拉卡拉, mock模拟',
|
||
merchant_id VARCHAR(128) NOT NULL COMMENT '商户号',
|
||
gateway_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '支付网关地址',
|
||
sign_key TEXT NULL COMMENT '签名密钥/商户私钥(加密存储)',
|
||
notify_key TEXT NULL COMMENT '通知验签密钥/平台通知证书(加密存储)',
|
||
notify_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '异步通知回调地址',
|
||
jump_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '支付完成跳转地址',
|
||
pay_way VARCHAR(32) NOT NULL DEFAULT 'ZFBZF' COMMENT '支付方式: ZFBZF支付宝, WXZF微信',
|
||
jspay_flag VARCHAR(8) NOT NULL DEFAULT '2' COMMENT 'JS支付标识: 1 H5, 2 小程序',
|
||
sign_type VARCHAR(32) NOT NULL DEFAULT 'MD5' COMMENT '签名类型: MD5, SHA256withRSA',
|
||
extra_config JSON NULL COMMENT '扩展配置(JSON格式)',
|
||
is_default TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认商户: 0否, 1是(每个provider只能有一个默认)',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT '状态: active启用, disabled禁用, testing测试中',
|
||
environment VARCHAR(16) NOT NULL DEFAULT 'production' COMMENT '环境: production生产, sandbox测试',
|
||
business_tags JSON NULL COMMENT '业务场景标签,如 ["order_pay", "wallet_recharge"]',
|
||
total_transactions BIGINT NOT NULL DEFAULT 0 COMMENT '总交易笔数',
|
||
total_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '总交易金额(分)',
|
||
last_used_at DATETIME NULL COMMENT '最后使用时间',
|
||
created_by BIGINT UNSIGNED NULL COMMENT '创建人(管理员ID)',
|
||
updated_by BIGINT UNSIGNED NULL COMMENT '最后更新人(管理员ID)',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY idx_payment_merchant_configs_provider (provider, status),
|
||
KEY idx_payment_merchant_configs_default (provider, is_default),
|
||
KEY idx_payment_merchant_configs_merchant_id (merchant_id),
|
||
KEY idx_payment_merchant_configs_status (status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付商户配置表';
|
||
|
||
-- 支付配置使用日志:用于追踪支付配置命中情况
|
||
CREATE TABLE IF NOT EXISTS payment_config_usage_logs (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
config_id BIGINT UNSIGNED NOT NULL COMMENT '商户配置ID',
|
||
payment_order_id BIGINT UNSIGNED NOT NULL COMMENT '支付订单ID',
|
||
provider VARCHAR(32) NOT NULL COMMENT '支付服务商',
|
||
merchant_id VARCHAR(128) NOT NULL COMMENT '商户号',
|
||
amount_cent BIGINT NOT NULL COMMENT '交易金额(分)',
|
||
biz_type VARCHAR(32) NOT NULL COMMENT '业务类型',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
KEY idx_payment_config_usage_logs_config (config_id, created_at),
|
||
KEY idx_payment_config_usage_logs_payment (payment_order_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付配置使用日志';
|
||
|
||
-- -------------------------------------------
|
||
-- 纠纷和通知表
|
||
-- -------------------------------------------
|
||
|
||
-- 纠纷表:记录用户之间的交易纠纷
|
||
CREATE TABLE IF NOT EXISTS disputes (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
|
||
initiator_id BIGINT UNSIGNED NOT NULL COMMENT '发起人ID',
|
||
target_user_id BIGINT UNSIGNED NOT NULL COMMENT '被投诉人ID',
|
||
type VARCHAR(32) NOT NULL COMMENT '纠纷类型: account_issue账号问题, payment_issue支付问题, behavior违规行为等',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'open' COMMENT '状态: open待处理, investigating调查中, resolved已解决, closed已关闭',
|
||
description TEXT NULL COMMENT '纠纷描述',
|
||
evidence_urls JSON NULL COMMENT '证据截图URL列表',
|
||
arbitration_result VARCHAR(32) NOT NULL DEFAULT '' COMMENT '仲裁结果: owner_win号主胜, renter_win租客胜, draw平局',
|
||
arbitration_remark TEXT NULL COMMENT '仲裁说明',
|
||
handled_by BIGINT UNSIGNED NULL COMMENT '处理人ID(管理员)',
|
||
handled_at DATETIME NULL COMMENT '处理时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY idx_disputes_order_id (order_id),
|
||
KEY idx_disputes_status (status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='纠纷表';
|
||
|
||
-- 通知消息表:系统通知、订单通知等
|
||
CREATE TABLE IF NOT EXISTS notifications (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT UNSIGNED NOT NULL COMMENT '接收用户ID',
|
||
type VARCHAR(32) NOT NULL COMMENT '通知类型: system系统, order订单, chat聊天, wallet钱包',
|
||
title VARCHAR(128) NOT NULL COMMENT '通知标题',
|
||
content TEXT NULL COMMENT '通知内容',
|
||
biz_type VARCHAR(32) NOT NULL DEFAULT '' COMMENT '业务类型',
|
||
biz_id BIGINT UNSIGNED NULL COMMENT '业务ID',
|
||
read_at DATETIME NULL COMMENT '已读时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
KEY idx_notifications_user_read_created (user_id, read_at, created_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知消息表';
|
||
|
||
-- 审计日志表:记录重要操作的审计日志
|
||
CREATE TABLE IF NOT EXISTS audit_logs (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
actor_type VARCHAR(32) NOT NULL COMMENT '操作者类型: user用户, admin管理员, system系统',
|
||
actor_id BIGINT UNSIGNED NOT NULL COMMENT '操作者ID',
|
||
action VARCHAR(64) NOT NULL COMMENT '操作动作',
|
||
biz_type VARCHAR(32) NOT NULL COMMENT '业务类型',
|
||
biz_id BIGINT UNSIGNED NULL COMMENT '业务ID',
|
||
ip VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'IP地址',
|
||
user_agent VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'User-Agent',
|
||
detail JSON NULL COMMENT '详细信息(JSON)',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
KEY idx_audit_logs_actor_created (actor_id, created_at),
|
||
KEY idx_audit_logs_biz (biz_type, biz_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审计日志表';
|
||
|
||
-- -------------------------------------------
|
||
-- 管理员和权限表
|
||
-- -------------------------------------------
|
||
|
||
-- 管理员表
|
||
CREATE TABLE IF NOT EXISTS admin_users (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
username VARCHAR(64) NOT NULL COMMENT '用户名',
|
||
password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希',
|
||
nickname VARCHAR(64) NOT NULL DEFAULT '' COMMENT '昵称',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT '状态: active正常, inactive停用',
|
||
support_status VARCHAR(16) NOT NULL DEFAULT 'offline' COMMENT '客服状态: online在线, offline离线, busy忙碌',
|
||
last_login_at DATETIME NULL COMMENT '最后登录时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_admin_users_username (username),
|
||
KEY idx_admin_users_support_status (support_status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员表';
|
||
|
||
-- 角色表
|
||
CREATE TABLE IF NOT EXISTS roles (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
code VARCHAR(64) NOT NULL COMMENT '角色代码',
|
||
name VARCHAR(64) NOT NULL COMMENT '角色名称',
|
||
description VARCHAR(255) NOT NULL DEFAULT '' COMMENT '角色描述',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_roles_code (code)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||
|
||
-- 权限表
|
||
CREATE TABLE IF NOT EXISTS permissions (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
code VARCHAR(128) NOT NULL COMMENT '权限代码',
|
||
name VARCHAR(64) NOT NULL COMMENT '权限名称',
|
||
resource VARCHAR(128) NOT NULL COMMENT '资源',
|
||
action VARCHAR(64) NOT NULL COMMENT '操作',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_permissions_code (code)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';
|
||
|
||
-- 管理员角色关联表
|
||
CREATE TABLE IF NOT EXISTS admin_user_roles (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
admin_user_id BIGINT UNSIGNED NOT NULL COMMENT '管理员ID',
|
||
role_id BIGINT UNSIGNED NOT NULL COMMENT '角色ID',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_admin_user_roles_user_role (admin_user_id, role_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员角色关联表';
|
||
|
||
-- 角色权限关联表
|
||
CREATE TABLE IF NOT EXISTS role_permissions (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
role_id BIGINT UNSIGNED NOT NULL COMMENT '角色ID',
|
||
permission_id BIGINT UNSIGNED NOT NULL COMMENT '权限ID',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_role_permissions_role_permission (role_id, permission_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';
|
||
|
||
-- -------------------------------------------
|
||
-- 系统配置表
|
||
-- -------------------------------------------
|
||
|
||
-- 系统配置表:存储系统级配置项
|
||
CREATE TABLE IF NOT EXISTS system_configs (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
`key` VARCHAR(128) NOT NULL COMMENT '配置键',
|
||
`value` TEXT NOT NULL COMMENT '配置值',
|
||
description VARCHAR(255) NOT NULL DEFAULT '' COMMENT '配置说明',
|
||
updated_by BIGINT UNSIGNED NULL COMMENT '更新者ID',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_system_configs_key (`key`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
|
||
|
||
-- -------------------------------------------
|
||
-- 客服聊天表
|
||
-- -------------------------------------------
|
||
|
||
-- 聊天会话表:订单群聊等
|
||
CREATE TABLE IF NOT EXISTS chat_conversations (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
order_id BIGINT UNSIGNED NULL COMMENT '关联订单ID',
|
||
type VARCHAR(32) NOT NULL DEFAULT 'order_group' COMMENT '会话类型: order_group订单群聊, support_chat客服咨询',
|
||
title VARCHAR(128) NOT NULL COMMENT '会话标题',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT '状态: active活跃, archived已归档, closed已关闭',
|
||
last_message_id BIGINT UNSIGNED NULL COMMENT '最后一条消息ID',
|
||
last_message_preview VARCHAR(255) NOT NULL DEFAULT '' COMMENT '最后消息预览',
|
||
last_message_at DATETIME NULL COMMENT '最后消息时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_chat_conversations_order_id (order_id),
|
||
KEY idx_chat_conversations_last_message_at (last_message_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='聊天会话表';
|
||
|
||
-- 聊天参与者表:会话成员
|
||
CREATE TABLE IF NOT EXISTS chat_participants (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
conversation_id BIGINT UNSIGNED NOT NULL COMMENT '会话ID',
|
||
participant_type VARCHAR(16) NOT NULL COMMENT '参与者类型: user用户, admin管理员',
|
||
participant_id BIGINT UNSIGNED NOT NULL COMMENT '参与者ID',
|
||
role VARCHAR(32) NOT NULL COMMENT '角色: owner号主, renter租客, support客服',
|
||
remark VARCHAR(128) NOT NULL DEFAULT '' COMMENT '备注名',
|
||
last_read_at DATETIME NULL COMMENT '最后已读时间',
|
||
joined_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_chat_participants_member (conversation_id, participant_type, participant_id),
|
||
KEY idx_chat_participants_participant (participant_type, participant_id),
|
||
KEY idx_chat_participants_conversation (conversation_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='聊天参与者表';
|
||
|
||
-- 聊天消息表:所有聊天消息
|
||
CREATE TABLE IF NOT EXISTS chat_messages (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
conversation_id BIGINT UNSIGNED NOT NULL COMMENT '会话ID',
|
||
sender_type VARCHAR(16) NOT NULL COMMENT '发送者类型: user用户, admin管理员, system系统',
|
||
sender_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '发送者ID',
|
||
sender_role VARCHAR(32) NOT NULL DEFAULT '' COMMENT '发送者角色',
|
||
content_type VARCHAR(32) NOT NULL DEFAULT 'text' COMMENT '消息类型: text文本, image图片, file文件',
|
||
content TEXT NULL COMMENT '消息内容',
|
||
attachment_urls JSON NULL COMMENT '附件URL列表',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
KEY idx_chat_messages_conversation_id (conversation_id, id),
|
||
KEY idx_chat_messages_created_at (created_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='聊天消息表';
|
||
|
||
-- 快捷回复模板表:客服快捷回复
|
||
CREATE TABLE IF NOT EXISTS chat_quick_replies (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
admin_user_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属管理员ID: 0表示全局模板',
|
||
title VARCHAR(64) NOT NULL COMMENT '快捷回复标题',
|
||
content TEXT NOT NULL COMMENT '回复内容',
|
||
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY idx_admin_user_id (admin_user_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快捷回复模板表';
|
||
|
||
-- -------------------------------------------
|
||
-- 开放上传记录表
|
||
-- -------------------------------------------
|
||
|
||
-- 商品上传记录表:通过开放接口上传的商品记录
|
||
CREATE TABLE IF NOT EXISTS listing_uploads (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
uploader_name VARCHAR(64) NOT NULL COMMENT '上传者名称',
|
||
matched_admin_id BIGINT UNSIGNED NULL COMMENT '匹配到的管理员ID',
|
||
owner_id BIGINT UNSIGNED NULL COMMENT '商品所有者ID',
|
||
client_upload_time DATETIME NULL COMMENT '客户端上传时间',
|
||
client_ip VARCHAR(64) NOT NULL DEFAULT '' COMMENT '客户端IP',
|
||
raw_payload JSON NULL COMMENT '原始请求数据',
|
||
parsed_payload JSON NULL COMMENT '解析后的数据',
|
||
listing_id BIGINT UNSIGNED NULL COMMENT '创建的商品ID',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'draft_created' COMMENT '状态: draft_created草稿已创建, published已发布, failed失败',
|
||
error_message VARCHAR(255) NOT NULL DEFAULT '' COMMENT '错误信息',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY idx_listing_uploads_uploader_name (uploader_name),
|
||
KEY idx_listing_uploads_matched_admin_id (matched_admin_id),
|
||
KEY idx_listing_uploads_owner_id (owner_id),
|
||
KEY idx_listing_uploads_listing_id (listing_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品上传记录表';
|
||
|
||
-- -------------------------------------------
|
||
-- 公告系统表
|
||
-- -------------------------------------------
|
||
|
||
-- 公告表:系统公告、通知等
|
||
CREATE TABLE IF NOT EXISTS announcements (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
title VARCHAR(255) NOT NULL COMMENT '公告标题',
|
||
content TEXT NOT NULL COMMENT '公告内容(支持Markdown)',
|
||
category VARCHAR(32) NOT NULL DEFAULT 'notice' COMMENT '分类: notice通知, tutorial教程, rule规则, faq常见问题',
|
||
priority INT NOT NULL DEFAULT 0 COMMENT '优先级(数值越大越靠前)',
|
||
is_pinned TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否置顶: 0否, 1是',
|
||
is_important TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否重要: 0否, 1是',
|
||
view_count INT NOT NULL DEFAULT 0 COMMENT '查看次数',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态: draft草稿, published已发布, archived已归档',
|
||
published_at DATETIME NULL COMMENT '发布时间',
|
||
created_by BIGINT UNSIGNED NULL COMMENT '创建者ID(管理员)',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY idx_announcements_status (status, is_pinned, priority, published_at),
|
||
KEY idx_announcements_category (category, status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公告表';
|
||
|
||
SET FOREIGN_KEY_CHECKS = 1;
|
||
|
||
-- -------------------------------------------
|
||
-- 权限数据初始化
|
||
-- -------------------------------------------
|
||
|
||
INSERT INTO permissions (code, name, resource, action) VALUES
|
||
('dashboard:view', '查看仪表盘', 'dashboard', 'view'),
|
||
('user:view', '查看用户', 'user', 'view'),
|
||
('user:freeze', '冻结用户', 'user', 'freeze'),
|
||
('user:deposit_free', '设置免押额度', 'user', 'deposit_free'),
|
||
('user:unfreeze', '解冻用户', 'user', 'unfreeze'),
|
||
('order:view', '查看订单', 'order', 'view'),
|
||
('order:close', '关闭订单', 'order', 'close'),
|
||
('order:mark_abnormal', '标记异常订单', 'order', 'mark_abnormal'),
|
||
('listing:view', '查看商品', 'listing', 'view'),
|
||
('listing:approve', '审核通过商品', 'listing', 'approve'),
|
||
('listing:reject', '审核拒绝商品', 'listing', 'reject'),
|
||
('listing:offline', '下架商品', 'listing', 'offline'),
|
||
('dispute:view', '查看纠纷', 'dispute', 'view'),
|
||
('dispute:arbitrate', '仲裁纠纷', 'dispute', 'arbitrate'),
|
||
('chat:view', '查看客服群聊', 'chat', 'view'),
|
||
('chat:send', '发送客服消息', 'chat', 'send'),
|
||
('wallet:view', '查看资金流水', 'wallet', 'view'),
|
||
('wallet:admin_ledger', '查看资金流水', 'wallet', 'admin_ledger'),
|
||
('withdrawal:list', '查看提现列表', 'withdrawal', 'list'),
|
||
('withdrawal:review', '审核提现', 'withdrawal', 'review'),
|
||
('withdrawal:pay', '确认打款', 'withdrawal', 'pay'),
|
||
('withdrawal:detail', '查看提现详情', 'withdrawal', 'detail'),
|
||
('withdrawal:approve', '提现审核', 'withdrawal', 'approve'),
|
||
('payment_config:list', '查看支付配置', 'payment_config', 'list'),
|
||
('payment_config:create', '创建支付配置', 'payment_config', 'create'),
|
||
('payment_config:update', '更新支付配置', 'payment_config', 'update'),
|
||
('payment_config:delete', '删除支付配置', 'payment_config', 'delete'),
|
||
('payment_config:view_secret', '查看支付密钥', 'payment_config', 'view_secret'),
|
||
('admin_user:manage', '管理员管理', 'admin_user', 'manage'),
|
||
('role:manage', '角色管理', 'role', 'manage'),
|
||
('system_config:view', '查看系统配置', 'system_config', 'view'),
|
||
('system_config:update', '修改系统配置', 'system_config', 'update'),
|
||
('audit_log:view', '查看审计日志', 'audit_log', 'view'),
|
||
('announcement:view', '查看公告', 'announcement', 'view'),
|
||
('announcement:manage', '管理公告', 'announcement', 'manage')
|
||
ON DUPLICATE KEY UPDATE
|
||
name = VALUES(name),
|
||
resource = VALUES(resource),
|
||
action = VALUES(action);
|
||
|
||
-- -------------------------------------------
|
||
-- 角色数据初始化
|
||
-- -------------------------------------------
|
||
|
||
INSERT INTO roles (code, name, description) VALUES
|
||
('super_admin', '超级管理员', '拥有所有权限,不可被删除'),
|
||
('cs', '客服', '处理用户咨询、群聊、纠纷仲裁'),
|
||
('ops', '运营', '管理商品审核、订单管理、用户管理'),
|
||
('finance', '财务', '查看资金流水、订单信息')
|
||
ON DUPLICATE KEY UPDATE
|
||
name = VALUES(name),
|
||
description = VALUES(description);
|
||
|
||
-- super_admin 拥有所有权限
|
||
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
||
SELECT r.id, p.id FROM roles r CROSS JOIN permissions p WHERE r.code = 'super_admin';
|
||
|
||
-- cs 角色权限
|
||
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
||
SELECT r.id, p.id FROM roles r, permissions p
|
||
WHERE r.code = 'cs' AND p.code IN ('dashboard:view', 'user:view', 'dispute:view', 'dispute:arbitrate', 'chat:view', 'chat:send', 'order:view');
|
||
|
||
-- ops 角色权限
|
||
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
||
SELECT r.id, p.id FROM roles r, permissions p
|
||
WHERE r.code = 'ops' AND p.code IN ('dashboard:view', 'user:view', 'user:freeze', 'user:unfreeze', 'user:deposit_free', 'order:view', 'order:close', 'order:mark_abnormal', 'listing:view', 'listing:approve', 'listing:reject', 'listing:offline', 'dispute:view', 'audit_log:view', 'announcement:view', 'announcement:manage');
|
||
|
||
-- finance 角色权限
|
||
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
||
SELECT r.id, p.id FROM roles r, permissions p
|
||
WHERE r.code = 'finance' AND p.code IN (
|
||
'dashboard:view',
|
||
'wallet:view',
|
||
'wallet:admin_ledger',
|
||
'order:view',
|
||
'withdrawal:list',
|
||
'withdrawal:review',
|
||
'withdrawal:pay',
|
||
'withdrawal:detail',
|
||
'withdrawal:approve',
|
||
'payment_config:list',
|
||
'payment_config:view_secret'
|
||
);
|
||
|
||
-- -------------------------------------------
|
||
-- 管理员账号初始化
|
||
-- -------------------------------------------
|
||
|
||
-- 初始化管理员账号(密码: admin123456)
|
||
INSERT INTO admin_users (username, password_hash, nickname, status) VALUES
|
||
('admin', '$2a$10$vvDd.cYJCOBl9kr5jdRYXu9C/7GXcHmXsG17zJPHzPOZ0XGbqcWNS', '超级管理员', 'active'),
|
||
('kf1', '$2a$10$7cx3B4IWunLZO24o11YVGu4qY1J1naDdsTyvoCpcnOO.GV15qaf3C', '客服1', 'active'),
|
||
('kf2', '$2a$10$m6kLCXciFygpqIGUZ9LQtuEFAl40hb.S7zJmMiuC83WrU7OQM3TPC', '客服2', 'active')
|
||
ON DUPLICATE KEY UPDATE
|
||
nickname = VALUES(nickname),
|
||
status = VALUES(status);
|
||
|
||
-- admin 关联 super_admin 角色
|
||
INSERT IGNORE INTO admin_user_roles (admin_user_id, role_id)
|
||
SELECT au.id, r.id FROM admin_users au, roles r
|
||
WHERE au.username = 'admin' AND r.code = 'super_admin';
|
||
|
||
-- 客服关联 cs 角色
|
||
INSERT IGNORE INTO admin_user_roles (admin_user_id, role_id)
|
||
SELECT au.id, r.id FROM admin_users au, roles r
|
||
WHERE au.username IN ('kf1', 'kf2') AND r.code = 'cs';
|
||
|
||
-- -------------------------------------------
|
||
-- 系统配置初始化
|
||
-- -------------------------------------------
|
||
|
||
INSERT INTO system_configs (`key`, `value`, description) VALUES
|
||
('listing.review_required', 'true', '商品是否需要审核'),
|
||
('order.pending_payment_timeout_minutes', '15', '待支付超时时间(分钟)'),
|
||
('chat.default_support_admin_id', '2', '默认客服 ID(必须是启用状态的客服角色)'),
|
||
('chat.auto_welcome_message', '欢迎加入订单群聊!如有任何问题,请随时沟通。', '建群后自动发送的欢迎话术')
|
||
ON DUPLICATE KEY UPDATE
|
||
`value` = VALUES(`value`),
|
||
description = VALUES(description);
|
||
|
||
-- -------------------------------------------
|
||
-- 公告数据初始化
|
||
-- -------------------------------------------
|
||
|
||
INSERT INTO announcements (title, content, category, priority, is_pinned, is_important, status, published_at) VALUES
|
||
('号主须知(重要!)', '## 平台担保交易,拒绝私下转账!
|
||
|
||
平台提供交易担保机制,用户支付的押金与租金全部冻结在平台账户中,租号结束后根据账号状态自动结算给号主或退款给租客。
|
||
|
||
**警告:**
|
||
- 账号被非本人,请看到此消息后主动下架账号!
|
||
- 不要随意更改账号密码或绑定信息
|
||
- 请勿诱导买家进行私下交易
|
||
- 违规将会被冻结账户并承担相应损失
|
||
|
||
有任何问题请联系客服处理。', 'notice', 100, 1, 1, 'published', NOW()),
|
||
|
||
('租客须知(重要!)', '## 账号使用规范
|
||
|
||
1. **禁止修改账号信息** - 不得修改账号密码、绑定手机、实名信息等
|
||
2. **禁止充值** - 租用期间请勿对账号进行任何形式的充值
|
||
3. **禁止违规操作** - 不得使用外挂、辅助工具,不得进行恶意行为
|
||
4. **按时归还** - 租用到期后请及时归还账号,逾期将扣除押金
|
||
|
||
**温馨提示:**
|
||
- 交接账号后请第一时间登录验证
|
||
- 发现账号异常请立即联系客服
|
||
- 使用过程中遇到问题随时咨询客服
|
||
|
||
祝您游戏愉快!', 'notice', 99, 1, 1, 'published', NOW()),
|
||
|
||
('人脸验证教程', '## 如何完成实名认证
|
||
|
||
为了保障交易安全,平台要求所有用户完成实名认证后才能发布商品和下单。
|
||
|
||
### 认证步骤:
|
||
|
||
1. 进入"个人资料"页面
|
||
2. 点击"实名认证"按钮
|
||
3. 按照提示填写真实姓名和身份证号
|
||
4. 进行人脸识别验证
|
||
5. 等待系统审核(通常1-3分钟)
|
||
|
||
### 注意事项:
|
||
|
||
- 请确保光线充足,面部清晰
|
||
- 摘下眼镜、帽子等遮挡物
|
||
- 一个身份证只能认证一个账号
|
||
- 认证信息仅用于交易安全,平台严格保密
|
||
|
||
认证失败请联系客服协助处理。', 'tutorial', 90, 0, 0, 'published', NOW()),
|
||
|
||
('除纯市外其他高级物资默认从收费表', '## 出租开始须必开启备锁!
|
||
|
||
号主在出租账号前,务必确保账号已开启"账号保护"功能(即备锁)。
|
||
|
||
### 为什么要开启备锁?
|
||
|
||
- 防止租客恶意修改账号信息
|
||
- 保护账号安全,降低被盗风险
|
||
- 发生纠纷时便于平台介入处理
|
||
- 租用结束后方便号主快速收回账号
|
||
|
||
### 如何开启?
|
||
|
||
具体开启方式请参考游戏官方设置,不同平台操作略有差异。如不清楚如何设置,请咨询客服。
|
||
|
||
**重要提醒:未开启备锁导致的账号安全问题,平台不承担责任!**', 'rule', 80, 0, 0, 'published', NOW()),
|
||
|
||
('出租完成后如何结算?', '## 租金结算流程
|
||
|
||
租用期满后,系统会根据账号状态自动进行结算:
|
||
|
||
### 正常归还
|
||
- 租客按时归还账号
|
||
- 号主确认账号无异常
|
||
- 系统自动将租金结算到号主钱包
|
||
- 押金退还给租客
|
||
|
||
### 异常情况
|
||
- 账号信息被修改 → 押金赔付给号主
|
||
- 账号被找回 → 租金退还给租客
|
||
- 产生纠纷 → 平台客服介入仲裁
|
||
|
||
### 提现说明
|
||
目前提现功能暂未开放,敬请期待后续更新。', 'faq', 70, 0, 0, 'published', NOW()),
|
||
|
||
('如何联系客服?', '## 客服联系方式
|
||
|
||
遇到问题可以通过以下方式联系客服:
|
||
|
||
1. **在线客服** - 点击页面右上角"客服"按钮,即可在线咨询
|
||
2. **订单页面** - 每个订单详情页都有专属客服入口
|
||
3. **消息中心** - 查看历史咨询记录
|
||
|
||
### 客服工作时间
|
||
- 工作日:09:00 - 22:00
|
||
- 节假日:10:00 - 20:00
|
||
|
||
非工作时间留言,客服上线后会第一时间回复。', 'faq', 60, 0, 0, 'published', NOW());
|
||
|
||
-- -------------------------------------------
|
||
-- 用户收款账号表(提现功能)
|
||
-- -------------------------------------------
|
||
|
||
CREATE TABLE IF NOT EXISTS user_payment_accounts (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
|
||
account_type VARCHAR(32) NOT NULL COMMENT '账号类型: alipay支付宝, wechat微信, bank银行卡',
|
||
account_name VARCHAR(128) NOT NULL COMMENT '账户名(真实姓名)',
|
||
account_no VARCHAR(255) NOT NULL COMMENT '账号(加密存储)',
|
||
|
||
-- 银行卡专用字段
|
||
bank_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '银行名称',
|
||
bank_branch VARCHAR(255) NOT NULL DEFAULT '' COMMENT '开户行支行',
|
||
|
||
-- 凭证
|
||
certificate_urls JSON NULL COMMENT '认证凭证(收款码截图等)',
|
||
|
||
is_default TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认账号',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT '状态: active正常, disabled禁用',
|
||
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
||
KEY idx_user_payment_accounts_user_id (user_id),
|
||
KEY idx_user_payment_accounts_user_default (user_id, is_default)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户收款账号表';
|
||
|
||
-- -------------------------------------------
|
||
-- 提现申请表
|
||
-- -------------------------------------------
|
||
|
||
CREATE TABLE IF NOT EXISTS withdrawal_requests (
|
||
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
||
withdraw_no VARCHAR(64) NOT NULL COMMENT '提现单号',
|
||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
|
||
amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '提现金额(分)',
|
||
fee_cent BIGINT NOT NULL DEFAULT 0 COMMENT '手续费(分)',
|
||
actual_amount_cent BIGINT NOT NULL DEFAULT 0 COMMENT '实际到账(分)',
|
||
|
||
-- 收款账号信息(快照)
|
||
payment_account_id BIGINT UNSIGNED NULL COMMENT '收款账号ID',
|
||
account_type VARCHAR(32) NOT NULL COMMENT '账号类型',
|
||
account_name VARCHAR(128) NOT NULL COMMENT '账户名',
|
||
account_no VARCHAR(128) NOT NULL COMMENT '账号(脱敏显示)',
|
||
bank_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '银行名称',
|
||
bank_branch VARCHAR(255) NOT NULL DEFAULT '' COMMENT '开户行支行',
|
||
|
||
status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '状态: pending待审核, processing处理中, completed已完成, rejected已拒绝, cancelled已取消',
|
||
|
||
-- 审核信息
|
||
reviewed_by BIGINT UNSIGNED NULL COMMENT '审核人ID(财务管理员)',
|
||
reviewed_at DATETIME NULL COMMENT '审核时间',
|
||
review_remark VARCHAR(255) NOT NULL DEFAULT '' COMMENT '审核备注',
|
||
|
||
-- 打款信息
|
||
paid_by BIGINT UNSIGNED NULL COMMENT '打款人ID(财务管理员)',
|
||
paid_at DATETIME NULL COMMENT '打款时间',
|
||
payment_proof_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '打款凭证URL',
|
||
payment_remark VARCHAR(255) NOT NULL DEFAULT '' COMMENT '打款备注',
|
||
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
||
UNIQUE KEY uk_withdrawal_requests_withdraw_no (withdraw_no),
|
||
KEY idx_withdrawal_requests_user_id (user_id),
|
||
KEY idx_withdrawal_requests_status (status),
|
||
KEY idx_withdrawal_requests_created (created_at DESC)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='提现申请表';
|
||
|
||
-- 确保超级管理员包含所有已初始化权限
|
||
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
||
SELECT r.id, p.id FROM roles r
|
||
CROSS JOIN permissions p
|
||
WHERE r.code = 'super_admin';
|
||
|
||
-- 确保财务角色包含提现和支付配置权限
|
||
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
||
SELECT r.id, p.id FROM roles r, permissions p
|
||
WHERE r.code = 'finance' AND p.code IN (
|
||
'withdrawal:list',
|
||
'withdrawal:review',
|
||
'withdrawal:pay',
|
||
'withdrawal:detail',
|
||
'withdrawal:approve',
|
||
'wallet:admin_ledger',
|
||
'payment_config:list',
|
||
'payment_config:view_secret'
|
||
);
|
||
|
||
-- ============================================
|
||
-- 数据库初始化完成
|
||
-- ============================================
|