/
home
/
pay
/
server
/
app
/
Http
/
Controllers
/
Single
/
File Upload :
llllll
Current File: /home/pay/server/app/Http/Controllers/Single/SingleOrderController.php
<?php namespace App\Http\Controllers\Single; use App\DB\Te\TableEngine; use App\Http\Controllers\Controller; use App\Models\Customer; use App\Models\Order; use App\Models\Price; use App\Models\User; use App\Mail\YourMailableClass; use Illuminate\Support\Facades\Mail; use App\Models\Withdraw; use Illuminate\Http\Request; use Rooyesh\Wallet\interfaces\TransactionInterface; use Rooyesh\Wallet\interfaces\WalletInterface; use Rooyesh\Wallet\models\Wallet; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; use Illuminate\Support\Facades\Http; class SingleOrderController extends Controller { public function store(Request $request) { // throw new UnprocessableEntityHttpException('به دلیل نوسانات سفارشات بسته میباشد.'); $data = $request->all(); $transactionType = $data['direction'] == 1 ? "خرید" : "فروش"; if (auth('customer')->id()) { $data['customer_id'] = auth('customer')->id(); $latestPrice = Price::latest()->first(); $data['price'] = $latestPrice->price; $data['price_id'] = $latestPrice->id; $data['difference'] = config('fee.cash'); $data['service_charge_percentage'] = config('fee.service_charge_percentage'); $data['pay_at'] = (new \DateTime())->format('Y-m-d H:i:s'); }else if (auth('user')->id()){ $data['service_charge_percentage'] = 0; } $data['sts'] = 2; $data['type'] = 2; $data['payment_sts'] = 4; $data['price_original'] = $data['price']; $data['total_price_original'] = $data['amount'] * ($data['price_original'] ?? 0); $data['payment_remind'] = 0; $data['fee'] = $data['difference']; $data['total_fee'] = $data['amount'] * $data['difference']; $wallet_interface = new WalletInterface($data['customer_id'], 2); $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); if ($data['direction'] == 1) { $response['buy'] = $this->processBuyTransaction($data, $wallet, $wallet_interface); } else if ($data['direction'] == 2) { $response['sell'] = $this->processSellTransaction($data, $wallet, $wallet_interface); } $this->sendTransactionNotifications($data, $transactionType); return response()->json($response); } private function processBuyTransaction(&$data, $wallet, $wallet_interface) { $response =[]; $data['price'] += $data['difference']; $data['total_price'] = $data['amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; $data['service_charge'] = $data['service_charge_percentage'] * $data['amount']; $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $data['amount'] -= $data['service_charge']; if ($wallet->cash < $data['payment_amount']) {throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است');} $order = Order::create($data); new TransactionInterface($wallet_interface, [ "cash" => $data['payment_amount'], "gold" => $data['amount'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), ], 1, true, false); $response['1']=2; //send to liman if ($this->Config('do_send_liman') == "true"){ $payload = [ 'amount' => "$order->amount", 'description' =>$this->Config('name_fa')." - ". auth('customer')->user()->name, 'ref_id' => $order->id, 'direction' => 1, 'product_id' => 2 ]; return $response = Http::withToken($this->Config('liman_token')) ->post("https://limangold.ir/kernel/customer/order",$payload)->json(); $order->total_price_liman = $response["payment_amount"]; $order->save(); } return $response; } private function processSellTransaction(&$data, $wallet, $wallet_interface) { $data['price'] -= $data['difference']; $data['total_price'] = $data['amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; $data['service_charge'] = $data['service_charge_percentage'] * $data['amount']; $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $data['payment_amount'] -= $data['service_charge_price']; if ($wallet->gold < $data['amount']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } $order = Order::create($data); new TransactionInterface($wallet_interface, [ "gold" => $data['amount'], "cash" => $data['total_price'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id ], 2, false, true); //send to liman 1buy 2 sell if ($this->Config('do_send_liman') == "true"){ $payload = [ 'amount' => "$order->amount", 'description' => auth('customer')->user()->name, 'ref_id' => $order->id, 'direction' => 2, 'product_id' => 2 ]; $response = Http::withToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbGltYW5nb2xkLmlyXC9rZXJuZWxcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNzMwMjczMzU3LCJleHAiOjE3MzI4NjUzNTcsIm5iZiI6MTczMDI3MzM1NywianRpIjoiUkRKT0V5QTBGU3hNYkRybyIsInN1YiI6MjMsInBydiI6IjFkMGEwMjBhY2Y1YzRiNmM0OTc5ODlkZjFhYmYwZmJkNGU4YzhkNjMifQ.OkSZ6sMuwmWyErZa8utk5Ldo8wCDU2PZmH_CgMBLiUU") ->post("https://limangold.ir/kernel/customer/order",$payload)->json(); $order->total_price_liman = $response["payment_amount"]; $order->save(); } } private function sendTransactionNotifications(array $data, string $transactionType) { $customer = Customer::findOrFail($data['customer_id']); $companyName = $this->Config('name_fa'); $message = "کاربر {$customer->name} با شماره موبایل {$customer->mobile} اقدام به $transactionType طلا به مقدار " . "{$data['amount']} گرم به مبلغ " . number_format($data['total_price']) . " ریال کرد. با تشکر، $companyName"; User::where('send_sms', 1)->get()->each(function($admin) use ($message, $data, $transactionType, $companyName) { $this->send($admin->mobile, $message);}); $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); $pricePerGram = $data['total_price'] / $data['amount']; $customerMessage = "$companyName\n$transactionType آبشده\nگرم: {$data['amount']}\nقیمت گرم: " . number_format($pricePerGram) . "\nمبلغ کل: " . number_format($data['total_price']) . "\n\nموجودی طلایی: {$wallet->gold}\n" . "مانده ریالی: " . number_format($wallet->cash) . "\n" .$this->Config('app_url'); // ارسال SMS به مشتری $this->send($customer->mobile, $customerMessage); } public function storeBackUp(Request $request) { $data = $request->all(); if (auth('customer')->id()) {// متد در پنل کاربر $data['customer_id'] = auth('customer')->id(); $data['price'] = Price::orderBy('id', 'desc')->first()->price; } elseif (auth('user')->user()) {// متد در پنل ادمین $data['customer_id'] = $request->customer_id; $data['price'] = $request->price; } $data['sts'] = 2; $data['type'] = 2; $data['payment_sts'] = 4; $data['price_original'] = $data['price']; $add_sell_price = config('add_sell_price.single'); $wallet_interface = new WalletInterface($data['customer_id'], 2); $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); $data['total_price_original'] = $data['amount'] * $data['price_original']; $data['payment_remind'] = 0; $data['fee'] = $add_sell_price; $data['total_fee'] = $data['amount'] * $data['fee']; if ($data['direction'] == 1) { $data['price'] += $add_sell_price; $data['total_price'] = $data['amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; if ($wallet->cash < $data['total_price']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } $order = Order::create($data);//buy new TransactionInterface($wallet_interface, $_inp = [ "cash" => $data['total_price'], "gold" => $data['amount'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), ], 1, true, false); } else {//sell $data['price'] -= $add_sell_price; $data['total_price'] = $data['amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; if ($wallet->gold < $data['amount']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } $order = Order::create($data); new TransactionInterface($wallet_interface, $_inp = [ "gold" => $data['amount'], "cash" => $data['total_price'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id ], 2, false, true); } //----------------------------------------------------------------------------sms // Determine transaction type $transactionType = ($data['direction'] == 1) ? "خرید" : "فروش"; // User information $customer = Customer::where("id", $data['customer_id'])->firstOrFail(); $userMobile = $customer->mobile; // User's mobile number $userName = $customer->name; // User's name $chargedAmount = $data['total_price']; // Total price in Rial $chargedAmountGold = $data['amount']; // Amount of gold // Company name $companyName =$this->Config('name_fa'); // Company name from configuration // Constructing the SMS message $message = "کاربر $userName با شماره موبایل $userMobile اقدام به $transactionType طلا به مقدار " . $chargedAmountGold . " گرم به مبلغ " . number_format($chargedAmount) . " ریال کرد. با تشکر، $companyName"; // Getting admin mobile numbers and sending the SMS User::where('active', 1)->get()->each(function ($admin) use ($message) { $this->Send($admin->mobile, $message); }); $Walet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); $companyName = $this->Config('name_fa'); $companyurl = $this->Config('app_url'); $weight = $data['amount']; $totalAmount = $data['total_price']; $pricePerGram = $totalAmount / $weight; $goldBalance = $Walet->gold; $remainingBalance = $Walet->cash; $message = "$companyName\n"; $message .= "خرید آبشده\n"; $message .= "گرم: $weight\n"; $message .= "قیمت گرم: " . number_format($pricePerGram) . "\n"; $message .= "مبلغ کل: " . number_format($totalAmount) . "\n\n"; $message .= "موجودی طلایی: $goldBalance\n"; $message .= "مانده ریالی: " . number_format($remainingBalance) . "\n"; $message .= "$companyurl" . "\n"; $this->Send($customer->mobile, $message); return response()->json($order); } public function table(Request $request) { $records = Order::where('customer_id', auth('customer')->id()) ->where('type', 2); TableEngine::create($records, $request->all()) ->initSearch([]) ->select([ '*', Order::$SELECT_STS_STR ])->export($records); return response()->json($records); } }
Copyright ©2k19 -
Hexid
|
Tex7ure