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