ReportService.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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)) {
  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. myLog('reportSActive')->info('', compact('uid', 'registerYmd'));
  47. self::report($userCache);
  48. }
  49. // 更新用户活跃时间
  50. return UserCache::setUserInfo($uid, ['active_time' => $now]);
  51. }
  52. /**
  53. * 上报
  54. * @param $userCache
  55. * @return ResponseInterface
  56. */
  57. private static function report($userCache)
  58. {
  59. $client = new Client(['timeout' => 3, 'verify' => false]);
  60. // 执行上报
  61. return $client->post(env('REPORT_URI') . '/api/reportSActive', [
  62. 'headers' => [
  63. 'x-code' => 'Mvnx1Yr3O8i!TS5u'
  64. ],
  65. 'json' => [
  66. 'uid' => getProp($userCache, 'uid'),
  67. 'channel_id' => getProp($userCache, 'channel_id'),
  68. 'register_time' => getProp($userCache, 'register_time'),
  69. 'active_time' => getProp($userCache, 'active_time'),
  70. 'platform' => 'zhuishuyun',
  71. ]
  72. ]);
  73. }
  74. }