wesmiler 2 years ago
parent
commit
e8b882b805
2 changed files with 45 additions and 4 deletions
  1. 41 0
      app/Console/Commands/SwooleTask.php
  2. 4 4
      app/Services/WalletService.php

+ 41 - 0
app/Console/Commands/SwooleTask.php

@@ -5,6 +5,7 @@ namespace App\Console\Commands;
 use App\Services\Api\FinanceService;
 use App\Services\Api\GoodsService;
 use App\Services\RedisService;
+use App\Services\WalletService;
 use Illuminate\Console\Command;
 use Illuminate\Support\Facades\DB;
 
@@ -233,6 +234,29 @@ class SwooleTask extends Command
             file_put_contents($this->options['log_file'],"Task {$date}:清空日志\n");
         }
 
+        // TODO 更新USDT价格
+        \swoole_timer_tick(120000, function ($timer) use ($serv, &$time) { // 启用定时器,每120秒执行一次
+            $date = date('Y-m-d H:i:s');
+            if($time>3600 && file_exists($this->options['log_file'])){
+                $time = 0;
+                file_put_contents($this->options['log_file'],"Task {$date}:清空日志\n");
+            }
+            $time++;
+            if(!RedisService::get('caches:task:lock:usdt_loaded')){
+                $taskData = [
+                    'taskName' => 'UpdateUsdtPrice',
+                    'name' => "更新USDT价格",
+                    'date' => date('Y-m-d'),
+                ];
+                $res = $serv->task($taskData);
+                RedisService::set('caches:task:lock:usdt_loaded', true, rand(3,5));
+                echo "[Task UpdateUsdtPrice {$date}] 更新USDT价格:{$res}\n";
+            }else{
+                echo "[Task UpdateUsdtPrice {$date}] 间隔时间调用\n";
+            }
+
+        });
+
         // TODO 更新商品数据
         \swoole_timer_tick(120000, function ($timer) use ($serv, &$time) { // 启用定时器,每120秒执行一次
             $date = date('Y-m-d H:i:s');
@@ -428,6 +452,23 @@ class SwooleTask extends Command
                     echo "[Task {$taskName} {$date}] 更新商品分类数据结果:{$error}\n";
                 }
                 break;
+            case 'UpdateUsdtPrice': // 更新USDT价格
+                // 时间限制
+                if(date('H:i') >= '01:00' && date('H:i') <= '04:00'){
+                    echo "[Task {$taskName} {$date}] 不在运行时间段内\n";
+                    return false;
+                }
+
+                // 调用处理
+                if($res = WalletService::make()->getBianRatePrice(true)){
+                    $res = is_array($res) && $res? json_encode($res, 256) : 'success';
+                    echo "[Task {$taskName} {$date}] 更新USDT价格结果:{$res}\n";
+                }else{
+                    $error = WalletService::make()->getError();
+                    $error = $error? lang($error) : 'failed';
+                    echo "[Task {$taskName} {$date}] 更新USDT价格结果:{$error}\n";
+                }
+                break;
             case 'GrantScore':
                 // 时间限制
                 if(date('H:i') >= '09:00'){

+ 4 - 4
app/Services/WalletService.php

@@ -801,12 +801,12 @@ class WalletService extends BaseService
      * USDT 币安汇率
      * @return string
      */
-    public function getBianRatePrice()
+    public function getBianRatePrice($refresh = false)
     {
         // 币安买价
         $cacheKey ="caches:wallet:usdt_rate";
         $price = RedisService::get($cacheKey);
-        if($price){
+        if($price && !$refresh){
             return $price;
         }
 
@@ -817,10 +817,10 @@ class WalletService extends BaseService
         $price = isset($data['referencePrice']) ? moneyFormat($data['referencePrice'],2) : '0.00';
         RedisService::set("caches:wallets:usdt_buy_result", ['result' => $result,'rates'=>$price,'data'=>$data], 7200);
         if($price){
-            RedisService::set($cacheKey, $price, rand(5,10));
+            RedisService::set($cacheKey, $price, rand(120,200));
         }else{
             $price = ConfigService::make()->getConfigByCode('usdt_cny_price',7.2);
-            RedisService::set($cacheKey, $price, rand(5,10));
+            RedisService::set($cacheKey, $price, rand(60,120));
         }
         return $price>0? $price : 0;
     }