You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
863 lines
40 KiB
863 lines
40 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V1;
|
|
|
|
use App\Models\Advice;
|
|
use App\Models\Article;
|
|
use App\Models\ArticleCategory;
|
|
use App\Models\ContractEntrust;
|
|
use App\Models\InsideTradeOrder;
|
|
use App\Models\InsideTradePair;
|
|
use App\Models\InsideTradeRisk;
|
|
use App\Models\Mongodb\NewPriceBook;
|
|
use App\Models\OptionPair;
|
|
use App\Models\OptionScene;
|
|
use App\Models\OptionSceneOrder;
|
|
use App\Models\OptionTime;
|
|
use App\Models\UserGrade;
|
|
use App\Models\UserWallet;
|
|
use App\Models\UserWalletLog;
|
|
use App\Models\Withdraw;
|
|
use App\Models\Coins;
|
|
use App\Models\Recharge;
|
|
use App\Models\SustainableAccount;
|
|
use App\Models\TransferRecord;
|
|
use App\Models\User;
|
|
use App\Models\UserLoginLog;
|
|
use App\Services\CoinService\BitCoinService;
|
|
use App\Services\CoinService\GethService;
|
|
use App\Services\CoinService\GethTokenService;
|
|
use App\Services\CoinService\OmnicoreService;
|
|
use App\Services\CoinService\TronService;
|
|
use App\Services\UdunWalletService;
|
|
use App\Services\UserService;
|
|
use App\Exceptions\ApiException;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Redis;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Jenssegers\Agent\Agent;
|
|
use App\Libs\Ethtool\Callback;
|
|
use phpseclib\Math\BigInteger as BigNumber;
|
|
use Illuminate\Support\Facades\App;
|
|
|
|
|
|
class UserController extends ApiController
|
|
{
|
|
public function test()
|
|
{
|
|
|
|
exit();
|
|
// $from = '0x518EFf46032e8a43Ae64629C9D2cB5c180D96fD3';
|
|
// $from_pk = '375a89dd4f45619b99e7029a5e169a8b0bbdc659644b50dabe31a4861ff91932';
|
|
// $to = '0x062b624351B92d3aEdAEe8C9C713751CDAdA9eAF';
|
|
// $h = (new GethTokenService('0x11465FDC8D73B927244cD2D5a296b9d22e7382e2',config('coin.erc20_usdt.abi')))->sendRawToken($from,$from_pk,$to,100,'0x11465FDC8D73B927244cD2D5a296b9d22e7382e2');
|
|
// dd($h,1);
|
|
|
|
$symbol = 'DASH';
|
|
$period = '5min';
|
|
$seconds = 300;
|
|
$cache_data = ['id' => 1608273600, 'open' => 1, 'close' => 2, 'high' => 35, 'low' => 21];
|
|
$kline_book_key = 'swap:' . $symbol . '_kline_book_' . $period;
|
|
$kline_book = Cache::store('redis')->get($kline_book_key);
|
|
// dd($kline_book);
|
|
$last_item1 = array_pop($kline_book);
|
|
$update_last_item1 = $last_item1;
|
|
$periodMap = [
|
|
'5min' => ['period' => '1min', 'seconds' => 60],
|
|
'15min' => ['period' => '5min', 'seconds' => 300],
|
|
'30min' => ['period' => '5min', 'seconds' => 300],
|
|
'60min' => ['period' => '5min', 'seconds' => 300],
|
|
'1day' => ['period' => '60min', 'seconds' => 3600],
|
|
'1week' => ['period' => '1day', 'seconds' => 86400],
|
|
'1mon' => ['period' => '1day', 'seconds' => 86400],
|
|
];
|
|
$map = $periodMap[$period] ?? null;
|
|
$kline_base_book = Cache::store('redis')->get('swap:' . $symbol . '_kline_book_' . $map['period']);
|
|
if (!blank($kline_base_book)) {
|
|
$first_item_id = $cache_data['id'];
|
|
$last_item_id = $cache_data['id'] + $seconds - $map['seconds'];
|
|
$items = array_where($kline_base_book, function ($value, $key) use ($first_item_id, $last_item_id) {
|
|
return $value['id'] >= $first_item_id && $value['id'] <= $last_item_id;
|
|
});
|
|
dd($items, array_first($items)['open'], array_last($items)['close'], max(array_pluck($items, 'high')), min(array_pluck($items, 'low')));
|
|
$update_last_item1['open'] = array_first($items)['open'] ?? $update_last_item1['open'];
|
|
$update_last_item1['close'] = array_last($items)['close'] ?? $update_last_item1['close'];
|
|
$update_last_item1['high'] = max(array_pluck($items, 'high')) ?? $update_last_item1['high'];
|
|
$update_last_item1['low'] = min(array_pluck($items, 'low')) ?? $update_last_item1['low'];
|
|
}
|
|
dd($update_last_item1);
|
|
|
|
// $kline_base_book = [
|
|
// ['id'=>1607010900,'open'=>1,'close'=>2,'high'=>35,'low'=>21],
|
|
// ['id'=>1607010960,'open'=>2,'close'=>22,'high'=>36,'low'=>24],
|
|
// ['id'=>1607011020,'open'=>3,'close'=>31,'high'=>32,'low'=>20],
|
|
// ['id'=>1607011080,'open'=>33,'close'=>25,'high'=>30,'low'=>20.4],
|
|
// ['id'=>1607011140,'open'=>5,'close'=>23,'high'=>33,'low'=>24.1],
|
|
// ];
|
|
// dd(max(array_pluck($kline_base_book,'close')));
|
|
|
|
// request
|
|
// $apiKey = 'a0cd2e9a2a50b2682b198b5f6ff9b9b3';
|
|
// $params = [
|
|
// 'a1' => 1,
|
|
// 'b1' => 2,
|
|
// 'c1' => 3,
|
|
// 'timestamp' => time(),
|
|
// ];
|
|
// ksort($params);
|
|
// $params_str = json_encode($params);
|
|
// $sign = md5($params_str.$apiKey);
|
|
// $params['sign'] = $sign;
|
|
//
|
|
// // api
|
|
// $apiKey2 = 'a0cd2e9a2a50b2682b198b5f6ff9b9b3';
|
|
// $request = [
|
|
// 'a1' => 1,
|
|
// 'b1' => 2,
|
|
// 'c1' => 3,
|
|
// 'timestamp' => time(),
|
|
// 'sign' => 'f06d271e08b5d997465dd6d69437a2d5',
|
|
// ];
|
|
// $params2 = array_except($request,'sign');
|
|
// ksort($params2);
|
|
// $params2 = json_encode($params2);
|
|
// $sign2 = md5($params2.$apiKey2);
|
|
// dd($sign,$sign2);
|
|
|
|
// dd(config('coin.udun_switch'));
|
|
// $res = (new UdunWalletService())->supportCoins(true);
|
|
// $res = (new UdunWalletService())->createAddress(60);
|
|
// dd($res,1);
|
|
// $fullNode = new \IEXBase\TronAPI\Provider\HttpProvider(config('node.TRON_HOST'));
|
|
// $solidityNode = null;
|
|
// $eventServer = null;
|
|
// try {
|
|
// $client = new \IEXBase\TronAPI\Tron($fullNode, $solidityNode, $eventServer);
|
|
// } catch (\IEXBase\TronAPI\Exception\TronException $e) {
|
|
// throw new ApiException($e->getMessage());
|
|
// }
|
|
|
|
// $arr = [
|
|
// ["TJZAVXv9i3SBVZCgoPVZqhqY5TZR23KFy2" => "100000055"],
|
|
// ["TMuGH9ekV2dA2Bev96f6RaabskDbsf5691" => "100000000"],
|
|
// ["TYce95NWdDiDgPSp51o6Y4tipRWTkEb5B1" => "1309198192494147000000000"],
|
|
// ];
|
|
//
|
|
// $contractAddress = 'TYce95NWdDiDgPSp51o6Y4tipRWTkEb5B1';
|
|
// $value = array_filter($arr, function($v) use ($contractAddress) {
|
|
// return key($v) == $contractAddress;
|
|
// });
|
|
// $first = array_shift($value);
|
|
// dd($value,$first,$first[$contractAddress]);
|
|
|
|
// $adds = ['TNaRAoLUyYEV2uF7GUrzSjRQTU8v5ZJ5VR','TBeZq3VkVM15LPFAGHdqb2osrDYexTrZSW','TD73eXvY2FdxYsx38ZbXBreSDqnbeLoF4f','TG3KE9EH5Qh1RmuzWWkTtxFzgv1d23jrAq','TG2X6sYcNMyPpSMCm82oQdTV8XSCeRrkYN'];
|
|
// $res = (new TronService())->getTokenBalance(array_random($adds));
|
|
// dd($res);
|
|
// $res = $client->getAccount('TNaRAoLUyYEV2uF7GUrzSjRQTU8v5ZJ5VR');
|
|
// $address =
|
|
// $client->setAddress('TNaRAoLUyYEV2uF7GUrzSjRQTU8v5ZJ5VR');
|
|
// $manager = $client->getManager();
|
|
// $res = $manager->request('walletsolidity/getaccount');
|
|
// dd($res);
|
|
// dd((new TronService())->getBalance('TUQBTzXrpHbgm3qUKJqg3YpSY7WV7tpqKM'));
|
|
// $res = (new TronService())->newAccount();
|
|
// dd($res instanceof TronAddress);
|
|
// $res->getAddress();
|
|
// dd($res->getAddress(true));
|
|
// $icon = Coins::icon('BTC');
|
|
// dd($icon);
|
|
// $history_data_key = 'market:' . 'btcusdt' . '_kline_book_' . '1min';
|
|
// $history_cache_data = Cache::store('redis')->get($history_data_key);
|
|
// $data = json_encode($history_cache_data);
|
|
// $data = gzencode($data);
|
|
// $data = mb_convert_encoding($data,'UTF-8','UTF-8');
|
|
// $data = json_decode(gzdecode($data),true);
|
|
// dd($data);
|
|
|
|
// return $this->successWithData($data);
|
|
// dd($data);
|
|
// $input = '0xa9059cbb000000000000000000000000ab5c66752a9e8167967685f1450532fb96d5d24f000000000000000000000000000000000000000000000000000000003b4e7ec0';
|
|
// $input_str = substr($input,10);
|
|
// $input_data = str_split($input_str,64);
|
|
// $to = '0x' . ltrim($input_data[0],'0');
|
|
// $value = hexdec(ltrim($input_data[1],'0')) / pow(10,6);
|
|
// dd($to,$value);
|
|
|
|
// $trade_detail = Cache::store('redis')->get('swap:' . 'trade_detail_' . 'BTC');
|
|
// dd($trade_detail);
|
|
// $res = (new BitCoinService())->collection('1BKnGXhD9sbccPyHir4Z9VMETT4FizBFX3','13yJugeWNibp16DAwnKtYcjK1AD2yNQfaP','0.03723418');
|
|
// dd($res);
|
|
// dd(ContractEntrust::query()->with('order_details')->find(330));
|
|
// $from_account = 2;
|
|
// $account_class = array_first(UserWallet::$accountMap,function ($value, $key) use ($from_account) {
|
|
// return $value['id'] == $from_account;
|
|
// });
|
|
// dd($account_class['model']::query()->first()->toArray());
|
|
// $user = User::query()->with('allChildren')->where('user_id',6000037)->first();
|
|
// dd($user);
|
|
// $entrust = ContractEntrust::query()->find(3);
|
|
// $where_data = [
|
|
// 'contract_id' => $entrust['contract_id'],
|
|
// 'entrust_price' => $entrust['entrust_price'],
|
|
// 'user_id' => $entrust['user_id'],
|
|
// 'order_type' => $entrust['order_type'],
|
|
// ];
|
|
// $res = (new GethService())->collection('0xafC185dCd37Ad401767CA0b6691822d13b6C231f','0x10Dd28BDa75579FdCa32372F3DbC1956583e8891','0.364426385590188339');
|
|
// dd($res);
|
|
// $gasPrice = Utils::toHex(Utils::toWei('80','Gwei'),true);
|
|
// $fee = new BigNumber((hexdec($gasPrice) * hexdec($gas)));
|
|
// $send_value = Utils::toHex($fee,true);
|
|
// $send_eth = (new GethService())->weiToEther($fee);
|
|
// dd($fee,$send_value,$send_eth);
|
|
// dd(Utils::toWei('80','Gwei'));
|
|
// $gasPrice = Utils::toHex(Utils::toWei('80','Gwei'),true);
|
|
// dd(hexdec(Utils::toWei('80','Gwei')));
|
|
// $gasPrice = Utils::fromWei('3b9aca00','Gwei');
|
|
// dd($gasPrice);
|
|
// $r1 = 0.0048 * pow(10,18) / 80000;
|
|
// dd($r1);
|
|
// $v = 5.4E-6;
|
|
// $v = 0.00000546;
|
|
// dd(number_format($v,8));
|
|
// dd((new GethService())->sendFee('0x2cbadf5ed67d5b200856f224ac98864a7396abf0'));
|
|
// $amount = 0.0048;
|
|
// $gasPrice = (new GethService())->interactiveEth('eth_gasPrice',[]);
|
|
// $gas = Utils::toHex(30000,true);
|
|
// $value = Utils::toWei((string)$amount,'ether')->toString();
|
|
// $g = (hexdec($gasPrice) * hexdec($gas));
|
|
// $a = new BigNumber($value);
|
|
// $b = new BigNumber($g);
|
|
// $c = $a->subtract($b);
|
|
//dd($value,(string)$g,$c,$a->subtract($c)->toString());
|
|
// dd((Utils::toEther(hexdec($gasPrice) * hexdec($gas))));
|
|
// $value = Utils::toWei((string)$amount,'ether')->toString();
|
|
// dd(Utils::toWei((string)$amount,'ether'));
|
|
// $a = $value - (hexdec($gasPrice) * hexdec($gas));
|
|
// dd(
|
|
// $gasPrice , hexdec($gasPrice) ,
|
|
// $gas,hexdec($gas),
|
|
// (string)(hexdec($gasPrice) * hexdec($gas)),
|
|
// $value,(string)$a
|
|
// );
|
|
////// $send_value = Utils::toHex($value - (hexdec($gasPrice) * hexdec($gas)),true);
|
|
////// dd($value,$send_value);
|
|
//// return (new GethService())->getBalance('0xddcea46c98b040e0289fa1f413a1153e7ce57b1c');
|
|
// $amount = '5.199904848';
|
|
// $value = Utils::toWei($amount,'ether')->toString();
|
|
// $gasPrice = (new GethService())->interactiveEth('eth_gasPrice',[]);
|
|
// $value2 = $value - (hexdec($gasPrice) * hexdec($gas));
|
|
// $value3 = (new GethService())->weiToEther($value2);
|
|
// $value4 = Utils::toHex($value2);
|
|
// dd(
|
|
// $gasPrice , hexdec($gasPrice) ,
|
|
// $gas,hexdec($gas),
|
|
// hexdec($gasPrice) * hexdec($gas),
|
|
// $value,$value2,$value3,$value4
|
|
// );
|
|
// $value1 = $value - $gasPrice * $gas;
|
|
// $value1 = "0x" . base_convert(bcmul($value,'1000000000000000000',0),10,16);
|
|
// $value2 = Utils::toWei($value,'ether');
|
|
// dd($amount,$value,$value1);
|
|
// dd((new GethService())->getEthGasPrice());
|
|
// dd(dechex(30000));
|
|
// dd(Utils::toWei('0.0048','ether'));
|
|
// $gasPrice = (new GethService())->interactiveEth('eth_gasPrice',[]);
|
|
// $gas = (new GethService())->interactiveEth('eth_estimateGas',[
|
|
// "from"=>'0xd25057e5a65af95320c37426dd8c46962a220436',
|
|
// "to"=>'0xa417e0a8f6f420b774c66bac0cde468430acfca8',
|
|
// "gas"=>'90000',
|
|
// "gasPrice"=>$gasPrice,
|
|
// "value"=>"0x" . base_convert(bcmul(3,'1000000000000000000',0),10,16),
|
|
// "data"=>"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"
|
|
// ]);
|
|
// dd(Utils::fromWei($gasPrice,'Gwei'));
|
|
// $a = (new GethService())->getBalance('0xd25057e5a65af95320c37426dd8c46962a220436');
|
|
// $value = "0x" . base_convert(bcmul($a,'1000000000000000000',0),10,16);
|
|
// dd($value);
|
|
// $value = hexdec(ltrim(Utils::stripZero('0x0000000000000000000000000000000000000000000000000000000003daf040'),'0')) / pow(10,6);
|
|
// dd(Utils::fromWei('3daf040', 'mwei'));
|
|
// $amount = bcmul(10.3,bcpow(10,18));
|
|
// $amount = "0x" . base_convert(bcmul(10.365,'1000000000000000000',0),10,16);
|
|
// dd($amount,Utils::fromWei($amount, 'ether'));
|
|
// list($bnq, $bnr) = Utils::fromWei('0x29ccc60aaf7a0000', 'ether');
|
|
// dd($bnq,$bnr,$bnr->toString() / pow(10,18),$bnq->toString() + $bnr->toString() / pow(10,18));
|
|
// $value = 0x29ccc60aaf7a0000;
|
|
// dd((string)$value / pow(10,18));
|
|
// $web3 = new Web3(new HttpProvider(new HttpRequestManager(env('GETH_HOST'), 30)));
|
|
// $gasprice = (new GethService())->interactiveEth('eth_gasPrice',[]);
|
|
// dd($gasprice);
|
|
// dd(hexdec($gasprice));
|
|
// list($bnq, $bnr) = Utils::fromWei($gasprice, 'Gwei');
|
|
// dd($bnq->toString());
|
|
// dd((new GethService())->sendTransaction('0xd25057e5a65af95320c37426dd8c46962a220436','0x697dd3317e7dce63ec104051a9eb25e25e0406ec',0.0999));
|
|
// list($bnq, $bnr) = Utils::fromWei('4563918244f40000', 'ether');
|
|
// dd($bnq->toString());
|
|
// $data = (new GethService())->newAccount('12345678');
|
|
// $data = (new GethService())->listAccounts();
|
|
// dd($data);
|
|
// list($bnq, $bnr) = Utils::fromWei('1000', 'kwei');
|
|
// dd($bnq->toString());
|
|
// $web3 = new Web3(new HttpProvider(new HttpRequestManager(env('GETH_HOST'), 30)));
|
|
// $value = ltrim($web3->utils->stripZero('0x00000000000000000000000000000000000000000000000000000015997ce911'),'0');
|
|
// dd(hexdec($value) / pow(10,18));
|
|
// dd($web3->getUtils()::fromWei('0x00000000000000000000000000000000000000000000000000000003e5bfbc90','wei'));
|
|
// dd((new GethService())->interactiveEth('eth_getBlockByHash',['0x1d26049340cd5623b57756c332000afb3af69c99f1f29ecdda59456b958fa8b2',true]));
|
|
// $web3 = new Web3(new HttpProvider(new HttpRequestManager(env('GETH_HOST'), 30)));
|
|
// $cb = new Callback();
|
|
// $web3->eth->newFilter([
|
|
// "fromBlock"=> "latest",
|
|
// "toBlock"=> "latest",
|
|
// 'address'=>'0xdac17f958d2ee523a2206206994597c13d831ec7',
|
|
// [
|
|
// "topics"=>["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
|
|
// ]
|
|
// ],$cb);
|
|
// $fid = $cb->result;
|
|
//
|
|
// $web3->eth->getFilterLogs($fid,$cb);
|
|
// return $cb->result;
|
|
// return $fid;
|
|
// $data = (new \App\Services\CoinService\GethService())->interactiveEth('eth_getLogs',[
|
|
// "fromBlock"=> "latest",
|
|
// "toBlock"=> "latest",
|
|
// 'address'=>'0xdac17f958d2ee523a2206206994597c13d831ec7',
|
|
// [
|
|
// "topics"=>["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
|
|
// ]
|
|
// ]);
|
|
// return $data;
|
|
// dd((new GethService())->interactiveEth('eth_getBlockByHash',['0x1d26049340cd5623b57756c332000afb3af69c99f1f29ecdda59456b958fa8b2',true]));
|
|
// return (new GethService())->getBalance('0x59c4cd07debe579910e3bf5cf55000a762d62d17');
|
|
// $min_table = strtolower("test_kline_" . '1min' . "_" . 'lvo' . "_usdt");
|
|
// dd(DB::table($min_table)->where('id','<',time())->orderByDesc('id')->first());
|
|
// $open_carbon = \Illuminate\Support\Carbon::now()->floorMinute();
|
|
// $id = $open_carbon->timestamp;
|
|
// $data = [
|
|
// "id"=> $id,
|
|
// "amount"=> 1,
|
|
// "count"=> rand(10,55),
|
|
// "open"=> 2,
|
|
// "close"=> 3,
|
|
// "low"=> 4,
|
|
// "high"=> 5,
|
|
// "vol"=> 6
|
|
// ];
|
|
// Gateway::$registerAddress = '127.0.0.1:1236';
|
|
// $group_id = 'Kline_' . 'lvousdt' . '_' . '1min';
|
|
// $message = json_encode(['code'=>0,'msg'=>'success','data'=>$data,'sub'=>$group_id,'type'=>'dynamic']);
|
|
// Gateway::sendToGroup($group_id,$message);
|
|
// $day_kline = DB::table(strtolower("test_kline_" . '1day' . "_" . 'lvo' . "_usdt"))->where('id','<',time())->orderByDesc('id')->first();
|
|
// dd($day_kline);
|
|
// $data = DB::table(strtolower("test_kline_" . '1min' . "_" . 'lvo' . "_usdt"))->where('id','<',time())->orderByDesc('id')->first();
|
|
// dd(get_object_vars($data));
|
|
|
|
// $data = (new GethService())->listAccounts();
|
|
// $data = (new GethService())->getBalance('0xafc185dcd37ad401767ca0b6691822d13b6c231f');
|
|
// dd($data);
|
|
// dd(User::getOneSystemUser()->toArray());
|
|
// $kline_key = 'market:' . 'stdausdt' . '_kline_1day';
|
|
// $last_cache_data = Cache::store('redis')->get($kline_key);
|
|
// dd($last_cache_data);
|
|
// dd(config('coin.coin_symbol'));
|
|
// $risk = \App\Models\InsideTradeRisk::query()
|
|
// ->where('status',1)
|
|
// ->where('symbol','btcusdt')
|
|
// ->where('start_time','<=',time())
|
|
// ->where(function($q){
|
|
// $q->where('end_time',null)->orWhere('end_time','>',time());
|
|
// })
|
|
// ->first();
|
|
// dd($risk);
|
|
// dd(InsideTradeRisk::query()->where('symbol','btcusdt')->first()->toArray());
|
|
// dd(Carbon::today()->format('Y-m-d'),Carbon::today()->subDays(1)->format('Y-m-d'));
|
|
// $grade_info = UserGrade::get_grade_info(1);
|
|
// $bonus_str = $grade_info['bonus'] ?? '0.005|0.005|0.005';
|
|
// $bonus_rate_arr = explode('|',$bonus_str);
|
|
// dd(blank($bonus_str));
|
|
// dd($scene = OptionScene::query()
|
|
// ->where('end_time','<',time())
|
|
// ->whereNotIn('status',[OptionScene::status_delivered,OptionScene::status_cancel])
|
|
// ->get()->toArray());
|
|
// dd(Cache::store('redis')->get('market:' . 'staiusdt' . '_newPrice'));
|
|
// $coin = array_first(Coins::getCachedCoins(),function ($v,$k){
|
|
// return $v['coin_name'] == 'USDT';
|
|
// });
|
|
// dd($coin);
|
|
// dd(NewPriceBook::all()->toArray());
|
|
// dd(NewPriceBook::query()->create(['id'=>1,'name'=>'qwer']));
|
|
// $logs = UserWalletLog::query()->where('user_id',9)
|
|
// ->where('rich_type','usable_balance')
|
|
//// ->whereIn('log_type',['bet_option'])
|
|
// ->get()->groupBy('coin_id');
|
|
// dd($logs->toArray());
|
|
// $pairs = OptionPair::query()->where('status',1)->get();
|
|
// $times = OptionTime::query()->where('option_time.status',1)
|
|
// ->where('option_pair.status',1)
|
|
// ->select(['option_time.time_id','option_time.time_name','option_time.seconds','option_pair.pair_id','option_pair.pair_name'])
|
|
// ->crossJoin('option_pair')->get();
|
|
//dd($times->toArray());
|
|
// $pairs = InsideTradePair::query()->where('status',1)->pluck('symbol');
|
|
// $periods = ['1min','5min','15min','30min','60min','4hour','1day','1week','1mon','1year'];
|
|
// dd($pairs->crossJoin($periods)->all());
|
|
// $pairs = OptionPair::query()->where('status',1)->select(['pair_id','pair_name','symbol'])->get()->toArray();
|
|
// $times = OptionTime::query()->where('option_time.status',1)
|
|
// ->where('option_pair.status',1)
|
|
// ->select(['option_pair.pair_id','option_pair.pair_name','option_pair.symbol','option_time.time_id','option_time.time_name','option_time.seconds'])
|
|
// ->crossJoin('option_pair')->get()->toArray();
|
|
// dd($times);
|
|
// dd((new Agent())->device());
|
|
// $new_price_book_key = 'market:' . 'btcusdt' . '_newPriceBook';
|
|
// $new_price_book = array_map(function($v){
|
|
// return json_decode($v,true);
|
|
// },\Illuminate\Support\Facades\Redis::lrange($new_price_book_key,0,-1));
|
|
//// $new_price_book = Cache::store('redis')->get($new_price_book_key);
|
|
// if(blank($new_price_book)) $new_price_book = [];
|
|
// if(!blank($new_price_book)) $new_price_book = array_reverse($new_price_book);
|
|
// $new_price_book = array_slice($new_price_book,-30,30);
|
|
//// array_slice($new_price_book,0,30);
|
|
// dd($new_price_book);
|
|
// dd(createWalletAddress(9,'BTC'));
|
|
// dd(0.02001 + (rand(10,80) / 100000));
|
|
// $sub = 'indexMarketList';
|
|
// $type = str_before($sub,'_');
|
|
// $params = str_after($sub,'_');
|
|
// $symbol = str_before($params,'_');
|
|
// dd($sub,$type,$params,$symbol);
|
|
// $symbol = 'btcusdt';
|
|
// $period = '1min';
|
|
// $kline_book_key = 'market:' . $symbol . '_kline_book_' . $period;
|
|
//// $kline_book = Cache::store('redis')->get($kline_book_key);\
|
|
// $kline_book = \Illuminate\Support\Facades\Redis::lrange($kline_book_key,0,1);
|
|
// dd($kline_book_key,$kline_book);
|
|
// $option_pairs = OptionPair::query()->where('status',1)->select(['symbol','quote_coin_name','base_coin_name'])->get()->toArray();
|
|
// $exchange_pairs = InsideTradePair::query()->where('status',1)->select(['symbol','quote_coin_name','base_coin_name'])->get()->toArray();
|
|
// $tmp_arr = array_merge($option_pairs,$exchange_pairs);
|
|
// $pairs = collect($tmp_arr)->unique(function ($item){
|
|
// return $item['symbol'];
|
|
// })->toArray();
|
|
// dd($pairs);
|
|
// $data = InsideTradePair::query()->get()->groupBy('quote_coin_name')->toArray();
|
|
// dd($data);
|
|
// $scene = OptionScene::query()->findOrFail(1);
|
|
// $odds_arr = array_collapse([$scene['up_odds'],$scene['down_odds'],$scene['draw_odds']]);
|
|
// $odds = array_first($odds_arr, function ($value, $key) {
|
|
// return $value['uuid'] == '368a9ea9-22a8-4434-ab9b-a54a93729d93';
|
|
// });
|
|
// dd($odds);
|
|
// dd(array_collapse([['q'=>1,'w'=>2],['a'=>'a']]));
|
|
// dd(str_after('btcusdt.trade','.'));
|
|
// $data = InsideTradePair::query()->get();
|
|
// dd($data->groupBy('quote_coin_name')->toArray());
|
|
// dd(Cache::store('redis')->tags('market_asdf')->put('market_asdf3','market_asdf3'));
|
|
// dd(Cache::store('redis')->tags('market_asdf')->get('market_asdf'));
|
|
// $ch = "market.ethbtc.kline.1mon";
|
|
// $ch = "market.btcusdt.mbp.refresh.20";
|
|
// $ch = "market.btcusdt.detail";
|
|
// $pattern_kline = '/^market\.(.*?)\.kline\.([\s\S]*)/';
|
|
// $pattern_depth = '/^market\.(.*?)\.mbp\.refresh\.20$/';
|
|
// $pattern_detail = '/^market\.(.*?)\.detail$/'; //市场概要
|
|
// dd(preg_match($pattern_detail, $ch, $match),$match);
|
|
// dd(json_decode(cache::store('redis')->get('btcusdt_depth'),true));
|
|
// dd(cache::store('file')->get('btcusdt_newPrice'));
|
|
// dd(cache::store('file')->put('btcusdt',[1,2,3,4,5]));
|
|
// dd( (new HuobiapiService())->getAllRecords() );
|
|
// dd(OptionTime::all()->toArray());
|
|
// $sub = ['q','w','e','r'];
|
|
// dd(array_pluck($sub,'w'),$sub);
|
|
// $pair = OptionPair::query()->find(1);
|
|
// $symbol = strtolower($pair['base_coin_name']) . strtolower($pair['quote_coin_name']);
|
|
// $market_trade = (new HuobiapiService())->getMarketTrade($symbol);
|
|
// dd($market_trade);
|
|
// dd(gettype($market_trade),$market_trade);
|
|
// return $this->successWithData($market_trade);
|
|
// dd(request()->allFiles());
|
|
// dd(file_get_contents("https://api.hadax.com/market/trade?symbol=ethusdt"));
|
|
// dd(file_get_contents("https://api.huobi.pro/market/trade?symbol=ethusdt"));
|
|
// $after_encode_data = 'oxOd68uPP/REmEoEnJoS2Rk/ka8gSuWaTnpTEup7aJ/7LW5grjHAiFlMkHSIoCEcvLxRkST/CAX/7hUZ40tjxZFNCiXLUaOZEPDTbFaYcySx4Dslx8AlLeLdOcNKE7DsZlpnRe0MSI9QMNmkePbaYEScyzzczF6+m3UYnn2KhHI=';
|
|
|
|
// $decode_result = rsa_decode($after_encode_data);
|
|
// dd($decode_result);
|
|
// $times = OptionTime::query()->where('status',1)->get();
|
|
// dd($times->toArray());
|
|
// $start = Carbon::now();
|
|
// $end = Carbon::now()->addSeconds(300);
|
|
// $range = date_range($start,$end,300);
|
|
// dd($range);
|
|
|
|
// dd(request()->all());
|
|
// $phone = '18617004850';
|
|
// dd(sendCodeSMS($phone));
|
|
// $email = '351843463@qq.com';
|
|
// dd(sendEmailCode($email));
|
|
|
|
// $user = User::query()->find(3);
|
|
// dd($user->update_wallet_and_log(1,'usable_balance',-10,UserWallet::option_account,'option_order_delivery'));
|
|
// $account_class = array_first(UserWallet::$accountMap,function ($value, $key) {
|
|
// return $value['id'] == 2;
|
|
// });
|
|
// $account = new $account_class['model']();
|
|
// dd($account::$richMap);
|
|
// dd($account);
|
|
// $result=UserCoinName::query()->where([ 'coin_id' => $coin_id])->firstOrFail();
|
|
|
|
|
|
// dd(Cache::put('testkey','123456',10));
|
|
// $scene_id = 123;
|
|
// dd(Cache::store('redis')->put('testkey:'.$scene_id,$scene_id,8));
|
|
// $market_trade = [
|
|
// "ch"=> "market.btcusdt.trade.detail",
|
|
// "status"=> "ok",
|
|
// "ts"=> 1593242272637,
|
|
// "tick"=> [
|
|
// "id"=> 109242365299,
|
|
// "ts"=> 1593242272481,
|
|
// "data"=> [
|
|
// [
|
|
// "id"=> 1.0924236529944560206305051e+25,
|
|
// "ts"=> 1593242272481,
|
|
// "trade-id"=> 102152942444,
|
|
// "amount"=> 0.27,
|
|
// "price"=> 200,
|
|
// "direction"=> "sell"
|
|
// ],
|
|
// [
|
|
// "id"=> 1.0924236529944560206305051e+35,
|
|
// "ts"=> 1593242272482,
|
|
// "trade-id"=> 102152942445,
|
|
// "amount"=> 0.29,
|
|
// "price"=> 100,
|
|
// "direction"=> "sell"
|
|
// ]
|
|
// ]
|
|
// ]
|
|
// ];
|
|
// $trade_data = $market_trade['tick']['data'];
|
|
// $price_arr = Arr::pluck($trade_data,'price');
|
|
// $new_price = PriceCalculate(array_sum($price_arr) ,'/', count($price_arr));
|
|
//dd($new_price);
|
|
// $url = 'https://api.hadax.pro/market/trade?symbol=btcusdt';
|
|
// $info = @file_get_contents($url);
|
|
// dd($info);
|
|
// return $info;
|
|
// $data = (new HuobiapiService())->getMarketTrade('btcusdt');
|
|
// dd($data);
|
|
}
|
|
|
|
//模拟登陆获取token
|
|
public function mockLogin(Request $request)
|
|
{
|
|
if ($vr = $this->verifyField($request->all(), [
|
|
'user_id' => 'required|integer'
|
|
])) return $vr;
|
|
|
|
$user = User::query()->find($request->user_id);
|
|
|
|
//生成token
|
|
$login_code = User::gen_login_code();
|
|
$user->login_code = $login_code;
|
|
$user->last_login_ip = $request->getClientIp();
|
|
$user->last_login_time = Carbon::now()->toDateTimeString();
|
|
$user->save();
|
|
|
|
$token = auth('api')->claims(['login_code' => $login_code])->fromUser($user);
|
|
|
|
return $this->successWithData(['token' => $token, 'user_id' => $user['user_id']]);
|
|
}
|
|
|
|
//获取用户信息
|
|
public function getUserInfo()
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
return $this->successWithData($user);
|
|
}
|
|
|
|
//修改用户信息
|
|
public function updateUserInfo(Request $request)
|
|
{
|
|
if ($res = $this->verifyField($request->all(), [
|
|
'avatar' => '',
|
|
'username' => 'string|min:1|max:30',
|
|
'second_verify' => 'integer|in:0,1',
|
|
])) return $res;
|
|
|
|
$params = $request->all();
|
|
if (blank($params)) return $this->error('缺少参数');
|
|
|
|
$user = $this->current_user();
|
|
|
|
$res = $user->update($params);
|
|
if (!$res) {
|
|
return $this->error();
|
|
}
|
|
return $this->successWithData($user);
|
|
}
|
|
|
|
//登陆二次验证开关
|
|
public function switchSecondVerify()
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$second_verify = $user->second_verify;
|
|
|
|
$user->second_verify = $second_verify == 1 ? 0 : 1;
|
|
$user->save();
|
|
return $this->successWithData(['second_verify' => $user['second_verify']]);
|
|
}
|
|
|
|
public function addAdvice(Request $request)
|
|
{
|
|
if ($vr = $this->verifyField($request->all(), [
|
|
'phone' => 'string',
|
|
'email' => 'string|email',
|
|
'realname' => 'string',
|
|
'contents' => 'required|string',
|
|
'imgs' => '',
|
|
])) return $vr;
|
|
|
|
$user = $this->current_user();
|
|
|
|
$params = $request->only(['contents', 'email', 'phone', 'realname', 'imgs']);
|
|
$params['user_id'] = $user['user_id'];
|
|
|
|
$res = Advice::query()->create($params);
|
|
|
|
if (!$res) {
|
|
return $this->error();
|
|
}
|
|
return $this->success();
|
|
}
|
|
|
|
public function advices()
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$advices = Advice::query()->where(['user_id' => $user['user_id']])->latest()->paginate();
|
|
|
|
return $this->successWithData($advices);
|
|
}
|
|
|
|
public function adviceDetail(Request $request)
|
|
{
|
|
if ($vr = $this->verifyField($request->all(), [
|
|
'id' => 'required|integer',
|
|
])) return $vr;
|
|
|
|
$user = $this->current_user();
|
|
|
|
$advice = Advice::query()->where(['user_id' => $user['user_id'], 'id' => $request->id])->firstOrFail();
|
|
|
|
return $this->successWithData($advice);
|
|
}
|
|
|
|
//用户消息通知数量统计
|
|
public function myNotifiablesCount(Request $request)
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$count = [];
|
|
|
|
$count['total'] = $user->unreadNotifications()->count();
|
|
|
|
return $this->successWithData($count);
|
|
}
|
|
|
|
public function myNotifiables_copy(Request $request)
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$notifiables = $user->notifications()->latest()->paginate();
|
|
|
|
// $notifiables = $notifiables->toArray();
|
|
|
|
//获取列表 全部标记已读
|
|
// $user->unreadNotifications->markAsRead();
|
|
|
|
// var_dump(json_encode());
|
|
// return $notifiables;
|
|
// return $this->successWithData($notifiables);
|
|
// var_dump());
|
|
// var_dump());
|
|
|
|
// $str = $notifiables['data'][0]['data']['title'];
|
|
// $str = str_replace('资产', ' ' . __('资产') . ' ', $str);
|
|
// $str = str_replace('增加', ' ' . __('增加') . ' ', $str);
|
|
// $str = str_replace('减少', ' ' . __('减少') . ' ', $str);
|
|
// $notifiables['data'][0]['data']['title'] = $str;
|
|
|
|
// $str2 = $notifiables['data'][0]['data']['content'];
|
|
// $str = str_replace('资产', ' ' . __('资产') . ' ', $str);
|
|
// $str = str_replace('增加', ' ' . __('增加') . ' ', $str);
|
|
// $str = str_replace('减少', ' ' . __('减少') . ' ', $str);
|
|
|
|
|
|
return $this->successWithData($notifiables);
|
|
}
|
|
|
|
private static function trans_myNotifiables($notifiables)
|
|
{
|
|
|
|
$data = $notifiables->toArray()['data'];
|
|
|
|
// 取出title
|
|
$titleArr = [];
|
|
$contentArr = [];
|
|
for ($i = 0, $len = count($data); $i < $len; $i++) {
|
|
|
|
array_push($titleArr, [
|
|
|
|
'title' => $data[$i]['data']['title']
|
|
]);
|
|
|
|
array_push($contentArr, [
|
|
|
|
'content' => $data[$i]['data']['content']
|
|
]);
|
|
}
|
|
|
|
$lang = App::getLocale();
|
|
|
|
$transTitleArr = baiduTransAPI(json_encode($titleArr), 'zh', 'en');
|
|
$transContentArr = baiduTransAPI(json_encode($contentArr), 'zh', 'en');
|
|
|
|
$transTitleArr = json_decode($transTitleArr, true);
|
|
$transContentArr = json_decode($transContentArr, true);
|
|
|
|
// var_dump(json_encode($titleArr));
|
|
}
|
|
|
|
public function myNotifiables(Request $request)
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$notifiables = $user->notifications()->latest()->paginate()->toArray();
|
|
$notifiables['data'] = collect($notifiables['data'])->map(function ($v) {
|
|
$v['data'] = $v['type']::messageToMultilanguage($v['data']);
|
|
return $v;
|
|
})->toArray();
|
|
|
|
return $this->successWithData($notifiables);
|
|
}
|
|
|
|
public function batchReadNotifiables(Request $request)
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
//全部标记已读
|
|
$user->unreadNotifications->markAsRead();
|
|
|
|
return $this->success();
|
|
}
|
|
|
|
public function readNotifiable(Request $request)
|
|
{
|
|
if ($vr = $this->verifyField($request->all(), [
|
|
'id' => 'required',
|
|
])) return $vr;
|
|
|
|
$user = $this->current_user();
|
|
|
|
$notifiable = $user->notifications()->where('id', $request->id)->firstOrFail();
|
|
// var_dump(json_encode($notifiable));
|
|
|
|
//标记消息为已读
|
|
$notifiable->markAsRead();
|
|
$notifiable['data'] = $notifiable['type']::messageToMultilanguage($notifiable['data']);
|
|
|
|
return $this->successWithData($notifiable);
|
|
}
|
|
|
|
//获取认证信息
|
|
public function getAuthInfo(Request $request, UserService $userService)
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$auth = $userService->getAuthInfo($user);
|
|
if($auth){
|
|
$auth['status_text_lang'] = __($auth['status_text']);
|
|
}
|
|
|
|
|
|
return $this->successWithData($auth);
|
|
}
|
|
|
|
//初级认证
|
|
public function primaryAuth(Request $request, UserService $userService)
|
|
{
|
|
if ($res = $this->verifyField($request->all(), [
|
|
'country_code' => 'string',
|
|
'realname' => 'required|string',
|
|
'id_card' => 'required|string',
|
|
// 'type' => 'integer|in:1',
|
|
])) return $res;
|
|
|
|
$user = $this->current_user();
|
|
$params['country_id'] = $request->input('country_id', 1);
|
|
$params['country_code'] = $request->input('country_code', '86');
|
|
$params['realname'] = $request->input('realname');
|
|
$params['id_card'] = $request->input('id_card');
|
|
$params['birthday'] = $request->input('birthday');
|
|
$params['address'] = $request->input('address');
|
|
$params['city'] = $request->input('city');
|
|
$params['postal_code'] = $request->input('postal_code');
|
|
$params['extra'] = $request->input('extra');
|
|
$params['phone'] = $request->input('phone');
|
|
$params['type'] = $request->input('type', 1);
|
|
|
|
// if ( !$this->isIdentityCard($params['id_card']) ) return $this->error(0,'身份证不合法');
|
|
|
|
$res = $userService->primaryAuth($user, $params);
|
|
if (!$res) {
|
|
return $this->error();
|
|
}
|
|
return $this->success('认证成功');
|
|
}
|
|
|
|
//高级认证
|
|
public function topAuth(Request $request, UserService $userService)
|
|
{
|
|
if ($res = $this->verifyField($request->all(), [
|
|
'front_img' => 'required',
|
|
'back_img' => 'required',
|
|
'hand_img' => '',
|
|
])) return $res;
|
|
|
|
$user = $this->current_user();
|
|
$params = $request->only(['front_img', 'back_img', 'hand_img']);
|
|
|
|
$res = $userService->topAuth($user, $params);
|
|
if (!$res) {
|
|
return $this->error();
|
|
}
|
|
return $this->success('提交成功');
|
|
}
|
|
|
|
public function getGradeInfo()
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$data['user'] = $user;
|
|
$data['grade'] = UserGrade::query()->where('status', 1)->orderBy('grade_id', 'asc')->get();
|
|
$grade_explain = Article::query()->where('category_id', ArticleCategory::$typeMap['grade_remark'])->first();
|
|
$grade_explain->makeHidden('translations');
|
|
$data['remark'] = $grade_explain;
|
|
|
|
return $this->successWithData($data);
|
|
}
|
|
|
|
//登陆日志
|
|
public function getLoginLogs(Request $request)
|
|
{
|
|
$user = $this->current_user();
|
|
|
|
$per_page = $request->input('per_page', 10);
|
|
|
|
$data = UserLoginLog::query()->where('user_id', $user['user_id'])->orderBy('login_time', 'desc')->paginate($per_page);
|
|
return $this->successWithData($data);
|
|
}
|
|
}
|
|
|