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