VideoWatchedByBulkJob.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Jobs;
  3. use App\Model\Mongo\VideoHistoryModel;
  4. use App\Model\VideoModel;
  5. use App\Repositories\UserRepository;
  6. use Carbon\Carbon;
  7. use Hyperf\AsyncQueue\Job;
  8. use Modules\Api\Services\VideoService;
  9. use Psr\SimpleCache\CacheInterface;
  10. class VideoWatchedByBulkJob extends Job
  11. {
  12. public $params;
  13. public function __construct($params)
  14. {
  15. // 这里最好是普通数据,不要使用携带 IO 的对象,比如 PDO 对象
  16. $this->params = $params;
  17. }
  18. public function handle()
  19. {
  20. $arrUserCodes = [];
  21. $nowDate = Carbon::now()->toDateString();
  22. $videoService = make(VideoService::class);
  23. if (!empty($this->params)) {
  24. $cacheRepo = make(CacheInterface::class);
  25. $cacheKey = 'video:watch:bulk2';
  26. $cacheData = $cacheRepo->get($cacheKey, []);
  27. if (!empty($cacheData)) {
  28. if (count($cacheData) > 100) {
  29. $cacheRepo->delete($cacheKey);
  30. // 自动增加观看次数.
  31. foreach ($cacheData as $videoId => $incNum) {
  32. $videoObj = VideoModel::where(['id' => $videoId])->first(['id', 'watch', 'real_watch']);
  33. if (!empty($videoObj)) {
  34. $videoObj->watch = $videoObj->watch + $incNum;
  35. $videoObj->real_watch = $videoObj->real_watch + $incNum;
  36. $videoObj->save();
  37. }
  38. }
  39. }
  40. }
  41. foreach ($this->params as $item) {
  42. if (isset($cacheData[$item['video_id']])) {
  43. $cacheData[$item['video_id']] = $cacheData[$item['video_id']] + 1;
  44. } else {
  45. $cacheData[$item['video_id']] = 1;
  46. }
  47. }
  48. $cacheRepo->forever($cacheKey, $cacheData);
  49. }
  50. }
  51. }