HyStockData.php 5.2 KB
<?php
/**
 * Created by PhpStorm.
 * User: Akun
 * Date: 2025/06/121
 */

namespace App\Console\Commands\Test;

use App\Models\Product\StockData;
use App\Services\ProjectServer;
use Illuminate\Console\Command;

/**
 * Class CreateUpdatePageMaster
 * @package App\Console\Commands
 */
class HyStockData extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'hy_stock_data';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '翰宇药业中文站股票信息获取';


    public function handle()
    {
        $hour = date('H');
        $min = date('i');

        //9:30 - 11:30 , 13:00 - 15:00
        if(($hour == 9 && $min >=30) || $hour == 10 || ($hour == 11 && $min < 45) || $hour == 13 || $hour == 14 || ($hour == 15 && $min < 15 )){
            $this->get_stock();
        }
    }

    public function get_stock()
    {
        //翰宇药业项目id
        $project_id = 3531;
        //流通股数量
        $all_stock_num = 745000000;

        // 连接数据库
        $project = ProjectServer::useProject($project_id);
        if ($project) {

            // 基本参数配置
            $apiUrl = "http://web.juhe.cn/finance/stock/hs"; // 接口请求URL
            $method = "GET"; // 接口请求方式
            $headers = ["Content-Type: application/x-www-form-urlencoded"]; // 接口请求header
            $apiKey = "f6d2a89b4049c3400b5d1059deb320bf"; // 在个人中心->我的数据,接口名称上方查看
            // 接口请求入参配置
            $requestParams = [
                'key' => $apiKey,
                'gid' => 'sz300199',
                'type' => '',
            ];
            $requestParamsStr = http_build_query($requestParams);

            // 发起接口网络请求
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
            curl_setopt($curl, CURLOPT_URL, $apiUrl . '?' . $requestParamsStr);
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($curl, CURLOPT_FAILONERROR, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            if (1 == strpos("$" . $apiUrl, "https://")) {
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            }
            $response = curl_exec($curl);
            curl_close($curl);

            // 解析响应结果
            $responseResult = json_decode($response, true);
            if ($responseResult) {
                $data = $responseResult['result'][0]['data'];
                if ($data) {
                    //获取最近一条
                    $stock = StockData::select(['today_date', 'today_time'])->orderBy('id', 'desc')->first();
                    if (empty($stock) || $data['date'] > $stock->today_date) {
                        //新增当日数据
                        $stock = new StockData();
                        $stock->today_date = $data['date'];
                        $stock->today_time = $data['time'];
                        $stock->now_pri = $data['nowPri'];
                        $stock->increase = $data['increase'];
                        $stock->incre_per = $data['increPer'];
                        $stock->today_max = $data['todayMax'];
                        $stock->today_min = $data['todayMin'];
                        $stock->today_start_pri = $data['todayStartPri'];
                        $stock->yestod_end_pri = $data['yestodEndPri'];
                        $stock->tra_number = $data['traNumber'];
                        $stock->tra_amount = $data['traAmount'];
                        $stock->change_per = floor(($data['traNumber'] / $all_stock_num) * 10000) / 100;
                        $stock->save();
                    } elseif ($data['date'] == $stock['today_date'] && $data['time'] > $stock['today_time']) {
                        //当日数据更新
                        $stock->today_time = $data['time'];
                        $stock->now_pri = $data['nowPri'];
                        $stock->increase = $data['increase'];
                        $stock->incre_per = $data['increPer'];
                        $stock->today_max = $data['todayMax'];
                        $stock->today_min = $data['todayMin'];
                        $stock->tra_number = $data['traNumber'];
                        $stock->tra_amount = $data['traAmount'];
                        $stock->change_per = floor(($data['traNumber'] / $all_stock_num) * 10000) / 100;
                        $stock->save();
                    }

                    $this->output('数据更新成功');
                } else {
                    $this->output('数据为空');
                }
            } else {
                $this->output('请求异常');
            }
        } else {
            $this->output('数据库链接失败');
        }
    }

    /**
     * 输出处理日志
     * @param $message
     * @return bool
     */
    public function output($message)
    {
        echo date('Y-m-d H:i:s') . ' | ' . $message . PHP_EOL;
        return true;
    }
}