小鹏商行 — WEB开发者文档

版本:v1.0.0 | 2026-08-31


一、项目概述

1.1 项目定位

小鹏商行是一个三角洲账号租赁撮合平台,平台作为中间方,为出租方和租用方提供交易撮合、资金托管、纠纷仲裁服务,收取 13% 交易手续费

1.2 核心原则

原则 说明
双向押金 出租方与租用方均需缴纳押金,防止毁号/提前收回
零接触 用户之间无法以任何方式获取对方联系方式
纯结构化信息 账号发布仅允许填写表单字段,不上传图片、不输入自由文本
整号一口价 租金按整号计算,与租用时间长短无关
资金托管 押金由平台托管,交易正常结束后按规则分账
信用评分 交易完成后双方互评,累计信用分影响平台权益
AI优先客服 每笔交易配备一次 AI 智能客服,不满意转人工

二、系统架构

2.1 技术选型

┌─────────────────────────────────────────────────┐
│                   web前端                   │
│              (原生框架 / Taro / uni-app)           │
└─────────────────────┬───────────────────────────┘
                      │ HTTPS + WebSocket
┌─────────────────────▼───────────────────────────┐
│                  API 网关层                       │
│          (微信云托管 / 自建 Nginx+Kong)            │
└─────────────────────┬───────────────────────────┘
┌─────────────────────▼───────────────────────────┐
│                 业务服务层                         │
│  ┌──────────┬──────────┬──────────┬──────────┐  │
│  │ 用户服务  │ 交易服务  │ 账号服务  │ 客服服务  │  │
│  └──────────┴──────────┴──────────┴──────────┘  │
└─────────────────────┬───────────────────────────┘
┌─────────────────────▼───────────────────────────┐
│                 数据层                            │
│  ┌──────────┬──────────┬──────────┬──────────┐  │
│  │  MySQL   │  Redis   │   COS    │   ES     │  │
│  └──────────┴──────────┴──────────┴──────────┘  │
└─────────────────────────────────────────────────┘

2.2 推荐技术栈

层级 技术 说明
前端 微信原生 + WeUI 最小包体积,最佳兼容性
后端 Node.js / Go 微信云托管推荐 Node.js
数据库 MySQL 8.0 交易数据强一致性要求
缓存 Redis 会话、热点数据、分布式锁
文件存储 腾讯云 COS 纠纷证据图片存储
搜索 Elasticsearch 账号列表多条件筛选
消息推送 微信订阅消息 扫码/解冻通知推送
AI客服 微信对话平台 / 自建 LLM Agent 智能客服能力
支付 微信支付(收付通) 分账能力
管理后台 Vue3 + Element Plus 运营管理后台

三、功能模块详设

3.1 用户系统

3.1.1 注册/登录

  • 仅支持微信一键登录wx.login + wx.getUserInfo
  • 每个微信 OpenID 绑定唯一账户
  • 首次登录自动创建账户,初始化钱包余额为 0,信用分 100

3.1.2 实名认证(必须)

  • 出租方和租用方均需完成实名认证后方可进行交易
  • 对接微信实名认证接口(首选)或手动输入身份证信息 + 人脸识别
  • 未实名用户仅可浏览,不可发布/租赁

3.1.3 钱包系统

钱包余额 = 充值金额 + 交易收入 - 交易支出 - 提现金额
  • 支持微信支付充值
  • 押金从钱包余额中冻结,非直接扣除
  • 交易完成后解冻并结算

3.1.4 信用评分体系

分值范围 等级 权益/限制
90-100 优秀 押金可降低至租金的 1.5 倍
70-89 良好 标准权益
50-69 一般 押金至少为租金的 2 倍;发布账号需人工审核
30-49 较差 押金至少为租金的 3 倍;限制发布数量
0-29 冻结交易权限 30 天

信用分变动规则:

事件 分数变动
正常完成一笔交易 +2
获得对方 5 星好评 +1
6小时内未响应扫码/解冻 -10
AI客服判定违约 -20
人工客服判定违约 -30
账号信息与发布严重不符 -15
毁号 -50(直接冻结)

3.2 反联系方式泄露机制

核心策略:从源头消除隐患 — 账号发布完全不提供图片上传和自由文本输入。纠纷场景下的证据图片仅限客服后台查看,用户之间不可互相查看对方上传的图片。

3.2.1 各场景图片权限

场景 能否上传图片 谁可见
发布账号 不可
租用方结束租号确认 可以(游戏截图证明号完好) 仅平台客服
出租方纠纷举证 可以(证据截图) 仅平台客服
站内消息 不可

3.2.2 敏感信息保护清单

字段 存储方式 谁可见
联系电话 AES-256 加密 仅平台后端
账号密码 AES-256 加密 仅平台后端
微信号/QQ号 不支持填写
自由文本描述 不支持填写
纠纷证据图片 COS私有存储 仅客服后台可见
账号截图 不支持上传

3.2.3 违规处罚

违规次数 处罚
第1次 警告 + 内容拦截
第2次 冻结账户 24 小时,信用分 -20
第3次 永久封号,已缴纳押金不退

3.3 出租流程(出租方)

┌─────────────┐    ┌──────────────┐    ┌─────────────┐    ┌─────────────┐
│  点击"我要出租" │───▶│ 填写结构化表单  │───▶│ 选择预设标签  │───▶│ 系统自动计算  │
│              │    │  (纯字段选择)  │    │             │    │   租金+比例   │
└─────────────┘    └──────────────┘    └─────────────┘    └──────┬──────┘
┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  上架到大厅   │◀───│ 缴纳押金     │◀───│ 确认发布     │◀───│ 用户设定押金  │
│             │    │ (钱包冻结)   │    │             │    │ (默认为2倍租金)│
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘

3.3.1 账号发布表单(纯结构化字段)

基础信息区
字段 控件类型 校验规则 说明
游戏大区 单选:QQ区 / 微信区 必选
账号等级 数字输入 30-60
游戏段位 下拉选择 必选 见附录C段位表
能否帐密 单选:可提供 / 不可提供 必选
账号密码 文本输入 仅"可提供"时出现,6-30位 AES-256加密,仅后端可见
联系电话 数字输入 11位手机号,必填 游戏绑定手机号,仅后台可见
可以联系的时间 时间范围选择器 必选 每日可接收验证码的时间段
登录方式 单选 仅"可提供帐密"时可选:帐密直登 / 扫码登录 / 均可;"不可提供"时固定为扫码登录
资源数据区
字段 控件类型 校验规则 影响比例
纯币数量 数字输入 40-2099(单位:M/百万) ✓ 核心定价依据
体力等级 数字输入 1-10 ✓ 非满级 → 比例+0.5
负重等级 数字输入 1-10 ✓ 非满级 → 比例+0.5
保险格子 数字输入 0-9 ✓ 非9格 → 比例+0.5
弹药与装备区(纳入租金计算)
字段 控件类型 校验规则 单价
AW子弹 数字输入 0-2000 0.7元/发
其他红弹 数字输入 0-9999 7元/组(60发/组)
6头 数字输入 0-999 2.5元/个
6甲 数字输入 0-999 2.5元/个
其他装备 多选列表 从预设装备列表中选择
皮肤资产区(影响比例)
字段 控件类型 可选皮肤
刀皮 多选卡片 赤霄、怜悯、影锋、黑海、北极星、坠星者
红皮 多选卡片 蚀金玫瑰、露娜联动皮肤、麦晓雯联动皮肤、麦晓雯水墨云图、威龙凌霄戍卫、吴彦祖
枪皮(砖皮) 多选卡片 KC17、MP7、M250、M7、K416、ASVAL
出租设定区
字段 控件类型 校验规则
押金金额 数字输入 由出租方自定,系统默认=租金×2;必须 ≥ 租金。若定太低导致毁号赔偿不足,平台最多返还租用方押金的87%

注意:租金是整号一口价,与租用天数无关。租用方下单时无需选择天数,租用时长由双方自行约定,平台不做限制。


3.3.2 预设标签系统

用户发布账号时从系统预设标签库中选择 3-8 个标签

标签库
分类 可选标签
资产评级 💰富哥号 💎土豪号 🪙小资号 💸平民号
装备充裕度 🔫满配6套 🛡多6头6甲 🎯高红弹 💣满配AW弹
皮肤亮点 🔪多刀皮 🔴满红皮 🖌砖皮丰富 🌟赤霄 🌟怜悯
数据表现 🏆高段位 ⭐满级号
便利性 📱可帐密登录 🔓可扫码登录 ⏰时间灵活 🕐全天可租

3.3.3 租金定价算法

租金 = 纯币租金 + 装备折价,与租用时间无关。比例格式 1:N 表示 1元 = N万纯币。

比例计算规则
初始比例:1:40

皮肤递减(各类型独立,累加生效):
  刀皮 1款→-1   2款及以上→-1.5
  红皮 1款→-1   2款及以上→-1.5
  枪皮 1款→-1   2款及以上→-1.5

属性惩罚(非满配则比例增加→租金降低):
  体力等级 < 10   →  +0.5
  负重等级 < 10   →  +0.5
  保险格子 < 9    →  +0.5

封底:1:35
装备折价
装备 单价 计算方式
AW子弹 0.7元/发 × 数量
其他红弹 7元/组 × ceil(数量÷60)
6头 2.5元/个 × 数量
6甲 2.5元/个 × 数量
计算代码
function calculateRatio(accountData, skinCounts) {
  let ratio = 40;
  if (skinCounts.knife === 1)       ratio -= 1;
  else if (skinCounts.knife >= 2)   ratio -= 1.5;
  if (skinCounts.redSkin === 1)     ratio -= 1;
  else if (skinCounts.redSkin >= 2) ratio -= 1.5;
  if (skinCounts.gunSkin === 1)     ratio -= 1;
  else if (skinCounts.gunSkin >= 2) ratio -= 1.5;
  if (accountData.staminaLevel < 10)  ratio += 0.5;
  if (accountData.weightLevel < 10)   ratio += 0.5;
  if (accountData.insuranceSlots < 9) ratio += 0.5;
  return Math.max(ratio, 35);
}

function calculateCoinRent(coinsInMillion, ratio) {
  const coins = coinsInMillion * 1000000;
  return Math.round(coins / (ratio * 10000) * 100) / 100;
}

function calculateEquipValue(data) {
  let v = 0;
  v += data.awBullets * 0.7;
  v += Math.ceil(data.otherRedBullets / 60) * 7;
  v += data.helmet6 * 2.5;
  v += data.armor6 * 2.5;
  return Math.round(v * 100) / 100;
}
计算示例
纯币3500M | 2刀皮+2红皮+1枪皮 | 体力10/负重10/保险9 | AW×200 红弹×180(3组) 6头×10 6甲×10
  ratio = 40 - 1.5 - 1.5 - 1 = 36
  纯币租金 = 35,000,000 / 360,000 = 97.22元
  装备折价 = 200×0.7 + 3×7 + 10×2.5 + 10×2.5 = 211元
  总租金 = 308.22元 → 出租方得 268.15元,平台得 40.07元

3.3.4 押金规则

规则 说明
设定方式 出租方自行设定
系统默认值 租金 × 2
下限 ≥ 租金
上限 ≤ 出租方钱包余额
毁号风控 租用方毁号时,平台最多将租用方押金的 87% 赔偿给出租方。若押金定太低导致赔偿不足,差额出租方自行承担

3.4 租用流程(租用方)

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌──────────────┐
│  大厅浏览筛选  │───▶│  查看账号详情  │───▶│  确认租用     │───▶│  支付押金     │
│             │    │  (含比例/租金) │    │             │    │  (钱包冻结)   │
└─────────────┘    └─────────────┘    └─────────────┘    └──────┬───────┘
┌─────────────┐    ┌─────────────┐    ┌──────────────┐    ┌─────────────┐
│ 结束租号     │◀───│  进行游戏    │◀───│ 获取登录凭证  │◀───│  系统发号    │
│(上传图+确认) │    │             │    │ (帐密/扫码)   │    │             │
└──────┬──────┘    └─────────────┘    └──────────────┘    └─────────────┘
  进入"待确认"阶段

3.4.1 支付后取消

  • 租用方支付押金后 20 分钟内可以无条件取消,押金全额退还
  • 超过 20 分钟后不可主动取消,需等待出租结束或走纠纷流程

3.4.2 大厅筛选条件

筛选维度 控件类型
游戏大区 单选:全部 / QQ / 微信
段位范围 双滑块
租金范围 双滑块(元)
纯币范围 双滑块(M)
皮肤标签 多选徽章
资产标签 多选徽章
登录方式 多选
信用分下限 滑块(0-100)
可用时间段 时间范围选择器
排序方式 租金从低到高 / 纯币从高到低 / 信用分从高到低 / 最新发布

3.5 登录与解冻流程

3.5.1 模式一:帐密直登

出租方提供帐密 → 平台解密 → 凭证页展示 → 租用方登录。租期结束凭证自动失效。

3.5.2 模式二:扫码登录

租用方点击"需要扫码登录"
  → 平台推送订阅消息给出租方
  → 出租方打开小程序处理
  → 若出租方 6小时内 不响应 → 租用方可取消订单,退还全部押金,出租方信用分 -10

3.5.3 解冻流程

租用方点击"需要解冻"
  → 平台推送订阅消息给出租方
  → 出租方完成解冻
  → 同样适用 6小时超时 规则

3.5.4 出租方不响应处罚

超时 处罚
6小时内未响应扫码/解冻请求 租用方可取消,押金全额退还
信用分 -10
累计3次 限制发布权限 30 天

3.6 交易结束与确认流程

租用方点击"结束租号"
┌──────────────────────────────────┐
│ 租用方上传游戏截图(证明号完好)     │
│ 点击"确认结束"                    │
└──────────────┬───────────────────┘
         订单进入"待确认"状态
    ┌──────────┼──────────┐
    ▼                     ▼
出租方确认无误          出租方有异议
    │                     │
    ▼                     ▼
┌──────────┐        ┌──────────────┐
│ 双方互评  │        │ 出租方上传证据 │
│ 自动分账  │        │ 进入纠纷流程   │
└──────────┘        └──────────────┘

3.6.1 结束租号 — 租用方操作

  1. 租用方点击"结束租号"
  2. 必须上传至少 1 张游戏截图(展示账号当前状态——纯币余额、装备、皮肤等),最多9张
  3. 点击"确认结束"
  4. 订单进入"待确认"状态,通知出租方

3.6.2 出租方确认

  • 出租方查看租用方上传的截图
  • 确认无误 → 点击"确认完成" → 进入分账 + 互评
  • 有异议 → 点击"有异议" → 出租方上传自己的证据截图 → 进入 AI 客服纠纷流程

3.6.3 互评系统

双方都确认完成后,进入互评:

┌────────────────────────────────────┐
│  请为本次交易对方评分                │
│                                    │
│  ⭐⭐⭐⭐⭐  (5星)                   │
│                                    │
│  评价标签(多选):                  │
│  □ 响应及时  □ 账号与描述一致        │
│  □ 沟通顺畅  □ 值得信赖             │
│  □ 响应慢    □ 账号与描述不符        │
│                                    │
│  [提交评价]  [跳过]                │
└────────────────────────────────────┘
规则 说明
评价非强制 可跳过
评价匿名 对方看不到是谁评的
信用分挂钩 获5星好评 → +1分;获负面标签 → -2分
评价时间窗口 交易完成后 7 天内可评

3.7 交易生命周期(完整)

                  ┌──────────┐
                  │ 待出租    │ ← 出租方发布,押金冻结
                  └────┬─────┘
                       │ 租用方下单+支付押金
                  ┌──────────┐
                  │ 进行中    │ ← 发号→登录→游戏
                  └────┬─────┘
                       │ 租用方结束租号+上传截图
                  ┌──────────┐
                  │ 待确认    │
                  └────┬─────┘
          ┌────────────┼────────────┐
          ▼                         ▼
    双方确认完成               一方有异议
          │                    (上传证据)
          ▼                         ▼
    ┌──────────┐             ┌──────────┐
    │  互评     │             │ AI客服介入│
    │  分账     │             └────┬─────┘
    └──────────┘                  │
                       ┌──────────┼──────────┐
                       ▼                     ▼
                  AI解决                  AI未解决
                       │                     │
                       ▼                     ▼
                  分账/退款             ┌──────────┐
                                      │ 人工客服  │
                                      │ 仲裁处理  │
                                      └──────────┘

3.7.1 退款与取消汇总

场景 结果
租用方支付押金后 20 分钟内取消 全额退还押金
出租方 6 小时不响应扫码/解冻 租用方可取消,全额退押金,出租方信用分 -10
出租方主动下架未出租的账号 解冻押金,退还
双方确认完成 正常分账(87%/13%)
AI/人工判定毁号 租用方押金的87%赔出租方
AI/人工判定出租方违约 退还租用方全部押金,扣除出租方押金

3.8 AI 智能客服系统

3.8.1 触发条件

  • 每笔交易自动获得 1 次 AI 客服会话额度
  • 出租方在"待确认"阶段点击"有异议"
  • 系统自动创建 AI 客服会话,同时附带双方上传的证据图片

3.8.2 AI 客服能力

能力 说明
读取交易快照 订单详情、账号发布时的数据
证据图片分析 对双方上传的截图做对比分析(纯币数量变化、装备增减等)
纠纷分类 毁号 / 提前收回 / 账号不符 / 登录问题 / 其他
自动判责 规则引擎 + 证据对比
小额裁决 争议额 < 50元可直接执行

3.8.3 转人工条件

  • 用户明确要求
  • AI 置信度 < 70% 连续 3 轮
  • 争议金额 > 200 元
  • 涉及账号被盗等严重问题
  • 会话超过 20 轮未解决

3.8.4 AI 客服 Prompt

你是"小K",游戏账号租赁平台AI客服。

规则:
- 出租方租期内收回账号 → 全额退租用方押金,扣出租方全部押金
- 租用方毁号(开挂/删装备/恶意消耗)→ 租用方押金87%赔出租方
- 账号信息与发布不符 → 退租用方,扣出租方50%押金
- 登录/解冻6小时不响应 → 租用方可取消,出租方信用分-10
- 双方有过错 → 按过错比例分摊
- 证据不足 → 转人工

四、数据库设计

4.1 ER 图(核心表)

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
   user         account        order         rating  
├──────────┤    ├──────────┤    ├──────────┤    ├──────────┤
 id             id             id             id        
 credit         owner_id       account_id     order_id  
 ...            rent           renter_id      score     
└──────────┘     ...            status         tags      
                └──────────┘     ...           └──────────┘
                                └──────────┘

┌──────────┐    ┌──────────┐    ┌──────────────┐
 dispute       evidence      login_request
├──────────┤    ├──────────┤    ├──────────────┤
 id             id             id           
 order_id       dispute_id    order_id     
 status         type           request_type 
 ...            url            status       
└──────────┘     uploader      └──────────────┘
                └──────────┘

4.2 核心表 SQL

-- ========================
-- 用户表
-- ========================
CREATE TABLE `user` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `open_id` VARCHAR(64) NOT NULL UNIQUE COMMENT '微信OpenID',
  `union_id` VARCHAR(64) DEFAULT NULL,
  `nickname` VARCHAR(64) NOT NULL,
  `avatar_url` VARCHAR(512) DEFAULT NULL,
  `real_name` VARCHAR(32) DEFAULT NULL,
  `id_card` VARCHAR(256) DEFAULT NULL COMMENT 'AES加密',
  `is_verified` TINYINT NOT NULL DEFAULT 0,
  `balance` INT NOT NULL DEFAULT 0 COMMENT '钱包余额(分)',
  `frozen_balance` INT NOT NULL DEFAULT 0 COMMENT '冻结金额(分)',
  `credit_score` INT NOT NULL DEFAULT 100 COMMENT '信用分 0-100',
  `subscribe_times` INT NOT NULL DEFAULT 0,
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '1正常 2冻结 3封禁',
  `violation_count` INT NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX `idx_open_id` (`open_id`),
  INDEX `idx_status` (`status`),
  INDEX `idx_credit` (`credit_score`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 账号表
-- ========================
CREATE TABLE `account` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `owner_id` BIGINT UNSIGNED NOT NULL,
  `game_zone` ENUM('qq','wechat') NOT NULL,
  `level` INT NOT NULL COMMENT '30-60',
  `rank` VARCHAR(32) NOT NULL,
  `can_password` TINYINT NOT NULL DEFAULT 0,
  `account_name` VARCHAR(256) DEFAULT NULL COMMENT 'AES加密',
  `account_password` VARCHAR(256) DEFAULT NULL COMMENT 'AES加密',
  `login_mode` ENUM('password','qrcode','both') NOT NULL DEFAULT 'qrcode',
  `contact_phone` VARCHAR(256) DEFAULT NULL COMMENT 'AES加密,仅后端可见',
  `available_from` TIME NOT NULL,
  `available_to` TIME NOT NULL,

  `coins` INT NOT NULL DEFAULT 0 COMMENT '纯币(单位M), 40-2099',
  `stamina_level` INT NOT NULL DEFAULT 0 COMMENT '1-10',
  `weight_level` INT NOT NULL DEFAULT 0 COMMENT '1-10',
  `insurance_slots` INT NOT NULL DEFAULT 0 COMMENT '0-9',

  `aw_bullets` INT NOT NULL DEFAULT 0 COMMENT '0-2000',
  `other_red_bullets` INT NOT NULL DEFAULT 0,
  `helmet_6` INT NOT NULL DEFAULT 0,
  `armor_6` INT NOT NULL DEFAULT 0,
  `other_equipment` JSON DEFAULT NULL,

  `ratio` DECIMAL(4,1) NOT NULL,
  `coin_rent` INT NOT NULL COMMENT '纯币租金(分)',
  `equip_value` INT NOT NULL COMMENT '装备折价(分)',
  `rent` INT NOT NULL COMMENT '总租金(分)',
  `deposit` INT NOT NULL COMMENT '出租方押金(分)',

  `status` ENUM('pending','listed','rented','offline') NOT NULL DEFAULT 'pending',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  INDEX `idx_owner` (`owner_id`),
  INDEX `idx_status_zone` (`status`, `game_zone`),
  INDEX `idx_rent` (`rent`),
  INDEX `idx_coins` (`coins`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 账号-皮肤关联表
-- ========================
CREATE TABLE `account_skin` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `account_id` BIGINT UNSIGNED NOT NULL,
  `skin_id` VARCHAR(32) NOT NULL,
  `skin_type` ENUM('knife','red_skin','gun_skin') NOT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`account_id`) REFERENCES `account`(`id`) ON DELETE CASCADE,
  INDEX `idx_account` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 账号-标签关联表
-- ========================
CREATE TABLE `account_tag` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `account_id` BIGINT UNSIGNED NOT NULL,
  `tag_code` VARCHAR(32) NOT NULL,
  FOREIGN KEY (`account_id`) REFERENCES `account`(`id`) ON DELETE CASCADE,
  INDEX `idx_account` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 皮肤预设库
-- ========================
CREATE TABLE `skin_library` (
  `id` VARCHAR(32) PRIMARY KEY,
  `name` VARCHAR(64) NOT NULL,
  `type` ENUM('knife','red_skin','gun_skin') NOT NULL,
  `is_active` TINYINT NOT NULL DEFAULT 1,
  `sort_order` INT NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `skin_library` (`id`, `name`, `type`, `sort_order`) VALUES
  ('knife_chixiao', '赤霄', 'knife', 1),
  ('knife_lianmin', '怜悯', 'knife', 2),
  ('knife_yingfeng', '影锋', 'knife', 3),
  ('knife_heihai', '黑海', 'knife', 4),
  ('knife_beijixing', '北极星', 'knife', 5),
  ('knife_zhuixingzhe', '坠星者', 'knife', 6),
  ('red_shijinmeigui', '蚀金玫瑰', 'red_skin', 1),
  ('red_luna', '露娜联动皮肤', 'red_skin', 2),
  ('red_maixiaowen1', '麦晓雯联动皮肤', 'red_skin', 3),
  ('red_maixiaowen2', '麦晓雯水墨云图', 'red_skin', 4),
  ('red_weilong', '威龙凌霄戍卫', 'red_skin', 5),
  ('red_wuyanzu', '吴彦祖', 'red_skin', 6),
  ('gun_kc17', 'KC17', 'gun_skin', 1),
  ('gun_mp7', 'MP7', 'gun_skin', 2),
  ('gun_m250', 'M250', 'gun_skin', 3),
  ('gun_m7', 'M7', 'gun_skin', 4),
  ('gun_k416', 'K416', 'gun_skin', 5),
  ('gun_asval', 'ASVAL', 'gun_skin', 6);

-- ========================
-- 标签预设库
-- ========================
CREATE TABLE `tag_library` (
  `code` VARCHAR(32) PRIMARY KEY,
  `name` VARCHAR(32) NOT NULL,
  `category` VARCHAR(32) NOT NULL,
  `icon` VARCHAR(8) DEFAULT NULL,
  `color` VARCHAR(7) NOT NULL DEFAULT '#1890FF',
  `auto_rule` JSON DEFAULT NULL,
  `is_active` TINYINT NOT NULL DEFAULT 1,
  `sort_order` INT NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 订单表
-- ========================
CREATE TABLE `order` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `order_no` VARCHAR(32) NOT NULL UNIQUE,
  `account_id` BIGINT UNSIGNED NOT NULL,
  `owner_id` BIGINT UNSIGNED NOT NULL,
  `renter_id` BIGINT UNSIGNED NOT NULL,
  `ratio` DECIMAL(4,1) NOT NULL,
  `coin_rent` INT NOT NULL COMMENT '纯币租金(分)',
  `equip_value` INT NOT NULL COMMENT '装备折价(分)',
  `total_rent` INT NOT NULL COMMENT '总租金(分)',
  `owner_deposit` INT NOT NULL,
  `renter_deposit` INT NOT NULL,
  `platform_fee` INT NOT NULL COMMENT '平台手续费(分)',
  `login_mode` ENUM('password','qrcode') NOT NULL,
  `status` ENUM('pending','active','confirming','done','disputed','cancelled') NOT NULL DEFAULT 'pending',
  `cancel_reason` VARCHAR(200) DEFAULT NULL COMMENT '取消原因',
  `owner_frozen_id` BIGINT UNSIGNED DEFAULT NULL,
  `renter_frozen_id` BIGINT UNSIGNED DEFAULT NULL,
  `start_time` DATETIME DEFAULT NULL,
  `end_time` DATETIME DEFAULT NULL,
  `owner_confirm_at` DATETIME DEFAULT NULL,
  `renter_confirm_at` DATETIME DEFAULT NULL,
  `ai_session_id` BIGINT UNSIGNED DEFAULT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX `idx_owner` (`owner_id`),
  INDEX `idx_renter` (`renter_id`),
  INDEX `idx_status` (`status`),
  INDEX `idx_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 证据/图片表(统一管理结束确认图+纠纷证据图)
-- ========================
CREATE TABLE `evidence` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `order_id` BIGINT UNSIGNED NOT NULL,
  `dispute_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '纠纷ID(纠纷证据时关联)',
  `uploader_id` BIGINT UNSIGNED NOT NULL COMMENT '上传者',
  `scene` ENUM('end_confirm','dispute') NOT NULL COMMENT '场景:结束确认/纠纷举证',
  `url` VARCHAR(512) NOT NULL COMMENT 'COS私有存储URL',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`order_id`) REFERENCES `order`(`id`),
  INDEX `idx_order` (`order_id`),
  INDEX `idx_dispute` (`dispute_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 评价表
-- ========================
CREATE TABLE `rating` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `order_id` BIGINT UNSIGNED NOT NULL,
  `from_user_id` BIGINT UNSIGNED NOT NULL COMMENT '评价方',
  `to_user_id` BIGINT UNSIGNED NOT NULL COMMENT '被评价方',
  `score` TINYINT NOT NULL COMMENT '1-5星',
  `tags` JSON DEFAULT NULL COMMENT '评价标签列表',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`order_id`) REFERENCES `order`(`id`),
  UNIQUE KEY `uk_order_from` (`order_id`, `from_user_id`),
  INDEX `idx_to_user` (`to_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 登录/解冻请求表
-- ========================
CREATE TABLE `login_request` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `order_id` BIGINT UNSIGNED NOT NULL,
  `request_type` ENUM('scan_login','unfreeze') NOT NULL,
  `status` ENUM('pending','processing','completed','timeout','cancelled') NOT NULL DEFAULT 'pending',
  `notify_sent_at` DATETIME DEFAULT NULL,
  `responded_at` DATETIME DEFAULT NULL,
  `expire_at` DATETIME DEFAULT NULL COMMENT '超时=创建后6小时',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`order_id`) REFERENCES `order`(`id`),
  INDEX `idx_order` (`order_id`),
  INDEX `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 钱包流水表
-- ========================
CREATE TABLE `wallet_transaction` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `user_id` BIGINT UNSIGNED NOT NULL,
  `type` ENUM('recharge','freeze','unfreeze','deduct','income','withdraw','refund') NOT NULL,
  `amount` INT NOT NULL COMMENT '(分)正=入账 负=出账',
  `balance_before` INT NOT NULL,
  `balance_after` INT NOT NULL,
  `order_id` BIGINT UNSIGNED DEFAULT NULL,
  `remark` VARCHAR(200) DEFAULT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  INDEX `idx_user` (`user_id`),
  INDEX `idx_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 纠纷表
-- ========================
CREATE TABLE `dispute` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `order_id` BIGINT UNSIGNED NOT NULL,
  `initiator` ENUM('owner','renter') NOT NULL,
  `dispute_type` ENUM('account_damage','early_recall','overtime','mismatch','login_issue','other') NOT NULL,
  `description` VARCHAR(500) NOT NULL,
  `status` ENUM('ai_processing','ai_resolved','escalated','resolved') NOT NULL DEFAULT 'ai_processing',
  `ai_result` JSON DEFAULT NULL,
  `human_result` JSON DEFAULT NULL,
  `final_owner_amount` INT DEFAULT NULL,
  `final_renter_amount` INT DEFAULT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `resolved_at` DATETIME DEFAULT NULL,
  FOREIGN KEY (`order_id`) REFERENCES `order`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- AI客服会话表
-- ========================
CREATE TABLE `ai_session` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `order_id` BIGINT UNSIGNED NOT NULL,
  `status` ENUM('active','resolved','escalated','expired') NOT NULL DEFAULT 'active',
  `chat_log` JSON DEFAULT NULL,
  `ai_judgment` JSON DEFAULT NULL,
  `confidence` DECIMAL(3,2) DEFAULT NULL,
  `turn_count` INT NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`order_id`) REFERENCES `order`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ========================
-- 人工客服工单表
-- ========================
CREATE TABLE `support_ticket` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `dispute_id` BIGINT UNSIGNED NOT NULL,
  `ai_session_id` BIGINT UNSIGNED NOT NULL,
  `assignee_id` BIGINT UNSIGNED DEFAULT NULL,
  `status` ENUM('pending','processing','resolved','closed') NOT NULL DEFAULT 'pending',
  `resolution` VARCHAR(1000) DEFAULT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `resolved_at` DATETIME DEFAULT NULL,
  FOREIGN KEY (`dispute_id`) REFERENCES `dispute`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

五、API 接口设计

5.1 接口规范

  • Base URL: https://api.aikun.com/v1
  • 认证方式: Bearer Token (JWT)
  • 金额单位:
  • 纯币单位:M(百万)
  • 请求/响应格式: JSON

5.2 核心接口列表

5.2.1 用户模块

方法 路径 说明
POST /user/login 微信登录
POST /user/verify 实名认证
GET /user/profile 个人信息(含信用分)
GET /user/wallet 钱包余额
POST /user/wallet/recharge 充值
GET /user/wallet/transactions 钱包流水
POST /user/subscribe 授权订阅消息
GET /user/ratings 查看某用户的评价记录

5.2.2 系统数据模块

方法 路径 说明
GET /system/ranks 段位枚举
GET /system/skins 皮肤库
GET /system/tags 标签库
GET /system/equipment-list 预设装备列表

5.2.3 账号模块

方法 路径 说明
POST /account/create 发布账号
PUT /account/:id 修改账号
DELETE /account/:id 下架(解冻押金)
GET /account/:id 账号详情
GET /account/list 大厅列表
GET /account/my-list 我发布的账号

5.2.4 订单模块

方法 路径 说明
POST /order/create 创建订单
POST /order/:id/pay 支付押金
POST /order/:id/cancel 取消订单(20分钟内/6小时超时)
GET /order/:id/credential 获取登录凭证
POST /order/:id/request-scan 请求扫码登录
POST /order/:id/request-unfreeze 请求解冻
POST /order/:id/owner-handle-request 出租方处理请求
POST /order/:id/end-rental 租用方结束租号(上传截图+确认)
POST /order/:id/owner-confirm 出租方确认完成
POST /order/:id/owner-dispute 出租方发起异议(上传证据)
POST /order/:id/rate 提交评价
GET /order/:id 订单详情
GET /order/my-orders 我的订单列表

5.2.5 客服模块

方法 路径 说明
POST /cs/ai/start 开启AI客服会话
WS /cs/ai/chat/:sessionId AI客服对话
POST /cs/ai/terminate 结束AI会话
POST /cs/escalate 转人工客服

5.3 关键接口示例

POST /order/:id/end-rental — 租用方结束租号

// Request (multipart/form-data)
{
  "images": ["file1.png", "file2.png"]   // 至少1张游戏截图
}

// Response
{
  "code": 0,
  "data": {
    "order_id": 20001,
    "status": "confirming",
    "message": "已提交结束确认,等待出租方确认"
  }
}

POST /order/:id/owner-dispute — 出租方发起异议

// Request (multipart/form-data)
{
  "dispute_type": "account_damage",
  "description": "账号的AW子弹少了50发,6头少了3个",
  "images": ["evidence1.png", "evidence2.png"]
}

// Response
{
  "code": 0,
  "data": {
    "dispute_id": 30001,
    "ai_session_id": 40001,
    "status": "ai_processing"
  }
}

POST /order/:id/rate — 提交评价

// Request
{
  "score": 5,
  "tags": ["responsive", "accurate"]
}

// Response
{
  "code": 0,
  "data": { "message": "评价成功" }
}

六、前端页面结构

6.1 页面路由

├── pages/
│   ├── index/                  # 大厅首页
│   ├── account/
│   │   ├── detail/             # 账号详情(含出租方信用分)
│   │   ├── publish/            # 发布账号(纯表单)
│   │   └── my-list/            # 我发布的账号
│   ├── order/
│   │   ├── confirm/            # 确认订单
│   │   ├── detail/             # 订单详情
│   │   ├── credential/         # 登录凭证页
│   │   ├── end-rental/         # 结束租号(上传截图+确认)
│   │   ├── dispute/            # 纠纷处理(上传证据+AI对话)
│   │   ├── rate/               # 评价页
│   │   └── my-orders/          # 我的订单列表
│   ├── user/
│   │   ├── center/             # 个人中心(含信用分)
│   │   ├── wallet/             # 我的钱包
│   │   ├── verify/             # 实名认证
│   │   ├── ratings/            # 评价记录
│   │   └── settings/           # 设置
│   └── cs/
│       ├── ai-chat/            # AI客服对话
│       └── ticket/             # 人工工单详情

6.2 大厅列表卡片 UI

┌──────────────────────────────────────────┐
│  │ 黑鹰 · QQ区          ¥308.22          │
│  │ 💰富哥号 🔪多刀皮 📱可帐密            │
│  │ 纯币3500M │ 比例1:36 │ Lv.60         │
│  │ 刀皮: 赤霄 怜悯                       │
│  │ 红皮: 蚀金玫瑰 露娜联动               │
│  │ 砖皮: K416                           │
│  │ AW×200 红弹×3组 6头×10 6甲×10       │
│  │ 🔒押金¥616  ⭐信用100  🕐08-02       │
└──────────────────────────────────────────┘

6.3 结束租号页(租用方)

┌──────────────────────────────────────────┐
│  结束租号 — AK2026050700001              │
├──────────────────────────────────────────┤
│  请上传游戏截图(证明账号完好)             │
│  ┌────┐ ┌────┐ ┌────┐                   │
│  │ +  │ │ 📷 │ │    │                   │
│  └────┘ └────┘ └────┘                   │
│  (至少上传1张,最多9张)                   │
│                                          │
│  上传要求:                               │
│  · 需包含纯币余额页面截图                  │
│  · 需包含装备/皮肤页面截图                 │
│                                          │
│  ⚠️ 请确认账号状态与租用时一致             │
│                                          │
│  ┌──────────────────────────────────┐    │
│  │          确认结束租号              │    │
│  └──────────────────────────────────┘    │
└──────────────────────────────────────────┘

七、运营管理后台

7.1 总体架构

┌─────────────────────────────────────────────────┐
│              Vue3 + Element Plus                  │
│                管理后台前端                        │
└─────────────────────┬───────────────────────────┘
                      │ 独立API (/admin/v1)
┌─────────────────────▼───────────────────────────┐
│              后台API服务(可共用业务服务)           │
│   ┌──────────┬──────────┬──────────┬──────────┐ │
│   │ 用户管理  │ 账号审核  │ 订单监控  │ 纠纷仲裁  │ │
│   └──────────┴──────────┴──────────┴──────────┘ │
│   ┌──────────┬──────────┬──────────┬──────────┐ │
│   │ 财务对账  │ 配置管理  │ 数据看板  │ 操作日志  │ │
│   └──────────┴──────────┴──────────┴──────────┘ │
└─────────────────────────────────────────────────┘

7.2 功能模块

7.2.1 用户管理

功能 说明
用户列表 搜索(昵称/手机号/ID)、筛选(状态/信用分范围)、排序
用户详情 基本信息、实名状态、钱包、信用分变动历史、交易记录
冻结/解封 手动冻结/解封用户,填写原因(记录操作日志)
信用分调整 手动加减信用分(需审批)

7.2.2 账号审核

功能 说明
审核队列 信用分 < 50 的用户发布账号需人工审核
异常标记 自动检测异常值(偏离均值 3σ),标红提醒
强制下架 违规账号强制下架,附带原因
审核通过/驳回 驳回时需填写原因,通知用户修改

7.2.3 订单监控

功能 说明
实时订单列表 按状态筛选、搜索订单号/用户
异常订单标记 长期未确认、多次扫码请求超时等
订单详情 完整订单信息 + 结束确认截图 + 纠纷记录
强制介入 特殊情况手动结束订单、手动分账/退款

7.2.4 纠纷仲裁(人工客服工作台)

┌─────────────────────────────────────────────────┐
│  工单 #TK001              [处理中]   客服:张三    │
├─────────────────────────────────────────────────┤
│  左侧:AI会话记录          右侧:工单信息          │
│  ┌──────────────────┐ ┌────────────────────┐   │
│  │ AI: 经分析...     │ │ 订单号: AK2026...   │   │
│  │ 用户: 我不同意    │ │ 纠纷类型: 毁号       │   │
│  │ AI: 建议转人工    │ │ 争议金额: ¥211      │   │
│  │ ...              │ │                    │   │
│  └──────────────────┘ │ [租用方截图]        │   │
│                       │ [出租方截图]        │   │
│                       │                    │   │
│                       │ 裁决:              │   │
│                       │ ○ 租用方全责       │   │
│                       │ ○ 出租方全责       │   │
│                       │ ○ 双方分摊: [ ]%   │   │
│                       │                    │   │
│                       │ [提交裁决]         │   │
│                       └────────────────────┘   │
└─────────────────────────────────────────────────┘
功能 说明
工单队列 待处理/处理中/已解决
证据查看 查看双方上传的所有截图(仅后台可见)
AI辅助 展示AI分析结果和建议,辅助人工判断
裁决执行 裁决后自动执行分账/退款
工单分配 按客服负载自动分配或手动指派

7.2.5 财务管理

功能 说明
交易流水 所有钱包交易记录,支持导出
平台收入 手续费汇总,按日/周/月统计
对账报表 每日自动对账,异常差额告警
提现审核 用户提现审批(大额 > 500元人工审核)
退款操作 特殊情况手动退款(需二级审批)

7.2.6 系统配置

配置项 说明
定价参数 基础比例(40)、封底比例(35)、皮肤递减值、属性惩罚值、装备单价
规则参数 平台手续费率(13%)、取消窗口(20分钟)、扫码超时(6小时)、AI会话上限(20轮)
皮肤库管理 增删改皮肤(上下架、排序)
标签库管理 增删改标签、调整自动推荐规则
装备列表 管理"其他装备"多选项

7.2.7 数据看板

指标 说明
核心指标 今日交易额、今日订单数、平台收入、活跃用户数
趋势图 交易额/订单数 按日/周/月折线图
纠纷率 纠纷订单占比、AI解决率、人工解决率
用户分析 新注册、实名率、信用分分布
热门账号 上架最多的大区、段位分布、平均租金

7.2.8 操作日志

所有后台操作(冻结用户、强制下架、手动分账等)记录日志:操作人、操作时间、操作类型、操作内容、IP。

7.3 后台权限模型

角色 权限范围
超级管理员 全部权限 + 系统配置
客服人员 纠纷仲裁、用户查看、订单查看
财务人员 财务对账、提现审核、退款操作
运营人员 账号审核、皮肤/标签库管理、数据看板

八、安全设计

8.1 资金安全

措施 说明
分布式锁 资金操作加 Redis 锁
流水不可逆 wallet_transaction 仅 INSERT
对账机制 每日自动对账
提现审核 大额手动审批
退款二级审批 后台手动退款需两人确认

8.2 账号信息安全

措施 说明
帐密/电话 AES-256 加密 密钥仅后端持有
凭证页防截屏 可选
凭证过期自动失效
证据图片 COS 私有存储 仅客服后台可查看
零自由文本 杜绝夹带联系方式

九、开发路线图

Phase 1 — MVP(4-6周)

周次 内容
第1周 项目搭建、用户登录、实名认证
第2周 皮肤库+标签库初始化、账号发布表单、比例定价算法+装备折价
第3周 大厅列表、账号详情
第4周 订单创建、押金支付、登录凭证页、取消/超时机制
第5周 结束租号(上传截图+确认)、分账、纠纷入口
第6周 测试、修Bug、内测上线

Phase 2 — 客服+信用(2-3周)

周次 内容
第7周 AI客服对话 + WebSocket
第8周 AI判责规则引擎、互评系统
第9周 人工客服工单、后台纠纷仲裁界面

Phase 3 — 管理后台+优化(3-4周)

周次 内容
第10周 后台框架搭建、用户管理、账号审核
第11周 订单监控、财务对账、系统配置
第12周 数据看板、操作日志、权限体系
第13周 全面测试、优化、正式上线

十、附录

A. 状态码规范

状态码 说明
0 成功
1001 参数错误
1002 未登录
1003 未实名认证
1004 余额不足
1005 账号状态异常
1006 订单状态不允许此操作
1007 敏感信息拦截
1008 AI客服次数已用完
1009 数值超出合理范围
1010 凭证已失效
1011 登录请求超时
1012 取消时间窗口已过
1013 信用分不足
2001 服务器内部错误

B. 枚举值定义

账号状态:      pending / listed / rented / offline
订单状态:      pending / active / confirming / done / disputed / cancelled
纠纷状态:      ai_processing / ai_resolved / escalated / resolved
纠纷类型:      account_damage / early_recall / overtime / mismatch / login_issue / other
登录方式:      password / qrcode / both
证据场景:      end_confirm(结束确认) / dispute(纠纷举证)
皮肤类型:      knife / red_skin / gun_skin
钱包流水:      recharge / freeze / unfreeze / deduct / income / withdraw / refund

C. 段位枚举

编码 显示名
bronze 青铜
silver 白银
gold 黄金
platinum 铂金
diamond 钻石
black_eagle 黑鹰
delta_peak 三角洲巅峰

D. 皮肤预设清单

类型 皮肤
刀皮 赤霄、怜悯、影锋、黑海、北极星、坠星者
红皮 蚀金玫瑰、露娜联动皮肤、麦晓雯联动皮肤、麦晓雯水墨云图、威龙凌霄戍卫、吴彦祖
枪皮 KC17、MP7、M250、M7、K416、ASVAL

E. 评价标签

正面标签 负面标签
响应及时 响应慢
账号与描述一致 账号与描述不符
沟通顺畅 态度差
值得信赖 不靠谱