---
description: 在history页面新增特码冷热号查询功能 — 选定某一期，向前推算y期，判断该期特码属于冷号还是热号
tasks: 3
must_haves:
  - 后端接口接收 expect(期号) 和 lookback(向前期数) 参数
  - 计算逻辑: 从指定期号往前lookback期, 统计该期特码在lookback范围内的出现频率, 判定冷热
  - 前端弹窗: 选择期号 + 输入向前期数 + 展示冷热判定结果
plan_model: quick
---

# Quick Plan: 在history页面新增特码冷热号查询功能

## Task 1: 后端 Model — 添加 getSpecialHotColdByExpect 方法

**Files:** `application/admin/model/History.php`

**Action:** 新增方法 `getSpecialHotColdByExpect($expect, $lookback)`

- 根据指定期号 `expect` 查询到该期数据，获取该期特码 `num7`
- 从该期往前数 `lookback` 期（不包含该期本身），统计这期间每个号码的出现次数
- 计算该特码在 lookback 范围内的出现次数和频率
- 根据频率分布判定冷热：将该号码的出现次数与所有号码的平均值比较
  - 高于平均值 1.5 倍以上 → 热号
  - 低于平均值 0.5 倍以下 → 冷号
  - 介于之间 → 温号
- 返回结构化数据：`{expect, specialNum, lookback, count, avgCount, status, rank, totalPeriods}`

## Task 2: 后端 Controller — 添加 specialHotColdAction 方法

**Files:** `application/admin/controller/History.php`

**Action:** 新增 `specialHotColdAction()` 方法

- 接收 AJAX GET 参数：`expect`（期号，必填）, `lookback`（向前期数，默认30，范围10-100）
- 参数校验后调用 Model 方法
- 返回 JSON 响应

## Task 3: 前端 JS — 添加按钮、弹窗和渲染

**Files:** `application/admin/view/history/index.html`, `public/assets/js/backend/history.js`

**Action:**
- 在 `index.html` 的 toolbar 添加一个「特码冷热」按钮
- 在 `history.js` 的 `index` 方法中绑定点击事件
- 在 `api` 对象中添加：
  - `showSpecialHotColdDialog()` — 展示弹窗，包含：当前最新期号显示、期号选择下拉框、向前期数输入框、查询按钮、结果展示区
  - `querySpecialHotCold(expect, lookback, layero)` — AJAX 请求后端接口
  - `renderSpecialHotCold(data, layero)` — 渲染冷热判定结果，用颜色区分冷/温/热
