SyncInquiryRelay.php 5.0 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhl
 * Date: 2025/2/13
 * Time: 16:45
 */

namespace App\Console\Commands\Inquiry;

use App\Helper\Translate;
use App\Models\Inquiry\InquiryInfo;
use App\Services\InquiryRelayService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class SyncInquiryRelay extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sync_inquiry_relay';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '同步询盘信息:站群询盘,';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }


    public function handle()
    {
        $this->getInquiryForm();
        $this->getInquirySzcm();
    }

    /**
     * 获取表单系统中询盘信息
     * message_sign唯一值:md5(name+email+phone+ip+time)
     */
    public function getInquiryForm()
    {
        $service = new InquiryRelayService();
        $result = $service->getInquiryRelay();
        if (isset($result['status']) && $result['status'] == 200) {
            $data = $result['data'] ?? [];
            foreach ($data as $item) {
                $this->saveDate($item, $item['source_type']);
            }
        }
    }

    /**
     * 获取秋哥asp采集询盘信息
     * type固定4
     * message_sign唯一值:md5(name+email+phone+ip+time)
     * 先查数据库最大origin_key,再获取数据
     */
    public function getInquirySzcm()
    {
        $max_origin_key = InquiryInfo::where('type', 4)->orderBy('origin_key', 'desc')->value('origin_key');
        if ($max_origin_key) {
            $start_id = $max_origin_key + 1;
        } else {
            $start_id = 65029;
        }

        $service = new InquiryRelayService();
        while ($start_id > 0) {
            $result = $service->getInquirySzcm($start_id);
            if ($result) {
                $this->saveDate($result, 4);
                $start_id += 1;
            } else {
                $start_id = 0;
            }
        }
    }

    public function saveDate($data, $type)
    {
        $model = new InquiryInfo();
        $message_sign = md5($data['name'] . $data['email'] . $data['phone'] . $data['ip'] . $data['time']);
        $inquiry_info = $model->where('message_sign', $message_sign)->first();
        if (!$inquiry_info) {
            //没有IP,根据submit_country获取
            if (empty($data['ip']) && isset($data['submit_country']) && $data['submit_country']) {
                $chinese_name = DB::table('gl_world_country_city')->where('pid', 0)->where('iso2', $data['submit_country'])->value('chinese_name');
                $data['ip'] = $this->getIpData($chinese_name);
            }

            //获取country
            $country = '';
            if ($data['ip']) {
                $country = file_get_contents("http://ip.globalso.com?ip=" . $data['ip']);
            }

            //翻译message
            $message_cn = '';
            $re_message_trans = Translate::translate($data['message'], 'zh');
            if (isset($re_message_trans[0]['code']) && $re_message_trans[0]['code'] == 200) {
                $message_cn = $re_message_trans[0]['texts'];
            }

            //获取页面上title和keywords
            $html = curl_c($data['refer'], false);

            if (empty($data['title'])) {
                preg_match_all('/<title>([\w\W]*?)<\/title>/', $html, $matches);
                if (!empty($matches[1])) {
                    $data['title'] = substr($matches[1][0], 0, 255);
                }
            }

            $keywords = '';
            preg_match_all('/<meta\s+[^>]*?name=[\'|\"]keywords[\'|\"]\s+[^>]*?content=[\'|\"]([\w\W]*?)[\'|\"]/', $html, $matches);
            if (!empty($matches[1])) {
                $keywords = substr($matches[1][0], 0, 255);
            }

            if (empty($data['origin_key'])) {
                $data['origin_key'] = 0;
            }

            if (empty($data['image'])) {
                $data['image'] = '';
            }

            $model->createInquiry($data['name'], $data['phone'], $data['email'], $data['ip'], $country, $data['message'], $message_cn, $type, $data['time'], $data['refer'], $data['title'], $keywords, $message_sign, $data['origin_key'], $data['image']);
        }
    }

    /**
     * 获取国家随机ip
     * @param $country_name
     * @return mixed|string
     * @author Akun
     * @date 2025/02/14 14:19
     */
    public function getIpData($country_name)
    {
        // 有国家 通过国家查询, 如果没有获取到就随机获取
        $where = [];
        $country_name && $where['ip_area'] = $country_name;
        $ip = DB::table('gl_xunpan_ipdata')->where($where)->inRandomOrder()->value('ip');
        if (empty($ip_data)) {
            $ip = DB::table('gl_xunpan_ipdata')->inRandomOrder()->value('ip');
        }
        return $ip;
    }
}