You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							132 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							132 lines
						
					
					
						
							3.9 KiB
						
					
					
				
								<?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) {
							 | 
						|
												//自动上架
							 | 
						|
								
							 | 
						|
												$agentIds = AgentProductItem::query()
							 | 
						|
													->withoutGlobalScope('orderById')
							 | 
						|
													->where('supplier_id', $product->supplier_id)
							 | 
						|
													->whereHas('agent',function($query) {
							 | 
						|
														$query->where('type','!=',AgentType::CLUSTER);
							 | 
						|
													})
							 | 
						|
													->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_phone');
							 | 
						|
															(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());
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
										});
							 | 
						|
									}
							 | 
						|
								}
							 |