| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <?php
- namespace common\services;
- use Yii;
- use common\components\dict;
- use common\components\stringUtil;
- use linslin\yii2\curl;
- use common\components\wxUtil;
- use common\models\xhStatVisitByDay;
- class xhStatVisitByDayService {
- /**
- * 统计当天访问量,收集当天访问的IP
- */
- public static function gatherIP($sjId)
- {
- $ip = Yii::$app->request->userIP;
- $todayTime = strtotime(date("Y-m-d"));
- $visitKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$todayTime;
- $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$visitKey,$ip]);
- if(!empty($exists)){
- return;
- }
- Yii::$app->redis->executeCommand('SADD', [$visitKey,$ip]);//记录当天访问过网站的IP
- $numKey = $sjId.dict::getCacheKey('statVisitNumByDay').$todayTime;
- $nowNum = Yii::$app->redis->executeCommand('INCRBY', [$numKey,1]);//记录当天访问网站人数
- }
- /**
- * 将昨天的保存入库
- */
- public static function saveYesterdayNum($sjId)
- {
- $yesTime = strtotime(date("Y-m-d",strtotime("-1 day")));
- $arr = xhStatVisitByDay::getByCondition(['sjId' => $sjId,'time' => $yesTime]);
- if(!empty($arr)){
- return [];
- }
- $ipListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime;
- $num = Yii::$app->redis->executeCommand('SCARD', [$ipListKey]);
- $totalVisit = self::getYesterdayTotalVisit($sjId);
- $data = ['time' => $yesTime,'totalNum' => $totalVisit,'riseNum' =>$num,'sjId' => $sjId,'createTime' => date("Y-m-d H:i:s")];
- $saveData = self::add($data);
- return $saveData;
- }
- /**
- * 总访问量
- */
- public static function getTotalVisit($sjId)
- {
- $yesTime = strtotime(date("Y-m-d",strtotime("-1 day")));
- $ipListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime;
- $yesNum = Yii::$app->redis->executeCommand('SCARD', [$ipListKey]);
-
- $todayTime = strtotime(date("Y-m-d"));
- $toDayIPListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$todayTime;
- $todayNum = Yii::$app->redis->executeCommand('SCARD', [$toDayIPListKey]);
-
- $asset = xhMerchantAssetService::getBySjId($sjId);
- $totalVisit = $asset['totalVisit'];
- $newTotalVisit = $totalVisit + $yesNum + $todayNum;
- return $newTotalVisit;
- }
- /**
- * 昨天及以前的总访问量,不包括当天的
- */
- public static function getYesterdayTotalVisit()
- {
- $yesTime = strtotime(date("Y-m-d",strtotime("-1 day")));
- $ipListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime;
- $yesNum = Yii::$app->redis->executeCommand('SCARD', [$ipListKey]);
- $asset = xhMerchantAssetService::getBySjId($sjId);
- $totalVisit = $asset['totalVisit'];
- $newTotalVisit = $totalVisit + $yesNum;
- return $newTotalVisit;
- }
- /**
- * 清空昨天的访问数据(包括缓存与数据库)
- */
- public static function clearYesNum($sjId)
- {
- $yesTime = strtotime(date("Y-m-d",strtotime("-1 day")));
- $visitKey = $sjId.dict::getCacheKey('statVisitNumByDay').$yesTime;
- $yesterdayVisitNum = Yii::$app->redis->executeCommand('DEL', [$visitKey]);
- $ipKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime;
- $yesterdayVisitNum = Yii::$app->redis->executeCommand('DEL', [$ipKey]);
- xhStatVisitByDay::deleteByCondition(['sjId' => $sjId,'time' => $yesTime]);
- }
- /**
- * 模拟创建昨天的访问IP与数据
- */
- public static function imitationCreateYesNum($sjId)
- {
- $count = rand(10,30);
- $yesTime = strtotime(date("Y-m-d",strtotime("-1 day")));
- echo "\n开始创建昨天的访问量…\n";
- for($i=0;$i<$count;$i++){
- $ip = stringUtil::randIP();
- $visitIPKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime;
- $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$visitKey,$ip]);
- if(!empty($exists)){
- return;
- }
- echo $visitIPKey."\n";
- Yii::$app->redis->executeCommand('SADD', [$visitIPKey,$ip]);//记录访问过网站的IP
- $numKey = $sjId.dict::getCacheKey('statVisitNumByDay').$yesTime;
- $nowNum = Yii::$app->redis->executeCommand('INCRBY', [$numKey,1]);//记录访问网站人数
- }
- echo "\n创建完成\n";
- }
- /**
- * 获取昨天的访问IP和数据
- */
- public static function getYesNum($sjId)
- {
- $yesTime = strtotime(date("Y-m-d",strtotime("-1 day")));
- $visitPreKey = dict::getCacheKey('statVisitNumByDay');
- $visitKey = $sjId.$visitPreKey.$yesTime;
- $yesterdayVisitNum = Yii::$app->redis->executeCommand('GET', [$visitKey]);
- echo '<pre>';
- echo '昨天的访问总量:'.$yesterdayVisitNum.'<br />';
- $ipKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime;
- echo 'ipList的Key:'.$ipKey.'<br />';
- $list = Yii::$app->redis->executeCommand('SMEMBERS', [$ipKey]);
- echo 'ipList:<br />';
- print_r($list);
- $num = Yii::$app->redis->executeCommand('SCARD', [$ipKey]);
- echo 'ipList里的访问数量统计:'.$num;
- }
- /**
- * 获取今天的访问量
- */
- public static function getTodayNum($sjId)
- {
- $time = strtotime(date("Y-m-d"));
- $numKey = $sjId.dict::getCacheKey('statVisitNumByDay').$time;
- $nowNum = Yii::$app->redis->executeCommand('GET', [$numKey]);//记录当天访问网站人数
- $nowNum = !empty($nowNum) ? $nowNum : 0;
- return $nowNum;
- }
-
- /**
- * 取昨天访问量
- */
- public static function getYesterdayNum($sjId)
- {
- $yesTime = strtotime(date("Y-m-d",strtotime("-1 day")));
- $visitPreKey = dict::getCacheKey('statVisitNumByDay');
- $visitKey = $sjId.$visitPreKey.$yesTime;
- $status = Yii::$app->redis->executeCommand('EXISTS', [$visitKey]);
- if(!empty($status)){
- $yesterdayVisitNum = Yii::$app->redis->executeCommand('GET', [$visitKey]);
- return $yesterdayVisitNum;
- }
- $rise = xhStatVisitByDay::getByCondition(['time' => $yesTime]);
- $num = !empty($rise) ? $rise['riseNum'] : 0;
- Yii::$app->redis->executeCommand('SET', [$visitKey,$num]);
- return $num;
- }
- public static function add($data)
- {
- return xhStatVisitByDay::add($data);
- }
- }
|