123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- namespace App\Distributor\Repositories;
- use App\Models\SmmPostLog as Model;
- use Carbon\Carbon;
- use Dcat\Admin\Repositories\EloquentRepository;
- use Illuminate\Support\Facades\Log;
- class SmmPostLog extends EloquentRepository
- {
-
- protected $eloquentClass = Model::class;
-
- public static function createLog($data)
- {
- $log = new Model();
- $log->post_id = $data['post_id'];
- $log->account_id = $data['account_id'];
- $log->account_name = $data['account_name'];
- $log->status = $data['status'];
- $log->remark = $data['remark'];
- $log->created_at = $data['created_at'];
- $log->updated_at = $data['updated_at'];
- $log->dist_id = $data['dist_id'];
- $log->media_name = $data['media_name'];
- $log->response_ids = $data['response_ids'];
- $log->send_time = $data['send_time'];
- $log->save();
- }
-
- public static function getSendLog($limit = 5)
- {
- $log = new Model();
- $result = $log->where('status', 1)->first();
- if ($result) {
-
- $nowTime = Carbon::now();
- $diffTime = $nowTime->diffInMinutes($result->updated_at);
- if ($diffTime >= 30) {
- Log::info('发送中的帖子超过30分钟,更新状态为3,发送失败');
- $result->status = 3;
- $result->save();
- }
- Log::info('有正在发送中的帖子,返回[]');
- return [];
- }
-
-
- $result = $log->wherein('status', [0,3])->where('request_count', '<=', 2)->where('send_time', '<', Carbon::now())->limit($limit)->get();
- return $result;
- }
-
- public static function getPostQuota($mediaName = 'Twitter')
- {
- $log = new Model();
- if ($mediaName === 'Twitter') {
-
- $startOfMonth = Carbon::now()->startOfMonth();
- $rows = $log->where('media_name', 'Twitter')
- ->where('created_at', '>=', $startOfMonth->format('Y-m-d H:i:s'))
- ->get();
- $count = 0;
- foreach ($rows as $row) {
- if ($row->status == 0) {
- $count++;
- } else {
- $count = $count + $row->request_count;
- }
- }
- return 100 - $count;
- } elseif ($mediaName === 'YouTube') {
-
- $startOfDay = Carbon::now()->startOfDay();
- $rows = $log->where('media_name', 'YouTube')
- ->where('created_at', '>=', $startOfDay->format('Y-m-d H:i:s'))
- ->get();
- $count = 0;
- foreach ($rows as $row) {
- if ($row->status == 0) {
- $count++;
- } else {
- $count = $count + $row->request_count;
- }
- }
-
- $quota = floor((10000 - 1600 * $count) / 1600);
- return max($quota, 0);
- } else {
- return 999;
- }
- }
-
- public static function getTwitterSendTime()
- {
-
- $sendTimeCarbon = Carbon::now();
- $log = new Model();
- $query = $log->where('status', 0)
- ->where('media_name', 'Twitter')
- ->where('send_time', '>=',$sendTimeCarbon->copy()->subMinutes(15))
- ->orderByDesc('id')
- ->first();
- if ($query) {
-
- $query_send_time = Carbon::parse($query->send_time);
- return $query_send_time
- ->addMinutes(16)
- ->toDateTimeString();
- }
-
- return Carbon::now();
- }
-
- public static function twitterCanSend()
- {
- $log = new Model();
-
- $lastSendLog = $log->wherein('status', [2,3])->where('media_name', 'Twitter')->orderByDesc('send_time')->first();
-
- if ($lastSendLog) {
- $lastSendTime = Carbon::parse($lastSendLog->send_time);
- $nowTime = Carbon::now();
- $diffTime = $nowTime->diffInMinutes($lastSendTime);
- if ($diffTime <= 15) {
- return false;
- }
- }
- return true;
- }
- }
|