AdsController.php 7.2 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhl
 * Date: 2024/10/8
 * Time: 15:32
 */
namespace App\Http\Controllers\Aside\Task;

use App\Enums\Common\Code;
use App\Helper\Arr;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Channel\Channel;
use App\Models\Domain\DomainInfo;
use App\Models\Inquiry\ReInquiryDetail;
use App\Models\Inquiry\ReInquiryForm;
use App\Models\Inquiry\ReInquiryTask;
use App\Models\Project\Project;
use App\Utils\HttpUtils;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Http\Request;

/**
 * Class AdsController
 * @package App\Http\Controllers\Aside\Special
 */
class AdsController extends BaseController
{

    /**
     * 广告列表
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function fbAdsList(Request $request)
    {
        $ads_id = trim($request->input('ads_id'));
        $industry = trim($request->input('industry'));
        $result = ReInquiryTask::where(['status' => ReInquiryTask::STATUS_OPEN])
            ->when($ads_id, function ($query, $ads_id) {
                return $query->where('ad_id', 'like', '%' . $ads_id . '%');
            })
            ->when($industry, function ($query, $industry) {
                return $query->where('industry', $industry);
            })
            ->orderBy('id', 'desc')
            ->paginate();

        $relay_site_total = 0;
        foreach ($result as $item){
            $relay_site_total += count($item->target);
        }
        $result = $result->toArray();
        $result['relay_site_total'] = $relay_site_total;

        return $this->response('success', Code::SUCCESS, $result);
    }

    /**
     * 新增或修改广告
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function setFbAds(Request $request)
    {
        $id = intval($request->input('id'));
        $title = trim($request->input('title'));
        $industry = trim($request->input('industry'));
        $ad_id = trim($request->input('ad_id'));
        $ad_url = trim($request->input('ad_url'));
        $ad_img = trim($request->input('ad_img'));
        $num = intval($request->input('num'));
        $status = intval($request->input('status'));
        if (empty($title) || empty($ad_id))
            return $this->response('请填写完整信息!', Code::USER_ERROR, []);

        ReInquiryTask::createTask($id, $title, $industry, $ad_id, $ad_url, $ad_img, $num, $status);
        return $this->response('success', Code::SUCCESS, []);
    }

    /**
     * 设置转发站点
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function setRelaySite(Request $request)
    {
        $id = intval($request->input('id', 0));
        $target = $request->input('target');
        $task = ReInquiryTask::find($id);
        if(!$task){
            return $this->response('广告不存在!', Code::USER_ERROR, []);
        }
        if(empty($target)){
            return $this->response('请添加关联网站!', Code::USER_ERROR, []);
        }
        foreach ($target as &$item){
            if(empty($item['url'])){
                return $this->response('网站域名不能为空!', Code::USER_ERROR, []);
            }
            if(empty($item['agent'])){
                return $this->response('代理不能为空!', Code::USER_ERROR, []);
            }
            $item['url'] = trim(str_replace(['http://', 'https://'], '', $item['url']), '/');
        }
        $task->target = json_encode($target);
        $task->save();
        return $this->response('success', Code::SUCCESS, []);
    }

    /**
     * 验证站点5.0还是6.0, 代理商信息
     * @param Request $request
     */
    public function checkDomain(Request $request)
    {
        $domain = $request->input('domain');
        $domain = trim(str_replace(['http://', 'https://'], '', $domain), '/');
        //是否v6
        $domain_info = DomainInfo::where('domain', $domain)->first();
        if($domain_info){
            $channel = Project::where('id', $domain_info['project_id'])->value('channel');
            $data = [
                'is_v6' => 1,
                'agent' => Channel::getChannelText($channel['user_id']??0),
                'domain' => $domain,
            ];
            return $this->response('success', Code::SUCCESS, $data);
        }

        $token = md5($domain.'qqs');
        try {
            $res = HttpUtils::get('https://quanqiusou.cn/extend_api/api/get_agent_by_domain.php', ['token' => $token, 'domain' => $domain]);
            $res = Arr::s2a($res);
        } catch (\Exception | GuzzleException $e) {
            return $this->response('验证失败,请稍后再试!', Code::USER_ERROR, []);
        }
        if(empty($res['status']) || $res['status'] != 200){
            return $this->response($res['msg'], Code::USER_ERROR, []);
        }
        $data = [
            'is_v6' => 0,
            'agent' => $res['data'],
            'domain' => $domain,
        ];
        return $this->response('success', Code::SUCCESS, $data);
    }

    /**
     * FB广告产生询盘列表
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function fbInquiryList(Request $request)
    {
        $status = intval($request->input('status'));
        $ad_name = $request->input('ad_name');
        $ad_id = $request->input('ad_id');
        $country = $request->input('country');
        $result = ReInquiryForm::when($status, function ($query, $status) {
                return $query->where('status', $status);
            })
            ->when($ad_name, function ($query, $ad_name) {
                return $query->where('ad_name', 'like', '%' . $ad_name . '%');
            })
            ->when($ad_id, function ($query, $ad_id) {
                return $query->where('ad_id', 'like', '%' . $ad_id . '%');
            })
            ->when($country, function ($query, $country) {
                return $query->where('country', 'like', '%' . $country . '%');
            })
            ->orderBy('inquiry_date', 'desc')
            ->paginate();
        return $this->response('success', Code::SUCCESS, $result);
    }

    /**
     * FB询盘转发详情
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function fbRelayDetail(Request $request)
    {
        //广告ID、询盘ID、国家、状态
        $status = intval($request->input('status'));
        $task_id = intval($request->input('task_id'));
        $form_id = intval($request->input('form_id'));
        $country = intval($request->input('country'));
        $result = ReInquiryDetail::with('detailLog')
            ->when($status, function ($query, $status) {
                return $query->where('status', $status);
            })
            ->when($form_id, function ($query, $form_id) {
                return $query->where('form_id', $form_id);
            })
            ->when($task_id, function ($query, $task_id) {
                return $query->where('task_id', $task_id);
            })
            ->when($country, function ($query, $country) {
                return $query->where('country', 'like', '%'.$country.'%');
            })
            ->orderBy('id', 'desc')
            ->paginate();
        return $this->response('success', Code::SUCCESS, $result);
    }
}