Browse Source

自动上架使用队列,并移到Product model里面执行

master
李可松 4 years ago
parent
commit
f90cacdd01
  1. 5
      app/Jobs/AgentProductShelve.php
  2. 74
      app/Jobs/ProductSaved.php
  3. 18
      app/Models/Product.php
  4. 60
      app/Providers/ProductServiceProvider.php
  5. 1
      config/app.php

5
app/Jobs/AgentProductShelve.php

@ -120,15 +120,14 @@ class AgentProductShelve implements ShouldQueue
$agentProduct->spec()->createMany($agentSpecArr); $agentProduct->spec()->createMany($agentSpecArr);
} }
DB::commit(); DB::commit();
Log::info($agent_id . "自动上架{$product->id}成功!");
if(env('SMS_SWITCH','') == true) { if(env('SMS_SWITCH','') == true) {
$phone = Agent::query()->where('id',$agent_id)->value('contact_mobile'); $phone = Agent::query()->where('id',$agent_id)->value('contact_mobile');
(new SmsService)->send('auto_shelves',[$product->supplier->name,now(),SmsTraits::$systeaNameText['agent']],[$phone]); (new SmsService)->send('auto_shelves',[$product->supplier->name,now(),SmsTraits::$systeaNameText['agent']],[$phone]);
} }
} catch (\Exception $e) { } catch (\Exception $e) {
DB::rollBack(); DB::rollBack();
Log::error('自动上架失败::' . $e->getTraceAsString());
throw new \Exception('自动上架失败::' . $e->getTraceAsString());
Log::error('自动上架失败::' . $e->getMessage());
throw new \Exception('自动上架失败::' . $e->getMessage());
} }
} }
} }

74
app/Jobs/ProductSaved.php

@ -0,0 +1,74 @@
<?php
namespace App\Jobs;
use App\Common\AgentType;
use App\Common\UserStatus;
use App\Models\Agent;
use App\Models\AgentProduct;
use App\Models\Product;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProductSaved 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(protected Product $product)
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$product = $this->product;
/** 同步信息到代理商产品 START */
AgentProduct::query()
->where(['type' => 0, 'product_id' => $product->id])
->update([
'title' => $product->title,
'know' => $product->know,
'content' => $product->content,
'pictures' => $product->pictures,
]);
/** 同步信息到代理商产品 END */
/** 自动上架 START */
Agent::query()->where([
['id', '>', 1], //1是总管理员,不处理
['type', '<>', AgentType::OPERATOR],
['status', '=', UserStatus::NORMAL]
])->select(['id'])->chunk(100, function ($agents) use ($product) {
foreach ($agents as $agent) {
AgentProductShelve::dispatch($agent['id'], $product->id);
}
});
/** 自动上架 END */
}
}

18
app/Models/Product.php

@ -2,6 +2,8 @@
namespace App\Models; namespace App\Models;
use App\Common\ProductStatus;
use App\Jobs\ProductSaved;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
@ -17,7 +19,21 @@ class Product extends BaseModel
protected $guarded = ['id']; //不允许编辑的字段 protected $guarded = ['id']; //不允许编辑的字段
protected $casts = ['extends' => 'json']; protected $casts = ['extends' => 'json'];
// 获取所有产品图片
/**
* 模型的 "booted" 方法
* @return void
*/
protected static function booted()
{
parent::booted();
static::saved(function ($product) {
if ($product->isDirty('status') && $product->status == ProductStatus::ON_SALE) {
ProductSaved::dispatch($product);
}
});
}
// 获取所有产品图片
public function getPicturesAttribute($value): array public function getPicturesAttribute($value): array
{ {
if (is_string($value)) { if (is_string($value)) {

60
app/Providers/ProductServiceProvider.php

@ -1,60 +0,0 @@
<?php
namespace App\Providers;
use App\Common\AgentType;
use App\Common\ProductStatus;
use App\Common\UserStatus;
use App\Jobs\AgentProductShelve;
use App\Models\AgentProduct;
use App\Models\Agent;
use App\Models\Product;
use Illuminate\Support\ServiceProvider;
class ProductServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Product::saved(function ($product) {
if ($product->isDirty('status') && $product->status == ProductStatus::ON_SALE) {
/** 同步信息到代理商产品 START */
AgentProduct::query()
->where(['type' => 0, 'product_id' => $product->id])
->update([
'title' => $product->title,
'know' => $product->know,
'content' => $product->content,
'pictures' => $product->pictures,
]);
/** 同步信息到代理商产品 END */
/** 自动上架 START */
Agent::query()->where([
['id', '>', 1], //1是总管理员,不处理
['type', '<>', AgentType::OPERATOR],
['status', '=', UserStatus::NORMAL]
])->select(['id'])->chunk(100, function ($agents) use ($product) {
foreach ($agents as $agent) {
AgentProductShelve::dispatch($agent['id'], $product->id);
}
});
/** 自动上架 END */
}
});
}
}

1
config/app.php

@ -175,7 +175,6 @@ return [
App\Providers\EventServiceProvider::class, App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class, App\Providers\RouteServiceProvider::class,
App\Providers\DemandBiddingServiceProvider::class, App\Providers\DemandBiddingServiceProvider::class,
App\Providers\ProductServiceProvider::class,
], ],
/* /*

Loading…
Cancel
Save