# Kylin Anti-Addiction

麒麟游戏服务平台 — 防沉迷系统包，依据国家新闻出版署通知要求实现。

## 概述

本包实现国家新闻出版署《关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知》（2021年）的全部要求，提供完整的防沉迷解决方案。

## 核心功能

### 1. 实名认证（禁止游客模式）

- 对接公安系统实名认证接口（阿里云/公安）
- 未实名用户禁止游戏
- 身份证号自动提取生日，计算年龄分组

### 2. 时段限制

- 未成年人仅可在 **周五、周六、周日及法定节假日 20:00-21:00** 游戏时段内游戏
- 其他时间禁止游戏
- 每日最大游戏时长 1 小时

### 3. 消费限额

| 年龄分组 | 单次限额 | 月累计限额 |
|---------|---------|-----------|
| <8 周岁（child） | 禁止充值 | 禁止充值 |
| 8-15 周岁（junior_minor） | 50 元 | 200 元 |
| 16-17 周岁（senior_minor） | 100 元 | 400 元 |
| >=18 周岁（adult） | 无限制 | 无限制 |

### 4. 人脸识别

- 游戏时长异常触发
- 新设备登录触发
- 消费行为异常触发
- 定期随机抽检
- 支持腾讯云/阿里云/百度云 SDK

### 5. AI 行为分析

- 时段异常检测（凌晨高频游戏）
- 操作异常检测（短频快游戏模式）
- 消费异常检测（小额高频消费）
- 社交异常检测（预留扩展）
- 综合评分超过阈值自动触发人脸识别

### 6. 宵禁机制

- 默认夜间 22:00-08:00 禁止游戏
- 适用于所有用户（含成年人）

## 安装

```bash
composer require kylin/anti-addiction
```

## 配置发布

```bash
php artisan vendor:publish --tag=kylin-anti-addiction-config
php artisan vendor:publish --tag=kylin-anti-addiction-migrations
php artisan migrate
```

## 配置说明

```php
// config/kylin-anti-addiction.php
return [
    'real_name_verify' => [
        'enabled' => true,           // 启用实名认证
        'no_guest' => true,          // 禁止游客模式
        'provider' => 'aliyun',      // 认证服务商：aliyun/gongan
    ],
    'time_restriction' => [
        'enabled' => true,
        'time_slot' => ['start' => '20:00', 'end' => '21:00'],
        'allowed_days' => [5, 6, 7], // 周五、周六、周日
        'max_daily_minutes' => 60,   // 每日最大游戏时长（分钟）
    ],
    'curfew' => [
        'enabled' => true,           // 宵禁（默认开启）
        'start' => '22:00',
        'end' => '08:00',
    ],
    'spending_limits' => [
        'child' => ['single' => 0, 'monthly' => 0],            // <8岁 禁止充值
        'junior_minor' => ['single' => 5000, 'monthly' => 20000], // 8-15岁 50/200元（分）
        'senior_minor' => ['single' => 10000, 'monthly' => 40000], // 16-17岁 100/400元（分）
    ],
    'face_recognition' => [
        'enabled' => true,
        'trigger_on_play_time' => true,    // 游戏时长异常触发
        'trigger_on_new_device' => true,   // 新设备登录触发
        'trigger_on_spending' => true,     // 消费异常触发
        'random_check' => true,            // 随机抽检
        'sdk' => 'tencent',                // 支持：tencent/aliyun/baidu
    ],
    'minor_data_protection' => [
        'parental_consent' => true,        // 监护人同意
        'data_retention_days' => 365,      // 数据保留期限
        'desensitize' => true,             // 数据脱敏
    ],
    'audit' => [
        'enabled' => true,                 // 审计日志
        'log_all_checks' => true,          // 记录所有防沉迷检查
    ],
];
```

## API 接口

| 方法 | 路径 | 说明 | 认证 |
|------|------|------|------|
| GET | /kylin/anti-addiction/check | 防沉迷检查 | 需要 |
| POST | /kylin/anti-addiction/heartbeat | 心跳上报 | 需要 |
| POST | /kylin/anti-addiction/spending-check | 消费限额检查 | 需要 |
| POST | /kylin/anti-addiction/real-name-verify | 实名认证 | 需要 |
| POST | /kylin/anti-addiction/face-verify | 人脸验证 | 需要 |
| POST | /kylin/anti-addiction/analyze-behavior | AI 行为分析 | 需要 |
| GET | /kylin/anti-addiction/holidays | 节假日列表 | 无需 |
| GET | /kylin/anti-addiction/records | 防沉迷记录 | 需要 |

## 使用示例

### 防沉迷检查

```php
use Kylin\AntiAddiction\Facades\KylinAntiAddiction;

$result = KylinAntiAddiction::check($userId, $gameId);
// $result = [
//     'allowed' => true/false,
//     'age_group' => AgeGroup,
//     'restrictions' => [...],
//     'popups' => [...],
//     'remaining_seconds' => 3600,
// ]
```

### 消费限额检查

```php
$result = KylinAntiAddiction::checkSpending($userId, 5000); // 50 元 = 5000 分
```

### 实名认证

```php
use Kylin\AntiAddiction\Services\RealNameVerifyService;

$result = app(RealNameVerifyService::class)->verify($userId, '张三', '110101199001011234');
```

## 数据库表

运行迁移创建以下表：

- `kylin_anti_addiction_records` - 防沉迷记录
- `kylin_play_sessions` - 游戏会话
- `kylin_spending_records` - 消费记录
- `kylin_holidays` - 法定节假日

## 法律合规

详见 [LEGAL.md](./LEGAL.md)，涵盖：
- 《中华人民共和国未成年人保护法》(2021.6.1 修订)
- 《关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知》(国家新闻出版署, 2021.8.30)
- 《未成年人网络保护条例》(2024.1.1)
- 《中华人民共和国个人信息保护法》(2021.11.1)
- 《关于防止未成年人沉迷网络游戏的通知》(国新出发〔2019〕34号)

## 依赖

- `kylin/core` - 核心包（ApiResponse、BaseModel、异常体系）
- `kylin/user` - 用户包（User、UserProfile 模型）

## 许可证

私有软件，未经授权禁止使用。