| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | <?php/** * Created by PhpStorm. * User: vanshao * Date: 2019-10-24 * Time: 11:24 */namespace App\Http\Controllers\Admin;use App\Http\Controllers\Controller;use App\Http\Logics\Admin\SiteLogic;use App\Http\Logics\Admin\SiteSyncLogic;use App\Http\Models\Business;use App\Http\Models\Contract;use App\Http\Models\Role;use App\Http\Models\Server;use App\Http\Models\Site;use App\Http\Models\SiteAddition;use App\Http\Models\SiteEnterprise;use App\Http\Models\SiteInfo;use App\Http\Models\SiteMarketer;use App\Http\Models\SitePayment;use App\Http\Models\SiteSns;use App\Http\Models\SiteStation;use App\Http\Models\Social;use App\Http\Models\SocialPublish;use App\Http\Requests\Site\PaymentRequest;use App\Http\Requests\Site\SiteOverviewRequest;use App\Http\Requests\Site\CustomerRequest;use App\Http\Requests\Site\SiteSaveRequest;use App\Http\Requests\Site\SocialPublishRequest;use App\Http\Requests\Site\SocialQueueRequest;use App\Http\Requests\Site\SocialSaveRequest;use GuzzleHttp\Client;use Illuminate\Database\Eloquent\Builder;use Illuminate\Http\Request;use Illuminate\Support\Facades\Cache;use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Log;use App\Http\Traits\HasSites;class HtPlantController extends Controller{    public function index(Request $request)    {        if (!$request->ajax()) {            return view('admin/ht_plant/index');        }        $cacheKey=md5('htall');        $cacheContent = Cache::get($cacheKey);        $cacheContentTotal = Cache::get($cacheKey.'total');        $sortName = $request->input('sortName')=='id'?'traffic':$request->input('sortName');        $sortOrder = $request->input('sortOrder');        $traffic_number=$request->input('traffic_number');        $inquire_number=$request->input('inquire_number');        if ($cacheContent&&!$cacheContent->isEmpty()) {            $records=$cacheContent;            $total=$cacheContentTotal;        }else{            if ($status = $request->input('status')) {                $condition['status'] = $status;            }            DB::connection()->enableQueryLog();            $keyword = $request->input('keyword');            $builder = Site::query()->withCount(['articles' , 'linkDetails'=>function(Builder $query){                $query->where([                    ['enable', '=', 1]                ]);            }])                ->withCount(['linkUrls'])                ->with(['users','linkDetails','business'])->where($condition ?? [])->whereIn('status',[2,3])->where(function (Builder $builder) use ($keyword) {                    if ($keyword) {                        $builder->where('domain', 'like', '%' . $keyword . '%')                            ->orWhere('cn_title', 'like', '%' . $keyword . '%');                    }                });            if ($sortName == 'statusTitle') {                $builder->orderBy('status', $sortOrder);            }            if ($sortName == 'order_at') {                $builder->orderBy('order_at', $sortOrder);            }            $sites = $builder->orderByDesc('id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);            $items = $sites->items();            $oldIds = array_filter(array_column($items, 'old_id'));            $rankConnection = DB::connection('rank');            $top10ListMap = $rankConnection->table('project_keyword')                ->selectRaw('SUM(CASE WHEN google_rank <= 10 THEN 1 ELSE 0 END) as top10,count(id) as keyword_num,project_id')->whereIn('project_id', $oldIds)                ->groupBy('project_id')->get()->keyBy('project_id')->toArray();            $listReportMap = $rankConnection->table('project_listreport')->whereIn('project_id', $oldIds)->where([                'ym' => date('Ym', strtotime('-1 month'))            ])->get()->keyBy('project_id')->toArray();            $reachTimeMap = $rankConnection->table('project')->whereIn('id',$oldIds)->get()->keyBy('id')->toArray();            array_walk($items, function ($item) use (&$top10ListMap, &$listReportMap,&$reachTimeMap) {                $item->identify = base64_encode($item->id);                $item->managers_title = implode('-', $item->users->where('role_id', Role::TYPE_MANAGER)->pluck('nickname')->toArray());                $item->statusTitle = Site::STATUS_MAP[$item->status] ?? '';                $item->top10 = $item->old_id ? ($top10ListMap[$item->old_id]->top10 ?? '-') : '未关联';                $item->keyword_num = $item->old_id ? ($top10ListMap[$item->old_id]->keyword_num ?? '-') : '未关联';                $item->traffic = $item->old_id ? ($listReportMap[$item->old_id]->traffic ?? '-') : '未关联';                $item->inquire = $item->old_id ? ($listReportMap[$item->old_id]->inquire ?? '-') : '未关联';                $item->reach_time = $item->old_id ?($reachTimeMap[$item->old_id]->reach_time?intval((time()-$reachTimeMap[$item->old_id]->reach_time)/86400).'天':'未达标') : '未关联';                $item->is_google_bid = in_array(Contract::GOOGLE_BID, $item->contract_ids ?? []) ? 1 : 0;                $item->online_date = $item->online_at ? date('Y-m-d', strtotime($item->online_at)) : '';                if($item->online_date){                    $online_time=strtotime($item->online_date);                    if($item->old_id){                        $seo_times=$reachTimeMap[$item->old_id]->reach_time?$reachTimeMap[$item->old_id]->reach_time-$online_time:time()-$online_time;                        $item->seo_time=intval($seo_times/86400);                        $item->seo_time=$item->seo_time>0?$item->seo_time.'天':'-';                    }                }else{                    $item->seo_time='-';                }                try{                    if($item->webmaster_domain){                        $opts=array(                            "http"=>array(                                "method"=>"GET",                                "timeout"=>3                            ),                        );                        $context = stream_context_create($opts);                        $web_count=substr_count(file_get_contents($item->webmaster_domain.'sitemap.xml','false',$context),'http');                        $item->web_count=$web_count;                    }                }catch(\Throwable $throwable){                }                $temp_link_details=array();                foreach ($item->linkDetails as $value){                    $temp_link_details[]=$value['link_id'];                }                if($temp_link_details){                    $item->link_details_num=count(array_unique($temp_link_details));                }                unset($item->linkDetails);            });            $records = collect($items);            $total=$sites->total();            Cache::put($cacheKey,$records,10080);            Cache::put($cacheKey.'total',$sites->total(),10080);        }        if (in_array($sortName, ['traffic', 'inquire', 'top10'])) {            $descending = strtolower($sortOrder) == 'asc' ? false : true;            $records = $records->sortBy(function ($item, $key) use ($sortName, $descending) {                return intval($item[$sortName]);            }, SORT_REGULAR, $descending)->values();        }        if($traffic_number){            $number=explode(',',$traffic_number);            $records=$records->filter(function ($value,$key) use($number){                return $value['traffic']>$number[0]&&$value['traffic']<=$number[1];            });        }        if($inquire_number){            $number=explode(',',$inquire_number);            $records=$records->filter(function ($value,$key) use($number){                return $value['inquire']>$number[0]&&$value['inquire']<=$number[1];            });        }        return response()->json([            'rows' => array_values($records->toArray()),            'total' => $total        ]);    }}
 |