StatVisitService.php 4.3 KB

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