Files
repo-backend/app/Http/Controllers/Api/DefiController.php
T

389 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Users;
use App\DualCurrency;
use App\DualOrder;
use App\UsersWallet;
use App\AccountLog;
use App\Currency;
use App\Defi;
use App\DefiOrder;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
//双币理财
class DefiController extends Controller
{
//显示理财页面
public function index(Request $request){
$user_id = Users::getUserId();
if(!$user_id){
return $this->error('error!');
}
$data['lianghua_amount'] = 0; //货币数量
$data['todayincome'] = 0; // 今日收益
$data['totalincome'] = 0; // 总收益
$data['rate'] = 0.00; // 回报
$nowday = date('Ymd',time());
$nowtime = date('Y-m-d H:i:s',time());
$info['data'] = DualCurrency::where('status',1)->orderBy('days','ASC')->get();
// return $this->error($nowday);
// $data['lianghua_amount'] = DualOrder::where('user_id',$user_id)->where('today',$nowday)->sum('amount');
/*
$data['lianghua_amount'] = DualOrder::where('user_id',$user_id)->where('expire','>=',$nowtime)->where('created','<=',$nowtime)->sum('amount');
$data['todayincome'] = DualOrder::where('user_id',$user_id)->where('today',$nowday)->sum('todayincome');
$data['totalincome'] = DualOrder::where('user_id',$user_id)->where('today',$nowday)->sum('totalincome');
*/
$data['lianghua_amount'] = DualOrder::where('user_id',$user_id)->where('status',0)->sum('amount');
$data['todayincome'] = DualOrder::where('user_id',$user_id)->where('today',$nowday)->sum('todayincome');
$data['totalincome'] = DualOrder::where('user_id',$user_id)->sum('totalincome');
if($data['lianghua_amount']>0) $data['rate'] = round(bcdiv($data['todayincome'],$data['lianghua_amount'],4)*100,4); // 回报率
$info = array_merge($info,$data);
return $this->success($info);
}
// Request $request
public function defiList(Request $request){
$limit = $request->get('limit', 100);
$user_id = Users::getUserId();
$data = Defi::where('is_del',0)->orderBy('days', 'asc')->select('id','days','bilv','percent','fwamount')->paginate($limit);
$account = UsersWallet::where('user_id',$user_id)->where('currency',3)->value('change_balance')??"0.00"; //可用USDT
$amount = DefiOrder::where('user_id',$user_id)->where('review_status',2)->sum('amount')??"0.00"; //已借USDT
$remainamount = DefiOrder::where('user_id',$user_id)->where('review_status',2)->where('status',0)->sum('total')??"0.00"; //已借USDT
$user['usdt_balance'] = round($account,2);//$userInfo['usdt_balance'];
$user['amount'] = $amount;//$userInfo['usdt_balance'];
$user['percent'] = 0.3;
$user['remainamount'] = $remainamount;//$userInfo['usdt_balance'];
return $this->success(array(
"data" => $data,
"user" => $user,
));
}
//返回质押列表
public function orderList(Request $request)
{
$page = $request->get('page', 1);
$limit = $request->get('limit',10);
$status=$request->get('status', 0);
$user_id = Users::getUserId();//66005883;
// $where['review_status'] = ['>', 0];
// $where['status']= $status;
$lists = DefiOrder::where('status',$status)
->where('user_id',$user_id)
->paginate($limit);
$result = array('data' => $lists->items(), 'page' => $page, 'pages' => $lists->lastPage(), 'total' => $lists->total());
return $this->success($result);
}
//购买 $param
public function Buy(Request $request)
{
$user_id = Users::getUserId();
//
// $userInfo['id']=1;
// $param['daysId']=3;
// $request->post('amount'] = 1136.5;
$id = $request->post('daysId');
$yamount = $request->post('amount'); //验资金额
$amount = bcmul($yamount,0.30,2);//借币金额
$info = Defi::find($id);
$days = $info['days'];//质押期限
$lv_perday = $info['bilv'];//日币利息
$opayment = 0;//滞纳金
$opaymentlv = $info['opaymentlv'];//滞纳金百分比
$fwamount = $info['fwamount'];//总服务费
$lixi = bcmul($amount*$days,$lv_perday/100,2); //利息
$total = $amount+$fwamount+$lixi; //本金+利息
$review_status =1;
// $account = $userInfo['account'];
$account = UsersWallet::where('user_id',$user_id)->where('currency',3)->value('change_balance')??"0.00"; //可用USDT
//return Response::fail($account);
// return Response::fail($yamount);
if ($account < $yamount) {
return $this->error('Insufficient Balance');
}
$currentTime = date('Y-m-d H:i:s',time());
$orderData['htcode'] = 'Y' . date('YmdHis') . str_pad(mt_rand(1, 999999), 6, '0', STR_PAD_LEFT);
$orderData['user_id'] = $user_id;
$orderData['amount'] = $amount;
$orderData['yamount'] = $yamount;
$orderData['fwamount'] = $fwamount;
$orderData['lixi'] = $lixi;
$orderData['total'] = $total;
$orderData['days'] = $days;
$orderData['create_time'] = $currentTime;
$orderData['lv_perday'] = $lv_perday;
$orderData['opaymentlv'] = $opaymentlv;
$orderData['name'] = $request->post('name');
$orderData['last'] = $request->post('last');
$orderData['address'] = $request->post('address');
$orderData['mail'] = $request->post('mail');
$orderData['tel'] = $request->post('tel');
$orderData['signature'] = $request->post('signature');
$orderData['signatureUrl'] = $request->post('signatureUrl');
// file_put_contents('/www/wwwroot/nft/public/t.txt',json_encode($orderData));
DB::beginTransaction();
try {
$order_id = Db::table('defi_order')->insert($orderData);
DB::commit();
return $this->success('success');
} catch (\Exception $ex) {
DB::rollBack();
return $this->error($ex->getMessage());
}
}
//质押详情
public function Detail(Request $request)
{
$id = $request->post('id');
$info = DefiOrder::where('id',$id)->select('htcode','review_time','end_time','bamount','remainamount','status')->first();
return $this->success($info);
}
//理财撤单
public function Dualcancle(Request $request){
$id = $request->post('id');
$user_id = Users::getUserId();
if(empty($id) || !is_numeric($id)){
return $this->error('Parameter errorID Is NULL');
}
$dual_order = DualOrder::where('id',$id)->where('status',0)->first();
$amount = $dual_order->amount;
if(empty($amount)){
return $this->error('Parameter erroramount Is NULL');
}
$liquidateddamages = $dual_order->liquidateddamages;
$todayincome = $dual_order->todayincome;
$totalincome= $dual_order->totalincome;
$user_walllet=UsersWallet::where("user_id",$user_id)->where("currency",3)->first();
if(!$user_walllet){
return $this->error('User wallet does not exist!');
}
$dual_order->status = 1;
$dual_order->amount = 0;
$dual_order->todayincome=0;
$dual_order->totalincome=0;
$amount = $amount - $amount*$liquidateddamages/100;
$result = change_wallet_balance($user_walllet , 4 , $amount , AccountLog::USER_LOAN_ORDER_RETURN,'量化返本');
if($result){
$dual_order->save();
return $this->success('操作成功');
}
}
//购买理财
public function buyDual(Request $request){
$id = $request->post('id');
$num = $request->post('num');
$user_id = Users::getUserId();
$num = intval($num);
if(empty($num) || !is_numeric($num)){
return $this->error('Parameter errornum ');
}
if(empty($id) || !is_numeric($id)){
return $this->error('Parameter errorID Is NULL');
}
$user = Users::where('id', $user_id)->first();
if ($user->frozen_funds == 1 || $user->status == 1) {
return $this->error('こんにちは、アカウントはロックされています。詳細はカスタマーサービスにお問い合わせください。');
}
// if(Cache::has("by_dual_order_$user_id")){
// return $this->error('Do not repeat the operation!');
// }
// Cache::put("by_dual_order_$user_id", 1, Carbon::now()->addSeconds(5));//禁止重复提交
// $count = DualOrder::where('user_id',$user_id)->where('dual_id',$id)->count();
$dual_currencys = DualCurrency::where('id',$id)->first();
if($num<$dual_currencys->amount) {
return $this->error('Parameter errornum amount error');
}
if($num>$dual_currencys->amax) {
return $this->error('Parameter errornum max error');
}
if($dual_currencys->status==0){
return $this->error('売り切れ');
}
if($num<$dual_currencys->amax) {
$rate = $dual_currencys->rate;
}
if($num==$dual_currencys->amax) {
$rate = $dual_currencys->ratemax;
}
$expire = time()+$dual_currencys->days*24*60*60;
//if($dual_currencys->end_time <= date('Y-m-d') || $dual_currencys->status == 0){//结束时间等于今天不可购买
// return $this->error('Project has ended!');
// }
// if($num > $dual_currencys->remaining_number){//已经卖完
// return $this->error('Sold out!');
// }
// if($count + $num > $dual_currencys->user_limit){
// return $this->error('Purchase limit exceeded!');
// }
$user_walllet=UsersWallet::where("user_id",$user_id)->where("currency",3)->first();
if(!$user_walllet){
return $this->error('User wallet does not exist!');
}
if($user_walllet->micro_balance < $num){
return $this->error('Insufficient balance!');
}
DB::beginTransaction();
try{
// $d1=strtotime($dual_currencys->end_time);
// $d2 = strtotime(date('Y-m-d'));
// $dayCount=round(($d1- $d2)/3600/24);
$dual_order = new DualOrder();
$dual_order->user_id = $user_id;
// $dual_order->currency_id = $buy_currency;//用户购买时消耗的币种
// $dual_order->dual_id = $dual_currencys->id;
$dual_order->order_rate = $rate;
$dual_order->dual_id = $id;
$dual_order->rate = $dual_currencys->rate."-".$dual_currencys->ratemax;
$dual_order->day = $dual_currencys->days;
$dual_order->amount = $num;
$dual_order->expire = date('Y-m-d H:i:s',$expire);
$dual_order->orderid =date("YmdHis",time()).$expire;
$dual_order->liquidateddamages = $dual_currencys->liquidateddamages;
// $dual_order->price = $now_price;
// $dual_order->total = $total;
$dual_order->startdate =date('Y-m-d H:i:s',time()+86400);
$dual_order->created = date('Y-m-d H:i:s');
// $dual_currencys->refresh();
// if($num > $dual_currencys->remaining_number || $count + $num > $dual_currencys->user_limit){//已经卖完
// DB::rollBack();
// return $this->error('Sold out!');
// }
// $dual_currencys->remaining_number = $dual_currencys->remaining_number - $num;
// $dual_currencys->purchased_number = $dual_currencys->purchased_number + $num;
// $dual_currencys->save();
$result = change_wallet_balance($user_walllet , 4 , -$num , AccountLog::USER_DUAL_ORDER_BUY,'量化扣除');
if($result) $dual_order->save();
DB::commit();
return $this->success('Successful');
} catch (\Exception $ex) {
DB::rollBack();
return $this->error($ex->getMessage());
}
}
public function getDetail(Request $request){
$dual_id = $request->get('id');
$dual = DualCurrency::where('id',$dual_id)->first();
return $this->success($dual);
}
}