* @since 2021-10-13 */ namespace App\Http\Controllers\Admin\Analyze; use App\Http\Controllers\Controller; use App\Http\Models\GoogleTrendsKeyword; use App\Http\Models\Role; use App\Http\Models\User; use App\Http\Models\WeekTaskHistory; use App\Http\Models\WeekTaskInfo; use App\Http\Services\SendMessageService; use App\Imports\GoogleTrendsKeywordImport; use GuzzleHttp\Client; use Illuminate\Http\Request; use Illuminate\Contracts\View\Factory; use Illuminate\Support\Facades\Log; use Illuminate\View\View; use Maatwebsite\Excel\Facades\Excel; use Illuminate\Http\JsonResponse; use Illuminate\Http; class GoogleTrendsController extends Controller { public $sendMessageService; // const MOBILE = '17805855987';//cc //const MOBILE = '17771777094';//test const MOBILE = '18705195517';//cc /** * 短信服务类 * GoogleTrendsController constructor. * @param SendMessageService $sendMessageService */ public function __construct(SendMessageService $sendMessageService) { $this->sendMessageService = $sendMessageService; } /** * 报表 * @param Request $request * @return Factory|Http\RedirectResponse|View */ public function index(Request $request) { try { $keyWold = $request->input('keyWold'); $disableList = GoogleTrendsKeyword::query()->where('enable', 1)->pluck('keyword'); if (in_array($keyWold, $disableList->toArray())) { return view('admin/site/not_found', [ 'tips' => '该词不在接单范围内', 'siteId' => 0, ]); } $keyWoldInfo = GoogleTrendsKeyword::query()->where('keyword', $keyWold)->first(); if (empty($keyWoldInfo)) { $this->sendMessageService->sendMessage(self::MOBILE, $keyWold); return view('admin/site/not_found', [ 'tips' => '暂无资料', 'siteId' => 0, ]); } if (empty($keyWoldInfo->monthly_searches) || empty($keyWoldInfo->monthly_searches) || empty($keyWoldInfo->monthly_searches)) { return view('admin/site/not_found', [ 'tips' => '暂无资料', 'siteId' => 0, ]); } if (!empty($keyWoldInfo->cache)) { $cache = \GuzzleHttp\json_decode($keyWoldInfo->cache, true); $relatedInformation = $cache['relatedInformation'] ?? []; $relatedTopic = $cache['relatedTopic'] ?? []; $dateList = $cache['dateList'] ?? []; $countryList = $cache['countryList'] ?? []; } else { //请求香港的后台服务器47.56.232.20 $client = new Client(); $response = $client->post('http://test.build.yinqingli.net/googleTrendsApi/getKeyWordResult', [ 'form_params' => ['keyWold' => $keyWold], ]); $result = \GuzzleHttp\json_decode($response->getBody()->getContents(), true); if ($result['status'] == 200) { GoogleTrendsKeyword::query()->where('id', $keyWoldInfo->id)->update(['cache' => \GuzzleHttp\json_encode($result['data'])]); } $relatedInformation = $result['data']['relatedInformation'] ?? []; $relatedTopic = $result['data']['relatedTopic'] ?? []; $dateList = $result['data']['dateList'] ?? []; $countryList = $result['data']['countryList'] ?? []; } return view('admin/google_trends/google_trends', [ 'relatedInformation' => $relatedInformation, 'relatedTopic' => $relatedTopic, 'dateList' => $dateList, 'countryList' => $countryList, 'keyWoldInfo' => $keyWoldInfo, 'country' => array_merge($this->arraySort($countryList, 'value', 'desc')), ]); } catch (\Exception $e) { echo $e->getMessage(); } } /** * 查询 * @param Request $request * @return Factory|JsonResponse|View */ public function query(Request $request) { if (!$request->ajax()) { return view('admin/google_trends/google_trends_query', [ ]); } $keyWold = strtolower(trim($request->input('keyWold'))); if (empty($keyWold)) { return response()->json(['status' => 500, 'message' => '请输入关键词']); } $cnKeyWord = strtolower(trim($request->input('cnKeyWord'))) ?? ''; $website = strtolower(trim($request->input('website'))) ?? ''; $disableList = GoogleTrendsKeyword::query()->where('enable', 1)->pluck('keyword'); if (in_array($keyWold, $disableList->toArray())) { $remarks = GoogleTrendsKeyword::query()->where('keyword', $keyWold)->value('remarks') ?? ''; return response()->json(['status' => 500, 'message' => $remarks]); } $keyWoldInfo = GoogleTrendsKeyword::query()->where('keyword', $keyWold)->first(); if (empty($keyWoldInfo)) { GoogleTrendsKeyword::query()->insert( [ 'keyword' => $keyWold, 'cn_keyword' => $cnKeyWord, 'website' => $website, 'created_at' => date('Y-m-d H:i:s'), 'user_id' => $authUser = auth()->user()->id, ]); $this->sendMessageService->sendMessage(self::MOBILE, $keyWold); return response()->json(['status' => 301]); } if (empty($keyWoldInfo->monthly_searches)) { return response()->json(['status' => 301]); } return response()->json(['status' => 200]); } /** * 关键词 * @param Request $request * @return Factory|View */ public function keyword(Request $request) { if (!$request->ajax()) { $disabled = GoogleTrendsKeyword::query()->where('enable', 1)->count() ?? 0;//禁用 $enable = GoogleTrendsKeyword::query()->where('enable', 0)->count() ?? 0;//启用 return view('admin/analyze/keyword', [ 'optimizers' => Role::getUsers(Role::TYPE_OPTIMIZER), 'seller' => Role::getUsers(Role::TYPE_SELLER), 'disabled' => $disabled, 'enable' => $enable ]); } $keyword = $request->input('keyword'); $result = GoogleTrendsKeyword::query()->whereNull('deleted_at'); if (!empty($keyword)) { $result = $result->where('keyword', 'like', '%' . $keyword . '%'); } $optimizerId = $request->input('optimizerId'); if (!empty($optimizerId)) { $result = $result->where('principal', $optimizerId); } $sellerId = $request->input('sellerId'); if (!empty($sellerId)) { $result = $result->where('user_id', $sellerId); } $enable = $request->input('enable'); if (isset($enable)) { $result = $result->where('enable', $enable); } $result = $result->orderByDesc('id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE); $userList = User::query()->where('status', 1)->pluck('nickname', 'id'); foreach ($result->items() as $item) { $item->user = $userList[$item->user_id] ?? ''; $item->taskUser = $userList[$item->principal] ?? ''; $keywordsCondition = [ 'user_type' => $item->principal, 'describe' => $item->keyword, ]; $item->taskStatus = '未完成'; $task = WeekTaskInfo::query()->where($keywordsCondition)->first(); $historyTask = WeekTaskHistory::query()->where($keywordsCondition)->orderBy('id', 'desc')->first(); if (!empty($task) && $task->status == 'ok') { $item->taskStatus = '完成'; } if (!empty($historyTask) && $historyTask->status == 'ok') { $item->taskStatus = '完成'; } } return response()->json([ 'rows' => $result->items(), 'total' => $result->total() ]); } /** * 分配任务,并发送短信 * @param Request $request * @return JsonResponse */ public function keywordTask(Request $request) { $taskId = $request->input('taskId'); $userId = $request->input('userId'); $keyword = GoogleTrendsKeyword::query()->where('id', $taskId)->first(); if (!empty($keyword)) { GoogleTrendsKeyword::query()->where('id', $taskId)->update(['principal' => $userId]); } $user = User::query()->where('id', $userId)->first(); if (!empty($user->phone)) { //自动创建任务并发短信给优化 $this->sendMessageService->sendMessage($user->phone, $keyword->keyword ?? '', 3); $data = [ 'type' => 'now', 'day' => date('w'), 'user_type' => $userId, 'duty_id' => $keyword->user_id, 'describe' => $keyword->keyword, 'remark' => $keyword->keyword . ' 接单关键词', 'cond_id' => 87, 'created_at' => date('Y-m-d H:i:s'), 'deadline' => date("Y-m-d", strtotime("+1 day")),//一天完成 ]; $info = WeekTaskInfo::query()->where(['describe' => $data['describe'], 'cond_id' => 87])->first(); if (empty($info)) { WeekTaskInfo::query()->insert($data); } else { WeekTaskInfo::query()->where('id', $info->id)->update(['user_type' => $userId]); } } return response()->json(['message' => '操作成功']); } /** * 删除关键词 * @param Request $request * @return JsonResponse */ public function deleteKeyword(Request $request) { $taskId = $request->input('taskId'); $update = [ 'updated_at' => date('Y-m-d H:i:s'), 'deleted_at' => date('Y-m-d H:i:s'), ]; GoogleTrendsKeyword::query()->where('id', $taskId)->update($update); return response()->json(['message' => '操作成功']); } /** * 保存 * @param Request $request * @param $id * @return Factory|JsonResponse|View */ public function keywordSave(Request $request, $id) { if (!$request->ajax()) { $info = GoogleTrendsKeyword::query()->where('id', $id)->first(); return view('admin/analyze/save_keyword', [ 'info' => $info ]); } $result = $request->all(); if (!empty($result['monthly_searches']) && !is_numeric($result['monthly_searches'])) { return response()->json(['message' => '请填纯数字,不要带格式'], 400); } if (!empty($result['mumber_of_search_results']) && !is_numeric($result['mumber_of_search_results'])) { return response()->json(['message' => '请填纯数字,不要带格式'], 400); } if (!empty($result['competition_index']) && !is_numeric($result['competition_index'])) { return response()->json(['message' => '请填纯数字,不要带格式'], 400); } $result['updated_at'] = date('Y-m-d H:i:s'); GoogleTrendsKeyword::query()->where('id', $id)->update($result); return response()->json(['message' => '操作成功']); } /** * 导入 * @param Request $request * @return JsonResponse */ public function importKeyWord(Request $request) { set_time_limit(0); try { $excelPath = $request->input('excel_path'); if (!$excelPath) { return response()->json(['message' => '请先上传excel文件'], 422); } Excel::import(new GoogleTrendsKeywordImport(), $excelPath, 'public'); } catch (\Throwable $throwable) { Log::error(var_export($throwable->getMessage(), 1)); return response()->json(['message' => '导入失败'], 400); } return response()->json(['message' => '操作成功']); } /** * 关键词列表 * @param Request $request * @return JsonResponse */ public function getKeyWordList(Request $request) { $data = []; $keyword = $request->input('keyword'); $list = GoogleTrendsKeyword::query()->where('keyword', 'like', '%' . $keyword . '%')->pluck('keyword') ?? []; if (!empty($list)) { foreach ($list as $key => $item) { $data[] = [ 'value' => $item, 'data' => $item, ]; } } return response()->json(['data' => $data]); } }