7fb2ba4dcf
在控制台页面转移概率区域新增生肖(12生肖)转移概率矩阵,与现有 的区域转移和波色转移保持一致的展示风格。
363 lines
12 KiB
PHP
363 lines
12 KiB
PHP
<?php
|
|
|
|
namespace app\admin\controller;
|
|
|
|
use app\common\controller\Backend;
|
|
|
|
/**
|
|
*
|
|
*
|
|
* @icon fa fa-circle-o
|
|
*/
|
|
class History extends Backend
|
|
{
|
|
|
|
/**
|
|
* History模型对象
|
|
* @var \app\admin\model\History
|
|
*/
|
|
protected $model = null;
|
|
|
|
/**
|
|
* 无需额外权限检查的方法(但仍在 admin 模块内,需要 admin 登录)
|
|
* @var array
|
|
*/
|
|
protected $noNeedRight = ['missingNum', 'trendData', 'hotColdNumbers', 'colorWaveAnalysis', 'zodiacAnalysis', 'oddEvenAnalysis', 'bigSmallAnalysis', 'specialTrend', 'consecutiveNumbers', 'tailNumbers', 'dashboard', 'specialHeatmap', 'specialHotColdAction', 'zoneTransition', 'colorWaveTransition', 'zoneToColorTransition', 'zodiacTransition'];
|
|
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
$this->model = new \app\admin\model\History;
|
|
|
|
}
|
|
|
|
/**
|
|
* 查看开奖记录(支持按每月日号筛选)
|
|
*/
|
|
public function index()
|
|
{
|
|
$this->request->filter(['strip_tags', 'trim']);
|
|
if (false === $this->request->isAjax()) {
|
|
return $this->view->fetch();
|
|
}
|
|
if ($this->request->request('keyField')) {
|
|
return $this->selectpage();
|
|
}
|
|
// search_day 在 filter JSON 里,先提取出来再移除
|
|
$filterStr = $this->request->get('filter', '[]', 'trim');
|
|
$opStr = $this->request->get('op', '[]', 'trim');
|
|
$filter = json_decode($filterStr, true) ?: [];
|
|
$op = json_decode($opStr, true) ?: [];
|
|
$searchDay = isset($filter['search_day']) ? $filter['search_day'] : '';
|
|
unset($filter['search_day'], $op['search_day']);
|
|
// 写回 Request 对象
|
|
$ref = new \ReflectionProperty($this->request, 'get');
|
|
$ref->setAccessible(true);
|
|
$getData = $ref->getValue($this->request);
|
|
if (is_array($getData)) {
|
|
$getData['filter'] = json_encode($filter);
|
|
$getData['op'] = json_encode($op);
|
|
$ref->setValue($this->request, $getData);
|
|
}
|
|
|
|
[$where, $sort, $order, $offset, $limit] = $this->buildparams();
|
|
$list = $this->model->where($where);
|
|
// 按每月日号筛选
|
|
if ($searchDay !== '' && is_numeric($searchDay)) {
|
|
$day = intval($searchDay);
|
|
if ($day >= 1 && $day <= 31) {
|
|
$list = $list->whereRaw('DAY(openTime) = ?', [$day]);
|
|
}
|
|
}
|
|
$query = $list->order($sort, $order)->paginate($limit);
|
|
$result = ['total' => $query->total(), 'rows' => $query->items()];
|
|
return json($result);
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询遗漏号码
|
|
* @return void
|
|
*/
|
|
public function missingNum()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 10, 'intval');
|
|
if ($periods < 1 || $periods > 100) {
|
|
$this->error('期数范围必须在 1-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getMissingNumbers($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取走势图数据
|
|
* @return void
|
|
*/
|
|
public function trendData()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getTrendData($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取冷热号码
|
|
* @return void
|
|
*/
|
|
public function hotColdNumbers()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getHotColdNumbers($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 波色分析
|
|
*/
|
|
public function colorWaveAnalysis()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getColorWaveAnalysis($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 生肖分析
|
|
*/
|
|
public function zodiacAnalysis()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getZodiacAnalysis($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 奇偶分析
|
|
*/
|
|
public function oddEvenAnalysis()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getOddEvenAnalysis($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 大小分析
|
|
*/
|
|
public function bigSmallAnalysis()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getBigSmallAnalysis($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 特码走势
|
|
*/
|
|
public function specialTrend()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$result = $this->model->getSpecialTrend($periods);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 连号分析
|
|
*/
|
|
public function consecutiveNumbers()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$result = $this->model->getConsecutiveNumbers($periods);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 尾数分析
|
|
*/
|
|
public function tailNumbers()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getTailNumbers($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 综合统计面板
|
|
*/
|
|
public function dashboard()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$type = $this->request->get('type', 'all');
|
|
if (!in_array($type, ['all', 'special'])) {
|
|
$this->error('查询类型不正确');
|
|
}
|
|
$result = $this->model->getDashboardData($periods, $type);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 特码冷热列表(每期相对于前N期的冷热状态)
|
|
*/
|
|
public function specialHotColdAction()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$lookback = $this->request->get('lookback', 30, 'intval');
|
|
if ($lookback < 10 || $lookback > 100) {
|
|
$this->error('向前期数范围必须在 10-100 之间');
|
|
}
|
|
$limit = $this->request->get('limit', 100, 'intval');
|
|
if ($limit < 10 || $limit > 200) {
|
|
$this->error('查询期数范围必须在 10-200 之间');
|
|
}
|
|
$result = $this->model->getSpecialHotColdList($lookback, $limit);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 特码热力图
|
|
*/
|
|
public function specialHeatmap()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 30, 'intval');
|
|
if ($periods < 10 || $periods > 100) {
|
|
$this->error('期数范围必须在 10-100 之间');
|
|
}
|
|
$result = $this->model->getSpecialHeatmap($periods);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 区域转移概率统计
|
|
*/
|
|
public function zoneTransition()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 100, 'intval');
|
|
if ($periods < 10 || $periods > 500) {
|
|
$this->error('期数范围必须在 10-500 之间');
|
|
}
|
|
$result = $this->model->getZoneTransition($periods);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 波色转移概率统计
|
|
*/
|
|
public function colorWaveTransition()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 100, 'intval');
|
|
if ($periods < 10 || $periods > 500) {
|
|
$this->error('期数范围必须在 10-500 之间');
|
|
}
|
|
$result = $this->model->getColorWaveTransition($periods);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 生肖转移概率统计
|
|
*/
|
|
public function zodiacTransition()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$periods = $this->request->get('periods', 100, 'intval');
|
|
if ($periods < 10 || $periods > 500) {
|
|
$this->error('期数范围必须在 10-500 之间');
|
|
}
|
|
$result = $this->model->getZodiacTransition($periods);
|
|
$this->success('查询成功', null, $result);
|
|
}
|
|
}
|
|
|
|
|
|
}
|