| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
- namespace bizMall\stat\services;
- use bizMall\base\services\BaseService;
- use bizMall\merchant\services\MerchantAssetService;
- use bizMall\stat\classes\StatViewClass;
- use bizMall\stat\classes\StatVisitClass;
- use Yii;
- use common\components\stringUtil;
- class StatVisitService extends BaseService
- {
-
- public static $baseFile = '\bizMall\stat\classes\StatVisitClass';
-
- /**
- * 收集访问次数和访问IP
- */
- public static function gatherVisit($sjId)
- {
- //收集访问次数
- $wholeSiteView = StatVisitClass::getKeyName($sjId, 'whole_site_view');
- Yii::$app->redis->executeCommand('INCRBY', [$wholeSiteView, 1]);//记录当天访问人数
- //收集访问客数
- $ip = Yii::$app->request->userIP;
- $wholeSiteVisit = StatVisitClass::getKeyName($sjId, 'whole_site_visit');
- $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$wholeSiteVisit, $ip]);
- if (empty($exists)) {
- //记录当天的IP
- Yii::$app->redis->executeCommand('SADD', [$wholeSiteVisit, $ip]);
- }
- }
-
- /**
- * 将昨天的保存入库
- */
- public static function saveYesterdayNum($sjId)
- {
- $yesTime = date("Ymd", strtotime("-1 day"));
- $resource = self::getByCondition(['sjId' => $sjId, 'time' => $yesTime]);
- //有数据表示已经保存过了
- if (!empty($resource)) {
- return [];
- }
- $wholeSiteView = StatVisitClass::getKeyName($sjId, 'whole_site_view', $yesTime);
- //获取访问次数
- $viewNum = Yii::$app->redis->executeCommand('GET', [$wholeSiteView]);
-
- //获取访问客户数
- $wholeSiteVisit = StatVisitClass::getKeyName($sjId, 'whole_site_visit', $yesTime);
- $visitNum = Yii::$app->redis->executeCommand('SCARD', [$wholeSiteVisit]);
-
- $asset = MerchantAssetService::getBySjId($sjId);
- $totalVisit = $asset['totalVisit'];
- $totalView = $asset['totalView'];
- $totalVisit = stringUtil::calcAdd($totalVisit, $visitNum);
- $totalView = stringUtil::calcAdd($totalView, $viewNum);
- //保存访客数
- $data = ['time' => $yesTime, 'totalNum' => $totalVisit, 'riseNum' => $visitNum, 'sjId' => $sjId, 'createTime' => date("Y-m-d H:i:s")];
- self::add($data);
- //保存访问量
- $data = ['time' => $yesTime, 'totalNum' => $totalView, 'riseNum' => $viewNum, 'sjId' => $sjId, 'addTime' => time()];
- StatViewClass::add($data);
-
- //保存累计访问量
- MerchantAssetService::updateByCondition(['sjId' => $sjId], ['totalView' => $totalView, 'totalVisit' => $totalVisit]);
- self::clearYesNum($sjId);
- }
-
- /**
- * 清空昨天的缓存
- */
- public static function clearYesNum($sjId)
- {
- $yesTime = date("Ymd", strtotime("-1 day"));
- //访问量清零
- $wholeSiteView = StatVisitClass::getKeyName($sjId, 'whole_site_view', $yesTime);
- Yii::$app->redis->executeCommand('DEL', [$wholeSiteView]);
- //访客数清零
- $wholeSiteVisit = StatVisitClass::getKeyName($sjId, 'whole_site_visit', $yesTime);
- Yii::$app->redis->executeCommand('DEL', [$wholeSiteVisit]);
- }
-
- //获取今天的访问量
- public static function getTodayViewNum($sjId)
- {
- $wholeSiteView = StatVisitClass::getKeyName($sjId, 'whole_site_view');
- $nowNum = Yii::$app->redis->executeCommand('GET', [$wholeSiteView]);
- $nowNum = !empty($nowNum) ? $nowNum : 0;
- return $nowNum;
- }
-
- //获取今天的访客数 ssh 2020.2.2
- public static function getTodayVisitNum($sjId)
- {
- $wholeSiteVisit = StatVisitClass::getKeyName($sjId, 'whole_site_visit');
- $num = Yii::$app->redis->executeCommand('SCARD', [$wholeSiteVisit]);
- return !empty($num) ? $num : 0;
- }
- /**
- * 获取总访客数
- */
- public static function getTotalVisit($sjId)
- {
- $todayNum = self::getTodayVisitNum($sjId);
- $asset = MerchantAssetService::getBySjId($sjId);
- $totalVisit = $asset['totalVisit'];
- $newTotalVisit = stringUtil::calcAdd($totalVisit, $todayNum);
- return $newTotalVisit;
- }
-
- /**
- * 模拟创建昨天的访问IP与数据
- */
- public static function randYesNum($sjId)
- {
- $count = rand(10, 30);
- $yesTime = date("Ymd", strtotime("-1 day"));
- echo "\n开始创建昨天的访问量…\n";
- for ($i = 0; $i < $count; $i++) {
- $ip = stringUtil::randIP();
- $wholeSiteVisit = StatVisitClass::getKeyName($sjId, 'whole_site_visit', $yesTime);
- $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$wholeSiteVisit, $ip]);
- if (!empty($exists)) {
- return;
- }
- echo $wholeSiteVisit . "\n";
- Yii::$app->redis->executeCommand('SADD', [$wholeSiteVisit, $ip]);//记录访问过网站的IP
- $wholeSiteView = StatVisitClass::getKeyName($sjId, 'whole_site_view', $yesTime);
- Yii::$app->redis->executeCommand('INCRBY', [$wholeSiteView, 1]);//记录访问网站人数
- }
- echo "\n创建完成\n";
- self::getYesNum($sjId);
- }
-
- /**
- * 获取昨天的访问IP和数据
- */
- public static function getYesNum($sjId)
- {
- $yesTime = date("Ymd", strtotime("-1 day"));
- $wholeSiteView = StatVisitClass::getKeyName($sjId, 'whole_site_view', $yesTime);
- $yesterdayVisitNum = Yii::$app->redis->executeCommand('GET', [$wholeSiteView]);
- echo '<pre>';
- echo '昨天的访问总量:' . $yesterdayVisitNum . '<br />';
- $wholeSiteVisit = StatVisitClass::getKeyName($sjId, 'whole_site_visit', $yesTime);
- echo 'ipList的Key:' . $wholeSiteVisit . '<br />';
- $list = Yii::$app->redis->executeCommand('SMEMBERS', [$wholeSiteVisit]);
- echo 'ipList:<br />';
- print_r($list);
- $num = Yii::$app->redis->executeCommand('SCARD', [$wholeSiteVisit]);
- echo 'ipList里的访问数量统计:' . $num;
- }
-
- }
|