cacheService=app('CacheService'); } public function firstOrCreate(array $params, array $values = null) { if ($values) return Warehouse::query()->firstOrCreate($params, $values); return Warehouse::query()->firstOrCreate($params); } public function getByWmsOrders($orderHeaders) { $wareHouse_Ids=array_diff(array_unique(data_get($orderHeaders,'*.warehouseid')),['',' ','*',null]); $wareHouses=Warehouse::query()->whereIn('code',$wareHouse_Ids)->get(); if(count($wareHouse_Ids)>$wareHouses->count()){ $需要添加_仓库编码=[]; foreach ($wareHouse_Ids as $warehouse_id) { if($wareHouses->where('code')->count()==0){ $需要添加_仓库编码[]=$warehouse_id; } } $create_wareHouse=$this->syncWmsWareHouse($需要添加_仓库编码); $wareHouses = $wareHouses->concat($create_wareHouse ?? []); } return $wareHouses; } public function syncWmsWareHouse($warehouse_ids) { $collet = new Collection(); if(!$warehouse_ids)return null; /** @var Collection $oracleBasCustomers */ $oracleBasCustomers=app(OracleBasCustomerService::class)->getWareHouse($warehouse_ids); $warehouses=Warehouse::query()->whereIn('code',data_get($oracleBasCustomers,'*.customerid'))->get(); $oracleBasCustomers=$oracleBasCustomers->filter(function($oracleBasCustomer)use($warehouses){ return $warehouses->where('code',$oracleBasCustomer->warehouseid)->count()==0; }); foreach ($oracleBasCustomers as $oracleBasCustomer){ $params =[ 'code' => $oracleBasCustomer->customerid, 'name' => $oracleBasCustomer->descr_c ]; try { $wereHouse = Warehouse::query()->create($params); $collet->push($wereHouse); app('LogService')->log(__METHOD__,__FUNCTION__,'创建 warehouse success'.json_encode($wereHouse)); } catch (\Exception $e) { app('LogService')->log(__METHOD__,__FUNCTION__,'创建 warehouse error'.json_encode($params).json_encode($e->getMessage())); } } return $collet; } public function getByWms($asnHerders) { $warehouseids = array_unique(data_get($asnHerders, '*.warehouseid')); $warehouseids = array_diff($warehouseids, [null, '', '*']); $warehouses = Warehouse::query()->whereIn('code', $warehouseids)->get(); if ($warehouses->count() < count($warehouseids)) { $warehouseids = array_diff($warehouseids, data_get($warehouses, '*.code')); $warehouse_list = $this->createWarehouseByWms($warehouseids); $warehouses=$warehouses->concat($warehouse_list); } return $warehouses; } public function createWarehouseByWms($codes) { if(!$codes) {return [];} $insert_params = []; $created_at = Carbon::now()->format('Y-m-d H:i:s'); foreach ($codes as $item) { $insert_params[] = [ 'code' => $item, 'name' => $item, 'created_at' => $created_at, ]; } try { if (count($insert_params) > 0) { $this->insert($insert_params); LogService::log(__METHOD__, __FUNCTION__, '批量创建 warehouse success' . count($insert_params) . json_encode($insert_params) ); } } catch (\Exception $e) { LogService::log(__METHOD__, __FUNCTION__, '批量创建 warehouse error' . json_encode($insert_params) . '||' . $e->getMessage() . '||' . $e->getTraceAsString()); } finally { return Warehouse::query()->whereIn('code', $codes)->get(); } } public function insert($fillables){ return Warehouse::query()->insert($fillables); } public function getWareHouseByCodes($codes) { $collect = collect(); if(count($codes)==0)return $collect; foreach ($codes as $code) { $collect->push($this->getWareHouseByCode($code)); } return $collect; } public function getWareHouseByCode($code){ return Cache::remember("WareHouse_{$code}",config('database.cache.expirations.forever'),function()use($code){ $wareHouse = Warehouse::query()->where('code',$code)->first(); if($wareHouse)return $wareHouse; $bas_customer = app('OracleBasCustomerService')->first(['CustomerId'=>$code,'Customer_Type'=>'WH']); if(!$bas_customer) return null; return Warehouse::query()->create(['name'=>$bas_customer['descr_c'],'code'=>$bas_customer['customerid']]); }); } }