ReportService.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Modules\Report\Services;
  3. use Psr\Http\Message\ResponseInterface;
  4. use App\Cache\User\UserCache;
  5. use App\Modules\User\Services\UserService;
  6. use GuzzleHttp\Client;
  7. class ReportService
  8. {
  9. /**
  10. * 次留回传
  11. * @param $uid
  12. * @return false|mixed
  13. */
  14. public static function reportActive($uid)
  15. {
  16. if (empty($uid) || (int)$uid !== 198678241) {
  17. return false;
  18. }
  19. // 获取用户缓存
  20. $now = date('Y-m-d H:i:s');
  21. $userCache = UserCache::getUserInfo($uid);
  22. if (empty($userCache)) {
  23. $user = UserService::getById($uid);
  24. if ($user === null) {
  25. return false;
  26. }
  27. // 初始化缓存
  28. $userCache = [
  29. 'uid' => $uid,
  30. 'channel_id' => getProp($user, 'distribution_channel_id', 0),
  31. 'send_order_id' => getProp($user, 'send_order_id', 0),
  32. 'register_time' => $user->created_at->format('Y-m-d H:i:s'),
  33. 'active_time' => $now
  34. ];
  35. UserCache::setUserInfo($uid, $userCache);
  36. }
  37. // 获取注册时间、活跃时间
  38. $registerAt = getProp($userCache, 'register_time');
  39. $activeAt = getProp($userCache, 'active_time');
  40. $registerYmd = date('Y-m-d', strtotime($registerAt));
  41. $registerNextYmd = date('Y-m-d', strtotime($registerYmd . ' +1 day'));
  42. $activeYmd = date('Y-m-d', strtotime($activeAt));
  43. $todayYmd = date('Y-m-d');
  44. // 判断是否是次留回传
  45. if ($registerYmd === $activeYmd && $todayYmd === $registerNextYmd) {
  46. self::report($userCache);
  47. }
  48. // 更新用户活跃时间
  49. return UserCache::setUserInfo($uid, ['active_time' => $now]);
  50. }
  51. /**
  52. * 上报
  53. * @param $userCache
  54. * @return ResponseInterface
  55. */
  56. private static function report($userCache)
  57. {
  58. $client = new Client(['timeout' => 3, 'verify' => false]);
  59. // 执行上报
  60. return $client->post(env('REPORT_URI') . '/api/reportSActive', [
  61. 'headers' => [
  62. 'x-code' => 'Mvnx1Yr3O8i!TS5u'
  63. ],
  64. 'json' => [
  65. 'uid' => getProp($userCache, 'uid'),
  66. 'channel_id' => getProp($userCache, 'channel_id'),
  67. 'register_time' => getProp($userCache, 'register_time'),
  68. 'active_time' => getProp($userCache, 'active_time'),
  69. 'platform' => 'zhuishuyun',
  70. ]
  71. ]);
  72. }
  73. }