123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- <?php
- /**
- * 谷歌趋势
- * @copyright 2021-浙江引擎力营销策划有限公司
- * @author Lc<sunshinecc1@163.com>
- * @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]);
- }
- }
|