123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Http\Controllers\Controller;
- use App\Http\Models\PrFeedback;
- use App\Http\Models\PrKeywordExtend;
- use App\Http\Models\PrLandPage;
- use App\Http\Models\PrLandPageScope;
- use App\Http\Models\PrModifyGather;
- use App\Http\Models\PrOptimizeData;
- use App\Http\Models\PrOptimizeDataScope;
- use App\Http\Models\PrOptimizeDataSummary;
- use App\Http\Models\PrPlan;
- use App\Http\Models\PrPlanScope;
- use App\Http\Models\PrSeoItem;
- use App\Http\Models\PrSeoItemScope;
- use App\Http\Models\PrSocial;
- use App\Http\Models\Role;
- use App\Http\Models\Site;
- use App\Imports\KeywordExtend;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Maatwebsite\Excel\Facades\Excel;
- use Illuminate\Http\JsonResponse;
- /**
- * 项目管理下 项目概况下的 推广月报
- * Class PromoteReportController
- * @package App\Http\Controllers\Admin
- */
- class PromoteReportController extends Controller
- {
- //主页
- public function index($siteId)
- {
- $ym = date('Ym', strtotime('first day of -1 month'));
- $where = ['site_id' => $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' => '操作成功']);
- }
- }
|