| 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]);    }}
 |