ToolController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Constant\CacheConstant;
  4. use App\Http\Models\LinkTask;
  5. use App\Http\Models\LinkTaskDetail;
  6. use App\Http\Models\Site;
  7. use App\Http\Models\SiteProcess;
  8. use GuzzleHttp\Client;
  9. use Illuminate\Http\Request;
  10. use App\Http\Controllers\Controller;
  11. use Illuminate\Support\Facades\Cache;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Str;
  14. use GuzzleHttp\Psr7\Response;
  15. use GuzzleHttp\Pool;
  16. class ToolController extends Controller
  17. {
  18. public function upload(Request $request)
  19. {
  20. $file = $request->file('file');
  21. if (!$file) {
  22. return response()->json(['message' => '没有上传文件'], 422);
  23. }
  24. $name = strtolower(str_replace(' ', '-', $file->getClientOriginalName()));
  25. $array = explode('.', $name);
  26. if (!count($array) || count($array) > 2) {
  27. return response()->json(['message' => '命名格式不对,不允许文件名中出现 "."'], 422);
  28. }
  29. $fileName = $array[0] . '_' . date('YmdHis');
  30. $name = $fileName . '.' . $array[1];
  31. $fileData['file_url'] = $file->storeAs(date('Ym'), $name, 'public');
  32. $fileData['file_url'] = $request->input('notAsset') ? sprintf('/storage/%s', $fileData['file_url']) : asset('storage/' . $fileData['file_url']);
  33. $fileData['original_name'] = $file->getClientOriginalName();
  34. $fileData['time'] = date('Y-m-d H:i:s');
  35. return response()->json(['message' => '上传成功', 'data' => $fileData]);
  36. }
  37. public function excelUpload(Request $request)
  38. {
  39. $file = $request->file('file');
  40. if (!$file) return response()->json(['message' => '没有上传文件'], 422);
  41. $name = sprintf('%s.%s', Str::random(40), $file->getClientOriginalExtension());
  42. $fileData['file_url'] = $file->storeAs(date('Ym') . '/' . $file->getClientOriginalExtension(), $name, 'public');
  43. $fileData['original_name'] = $file->getClientOriginalName();
  44. $fileData['time'] = time();
  45. return response()->json(['message' => '上传成功', 'data' => $fileData]);
  46. }
  47. public function download(Request $request)
  48. {
  49. $path = str_replace(config('app.url'), '', $request->input('file_url'));
  50. if (!file_exists(public_path($path))) {
  51. abort(404, '文件不存在');
  52. }
  53. return response()->download(public_path($path));
  54. }
  55. public function clearProcess($siteId)
  56. {
  57. SiteProcess::query()->where([
  58. 'site_id' => $siteId
  59. ])->whereNotIn('process_id', [1, 2, 12, 7])->delete();
  60. SiteProcess::query()->where(['site_id' => $siteId, 'process_id' => 1])->update([
  61. 'active' => 1
  62. ]);
  63. SiteProcess::query()->where(['site_id' => $siteId, 'process_id' => 2])->update([
  64. 'active' => 2
  65. ]);
  66. SiteProcess::query()->where(['site_id' => $siteId, 'process_id' => 12])->update([
  67. 'active' => 2
  68. ]);
  69. SiteProcess::query()->where(['site_id' => $siteId, 'process_id' => 7])->update([
  70. 'active' => 2
  71. ]);
  72. dd('success');
  73. }
  74. public function resetTask(Request $request)
  75. {
  76. $taskId = 63;
  77. $task = LinkTask::query()->where(['id' => $taskId])->first();
  78. dd($task);
  79. $task->status = 3;
  80. $task->save();
  81. LinkTaskDetail::query()->where(['task_id' => $task->id])->update(['status' => 3]);
  82. dd('success');
  83. }
  84. public function generateReport()
  85. {
  86. ignore_user_abort(true);
  87. set_time_limit(0);
  88. $projectYm = date('Ym', strtotime('first day of -1 month'));
  89. $rankConn = DB::connection('rank');
  90. $projectIds = $rankConn->table('webmaster_flow')->select(['project_id'])->where(['flow_ym' => $projectYm, 'status' => 1])->pluck('project_id')->toArray();
  91. $taskUrls = [];
  92. foreach ($projectIds as $item) {
  93. $taskUrls[] = sprintf("https://rank.yinqingli.cn/webmaster/report?projectId=%s", base64_encode($item));
  94. }
  95. $client = new Client([
  96. 'verify' => false,
  97. 'timeout' => 30
  98. ]); //并发请求链接地址
  99. $requests = function () use ($client, $taskUrls) {
  100. foreach ($taskUrls as $item) {
  101. if (empty($item))
  102. continue;
  103. yield new \GuzzleHttp\Psr7\Request('GET', $item);
  104. }
  105. };
  106. $result = [];
  107. $fails = [];
  108. $pool = new Pool($client, $requests(), [
  109. 'concurrency' => 10, //同时并发抓取几个
  110. 'fulfilled' => function (Response $response, $index) use (&$result) {
  111. $result[] = $index;
  112. },
  113. 'rejected' => function (\Throwable $throwable, $index) use (&$fails) {
  114. $fails[] = $index;
  115. },
  116. ]);
  117. $promise = $pool->promise();
  118. $promise->wait();
  119. return response()->json(['message' => '操作成功']);
  120. }
  121. public function rmCacheKey()
  122. {
  123. $cacheList = [
  124. CacheConstant::NOW_MONTH_KEY_WORDS_CACHE_KEY,
  125. CacheConstant::LAST_MONTH_KEY_WORDS_CACHE_KEY,
  126. CacheConstant::LAST_MONTH_BQ_KEY_WORDS_CACHE_KEY,
  127. CacheConstant::NOW_MONTH_INQUIRE_CACHE_KEY,
  128. CacheConstant::LAST_MONTH_INQUIRE_CACHE_KEY,
  129. CacheConstant::LAST_MONTH_BQ_INQUIRE_CACHE_KEY,
  130. CacheConstant::NOW_MONTH_FLOW_CACHE_KEY,
  131. CacheConstant::LAST_MONTH_FLOW_CACHE_KEY,
  132. CacheConstant::LAST_MONTH_BQ_FLOW_CACHE_KEY,
  133. ];
  134. foreach ($cacheList as $value) {
  135. Cache::forget($value);
  136. }
  137. return response()->json(['message' => '操作成功']);
  138. }
  139. public function bulkUpload(Request $request)
  140. {
  141. $images = [];
  142. if ($request->hasFile('files')) {
  143. foreach ($request->file('files') as $file) {
  144. $name = sprintf('%s.%s', Str::random(40), $file->getClientOriginalExtension());
  145. $fileData['file_url'] = $file->storeAs(date('Ym') . '/' . $file->getClientOriginalExtension(), $name, 'public');
  146. $fileData['file_url'] = $request->input('notAsset') ? sprintf('/storage/%s', $fileData['file_url']) : asset('storage/' . $fileData['file_url']);
  147. $fileData['original_name'] = $file->getClientOriginalName();
  148. $fileData['time'] = time();
  149. $images[] = $fileData;
  150. }
  151. }
  152. return response()->json(['message' => '上传成功', 'data' => $images]);
  153. }
  154. }