|
@@ -0,0 +1,116 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace Collection\Lib;
|
|
|
+
|
|
|
+use Dever;
|
|
|
+
|
|
|
+class Ranking
|
|
|
+{
|
|
|
+
|
|
|
+ # 获取最新的总榜
|
|
|
+ public function getInfo($info_id, $type = 1)
|
|
|
+ {
|
|
|
+ $where['info_id'] = $info_id;
|
|
|
+ $where['type'] = $type;
|
|
|
+ $info = Dever::db('collection/ranking')->getOne($where);
|
|
|
+
|
|
|
+ return $info;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取最新的一期
|
|
|
+ public function getPeriodsNew($info_id, $type = 1)
|
|
|
+ {
|
|
|
+ $info = $this->getInfo($info_id, $type);
|
|
|
+ if ($info) {
|
|
|
+ $where['info_id'] = $info_id;
|
|
|
+ $where['ranking_id'] = $info['id'];
|
|
|
+ $info = Dever::db('collection/ranking_periods')->getNew($where);
|
|
|
+
|
|
|
+ return $info;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取当前期的数据
|
|
|
+ public function getData($periods_id)
|
|
|
+ {
|
|
|
+ $where['periods_id'] = $periods_id;
|
|
|
+ $data = Dever::db('collection/ranking_data')->getAll($where);
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 加入门票榜单
|
|
|
+ public function up($uid, $info_id, $type = 1, $num = 1)
|
|
|
+ {
|
|
|
+ $periods = $this->getPeriodsNew($info_id, $type);
|
|
|
+ if ($periods) {
|
|
|
+ $update['uid'] = $uid;
|
|
|
+ $update['periods_id'] = $periods['id'];
|
|
|
+ $data = Dever::db('collection/ranking_data')->one($update);
|
|
|
+ $update['info_id'] = $info_id;
|
|
|
+ $update['ranking_id'] = $periods['ranking_id'];
|
|
|
+ if ($data) {
|
|
|
+ $update['where_id'] = $data['id'];
|
|
|
+ $update['num'] = $data['num'] + $num;
|
|
|
+ Dever::db('collection/ranking_data')->update($update);
|
|
|
+ } else {
|
|
|
+ $update['num'] = $num;
|
|
|
+ Dever::db('collection/ranking_data')->insert($update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 加入到cron里 检测所有榜单是否有新的期数,如果没有,自动添加新的一期
|
|
|
+ public function cron_api()
|
|
|
+ {
|
|
|
+ $ranking = Dever::db('collection/ranking')->getAll();
|
|
|
+
|
|
|
+ if ($ranking) {
|
|
|
+ $cur = time();
|
|
|
+ foreach ($ranking as $k => $v) {
|
|
|
+ $where['ranking_id'] = $v['id'];
|
|
|
+ $info = Dever::db('collection/ranking_periods')->getNew($where);
|
|
|
+ if (!$info) {
|
|
|
+ # 如果没有,就建立新的期数
|
|
|
+ $this->createPeriods(1, $cur, $v);
|
|
|
+ } else {
|
|
|
+ # 如果有,检查结束时间到没到期,如果到了,就把这一期置为已结束,重新建立新的期数
|
|
|
+ if ($cur > $info['end']) {
|
|
|
+ Dever::db('collection/ranking_periods')->update(array('where_id' => $info['id'], 'status' => 2));
|
|
|
+ $this->createPeriods($info['periods'] + 1, $cur, $v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function createPeriods($periods, $cur, $info)
|
|
|
+ {
|
|
|
+ # 查看总榜的结束时间是否结束
|
|
|
+ if ($info['end'] && $cur > $info['end']) {
|
|
|
+ Dever::db('collection/ranking')->update(array('where_id' => $info['id'], 'status' => 2));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data['info_id'] = $info['info_id'];
|
|
|
+ $data['ranking_id'] = $info['id'];
|
|
|
+ $data['name'] = '第' . $periods . '期';
|
|
|
+ $data['periods'] = $periods;
|
|
|
+ $data['users'] = 0;
|
|
|
+ $data['status'] = 1;
|
|
|
+ $data['start'] = $cur;
|
|
|
+ if ($info['periods'] == 2) {
|
|
|
+ # 周
|
|
|
+ $time = 3600*24*7;
|
|
|
+ } elseif ($info['periods'] == 3) {
|
|
|
+ # 月
|
|
|
+ $time = 3600*24*30;
|
|
|
+ } elseif ($info['periods'] == 4) {
|
|
|
+ # 年
|
|
|
+ $time = 3600*24*365;
|
|
|
+ }
|
|
|
+ $data['end'] = $data['start'] + $time;
|
|
|
+ Dever::db('collection/ranking_periods')->insert($data);
|
|
|
+ }
|
|
|
+}
|