Files
boursecu_server/app/Http/Controllers/Site/ReportController.php
T

619 lines
22 KiB
PHP
Raw Normal View History

2026-01-24 14:03:11 +00:00
<?php
namespace App\Http\Controllers\Site;
use App\Http\Controllers\Admin\PriceController;
use App\Http\Controllers\Controller;
use App\Mail\YourMailableClass;
use App\Models\Cnt;
use App\Models\Setting;
2026-01-24 14:03:11 +00:00
use App\Models\ConfigStatic;
use App\Models\Customer;
2026-05-25 12:47:04 +03:30
use App\Services\MontzarService;
2026-06-04 14:40:02 +03:30
use App\Services\EtehadiePriceService;
use App\Services\ZaarboxPriceService;
2026-01-24 14:03:11 +00:00
use App\Models\Price;
use App\Models\PriceCandle;
use App\Models\PriceTrigger;
use App\Models\Product;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Mail;
use Morilog\Jalali\Jalalian;
2026-05-25 12:47:04 +03:30
use App\Services\ConfigService;
2026-01-24 14:03:11 +00:00
2026-01-24 14:03:11 +00:00
class ReportController extends Controller
{
public function candleChart()
{
$candle = PriceCandle::select(["start",
"high",
"low",
"end",
"date_at"])->whereDate('date_at', '<=', date("Y-m-d"))
->whereDate('date_at', '>', Carbon::now()->subDays(30)->format("Y-m-d"))
->get()->toArray();
$a = [];
foreach ($candle as $c) {
$create['date'] = $c["date_at"];
unset($c["date_at"]);
$create['candle'] = array_values($c);
$a[] = array_values($create);
}
return response()->json($a);
}
public function updatePrise()
{
// $difference = config('fee.single');
$difference = Setting::where('key', 'fee_single')->first()->value;
2026-01-24 14:03:11 +00:00
$lastPrice = Price::latest()->first();
$PriceTriggers = PriceTrigger::where("is_active", true)->get();
foreach ($PriceTriggers as $PriceTrigger) {
$priseGold = $PriceTrigger->dirction == 1
? $lastPrice->price - $difference
: ($PriceTrigger->dirction == 2 ? $lastPrice->price + $difference : $lastPrice->price);
if (eval('return $priseGold ' . $PriceTrigger->price_condition . ' $PriceTrigger->target_price;')) {
$customer = Customer::find($PriceTrigger->customer_id);
$message = "قیمت طلا به " . number_format($priseGold, -1) . " در هر گرم رسید\n" .$this->Config('name_fa');
if ($PriceTrigger->action == 'email') {
Mail::to("$customer->email")->send(new YourMailableClass($message, '', '', '', ''));
} elseif ($PriceTrigger->action == 'sms') {
$this->send($customer->mobile, $message);
}
$PriceTrigger->is_active = false;
$PriceTrigger->triggered_at = Carbon::now();
$PriceTrigger->save();
}
}
return response()->json();
}
public function upDownPrice()
2026-06-03 21:52:37 +03:30
{
return $this->buildUpDownPrices();
}
protected function buildUpDownPrices(): array
2026-01-24 14:03:11 +00:00
{
2026-06-01 18:52:59 +03:30
$feeSettings = Setting::whereIn('key', ['fee_single', 'buy_fee', 'sell_fee'])
->pluck('value', 'key');
$difference = (float) ($feeSettings->get('fee_single') ?? 0);
$diffBuy = (float) ($feeSettings->get('buy_fee') ?: $difference);
$diffSell = (float) ($feeSettings->get('sell_fee') ?: $difference);
2026-06-01 18:46:57 +03:30
$upSetting = Setting::where('key', 'up_price')->first();
$downSetting = Setting::where('key', 'down_price')->first();
if ($upSetting && $downSetting) {
2026-06-02 11:18:05 +03:30
$down = (float) ($downSetting->value ?: 0);
$up = (float) ($upSetting->value ?: 0);
2026-06-01 18:46:57 +03:30
2026-06-02 11:18:05 +03:30
if ($down > 0 && $up > 0) {
return [
'sell' => $down - $diffSell,
'buy' => $up + $diffBuy,
];
2026-06-01 18:46:57 +03:30
}
}
2026-01-24 14:03:11 +00:00
$today = Carbon::now()->format("Y-m-d");
$prises = Price::where('date_at', $today)->get("price");
2026-06-01 18:46:57 +03:30
$minP = 0;
$maxP = 0;
2026-01-24 14:03:11 +00:00
foreach ($prises as $p) {
if ($minP == 0 || $p->price < $minP) {
$minP = $p->price;
}
if ($maxP == 0 || $p->price > $maxP) {
$maxP = $p->price;
}
}
if (count($prises) === 0) {
$price = Price::orderBy('id', 'desc')->first();
$priceValue = $price->price;
2026-01-24 14:03:11 +00:00
2026-06-01 18:52:59 +03:30
return ['sell' => $priceValue - $diffSell, 'buy' => $priceValue + $diffBuy];
2026-01-24 14:03:11 +00:00
}
2026-06-01 18:46:57 +03:30
2026-06-01 18:52:59 +03:30
return ['sell' => $minP - $diffSell, 'buy' => $maxP + $diffBuy];
2026-01-24 14:03:11 +00:00
}
2026-06-03 21:52:37 +03:30
protected function appendUpPrices(array $payload): array
{
$payload['up'] = $this->buildUpDownPrices();
return $payload;
}
2026-01-24 14:03:11 +00:00
public function lastPrice()
{
2026-05-25 12:47:04 +03:30
$config = app(ConfigService::class);
$closed = false;
2026-05-25 12:47:04 +03:30
$montzar_price = 0;
2026-06-04 14:40:02 +03:30
$zaarbox_price = 0;
2026-05-24 16:55:07 +03:30
$tgn = 0;
$pr_price = 0;
$open_buy = true;
$open_sell = true;
2026-05-25 12:47:04 +03:30
$montzar_open_buy = false;
$montzar_open_sell = false;
2026-05-24 16:55:07 +03:30
$priceSource = null;
2026-05-24 22:29:43 +03:30
$priceValue = 0;
2026-05-24 16:55:07 +03:30
$toBool = function ($value) {
return filter_var($value, FILTER_VALIDATE_BOOLEAN);
};
2026-05-25 12:47:04 +03:30
$zeroResponse = function () {
2026-06-03 21:52:37 +03:30
return $this->appendUpPrices([
2026-05-25 12:47:04 +03:30
'sell' => 0,
'buy' => 0,
'price_last' => 0,
'price' => 0,
'main_product' => 0,
'taban_gohar' => 0,
'montzar' => 0,
2026-06-04 14:40:02 +03:30
'zaarbox' => 0,
2026-05-25 12:47:04 +03:30
'closed' => true,
'time' => now(),
2026-06-03 21:52:37 +03:30
]);
2026-05-25 12:47:04 +03:30
};
2026-06-04 12:18:53 +03:30
$priceProvider = $config->priceProvider();
2026-05-24 16:55:07 +03:30
/*
|--------------------------------------------------------------------------
2026-05-24 22:29:43 +03:30
| بستن قیمت طبق منطق قبلی
2026-05-24 16:55:07 +03:30
|--------------------------------------------------------------------------
*/
2026-05-25 12:47:04 +03:30
if ($toBool($config->Config('close_price'))) {
$startDay = $config->Config('startDay') ?: '00:00';
2026-05-11 17:36:23 +00:00
[$startHour, $startMinute] = explode(':', $startDay);
2026-05-25 12:47:04 +03:30
$endDay = $config->Config('endDay') ?: '23:59';
2026-05-11 17:36:23 +00:00
[$endHour, $endMinute] = explode(':', $endDay);
$current = Carbon::now();
2026-05-24 22:29:43 +03:30
$start = Carbon::today()->setTime((int) $startHour, (int) $startMinute);
$end = Carbon::today()->setTime((int) $endHour, (int) $endMinute);
2026-05-24 16:55:07 +03:30
if (!$current->between($start, $end)) {
2026-05-25 12:47:04 +03:30
// عمومی: در Cnt بماند
Cnt::where('key', 'app_closed')->update(['value' => 'true']);
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
// مربوط به منتزر: settings
$config->UpdateConfig('montzar_closed', 'true');
return $zeroResponse();
}
2026-05-24 22:29:43 +03:30
2026-05-25 12:47:04 +03:30
Cnt::where('key', 'app_closed')->update(['value' => 'false']);
}
2026-05-11 17:36:23 +00:00
2026-05-24 16:55:07 +03:30
/*
|--------------------------------------------------------------------------
2026-05-24 22:29:43 +03:30
| Settings
2026-05-24 16:55:07 +03:30
|--------------------------------------------------------------------------
*/
$settings = Setting::whereIn('key', [
'fee_single',
'tabanGohar_price',
'main_product_price',
'buy_fee',
'sell_fee',
2026-05-25 12:47:04 +03:30
'show_last_price',
2026-05-24 16:55:07 +03:30
])->get();
$settingsMap = $settings->pluck('value', 'key');
2026-05-25 12:47:04 +03:30
$show_last_price = $toBool($settingsMap->get('show_last_price', false));
$taban_gohar_price = $settingsMap->get('tabanGohar_price');
$main_product_price = $settingsMap->get('main_product_price');
2026-01-24 14:03:11 +00:00
2026-05-25 12:47:04 +03:30
$difference = (float) $settingsMap->get('fee_single', 0);
2026-05-24 22:29:43 +03:30
$diff_buy = (float) $settingsMap->get('buy_fee', $difference);
$diff_sell = (float) $settingsMap->get('sell_fee', $difference);
2026-05-17 16:27:50 +00:00
2026-05-24 16:55:07 +03:30
/*
|--------------------------------------------------------------------------
2026-06-04 12:18:53 +03:30
| Montzar — فقط وقتی price_provider=montzar
2026-05-24 16:55:07 +03:30
|--------------------------------------------------------------------------
*/
2026-06-04 12:18:53 +03:30
if ($priceProvider === 'montzar' && !$closed) {
2026-05-24 16:55:07 +03:30
try {
2026-05-25 12:47:04 +03:30
$montzarBaseUrl = rtrim($config->Config('montzar_base_url') ?: 'https://montpar.ir', '/');
$montzarProductId = (int) ($config->Config('montzar_product_id') ?: 25);
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$montzar = app(MontzarService::class)->productList();
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
if (isset($montzar['message'])) {
throw new \Exception('Provider message: ' . $montzar['message']);
2026-05-24 16:55:07 +03:30
}
2026-05-25 12:47:04 +03:30
$collection = collect($montzar);
$montzarProduct = $collection->firstWhere('id', $montzarProductId);
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
if (!$montzarProduct) {
throw new \Exception("Provider product not found. product_id={$montzarProductId}");
2026-05-24 22:29:43 +03:30
}
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
if (!isset($montzarProduct['sub_agent'])) {
throw new \Exception("Provider product has no sub_agent. product_id={$montzarProductId}");
2026-05-24 22:29:43 +03:30
}
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$buy = (float) ($montzarProduct['sub_agent']['rate_buy_gram_price'] ?? 0);
$sell = (float) ($montzarProduct['sub_agent']['rate_sell_gram_price'] ?? 0);
2026-05-24 16:55:07 +03:30
2026-05-24 22:29:43 +03:30
if ($buy <= 0 || $sell <= 0) {
throw new \Exception("Provider invalid gram price. buy={$buy}, sell={$sell}");
}
2026-05-24 16:55:07 +03:30
2026-05-24 22:29:43 +03:30
$customPrice = [];
$customPrice['price'] = ($buy + $sell) / 2;
$customPrice['diff'] = ($buy - $sell) / 2;
2026-05-24 16:55:07 +03:30
2026-05-25 16:17:24 +03:30
$config->UpdateConfig('montzar_live_price', (float) $customPrice['price']);
2026-05-25 12:47:04 +03:30
$config->UpdateConfig('montzar_diff', (float) $customPrice['diff']);
$config->UpdateConfig('montzar_mazaneh', ((float) $customPrice['price'] * 4.331802));
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$config->UpdateConfig(
'montzar_truly_buy_mazaneh',
$montzarProduct['sub_agent']['rate_buy_price'] ?? 0
);
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$config->UpdateConfig(
'montzar_truly_sell_mazaneh',
$montzarProduct['sub_agent']['rate_sell_price'] ?? 0
);
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$config->UpdateConfig(
'montzar_last_product_log',
json_encode($montzarProduct, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)
);
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$montzar_open_sell = $toBool($montzarProduct['open_sell'] ?? false);
$montzar_open_buy = $toBool($montzarProduct['open_buy'] ?? false);
2026-05-24 22:29:43 +03:30
2026-05-25 12:47:04 +03:30
$config->UpdateConfig('montzar_open_sell', $montzar_open_sell ? 'true' : 'false');
$config->UpdateConfig('montzar_open_buy', $montzar_open_buy ? 'true' : 'false');
2026-05-24 22:29:43 +03:30
2026-05-25 12:47:04 +03:30
if ($montzar_open_sell || $montzar_open_buy) {
$montzar_price = (int) $customPrice['price'];
2026-05-24 16:55:07 +03:30
}
2026-05-25 12:47:04 +03:30
$config->UpdateConfig('montzar_closed', $montzar_price == 0 ? 'true' : 'false');
2026-05-24 22:29:43 +03:30
} catch (\Throwable $e) {
2026-05-25 12:47:04 +03:30
$montzar_price = 0;
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
\Log::error('MONZAR PRICE ERROR', [
2026-05-24 22:29:43 +03:30
'message' => $e->getMessage(),
2026-05-25 12:47:04 +03:30
'montzar_product_id' => $montzarProductId ?? null,
'montzar_response' => $montzar ?? null,
2026-05-24 22:29:43 +03:30
]);
2026-05-25 12:47:04 +03:30
$config->UpdateConfig('montzar_closed', 'true');
2026-05-24 16:55:07 +03:30
}
}
2026-06-04 14:40:02 +03:30
/*
|--------------------------------------------------------------------------
| Zaarbox — price_provider=zaarbox + settings.zaarbox_price_key
|--------------------------------------------------------------------------
*/
if ($priceProvider === 'zaarbox' && !$closed) {
$zaarbox = app(ZaarboxPriceService::class)->fetchPrice();
$zaarbox_price = (int) ($zaarbox['order_price'] ?? 0);
}
2026-05-24 16:55:07 +03:30
/*
|--------------------------------------------------------------------------
2026-06-04 14:19:54 +03:30
| Main Product — settings.main_product سپس const
2026-05-25 12:47:04 +03:30
|--------------------------------------------------------------------------
2026-05-24 16:55:07 +03:30
*/
2026-06-04 14:40:02 +03:30
$pr_product = null;
if ($priceProvider === 'main_product' || $toBool($main_product_price)) {
$pr_product = $config->mainProduct();
}
if ($pr_product && !$closed) {
if ($priceProvider === 'main_product') {
2026-06-04 14:42:22 +03:30
if (Product::hasStoredPriceColumns()) {
app(EtehadiePriceService::class)->syncProductFromApi($pr_product->fresh());
$pr_product->refresh();
$pr_price = (float) $pr_product->price + (float) ($pr_product->price_profit ?? 0);
} else {
$apiUrl = $config->getString('zaarbox_api_url', '')
?: $config->getString('etehadie_api_url', 'https://price.zaarbox.ir/api/free');
$live = app(EtehadiePriceService::class)->fetchLiveOrderPrice(
$pr_product->reading_method,
$apiUrl
);
$pr_price = (float) ($live['order_price'] ?? 0);
}
} else {
$pr_price = Product::hasStoredPriceColumns()
? (float) $pr_product->price + (float) ($pr_product->price_profit ?? 0)
: 0.0;
2026-05-24 16:55:07 +03:30
}
}
/*
|--------------------------------------------------------------------------
| Taban Gohar
|--------------------------------------------------------------------------
*/
2026-05-25 12:47:04 +03:30
if ($toBool($taban_gohar_price) && !$closed) {
2026-05-24 16:55:07 +03:30
try {
$taban_gohar = Http::withOptions([
2026-03-12 10:47:22 +00:00
'curl' => [
2026-06-01 17:01:03 +03:30
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
CURLOPT_TCP_FASTOPEN => 1,
2026-05-25 12:47:04 +03:30
],
2026-03-12 10:47:22 +00:00
])
2026-05-24 16:55:07 +03:30
->withoutVerifying()
->timeout(2)
->get('https://tabangohar.com/GheymatKhan/prices_in_table.html')
->json();
2026-05-24 16:55:07 +03:30
$tgn = (int) $taban_gohar['c'] * 10;
2026-05-24 22:29:43 +03:30
} catch (\Throwable $e) {
$tgn = 0;
}
}
2026-05-24 16:55:07 +03:30
/*
|--------------------------------------------------------------------------
2026-06-04 12:18:53 +03:30
| انتخاب قیمت اصلی (همان price_provider)
2026-05-24 16:55:07 +03:30
|--------------------------------------------------------------------------
*/
2026-06-04 14:40:02 +03:30
if ($priceProvider === 'zaarbox' && $zaarbox_price > 0 && !$closed) {
$priceValue = $zaarbox_price;
$priceSource = 'zaarbox';
} elseif ($priceProvider === 'montzar' && ($montzar_price ?? 0) !== 0 && !$closed) {
2026-05-25 12:47:04 +03:30
$priceValue = (int) $montzar_price;
$priceSource = 'montzar';
2026-06-04 12:18:53 +03:30
} elseif ($priceProvider === 'taban_gohar' && $toBool($taban_gohar_price) && ($tgn ?? 0) !== 0 && !$closed) {
$priceValue = $tgn;
2026-05-24 16:55:07 +03:30
$priceSource = 'taban_gohar';
2026-06-04 14:19:54 +03:30
} elseif ($priceProvider === 'main_product' && ($pr_price ?? 0) !== 0 && !$closed) {
$priceValue = $pr_price;
2026-05-24 16:55:07 +03:30
$priceSource = 'main_product';
} else {
$priceValue = 0;
2026-05-24 22:29:43 +03:30
$priceSource = null;
}
if ($priceValue <= 0) {
2026-05-25 12:47:04 +03:30
if (!$show_last_price) {
2026-06-03 21:52:37 +03:30
return $this->appendUpPrices([
2026-05-25 12:47:04 +03:30
'sell' => 0,
'buy' => 0,
'price_last' => 0,
'price' => 0,
'main_product' => $pr_price ?? 0,
'taban_gohar' => $tgn ?? 0,
'montzar' => $montzar_price ?? 0,
2026-06-04 14:40:02 +03:30
'zaarbox' => $zaarbox_price ?? 0,
2026-05-25 12:47:04 +03:30
'closed' => true,
'time' => now(),
2026-06-03 21:52:37 +03:30
]);
2026-05-25 12:47:04 +03:30
}
2026-05-24 22:29:43 +03:30
2026-05-25 12:47:04 +03:30
$lastPrice = Price::latest()->first();
if (!$lastPrice || (float) $lastPrice->price <= 0) {
2026-06-03 21:52:37 +03:30
return $this->appendUpPrices([
2026-05-25 12:47:04 +03:30
'sell' => 0,
'buy' => 0,
'price_last' => 0,
'price' => 0,
'main_product' => $pr_price ?? 0,
'taban_gohar' => $tgn ?? 0,
'montzar' => $montzar_price ?? 0,
2026-06-04 14:40:02 +03:30
'zaarbox' => $zaarbox_price ?? 0,
2026-05-25 12:47:04 +03:30
'closed' => true,
'time' => now(),
2026-06-03 21:52:37 +03:30
]);
2026-05-25 12:47:04 +03:30
}
$priceValue = (float) $lastPrice->price;
$priceSource = 'database_last';
2026-03-10 15:39:30 +03:30
}
2026-05-24 16:55:07 +03:30
/*
|--------------------------------------------------------------------------
| ذخیره قیمت
|--------------------------------------------------------------------------
*/
2026-06-04 13:48:37 +03:30
$priceToStore = $priceValue;
2026-01-24 14:03:11 +00:00
$lastPrice = Price::latest()->first();
2026-05-24 16:55:07 +03:30
if (
!$closed &&
2026-06-04 13:48:37 +03:30
(!$lastPrice || (float) $lastPrice->price != (float) $priceToStore) &&
$priceToStore > 30000000
2026-05-24 16:55:07 +03:30
) {
2026-01-24 14:03:11 +00:00
$price = new Price();
2026-06-04 13:48:37 +03:30
$price->price = $priceToStore;
2026-01-24 14:03:11 +00:00
$price->time_at = Carbon::now()->toTimeString();
$price->date_at = Carbon::now()->toDateString();
$price->save();
2026-05-24 16:55:07 +03:30
2026-01-24 14:03:11 +00:00
$this->updatePrise();
2026-05-24 16:55:07 +03:30
$candle = PriceCandle::whereDate('date_at', date("Y-m-d"))->first();
if (!is_null($candle)) {
2026-06-04 13:48:37 +03:30
$candle->end = $priceToStore;
2026-05-24 16:55:07 +03:30
2026-06-04 13:48:37 +03:30
if ($priceToStore < $candle->low) {
$candle->low = $priceToStore;
} elseif ($priceToStore > $candle->high) {
$candle->high = $priceToStore;
2026-05-24 16:55:07 +03:30
}
$candle->save();
} else {
2026-01-24 14:03:11 +00:00
PriceCandle::create([
2026-06-04 13:48:37 +03:30
'start' => $priceToStore,
'end' => $priceToStore,
'high' => $priceToStore,
'low' => $priceToStore,
2026-05-25 12:47:04 +03:30
'date_at' => date('Y-m-d'),
2026-01-24 14:03:11 +00:00
]);
}
2026-06-04 13:48:37 +03:30
$lastPrice = $price;
2026-01-24 14:03:11 +00:00
}
2026-05-24 16:55:07 +03:30
/*
|--------------------------------------------------------------------------
2026-05-25 12:47:04 +03:30
| محاسبه sell / buy
2026-05-24 16:55:07 +03:30
|--------------------------------------------------------------------------
*/
2026-05-25 12:47:04 +03:30
if ($priceSource === 'montzar') {
$montzar_profit = (float) $config->Config('montzar_diff');
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$final_buy_diff = $diff_buy + $montzar_profit;
$final_sell_diff = $diff_sell + $montzar_profit;
2026-05-24 16:55:07 +03:30
2026-05-25 12:47:04 +03:30
$sell = $montzar_open_sell
2026-05-24 22:29:43 +03:30
? ceil($priceValue - $final_sell_diff)
2026-05-24 16:55:07 +03:30
: 0;
2026-05-25 12:47:04 +03:30
$buy = $montzar_open_buy
2026-05-24 22:29:43 +03:30
? ceil($priceValue + $final_buy_diff)
2026-05-24 16:55:07 +03:30
: 0;
2026-05-24 22:29:43 +03:30
$priceLast = ceil($priceValue + $final_buy_diff);
2026-05-24 16:55:07 +03:30
} else {
2026-05-24 22:29:43 +03:30
$sell = $open_sell
? ceil($priceValue - $difference)
2026-05-24 16:55:07 +03:30
: 0;
2026-05-24 22:29:43 +03:30
$buy = $open_buy
? ceil($priceValue + $difference)
2026-05-24 16:55:07 +03:30
: 0;
2026-05-24 22:29:43 +03:30
$priceLast = ceil($priceValue + $difference);
2026-05-24 16:55:07 +03:30
}
2026-06-04 13:48:37 +03:30
/*
2026-06-04 14:40:02 +03:30
| main_product / zaarbox: سفارش از Price::latest() — نمایش buy/sell همان منبع.
2026-06-04 13:48:37 +03:30
*/
2026-06-04 14:40:02 +03:30
if (in_array($priceProvider, ['main_product', 'zaarbox'], true) && !$closed) {
2026-06-04 13:48:37 +03:30
$storedPrice = $lastPrice ?? Price::latest()->first();
if ($storedPrice && (float) $storedPrice->price > 0) {
$base = (float) $storedPrice->price;
$sell = $open_sell ? (int) ceil($base - $difference) : 0;
$buy = $open_buy ? (int) ceil($base + $difference) : 0;
$priceLast = (int) ceil($base + $difference);
}
}
2026-06-01 18:46:57 +03:30
if (!$closed && $priceValue > 0) {
$config->trackDailyPriceExtreme((float) $priceValue);
}
2026-06-03 21:52:37 +03:30
return $this->appendUpPrices([
2026-05-24 16:55:07 +03:30
'sell' => $sell,
'buy' => $buy,
'price_last' => $priceLast,
'price' => $priceValue,
'main_product' => $pr_price ?? 0,
'taban_gohar' => $tgn ?? 0,
2026-05-25 12:47:04 +03:30
'montzar' => $montzar_price ?? 0,
2026-06-04 14:40:02 +03:30
'zaarbox' => $zaarbox_price ?? 0,
2026-05-24 22:29:43 +03:30
'closed' => false,
2026-05-24 16:55:07 +03:30
'time' => now(),
2026-06-03 21:52:37 +03:30
]);
2026-01-24 14:03:11 +00:00
}
public function check()
{
$service = Http::
withHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer ohxsrbjagqvbt0glaygt'
])->get('https://studio.persianapi.com/index.php/web-service/common/gold-currency-coin?format=json&limit=30&page=1')
->json();
$list = [];
if (isset($service['result'])) {
foreach ($service['result'] as $item) {
if ($item['key'] == 137120 || $item['key'] == 137119) {
$list[] = $item;
if ($item['key'] == 137120) {
(new PriceController())->store(new Request(["price" => $item['price']]));
}
}
}
Cnt::where('key', 'price')->update(['value_json' => $list]);
}
}
public function test()
{
$a = '{{12, 23, {4, 0, {1}, {1}}}, 0, {1}}';
$b = str_split($a);
$c = [];
$str = "";
foreach ($b as $item) {
if ($item != " ") {
print_r($item);
print_r('++');
if ($item == ',' || $item == '}') {
if (!in_array($c[count($c) - 1], ['{', '}'])) {
$c[count($c) - 1] += (int)$str;
print_r((int)$str);
print_r('^^');
} else {
$c[] = $str;
print_r($c);
print_r('&&');
}
$str = "";
} elseif (in_array($item, ['{', '}'])) {
$c[] = $item;
print_r($c);
print_r('**');
} else {
$str .= $item;
print_r($str);
print_r('@@');
}
}
}
dd($c);
$d = [];
$e = [];
foreach ($c as $item) {
if ($item == '}') {
print_r($d[count($d) - 1]);
print_r('***');
$e[] = $d[count($d) - 1];
} else {
$d[] = $item;
print_r($d);
print_r('-----');
}
}
dd($e);
}
}