StatVisitService.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace bizHd\stat\services;
  3. use biz\shop\classes\ShopClass;
  4. use bizHd\base\services\BaseService;
  5. use bizHd\stat\classes\StatViewClass;
  6. use bizHd\stat\classes\StatVisitClass;
  7. use common\components\util;
  8. use Yii;
  9. use common\components\stringUtil;
  10. class StatVisitService extends BaseService
  11. {
  12. public static $baseFile = '\bizHd\stat\classes\StatVisitClass';
  13. //收集访问次数和访问IP
  14. public static function gatherVisit($shopId)
  15. {
  16. //收集访问次数
  17. $wholeSiteView = StatVisitClass::getKeyName($shopId, 'whole_site_view');
  18. Yii::$app->redis->executeCommand('INCRBY', [$wholeSiteView, 1]);//记录当天访问人数
  19. //收集访问客数
  20. $ip = Yii::$app->request->userIP;
  21. $wholeSiteVisit = StatVisitClass::getKeyName($shopId, 'whole_site_visit');
  22. $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$wholeSiteVisit, $ip]);
  23. if (empty($exists)) {
  24. //记录当天的IP
  25. Yii::$app->redis->executeCommand('SADD', [$wholeSiteVisit, $ip]);
  26. }
  27. }
  28. //清空昨天的缓存
  29. public static function clearYesNum($shopId)
  30. {
  31. $yesTime = date("Ymd", strtotime("-1 day"));
  32. //访问量清零
  33. $wholeSiteView = StatVisitClass::getKeyName($shopId, 'whole_site_view', $yesTime);
  34. Yii::$app->redis->executeCommand('DEL', [$wholeSiteView]);
  35. //访客数清零
  36. $wholeSiteVisit = StatVisitClass::getKeyName($shopId, 'whole_site_visit', $yesTime);
  37. Yii::$app->redis->executeCommand('DEL', [$wholeSiteVisit]);
  38. }
  39. //获取今天的访问量
  40. public static function getTodayViewNum($shopId)
  41. {
  42. $wholeSiteView = StatVisitClass::getKeyName($shopId, 'whole_site_view');
  43. $nowNum = Yii::$app->redis->executeCommand('GET', [$wholeSiteView]);
  44. $nowNum = !empty($nowNum) ? $nowNum : 0;
  45. return $nowNum;
  46. }
  47. //获取今天的访客数 ssh 2020.2.2
  48. public static function getTodayVisitNum($shopId)
  49. {
  50. $wholeSiteVisit = StatVisitClass::getKeyName($shopId, 'whole_site_visit');
  51. $num = Yii::$app->redis->executeCommand('SCARD', [$wholeSiteVisit]);
  52. return !empty($num) ? $num : 0;
  53. }
  54. //获取总访客数
  55. public static function getTotalVisit($shopId)
  56. {
  57. $todayNum = self::getTodayVisitNum($shopId);
  58. $shop = ShopClass::getById($shopId);
  59. $currentTotalVisit = $shop->totalVisit;
  60. $newTotalVisit = stringUtil::calcAdd($currentTotalVisit, $todayNum);
  61. return $newTotalVisit;
  62. }
  63. //模拟创建昨天的访问IP与数据
  64. public static function randYesNum($shopId)
  65. {
  66. $count = rand(10, 30);
  67. $yesTime = date("Ymd", strtotime("-1 day"));
  68. echo "\n开始创建昨天的访问量…\n";
  69. for ($i = 0; $i < $count; $i++) {
  70. $ip = stringUtil::randIP();
  71. $wholeSiteVisit = StatVisitClass::getKeyName($shopId, 'whole_site_visit', $yesTime);
  72. $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$wholeSiteVisit, $ip]);
  73. if (!empty($exists)) {
  74. return;
  75. }
  76. echo $wholeSiteVisit . "\n";
  77. Yii::$app->redis->executeCommand('SADD', [$wholeSiteVisit, $ip]);//记录访问过网站的IP
  78. $wholeSiteView = StatVisitClass::getKeyName($shopId, 'whole_site_view', $yesTime);
  79. Yii::$app->redis->executeCommand('INCRBY', [$wholeSiteView, 1]);//记录访问网站人数
  80. }
  81. echo "\n创建完成\n";
  82. self::getYesNum($shopId);
  83. }
  84. //获取昨天的访问IP和数据
  85. public static function getYesNum($shopId)
  86. {
  87. $yesTime = date("Ymd", strtotime("-1 day"));
  88. $wholeSiteView = StatVisitClass::getKeyName($shopId, 'whole_site_view', $yesTime);
  89. $yesterdayVisitNum = Yii::$app->redis->executeCommand('GET', [$wholeSiteView]);
  90. echo '<pre>';
  91. echo '昨天的访问总量:' . $yesterdayVisitNum . '<br />';
  92. $wholeSiteVisit = StatVisitClass::getKeyName($shopId, 'whole_site_visit', $yesTime);
  93. echo 'ipList的Key:' . $wholeSiteVisit . '<br />';
  94. $list = Yii::$app->redis->executeCommand('SMEMBERS', [$wholeSiteVisit]);
  95. echo 'ipList:<br />';
  96. print_r($list);
  97. $num = Yii::$app->redis->executeCommand('SCARD', [$wholeSiteVisit]);
  98. echo 'ipList里的访问数量统计:' . $num;
  99. }
  100. }