2 changed files with 137 additions and 83 deletions
@ -0,0 +1,134 @@ |
|||
<?php |
|||
|
|||
namespace App\Jobs; |
|||
|
|||
use App\Models\Agent; |
|||
use App\Models\AgentProduct; |
|||
use App\Models\AgentProductItem; |
|||
use App\Models\AgentSetting; |
|||
use App\Models\Category; |
|||
use App\Models\Product; |
|||
use App\Models\ProductSpec; |
|||
use App\Service\SmsService; |
|||
use App\Traits\SmsTraits; |
|||
use Illuminate\Bus\Queueable; |
|||
use Illuminate\Contracts\Queue\ShouldQueue; |
|||
use Illuminate\Foundation\Bus\Dispatchable; |
|||
use Illuminate\Queue\InteractsWithQueue; |
|||
use Illuminate\Queue\SerializesModels; |
|||
use Illuminate\Support\Facades\DB; |
|||
use Illuminate\Support\Facades\Log; |
|||
|
|||
/** |
|||
* 代理商产品自动上架 |
|||
*/ |
|||
class AgentProductShelve implements ShouldQueue |
|||
{ |
|||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; |
|||
|
|||
/** |
|||
* 任务可尝试的次数 |
|||
* @var int |
|||
*/ |
|||
public $tries = 3; |
|||
|
|||
/** |
|||
* 任务失败前允许的最大异常数 |
|||
* @var int |
|||
*/ |
|||
public $maxExceptions = 3; |
|||
|
|||
/** |
|||
* Create a new job instance. |
|||
* |
|||
* @return void |
|||
*/ |
|||
public function __construct(private int $agent_id, private Product $product_id) |
|||
{ |
|||
//
|
|||
} |
|||
|
|||
/** |
|||
* Execute the job. |
|||
* |
|||
* @return void |
|||
*/ |
|||
public function handle() |
|||
{ |
|||
$agent_id = $this->agent_id; |
|||
$product = Product::find($this->product_id); |
|||
|
|||
//如果没开启自动上架 滚蛋
|
|||
if (empty(AgentSetting::val($agent_id, 'auto_shelves'))) { |
|||
return; |
|||
} |
|||
|
|||
//如果已经有这个产品 滚蛋
|
|||
if(AgentProductItem::query()->where(['product_id' => $product->id,'agent_id' => $agent_id])->exists()) { |
|||
return; |
|||
} |
|||
|
|||
//啥有没有 自动添加商品
|
|||
DB::beginTransaction(); |
|||
try { |
|||
$agentProduct = new AgentProduct(); |
|||
$agentProduct->title = $product->title; |
|||
$agentProduct->agent_id = $agent_id; |
|||
$agentProduct->product_id = $product->id; |
|||
$agentProduct->product_ids = $product->id; |
|||
$agentProduct->stock = $product->stock; |
|||
$agentProduct->status = 1; |
|||
$agentProduct->pictures = $product->pictures; |
|||
$agentProduct->content = $product->content; |
|||
$agentProduct->know = $product->know; |
|||
$agentProduct->price = $product->price; |
|||
$agentProduct->original_price = $product->original_price; |
|||
|
|||
//自动添加分类
|
|||
$autoCategory = AgentSetting::val($agent_id, 'auto_category') ?? 0; |
|||
|
|||
if (!empty($autoCategory)) { |
|||
$categoryName = Category::query()->where('id', $product->category_id)->value('name'); |
|||
$category = Category::query()->firstOrCreate(['agent_id' => $agent_id, 'name' => $categoryName]); |
|||
$agentProduct->category_id = $category->id; |
|||
} |
|||
|
|||
$agentProduct->save(); |
|||
|
|||
//维护关联表
|
|||
AgentProductItem::query()->create([ |
|||
'agent_id' => $agent_id, |
|||
'supplier_id' => $product->supplier_id, |
|||
'agent_product_id' => $agentProduct->id, |
|||
'product_id' => $product->id, |
|||
]); |
|||
|
|||
//规格
|
|||
$productSpec = ProductSpec::query()->where('product_id',$product->id)->get(); |
|||
if (!empty($productSpec)) { |
|||
$agentSpecArr = []; |
|||
foreach ($productSpec as $spec) { |
|||
$agentSpecArr[] = [ |
|||
'agent_product_id' => $agentProduct->id, |
|||
'product_spec_id' => $spec->id, |
|||
'stock' => $spec->stock, |
|||
'original_price' => $spec->original_price, |
|||
'price' => $spec->price, |
|||
]; |
|||
} |
|||
|
|||
$agentProduct->spec()->createMany($agentSpecArr); |
|||
} |
|||
DB::commit(); |
|||
Log::info($agent_id . "自动上架{$product->id}成功!"); |
|||
if(env('SMS_SWITCH','') == true) { |
|||
$phone = Agent::query()->where('id',$agent_id)->value('contact_mobile'); |
|||
(new SmsService)->send('auto_shelves',[$product->supplier->name,now(),SmsTraits::$systeaNameText['agent']],[$phone]); |
|||
} |
|||
} catch (\Exception $e) { |
|||
DB::rollBack(); |
|||
Log::error('自动上架失败::' . $e->getTraceAsString()); |
|||
throw new \Exception('自动上架失败::' . $e->getTraceAsString()); |
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue