3 changed files with 103 additions and 54 deletions
			
			
		- 
					54app/AdminSupplier/Controllers/ProductController.php
 - 
					102app/Providers/ProductServiceProvider.php
 - 
					1config/app.php
 
@ -0,0 +1,102 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\Providers; | 
				
			|||
 | 
				
			|||
use App\Common\ProductStatus; | 
				
			|||
use App\Models\AgentProduct; | 
				
			|||
use App\Models\AgentProductItem; | 
				
			|||
use App\Models\AgentSetting; | 
				
			|||
use App\Models\Category; | 
				
			|||
use App\Models\Product; | 
				
			|||
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) { | 
				
			|||
				//自动上架
 | 
				
			|||
 | 
				
			|||
				$agentIds = AgentProductItem::query() | 
				
			|||
					->withoutGlobalScope('orderById') | 
				
			|||
					->where('supplier_id', $product->supplier_id) | 
				
			|||
					->distinct() | 
				
			|||
					->pluck('agent_id'); | 
				
			|||
				foreach ($agentIds as $v) { | 
				
			|||
					//如果没开启自动上架 滚蛋
 | 
				
			|||
					if (empty(AgentSetting::val($v, 'auto_shelves'))) { | 
				
			|||
						continue; | 
				
			|||
					} | 
				
			|||
					//如果已经有这个产品 滚蛋
 | 
				
			|||
					if(AgentProductItem::query()->where(['product_id' => $product->supplier_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), 2); | 
				
			|||
 | 
				
			|||
						$agentProduct->price = $price; | 
				
			|||
						$agentProduct->original_price = $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, | 
				
			|||
						]); | 
				
			|||
						DB::commit(); | 
				
			|||
					} catch (\Exception $e) { | 
				
			|||
						Log::error('自动上架失败::' . $e->getTraceAsString()); | 
				
			|||
						DB::rollBack(); | 
				
			|||
						return $product->response->error('自动上架失败,稍后重试或联系管理员!' . $e->getMessage()); | 
				
			|||
					} | 
				
			|||
				} | 
				
			|||
			} | 
				
			|||
 | 
				
			|||
		}); | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue