88 lines
3.3 KiB
PHP
88 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Currency;
|
|
use App\Setting;
|
|
use App\Users;
|
|
use App\UsersWallet;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\DB;
|
|
class ExecuteCurrency extends Command
|
|
{
|
|
protected $signature = "execute_currency {id : id}";
|
|
protected $description = "上币执行脚本";
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
public function handle()
|
|
{
|
|
$id = $this->argument('id');
|
|
try {
|
|
$is_execute = Setting::getValueByKey('currency_' . $id, 0);
|
|
if ($is_execute == 1) {
|
|
throw new \Exception('该币上币脚本正在运行中,请不要重复执行');
|
|
}
|
|
Setting::updateValueByKey('currency_' . $id, 1);
|
|
$currency = Currency::find($id);
|
|
if (empty($currency)) {
|
|
throw new \Exception('币种不存在');
|
|
}
|
|
if (!in_array($currency->type, ['btc', 'usdt', 'eth', 'erc20', 'xrp'])) {
|
|
throw new \Exception('不支持的币种');
|
|
}
|
|
$address_url = '/v3/wallet/address';
|
|
$project_name = config('app.name');
|
|
$http_client = app('LbxChainServer');
|
|
$this->info('开始执行按币种生成钱包脚本--' . Carbon::now()->toDateTimeString());
|
|
$user_query = Users::whereNotExists(function ($query) use($id) {
|
|
$query->select(DB::raw(1))->from('users_wallet')->where('currency', $id)->whereRaw('users_wallet.user_id = users.id');
|
|
});
|
|
$count = $user_query->count();
|
|
$this->info('共有 ' . $count . ' 个用户需要添加新的钱包地址');
|
|
$i = 1;
|
|
foreach ($user_query->cursor() as $user) {
|
|
if (UsersWallet::where('user_id', $user->id)->where('currency', $id)->exists()) {
|
|
$this->error('第 ' . $i . '/' . $count . ' 个用户有此币种钱包,用户 id 为:' . $user->id);
|
|
continue 1;
|
|
}
|
|
$this->info('开始生成第 ' . $i . '/' . $count . ' 个用户的钱包地址,用户 id 为:' . $user->id);
|
|
$response = $http_client->post($address_url, ['form_params' => ['userid' => $user->id, 'projectname' => $project_name]]);
|
|
$result = json_decode($response->getBody()->getContents());
|
|
if ($result->code != 0) {
|
|
return false;
|
|
}
|
|
$walllet_data = $result->data;
|
|
if ($currency->type == 'btc') {
|
|
$address = $walllet_data->btc_address;
|
|
$private = $walllet_data->btc_private;
|
|
} elseif ($currency->type == 'usdt') {
|
|
$address = $walllet_data->usdt_address;
|
|
$private = $walllet_data->usdt_private;
|
|
} elseif ($currency->type == 'eth') {
|
|
$address = $walllet_data->eth_address;
|
|
$private = $walllet_data->eth_private;
|
|
} elseif ($currency->type == 'erc20') {
|
|
$address = $walllet_data->erc20_address;
|
|
$private = $walllet_data->erc20_private;
|
|
} elseif ($currency->type == 'xrp') {
|
|
$address = $walllet_data->xrp_address;
|
|
$private = $walllet_data->xrp_private;
|
|
} else {
|
|
$this->error('暂不支持生成该币种的钱包');
|
|
continue 1;
|
|
}
|
|
UsersWallet::unguarded(function () use($address, $private, $user, $currency) {
|
|
UsersWallet::create(['user_id' => $user->id, 'currency' => $currency->id, 'address' => $address, 'private' => $private, 'create_time' => time()]);
|
|
});
|
|
$i++;
|
|
}
|
|
Setting::updateValueByKey('currency_' . $id, 0);
|
|
$this->info('执行成功');
|
|
} catch (\Exception $exception) {
|
|
return $this->error($exception->getMessage());
|
|
}
|
|
}
|
|
} |