| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678 | <?phpnamespace 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' => '操作成功']);    }}
 |