$siteId, 'ym' => $ym]; $optimizeDataList = PrOptimizeData::query()->where($where)->get(); $landPageList = PrLandPage::query()->where(['site_id' => $siteId])->get(); $socialList = PrSocial::query()->where($where)->get()->keyBy('type')->toArray(); $threeMonth = []; for ($i = 1; $i <= 3; $i++) { $threeMonth[] = date('Ym', strtotime("first day of -$i month")); } $modifyGatherList = PrModifyGather::query()->where(['site_id' => $siteId])->get(); $seoItemSingle = PrSeoItem::query()->where($where)->first(); $plan = PrPlan::query()->where($where)->first(); $feedbackList = PrFeedback::query()->where($where)->orderByDesc('ym')->get(); $authUser = auth()->user(); if ($authUser->is_super || in_array($authUser->role_id, [Role::TYPE_MANAGE_LEADER])) { $scope = true; } $oldId = Site::query()->where('id', $siteId)->value('old_id') ?? 0; $summary = PrOptimizeDataSummary::query()->where($where)->value('content') ?? ''; $info = PrOptimizeDataScope::query()->first() ?? []; $mobile = DB::table('site_mobile')->where('site_id', $siteId)->value('mobile') ?? ''; $webmasterAccount = 'Hina'; $webmasterType = DB::connection('rank')->table('project')->where('id', $oldId)->value('webmaster_type'); if (!empty($webmasterType)) { if ($webmasterType == 2) { $webmasterAccount = 'Tommy Ru'; } else { $webmasterAccount = ''; } } return view('admin.promote_report.index', [ 'webmasterAccount' => $webmasterAccount, 'mobile' => $mobile, 'oldId' => $oldId, 'siteId' => $siteId, 'optimizeDataList' => $optimizeDataList, 'optimizeDataScopeList1' => json_decode($info->content_one, true) ?? [], 'optimizeDataScopeList2' => json_decode($info->content_two, true) ?? [], 'optimizeDataScopeList3' => json_decode($info->content_three, true) ?? [], 'optimizeDataScopeList4' => json_decode($info->content_four, true) ?? [], 'landPageList' => $landPageList, 'landPageScopeList' => PrLandPageScope::query()->get(), 'threeMonth' => $threeMonth, 'socialList' => $socialList, 'modifyGatherList' => $modifyGatherList, 'seoItemSingle' => $seoItemSingle, 'seoItemScopeList' => PrSeoItemScope::query()->get(), 'plan' => $plan, 'planScopeList' => PrPlanScope::query()->get(), 'feedbackList' => $feedbackList, 'scope' => $scope ?? false, 'summary' => $summary ]); } //保存优化师数据分析 public function saveOptimizeData(Request $request, $siteId) { $ym = date('Ym', strtotime('first day of -1 month')); $site = Site::query()->select(['old_id'])->find($siteId); if (!$site) { return response()->json(['message' => '站点不存在'], 400); } $dataList = $request->input('dataList') ?? []; PrOptimizeData::query()->where(['site_id' => $siteId, 'ym' => $ym])->delete(); $insertData = []; $datetime = date('Y-m-d H:i:s'); foreach ($dataList as $value) { $insertData[] = [ 'ym' => $ym, 'site_id' => $siteId, 'old_id' => $site->old_id, 'content' => $value, 'created_at' => $datetime, 'updated_at' => $datetime ]; } if ($dataList) { PrOptimizeData::query()->insert($insertData); } return response()->json(['message' => '操作成功']); } //保存优化师数据总结 public function saveOptimizeDataSummary(Request $request, $siteId) { $ym = date('Ym', strtotime('first day of -1 month')); $site = Site::query()->select(['old_id'])->find($siteId); if (!$site) { return response()->json(['message' => '站点不存在'], 400); } $summary = $request->input('summary') ?? ''; PrOptimizeDataSummary::query()->where(['site_id' => $siteId, 'ym' => $ym])->delete(); $datetime = date('Y-m-d H:i:s'); $insertData = [ 'ym' => $ym, 'site_id' => $siteId, 'old_id' => $site->old_id, 'content' => $summary, 'created_at' => $datetime, 'updated_at' => $datetime ]; PrOptimizeDataSummary::query()->insert($insertData); return response()->json(['message' => '操作成功']); } //保存优化师数据分析固定话语 public function saveOptimizeDataScope(Request $request) { $dataList1 = $request->input('dataList1') ?? []; $dataList2 = $request->input('dataList2') ?? []; $dataList3 = $request->input('dataList3') ?? []; $dataList4 = $request->input('dataList4') ?? []; $datetime = date('Y-m-d H:i:s'); $insertData = [ 'created_at' => $datetime, 'updated_at' => $datetime ]; if (!empty($dataList1)) { $insertData['content_one'] = \GuzzleHttp\json_encode($dataList1); } if (!empty($dataList2)) { $insertData['content_two'] = \GuzzleHttp\json_encode($dataList2); } if (!empty($dataList3)) { $insertData['content_three'] = \GuzzleHttp\json_encode($dataList3); } if (!empty($dataList4)) { $insertData['content_four'] = \GuzzleHttp\json_encode($dataList4); } PrOptimizeDataScope::query()->delete(); PrOptimizeDataScope::query()->insert($insertData); return response()->json(['message' => '操作成功']); } //着陆页清空 public function clearLandPage($siteId) { PrLandPage::query()->where(['site_id' => $siteId])->delete(); return response()->json(['message' => '操作成功']); } //着陆页保存 public function saveLandPage(Request $request, $siteId) { $site = Site::query()->select(['old_id'])->find($siteId); if (!$site) { return response()->json(['message' => '站点不存在'], 400); } $dataList = $request->input('dataList') ?? []; $scopeIds = PrLandPage::query()->where(['site_id' => $siteId])->pluck('id')->toArray(); $requestIds = array_column($dataList, 'id'); $delIds = array_diff($scopeIds, $requestIds); if ($delIds) { PrLandPage::destroy($delIds); } $datetime = date('Y-m-d H:i:s'); foreach ($dataList as $item) { if (empty($item['id'])) { PrLandPage::query()->create([ 'site_id' => $siteId, 'old_id' => $site->old_id, 'content' => $item['content'], 'sub_list' => ($item['subList'] ?? []), 'created_at' => $datetime, 'updated_at' => $datetime ]); } else { PrLandPage::query()->where(['id' => $item['id']]) ->update([ 'content' => $item['content'], 'sub_list' => json_encode(($item['subList'] ?? [])) ]); } } return response()->json(['message' => '操作成功', 'data' => PrLandPage::query()->where(['site_id' => $siteId])->get()]); } //社交推广保存 public function saveSocial(Request $request, $siteId) { $site = Site::query()->select(['old_id', 'id'])->find($siteId); if (!$site) { return response()->json(['message' => '站点不存在'], 400); } $facebook = $request->input('facebook'); $linkedIn = $request->input('linkedIn'); $twitter = $request->input('twitter'); $pin = $request->input('pin'); $ins = $request->input('ins'); $youtube = $request->input('youtube'); $facebookHide = $request->input('facebookHide'); $linkedInHide = $request->input('linkedInHide'); $twitterHide = $request->input('twitterHide'); $pinHide = $request->input('pinHide'); $insHide = $request->input('insHide'); $youtubeHide = $request->input('youtubeHide'); $ym = date('Ym', strtotime('first day of -1 month')); $dataList = [ [ 'type' => 'facebook', 'data' => [ 'data_list' => $facebook, 'hide' => $facebookHide ] ], [ 'type' => 'linkedIn', 'data' => [ 'data_list' => $linkedIn, 'hide' => $linkedInHide ] ], [ 'type' => 'twitter', 'data' => [ 'data_list' => $twitter, 'hide' => $twitterHide ] ], [ 'type' => 'pin', 'data' => [ 'data_list' => $pin, 'hide' => $pinHide ] ], [ 'type' => 'ins', 'data' => [ 'data_list' => $ins, 'hide' => $insHide ] ], [ 'type' => 'youtube', 'data' => [ 'data_list' => $youtube, 'hide' => $youtubeHide, ] ], ]; foreach ($dataList as $item) { if (PrSocial::query()->where(['site_id' => $siteId, 'ym' => $ym])->where(['type' => $item['type']])->exists()) { PrSocial::query()->where(['site_id' => $siteId, 'ym' => $ym])->where(['type' => $item['type']])->update([ 'data_list' => json_encode($item['data']['data_list']), 'hide' => $item['data']['hide'], ]); } else { PrSocial::query()->create([ 'ym' => $ym, 'type' => $item['type'], 'site_id' => $siteId, 'old_id' => $site->old_id, 'data_list' => $item['data']['data_list'], 'hide' => $item['data']['hide'] ]); } } $this->saveNextSocial($site, $dataList); return response()->json(['message' => '操作成功']); } //提前保存下个月的 private function saveNextSocial($site, $dataList) { $ym = date('Ym'); foreach ($dataList as $item) { $data = PrSocial::query()->where(['site_id' => $site->id, 'ym' => $ym, 'type' => $item['type']])->first(); $item['data']['data_list'][0] = null; if ($data) { $data->data_list = $item['data']['data_list']; $data->hide = $item['data']['hide']; $data->save(); } else { PrSocial::query()->create([ 'ym' => $ym, 'type' => $item['type'], 'site_id' => $site->id, 'old_id' => $site->old_id, 'data_list' => $item['data']['data_list'], 'hide' => $item['data']['hide'] ]); } } } //清空修改汇总 public function clearModifyGather($siteId) { PrModifyGather::query()->where(['site_id' => $siteId])->delete(); return response()->json(['message' => '操作成功']); } //修改汇总保存 public function saveModifyGather(Request $request, $siteId) { $site = Site::query()->select(['old_id'])->find($siteId); if (!$site) { return response()->json(['message' => '站点不存在'], 400); } $dataList = $request->input('dataList') ?? []; $scopeIds = PrModifyGather::query()->where(['site_id' => $siteId])->pluck('id')->toArray(); $requestIds = array_column($dataList, 'id'); $delIds = array_diff($scopeIds, $requestIds); if ($delIds) { PrModifyGather::destroy($delIds); } $datetime = date('Y-m-d H:i:s'); foreach ($dataList as $item) { if (empty($item['id'])) { PrModifyGather::query()->create([ 'site_id' => $siteId, 'old_id' => $site->old_id, 'content' => $item['content'], 'modify_date' => $item['modify_date'] ?? null, 'created_at' => $datetime, 'updated_at' => $datetime ]); } else { PrModifyGather::query()->where(['id' => $item['id']]) ->update([ 'content' => $item['content'], 'modify_date' => $item['modify_date'] ?? null ]); } } return response()->json(['message' => '操作成功', 'data' => PrModifyGather::query()->where(['site_id' => $siteId])->get()]); } //获取seo public function getSeoItemScope() { $result = PrSeoItemScope::query()->get(); return response()->json(['data' => $result]); } //保存Seo public function saveSeoItem(Request $request, $siteId) { $site = Site::query()->select(['old_id', 'id'])->find($siteId); if (!$site) { return response()->json(['message' => '站点不存在'], 400); } $ym = date('Ym', strtotime('first day of -1 month')); $checked_list = $request->input('checked_list') ?? []; $data = PrSeoItem::query()->where(['site_id' => $siteId, 'ym' => $ym])->first(); if ($data) { $data->checked_list = $checked_list; $data->save(); } else { PrSeoItem::query()->create([ 'ym' => $ym, 'site_id' => $siteId, 'old_id' => $site->old_id, 'checked_list' => $checked_list ]); } $this->saveNextSeoItem($site, $checked_list); return response()->json(['message' => '操作成功']); } //提前保存下个月的 private function saveNextSeoItem($site, $checked_list) { $ym = date('Ym'); $data = PrSeoItem::query()->where(['site_id' => $site->id, 'ym' => $ym])->first(); if ($data) { $data->checked_list = $checked_list; $data->save(); } else { PrSeoItem::query()->create([ 'ym' => $ym, 'site_id' => $site->id, 'old_id' => $site->old_id, 'checked_list' => $checked_list ]); } } //seo固定选项保存 public function saveSeoItemScope(Request $request) { $dataList = $request->input('dataList') ?? []; $insertData = []; $datetime = date('Y-m-d H:i:s'); $idMapList = PrSeoItemScope::query()->get(); $seoItemIds = array_filter(array_column($dataList, 'seoItemId')); foreach ($idMapList as $item) { if (!in_array($item->id, $seoItemIds)) { $item->delete(); } foreach ($dataList as $v) { if ($v['seoItemId'] == $item->id && $v['content'] != $item->content) { $item->update(['content' => $v['content']]); } } } foreach ($dataList as $value) { if (empty($value['seoItemId'])) { $insertData[] = [ 'content' => $value['content'], 'created_at' => $datetime, 'updated_at' => $datetime ]; } } if ($dataList) { PrSeoItemScope::query()->insert($insertData); } return response()->json(['message' => '操作成功']); } // public function savePlanBak(Request $request, $siteId) // { // $site = Site::query()->select(['old_id'])->find($siteId); // if (!$site) { // return response()->json(['message' => '站点不存在'], 400); // } // $dataList = $request->input('dataList') ?? []; // // $ym = date('Ym', strtotime('first day of -1 month')); // // // PrPlan::query()->where(['site_id' => $siteId, 'ym' => $ym])->delete(); // // // $insertData = []; // $datetime = date('Y-m-d H:i:s'); // foreach ($dataList as $value) { // $insertData[] = [ // 'ym' => $ym, // 'site_id' => $siteId, // 'old_id' => $site->old_id, // 'content' => $value['content'], // 'created_at' => $datetime, // 'updated_at' => $datetime // ]; // } // if ($dataList) { // PrPlan::query()->insert($insertData); // } // return response()->json(['message' => '操作成功']); // } //工作规划保存 public function savePlan(Request $request, $siteId) { $site = Site::query()->select(['old_id'])->find($siteId); if (!$site) { return response()->json(['message' => '站点不存在'], 400); } $dataList = $request->input('dataList') ?? []; $ym = date('Ym', strtotime('first day of -1 month')); $plan = PrPlan::query()->where(['site_id' => $siteId, 'ym' => $ym])->first(); if (!$plan) { PrPlan::query()->create([ 'ym' => $ym, 'site_id' => $siteId, 'old_id' => $site->old_id, 'content_list' => $dataList, 'file_name' => $request->input('file_name') ?? '', 'file_path' => $request->input('file_path') ?? '', ]); } else { $plan->update([ 'content_list' => $dataList, 'file_name' => $request->input('file_name') ?? '', 'file_path' => $request->input('file_path') ?? '', ]); } return response()->json(['message' => '操作成功']); } //工作规划固定话语保存 public function savePlanScope(Request $request) { $dataList = $request->input('dataList') ?? []; PrPlanScope::query()->delete(); $insertData = []; $datetime = date('Y-m-d H:i:s'); foreach ($dataList as $value) { $insertData[] = [ 'content' => $value, 'created_at' => $datetime, 'updated_at' => $datetime ]; } if ($dataList) { PrPlanScope::query()->insert($insertData); } return response()->json(['message' => '操作成功']); } //关键词拓展 public function keywordExtend(Request $request, $siteId) { if (!$request->ajax()) { return view('admin.promote_report.keyword_extend', [ 'siteId' => $siteId, ]); } $result = PrKeywordExtend::query()->where(['site_id' => $siteId])->orderByDesc('id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE); $items = $result->items(); return response()->json([ 'rows' => $items, 'total' => $result->total() ]); } //导入关键词 public function importKeyword(Request $request) { set_time_limit(0); $siteId = $request->input('siteId'); if (!$request->input('excel_path') || !$siteId) { return response()->json(['message' => '请先上传excel文件'], 422); } $site = Site::query()->where(['id' => $siteId])->first(); if (empty($site->old_id)) { return response()->json(['message' => '老站点信息不存在'], 400); } try { Excel::import(new KeywordExtend($siteId, $site->old_id), $request->input('excel_path'), 'public'); } catch (\Throwable $throwable) { Log::error(var_export($throwable->getMessage(), 1)); return response()->json(['message' => '导入失败'], 400); } return response()->json(['message' => '操作成功']); } //清空关键词 public function clearKeyword($siteId) { $ym = date('Ym'); PrKeywordExtend::query()->where(['site_id' => $siteId, 'ym' => $ym])->delete(); return response()->json(['message' => '操作成功']); } /** * 删除关键词 * @param Request $request * @param $siteId * @return JsonResponse */ public function deleteKeyword(Request $request, $siteId) { $ids = $request->input('ids'); $keywordList = PrKeywordExtend::query() ->where('site_id', $siteId) ->whereIn('id', $ids) ->pluck('keyword'); $projectId = Site::query()->where('id', $siteId)->value('old_id'); try { //事务 DB::transaction(function () use ($siteId, $ids, $keywordList, $projectId) { PrKeywordExtend::query() ->where('site_id', $siteId) ->whereIn('id', $ids) ->delete(); DB::connection('rank') ->table('project_keyword') ->where('project_id', $projectId) ->whereIn('keyword', $keywordList) ->delete(); }); } catch (\Throwable $exception) { return response()->json(['message' => $exception->getMessage()], 400); } return response()->json(['message' => '操作成功']); } }