| 
						 | 
						<?php
namespace App\Providers;
use App\Common\AgentType;use App\Common\ProductStatus;use App\Models\AgentProduct;use App\Models\AgentProductItem;use App\Models\AgentProductSpec;use App\Models\AgentSetting;use App\Models\Category;use App\Models\Agent;use App\Models\Product;use App\Models\ProductSpec;use App\Service\SmsService;use App\Traits\SmsTraits;use Illuminate\Database\Eloquent\Model;use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Log;use Illuminate\Support\ServiceProvider;
class ProductServiceProvider extends ServiceProvider{	/**	 * Register services.	 *	 * @return void	 */	public function register()	{		//
	}
	/**	 * Bootstrap services.	 *	 * @return void	 */	public function boot()	{		Product::updated(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 */				$agentIds = AgentProductItem::query()					->withoutGlobalScope('orderById')					->where('supplier_id', $product->supplier_id)					->whereHas('agent',function($query) {						$query->where('type','!=',AgentType::OPERATOR);					})					->distinct()					->pluck('agent_id');				foreach ($agentIds as $v) {					//如果没开启自动上架 滚蛋
					if (empty(AgentSetting::val($v, 'auto_shelves'))) {						continue;					}					//如果已经有这个产品 滚蛋
					if(AgentProductItem::query()->where(['product_id' => $product->id,'agent_id' => $v])->exists()){						continue;					}					//啥有没有 自动添加商品
					DB::beginTransaction();					try {						$agentProduct = new AgentProduct();						$agentProduct->title = $product->title;						$agentProduct->agent_id = $v;						$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;						//计算价格
						// $profit = AgentSetting::val($v, 'profit') ?? 0;
						// $price = bcmul($product->price, bcdiv($profit + 100, 100, 6), 6);
						$agentProduct->price = $product->price;						$agentProduct->original_price = $product->original_price;
						//自动添加分类
						$autoCategory = AgentSetting::val($v, 'auto_category') ?? 0;
						if (!empty($autoCategory)) {							$categoryName = Category::query()->where('id', $product->category_id)->value('name');							$category = Category::query()->firstOrCreate(['agent_id' => $v, 'name' => $categoryName]);							$agentProduct->category_id = $category->id;						}
						$agentProduct->save();
						//维护关联表
						$agentProductItem = AgentProductItem::query()->create([							'agent_id' => $v,							'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();						if(env('SMS_SWITCH','') == true) {							$phone = Agent::query()->where('id',$v)->value('contact_mobile');							(new SmsService)->send('auto_shelves',[$product->supplier->name,now(),SmsTraits::$systeaNameText['agent']],[$phone]);						}					} catch (\Exception $e) {						Log::error('自动上架失败::' . $e->getTraceAsString());						DB::rollBack();						throw new \Exception('自动上架失败::' . $e->getTraceAsString());					}				}				/** 自动上架 END */			}
		});	}}
  |