|
|
@@ -345,36 +345,92 @@ Class CommodityService
|
|
|
{
|
|
|
/** @var OwnerService $ownerService */
|
|
|
$ownerService = app('OwnerService');
|
|
|
- $owner_codes = [];
|
|
|
- foreach ($map as $item) {
|
|
|
- $owner_codes[$item['owner_code']] = $item['owner_code'];
|
|
|
- }
|
|
|
- $owners = $ownerService->getOwnerByCodes($owner_codes);
|
|
|
- $owner_map = [];
|
|
|
- $owners->each(function ($owner)use(&$owner_map){
|
|
|
- $owner_map[$owner['code']] = $owner;
|
|
|
- });
|
|
|
+
|
|
|
+ $owner_codes = (function()use($map){
|
|
|
+ $owner_codes = [];
|
|
|
+ if(count($map) == 0)return $owner_codes;
|
|
|
+ foreach ($map as $item) {
|
|
|
+ $owner_codes[$item['owner_code']] = $item['owner_code'];
|
|
|
+ }
|
|
|
+ return $owner_codes;
|
|
|
+ })();
|
|
|
+
|
|
|
+ $owner_map = (function()use($ownerService,$owner_codes){
|
|
|
+ $owners = $ownerService->getOwnerByCodes($owner_codes);
|
|
|
+ $map = [];
|
|
|
+ $owners->each(function ($owner)use(&$map){
|
|
|
+ $map[$owner['code']] = $owner['id'];
|
|
|
+ });
|
|
|
+ return $map;
|
|
|
+ })();
|
|
|
+
|
|
|
$collect = collect();
|
|
|
if(count($map) == 0) return $collect;
|
|
|
- $date = Carbon::now();
|
|
|
+ $unexists = [];$sku = [];$owner_code = [];
|
|
|
foreach ($map as $item) {
|
|
|
- $collect->push(Cache::remember("owner_code_{$item['owner_code']}_sku_{$item['sku']}", null, function()use($item,$owner_map,$date){
|
|
|
- $owner = $owner_map[$item['owner_code']];
|
|
|
- $commodity = Commodity::query()->where('owner_id',$owner['id'])->where('sku',$item['sku'])->first();
|
|
|
- if($commodity)return $commodity;
|
|
|
- $basSku = OracleBasSKU::query()->where('SKU',$item['sku'])->where('CustomerID',$item['owner_code'])->first();
|
|
|
- return Commodity::query()->create([
|
|
|
- 'owner_id' => $owner['id'],
|
|
|
- 'sku' => $basSku['sku'],
|
|
|
- 'name' =>$basSku['descr_c'],
|
|
|
+ $owner = Cache::get("owner_code_{$item['owner_code']}_sku_{$item['sku']}");
|
|
|
+ if($owner)$collect->push($owner);
|
|
|
+ $items = [
|
|
|
+ 'owner_code' => $item['owner_code'],
|
|
|
+ 'sku' => $item['sku']
|
|
|
+ ];
|
|
|
+ $unexists[json_encode($items)] = true;
|
|
|
+ $sku[] = $item['sku'];
|
|
|
+ $owner_code[] = $item['owner_code'];
|
|
|
+ }
|
|
|
+ if(count($unexists) == 0)return $collect;
|
|
|
+ $BasSKUs = OracleBasSKU::query()->whereIn('SKU',$sku)->whereIn('CustomerID',$owner_code)->get();
|
|
|
+ $BasSKUs = $BasSKUs->filter(function($bas_sku)use($unexists){
|
|
|
+ $arr = [
|
|
|
+ 'owner_code' => $bas_sku['customerid'],
|
|
|
+ 'sku' => $bas_sku['sku']
|
|
|
+ ];
|
|
|
+ return $unexists[json_encode($arr)] ?? false;
|
|
|
+ });
|
|
|
+ $inner_params = (function()use($BasSKUs,$owner_map){
|
|
|
+ $map = [];
|
|
|
+ $date = Carbon::now();
|
|
|
+ $BasSKUs->each(function($basSku)use(&$map,$owner_map,$date){
|
|
|
+ $map[] = [
|
|
|
+ 'owner_id' => $owner_map[$basSku['customerid']] ?? '',
|
|
|
+ 'sku' => $basSku->sku,
|
|
|
+ 'name' =>$basSku->descr_c,
|
|
|
+ 'length' =>$basSku->skulength,
|
|
|
+ 'width' => $basSku->skuwidth,
|
|
|
+ 'height' => $basSku->skuhigh,
|
|
|
+ 'volumn' => $basSku->cube,
|
|
|
'created_at' => $date,
|
|
|
'updated_at' => $date,
|
|
|
- 'length' => $basSku['skulength'],
|
|
|
- 'width' => $basSku['skuwidth'],
|
|
|
- 'height' => $basSku['skuhigh'],
|
|
|
- 'volumn' => $basSku['cube']]);
|
|
|
- }));
|
|
|
+ ];
|
|
|
+ });
|
|
|
+ return $map;
|
|
|
+ })();
|
|
|
+ if(count($inner_params)==0)return $collect;
|
|
|
+ foreach (array_chunk($inner_params,4000) as $item) {
|
|
|
+ try {
|
|
|
+ $bool = Commodity::query()->insert($item);
|
|
|
+ if($bool){
|
|
|
+ app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity Success ".count($inner_params).' || '.json_encode($inner_params));
|
|
|
+ $commodities = Commodity::query()->with('owner')->whereIn('owner_id',data_get($item,'*.owner_id'))->whereIn('sku',data_get($item,'*.sku'))->get();
|
|
|
+ $this->pushToCache($commodities);
|
|
|
+ $collect = $collect->concat($commodities);
|
|
|
+ }
|
|
|
+ else app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity FAILED ".' || '.json_encode($inner_params));
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ app('LogService')->log(__METHOD__,__FUNCTION__,"批量添加 Commodity ERROR ".' || '.json_encode($inner_params).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
|
|
|
+ }
|
|
|
}
|
|
|
return $collect;
|
|
|
}
|
|
|
+
|
|
|
+ private function pushToCache($commodities)
|
|
|
+ {
|
|
|
+ if (count($commodities) < 1) return null;
|
|
|
+ foreach ($commodities as $commodity) {
|
|
|
+ $commodity_key = "owner_code_{$commodity['owner']['code']}_sku_{$commodity['sku']}";
|
|
|
+ Cache::remember($commodity_key, config('cache.expirations.forever'), function () use ($commodity) {
|
|
|
+ return $commodity;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|