merge product controller with kashkool
This commit is contained in:
@@ -4,7 +4,6 @@ namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\SuperController;
|
||||
use App\Models\Cnt;
|
||||
use App\Models\Product;
|
||||
use App\DB\Te\TableEngine;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -12,30 +11,46 @@ use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use \App\Http\Controllers\Customer\FundController;
|
||||
use App\Http\Controllers\Site\ReportController ;
|
||||
|
||||
use App\Http\Controllers\Site\ReportController;
|
||||
use App\Services\ConfigService;
|
||||
|
||||
class ProductController extends SuperController
|
||||
{
|
||||
|
||||
private $configService;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->configService = app(ConfigService::class);
|
||||
|
||||
$this->with = ['file'/*, 'price', 'default', 'sub'*/];
|
||||
// $this->with = [];
|
||||
|
||||
parent::__construct(Product::class, $this->with, ['*'], null, null, ['title']);
|
||||
}
|
||||
|
||||
private function shouldUpdatePriceOnList(): bool
|
||||
{
|
||||
return $this->configService->ConfigBool('product_update_price_on_list', true);
|
||||
}
|
||||
|
||||
private function shouldAutoCloseOpenOnList(): bool
|
||||
{
|
||||
return $this->configService->ConfigBool('product_auto_close_open_on_list', true);
|
||||
}
|
||||
|
||||
public function tableProduct(Request $request)
|
||||
{
|
||||
$data = $request->all();
|
||||
if (isset($data["select"]) && is_null($data["select"])){
|
||||
if (isset($data["select"]) && is_null($data["select"])) {
|
||||
$data["select"] = [];
|
||||
}
|
||||
if (is_null($this->query)){
|
||||
if (is_null($this->query)) {
|
||||
$query_table = $this->model::with($this->with);
|
||||
//*******کداضافه شده
|
||||
// ->where('active', '<=', now()) // فیلتر محصولات فعال
|
||||
// ->get();
|
||||
//*********
|
||||
}else{
|
||||
} else {
|
||||
$query_table = $this->query;
|
||||
// $query_table = $query_table->where('active', '<=', now());
|
||||
}
|
||||
@@ -45,7 +60,8 @@ class ProductController extends SuperController
|
||||
->export($query_table);
|
||||
$query_table['auto_open_at'] = Product::selectRaw(
|
||||
'SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(auto_open_at)))) as avg_time'
|
||||
)->value('avg_time'); $query_table['auto_close_at'] = Product::selectRaw(
|
||||
)->value('avg_time');
|
||||
$query_table['auto_close_at'] = Product::selectRaw(
|
||||
'SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(auto_close_at)))) as avg_time'
|
||||
)->value('avg_time');
|
||||
|
||||
@@ -81,16 +97,15 @@ class ProductController extends SuperController
|
||||
{
|
||||
// return 1;
|
||||
|
||||
$data = $request->all();
|
||||
if (isset($data["price"])){
|
||||
$data["reading_method"] = null;
|
||||
}
|
||||
if (isset($data["auto_close_at"]) and isset($data["auto_close_at"])){
|
||||
if ($data["auto_close_at"] == $data["auto_open_at"]){
|
||||
unset($data["auto_open_at"]);
|
||||
unset($data["auto_close_at"]);
|
||||
}
|
||||
}
|
||||
$data = $request->all();
|
||||
if (isset($data["price"])) {
|
||||
$data["reading_method"] = null;
|
||||
}
|
||||
if (isset($data["auto_close_at"], $data["auto_open_at"])) {
|
||||
if ($data["auto_close_at"] == $data["auto_open_at"]) {
|
||||
unset($data["auto_open_at"], $data["auto_close_at"]);
|
||||
}
|
||||
}
|
||||
|
||||
// return $data['price'];
|
||||
|
||||
@@ -102,7 +117,7 @@ class ProductController extends SuperController
|
||||
// $data['auto_open_at'] = Carbon::parse($data['auto_open_at'])->format('Y-m-d H:i:s');
|
||||
// $data['auto_close_at'] = Carbon::parse($data['auto_close_at'])->format('Y-m-d H:i:s');
|
||||
// Product::find($id)->update($data);
|
||||
Product::find($id)->update($data);
|
||||
Product::findOrFail($id)->update($data);
|
||||
|
||||
return response()->json(true);
|
||||
}
|
||||
@@ -117,81 +132,196 @@ class ProductController extends SuperController
|
||||
|
||||
public function listProduct()
|
||||
{
|
||||
// $this->getPrice();
|
||||
// $this->auto_close_open();
|
||||
if ($this->shouldUpdatePriceOnList()) {
|
||||
$this->syncProductPrices();
|
||||
}
|
||||
|
||||
if ($this->shouldAutoCloseOpenOnList()) {
|
||||
$this->syncAutoCloseOpen();
|
||||
}
|
||||
|
||||
$product = Product::with(['file'])->where('active', 1)->get();
|
||||
|
||||
return response()->json($product);
|
||||
}
|
||||
|
||||
public function getPrice()
|
||||
{
|
||||
// $RPrices = Http::get('https://pricing.liman.gold/pricingApi', [])->json();
|
||||
// $RPrices = Http::get('https://pricing.liman.gold/pricingApi', [])->json();
|
||||
// $RPrices =Http::timeout(40)->get('http://212.23.201.173:8381/price_list', [])->json();
|
||||
$RPrices = Http::timeout(40)->get('http://109.122.246.48:4949/api/free', [])->json();
|
||||
|
||||
// try{
|
||||
// $cooper =Http::timeout(40)->get('https://www.livedata.ir/main/static/p.json', [])->json();
|
||||
// if(isset($cooper['s_301006']) && isset($cooper['s_200103'])){
|
||||
// $CP = (($cooper['s_301006']/1000000)*$cooper['s_200103'])*10;
|
||||
//// Cnt::where('key', 'cu_price')
|
||||
// }
|
||||
// }catch (\Exception $e){}
|
||||
|
||||
$products = Product::with([])->whereNotNull('reading_method')->get();
|
||||
foreach ($products as $product) {
|
||||
$collection = collect($RPrices);
|
||||
$RPrice = $collection->firstWhere('key', $product->reading_method);
|
||||
if (!empty($RPrice)) {
|
||||
// foreach ($RPrices as $RPrice) {
|
||||
// if ($product->reading_method == $RPrice['name']) {
|
||||
if ($RPrice['name'] == 'TGJU فلز مس') {
|
||||
$copper = $RPrice['price'] + $RPrice['profit'];
|
||||
}
|
||||
if ($RPrice['name'] == 'TGJU دلار') {
|
||||
$dollar = $RPrice['price'] + $RPrice['profit'];
|
||||
}
|
||||
if ($RPrice['name'] == 'گلد دات ای از آبشده - رسمی - نقد فردا') {
|
||||
$RPrice['price'] = $RPrice['price'] / 4.3318;
|
||||
}
|
||||
$p = Product::where('id', $product->id)->update([
|
||||
'price' => $RPrice['price'],
|
||||
'price_profit' => $RPrice['profit'],
|
||||
]);
|
||||
|
||||
if ($product->bubble == 1) {
|
||||
$ReportController = new ReportController();
|
||||
$liquidGold = $ReportController->lastPrice();
|
||||
$p = Product::find($product->id);
|
||||
$p->amount = $RPrice['price'] / $liquidGold['price'];
|
||||
$p->save();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($copper) && isset($dollar)) {
|
||||
$cp = ($copper / 1000000) * $dollar;
|
||||
$p = Product::where('metal_id', 3)->update([
|
||||
'price' => $cp,
|
||||
'price_profit' => 0,
|
||||
'updated_at' => \Carbon\Carbon::now()->format('Y-m-d H:i:s'),
|
||||
]);
|
||||
}
|
||||
$this->syncProductPrices();
|
||||
|
||||
return response()->json(true);
|
||||
}
|
||||
|
||||
private function syncProductPrices(): void
|
||||
{
|
||||
$RPrices = $this->fetchPriceList();
|
||||
|
||||
if (empty($RPrices) || !is_array($RPrices)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$collection = collect($RPrices);
|
||||
|
||||
$products = Product::with([])->whereNotNull('reading_method')->get();
|
||||
|
||||
$copper = null;
|
||||
$dollar = null;
|
||||
|
||||
foreach ($products as $product) {
|
||||
$RPrice = $collection->firstWhere('key', $product->reading_method)
|
||||
?: $collection->firstWhere('name', $product->reading_method);
|
||||
|
||||
if (empty($RPrice)) {
|
||||
continue;
|
||||
}
|
||||
if (!isset($RPrice['price'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (($RPrice['name'] ?? null) === 'TGJU فلز مس') {
|
||||
$copper = ((float)$RPrice['price']) + ((float)($RPrice['profit'] ?? 0));
|
||||
}
|
||||
|
||||
if (($RPrice['name'] ?? null) === 'TGJU دلار') {
|
||||
$dollar = ((float)$RPrice['price']) + ((float)($RPrice['profit'] ?? 0));
|
||||
}
|
||||
|
||||
if (($RPrice['name'] ?? null) === 'گلد دات ای از آبشده - رسمی - نقد فردا') {
|
||||
$RPrice['price'] = ((float)$RPrice['price']) / 4.3318;
|
||||
}
|
||||
|
||||
|
||||
Product::where('id', $product->id)->update([
|
||||
'price' => $RPrice['price'],
|
||||
'price_profit' => $RPrice['profit'] ?? 0,
|
||||
]);
|
||||
|
||||
if ((int)$product->bubble === 1) {
|
||||
$ReportController = new ReportController();
|
||||
$liquidGold = $ReportController->lastPrice();
|
||||
|
||||
if (!empty($liquidGold['price'])) {
|
||||
$p = Product::find($product->id);
|
||||
$p->amount = ((float)$RPrice['price']) / ((float)$liquidGold['price']);
|
||||
$p->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($copper !== null && $dollar !== null) {
|
||||
$cp = ($copper / 1000000) * $dollar;
|
||||
|
||||
Product::where('metal_id', 3)->update([
|
||||
'price' => $cp,
|
||||
'price_profit' => 0,
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
private function fetchPriceList(): array
|
||||
{
|
||||
$urls = [];
|
||||
|
||||
/*
|
||||
* اگر خواستی برای هر پروژه از دیتابیس URL بدی:
|
||||
* product_price_api_url = http://...
|
||||
*/
|
||||
$customUrl = $this->configService->Config('product_price_api_url', null);
|
||||
|
||||
if (!empty($customUrl)) {
|
||||
$urls[] = $customUrl;
|
||||
}
|
||||
|
||||
/*
|
||||
* اگر پروژه از مدل جدید قیمت استفاده میکنه
|
||||
*/
|
||||
if (
|
||||
$this->configService->ConfigBool('tabanGohar_price', false) ||
|
||||
$this->configService->ConfigBool('goldir_price', false)
|
||||
) {
|
||||
$urls[] = 'http://109.122.246.48:4949/api/free';
|
||||
}
|
||||
|
||||
/*
|
||||
* fallback قدیمی
|
||||
*/
|
||||
$urls[] = 'http://212.23.201.173:8381/price_list';
|
||||
|
||||
foreach (array_unique($urls) as $url) {
|
||||
try {
|
||||
$response = Http::timeout(40)->get($url);
|
||||
|
||||
if (!$response->successful()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$json = $response->json();
|
||||
|
||||
if (isset($json['data']) && is_array($json['data'])) {
|
||||
return $json['data'];
|
||||
}
|
||||
|
||||
if (is_array($json) && !empty($json)) {
|
||||
return $json;
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
report($e);
|
||||
}
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public function auto_close_open()
|
||||
{
|
||||
$this->syncAutoCloseOpen();
|
||||
|
||||
return response()->json(true);
|
||||
}
|
||||
|
||||
private function syncAutoCloseOpen(): void
|
||||
{
|
||||
$products = Product::with([])->get();
|
||||
$current_time = now()->format('H:i:s');
|
||||
|
||||
foreach ($products as $product) {
|
||||
if (empty($product->auto_open_at) || empty($product->auto_close_at)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$show = ($current_time >= $product->auto_open_at && $current_time <= $product->auto_close_at);
|
||||
|
||||
Product::where('id', $product->id)->update([
|
||||
'show' => $show,
|
||||
]);
|
||||
}
|
||||
return response()->json(true);
|
||||
}
|
||||
|
||||
public function ProductById($id)
|
||||
{
|
||||
if ($this->shouldUpdatePriceOnList()) {
|
||||
$this->syncProductPrices();
|
||||
}
|
||||
|
||||
if ($this->shouldAutoCloseOpenOnList()) {
|
||||
$this->syncAutoCloseOpen();
|
||||
}
|
||||
|
||||
$product = Product::with(['file'])
|
||||
->where('id', $id)
|
||||
->first();
|
||||
|
||||
if (!$product) {
|
||||
return response()->json(false);
|
||||
}
|
||||
|
||||
$product->similar = Product::with(['file'])
|
||||
->where('group_type', $product->group_type)
|
||||
->where('id', '!=', $id)
|
||||
->get();
|
||||
|
||||
return response()->json($product);
|
||||
}
|
||||
|
||||
|
||||
@@ -267,8 +397,10 @@ class ProductController extends SuperController
|
||||
return response()->json(true);
|
||||
}
|
||||
|
||||
public function updatePrice(Request $request){
|
||||
|
||||
public function updatePrice(Request $request)
|
||||
{
|
||||
$this->syncProductPrices();
|
||||
|
||||
return response()->json(true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user