|
|
@@ -15,17 +15,21 @@ use Carbon\Carbon;
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
+use function Symfony\Component\String\s;
|
|
|
|
|
|
Class CommodityService
|
|
|
{
|
|
|
/** @var CacheService $cacheService */
|
|
|
private $cacheService;
|
|
|
- function __construct(){
|
|
|
- $this->cacheService=app('CacheService');
|
|
|
+
|
|
|
+ function __construct()
|
|
|
+ {
|
|
|
+ $this->cacheService = app('CacheService');
|
|
|
}
|
|
|
|
|
|
- public function firstOrCreate($param,$column = null):Commodity{
|
|
|
- if ($column) return Commodity::query()->firstOrCreate($param,$column);
|
|
|
+ public function firstOrCreate($param, $column = null): Commodity
|
|
|
+ {
|
|
|
+ if ($column) return Commodity::query()->firstOrCreate($param, $column);
|
|
|
return Commodity::query()->firstOrCreate($param);
|
|
|
}
|
|
|
|
|
|
@@ -368,48 +372,50 @@ Class CommodityService
|
|
|
$ownerService = app('OwnerService');
|
|
|
$oracleBasSkuService = app('OracleBasSkuService');
|
|
|
|
|
|
- $commodities_map = (function()use($map){
|
|
|
+ $commodities_map = (function () use ($map) {
|
|
|
$commodities_map = [];
|
|
|
- if(count($map)==0)return $commodities_map;
|
|
|
- Commodity::query()->with("owner")->whereIn('sku',array_unique(data_get($map,'*.sku')))->whereHas('owner',function($query)use($map){
|
|
|
- $query->whereIn('code',array_unique(data_get($map,'*.owner_code')));
|
|
|
- })->get()->each(function($commodity)use(&$commodities_map){
|
|
|
+ if (count($map) == 0) return $commodities_map;
|
|
|
+ Commodity::query()->with("owner")->whereIn('sku', array_unique(data_get($map, '*.sku')))->whereHas('owner', function ($query) use ($map) {
|
|
|
+ $query->whereIn('code', array_unique(data_get($map, '*.owner_code')));
|
|
|
+ })->get()->each(function ($commodity) use (&$commodities_map) {
|
|
|
$commodities_map[json_encode(['owner_code' => $commodity['owner']['code'], 'sku' => $commodity['sku']])] = $commodity;
|
|
|
});
|
|
|
return $commodities_map;
|
|
|
})();
|
|
|
|
|
|
- $owner_codes = (function()use($map){
|
|
|
+ $owner_codes = (function () use ($map) {
|
|
|
$owner_codes = [];
|
|
|
- if(count($map) == 0)return $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){
|
|
|
+ $owner_map = (function () use ($ownerService, $owner_codes) {
|
|
|
$owners = $ownerService->getOwnerByCodes($owner_codes);
|
|
|
$map = [];
|
|
|
- $owners->each(function ($owner)use(&$map){
|
|
|
+ $owners->each(function ($owner) use (&$map) {
|
|
|
$map[$owner['code']] = $owner['id'];
|
|
|
});
|
|
|
return $map;
|
|
|
})();
|
|
|
|
|
|
$collect = collect();
|
|
|
- if(count($map) == 0) return $collect;
|
|
|
- $unexists = [];$sku = [];$owner_code = [];
|
|
|
+ if (count($map) == 0) return $collect;
|
|
|
+ $unexists = [];
|
|
|
+ $sku = [];
|
|
|
+ $owner_code = [];
|
|
|
|
|
|
foreach ($map as $item) {
|
|
|
$owner = Cache::get("owner_code_{$item['owner_code']}_sku_{$item['sku']}");
|
|
|
- if($owner){
|
|
|
+ if ($owner) {
|
|
|
$collect->push($owner);
|
|
|
continue;
|
|
|
}
|
|
|
- $key = json_encode( ['owner_code' => $item['owner_code'], 'sku' => $item['sku']]);
|
|
|
- if(!empty($commodities_map[json_encode($key)])){
|
|
|
- $commodities_map[$key];
|
|
|
+ $key = json_encode(['owner_code' => $item['owner_code'], 'sku' => $item['sku']]);
|
|
|
+ if (!empty($commodities_map[json_encode($key)])) {
|
|
|
+ $commodities_map[$key];
|
|
|
continue;
|
|
|
}
|
|
|
$unexists[json_encode($key)] = true;
|
|
|
@@ -417,26 +423,26 @@ Class CommodityService
|
|
|
$owner_code[] = $item['owner_code'];
|
|
|
}
|
|
|
|
|
|
- if(count($unexists) == 0)return $collect;
|
|
|
- $BasSKUs = $oracleBasSkuService->get( ['SKU'=>$sku,'CustomerID'=>$owner_code]);
|
|
|
- $BasSKUs = $BasSKUs->filter(function($bas_sku)use($unexists,$commodities_map){
|
|
|
+ if (count($unexists) == 0) return $collect;
|
|
|
+ $BasSKUs = $oracleBasSkuService->get(['SKU' => $sku, 'CustomerID' => $owner_code]);
|
|
|
+ $BasSKUs = $BasSKUs->filter(function ($bas_sku) use ($unexists, $commodities_map) {
|
|
|
$arr = [
|
|
|
'owner_code' => $bas_sku['customerid'],
|
|
|
'sku' => $bas_sku['sku']
|
|
|
];
|
|
|
$key = json_encode($arr);
|
|
|
- if(!empty($commodities_map($key)))return false;
|
|
|
+ if (!empty($commodities_map($key))) return false;
|
|
|
return $unexists[json_encode($arr)] ?? false;
|
|
|
});
|
|
|
- $inner_params = (function()use($BasSKUs,$owner_map){
|
|
|
+ $inner_params = (function () use ($BasSKUs, $owner_map) {
|
|
|
$map = [];
|
|
|
$date = Carbon::now();
|
|
|
- $BasSKUs->each(function($basSku)use(&$map,$owner_map,$date){
|
|
|
+ $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,
|
|
|
+ 'name' => $basSku->descr_c,
|
|
|
+ 'length' => $basSku->skulength,
|
|
|
'width' => $basSku->skuwidth,
|
|
|
'height' => $basSku->skuhigh,
|
|
|
'volumn' => $basSku->cube,
|
|
|
@@ -446,71 +452,23 @@ Class CommodityService
|
|
|
});
|
|
|
return $map;
|
|
|
})();
|
|
|
- if(count($inner_params)==0)return $collect;
|
|
|
- foreach (array_chunk($inner_params,4000) as $item) {
|
|
|
+ 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();
|
|
|
+ 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));
|
|
|
+ } 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()));
|
|
|
+ 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;
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- public function pushCommodityToCache()
|
|
|
- {
|
|
|
- $amount = 1000;
|
|
|
- $commodity = Commodity::query()->orderByDesc('id')->first();
|
|
|
- $sum = $commodity->id;
|
|
|
- $number = ceil($sum / $amount);
|
|
|
- for ($i = 0; $i < $number; $i++) {
|
|
|
- if ($i < 41) continue;
|
|
|
- $commodities = $this->getPiece(($i * $amount), $amount);
|
|
|
- if (count($commodities) < 1) continue;
|
|
|
- $this->pushToCache($commodities);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private function getPiece(int $start, int $amount)
|
|
|
- {
|
|
|
- $commodities = Commodity::query()->with(['owner', 'barcodes'])
|
|
|
- ->where('id', '>=', $start)
|
|
|
- ->where('id', '<', ($start + $amount))
|
|
|
- ->get();
|
|
|
- return $commodities;
|
|
|
- }
|
|
|
-
|
|
|
- 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;
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
public function syncCommodityCreated()
|
|
|
{
|
|
|
$created_at = config('sync.commodity_sync.created_at');
|
|
|
@@ -525,7 +483,6 @@ Class CommodityService
|
|
|
$last_records = $basSkus->where('addtime', $last_time);
|
|
|
if (!$basSkus) return;
|
|
|
$addBasSkus = $this->getLastRecordsByRedis($create_set, $create_key, $basSkus);
|
|
|
- //if (count($addBasSkus) > 0) $addBasSkus = $this->filterByCommodityCache($addBasSkus); //从缓存中过滤
|
|
|
if (count($addBasSkus) > 0) {
|
|
|
$this->syncCreateCommodity($addBasSkus);
|
|
|
$this->deleteCacheKey($create_set, $create_keys);
|
|
|
@@ -548,7 +505,6 @@ Class CommodityService
|
|
|
$last_records = $basSkus->where('edittime', $last_time);
|
|
|
if (!$basSkus) return;
|
|
|
$addBasSkus = $this->getLastRecordsByRedis($update_set, $update_key, $basSkus);
|
|
|
- //if (count($addBasSkus) > 0) $addBasSkus = $this->filterByCommodityCache($addBasSkus); //从缓存中过滤
|
|
|
if (count($addBasSkus) > 0) {
|
|
|
$this->syncUpdateCommodity($addBasSkus);
|
|
|
$this->deleteCacheKey($update_set, $update_keys);
|
|
|
@@ -557,23 +513,19 @@ Class CommodityService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // TODO
|
|
|
public function syncCreateCommodity($addBasSkus)
|
|
|
{
|
|
|
if (count($addBasSkus) < 1) return null;
|
|
|
$insert_params = $this->getParamsByBasSkus($addBasSkus);
|
|
|
if (!$insert_params) return;
|
|
|
$this->insertCommodities($insert_params);
|
|
|
- /**
|
|
|
- * @var CommodityBarcodeService $commodityBarcodeService
|
|
|
- */
|
|
|
+ /** @var CommodityBarcodeService $commodityBarcodeService */
|
|
|
$commodityBarcodeService = app(CommodityBarcodeService::class);
|
|
|
$commodityBarcodeService->createBarcodeByWms($addBasSkus);
|
|
|
}
|
|
|
|
|
|
public function insertCommodities($insert_params)
|
|
|
{
|
|
|
-
|
|
|
foreach (array_chunk($insert_params, 1000) as $item) {
|
|
|
try {
|
|
|
$bool = Commodity::query()->insert($item);
|
|
|
@@ -588,7 +540,6 @@ Class CommodityService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // TODO
|
|
|
public function getParamsByBasSkus($addBasSkus)
|
|
|
{
|
|
|
$owner_sku_map = [];
|
|
|
@@ -677,7 +628,6 @@ Class CommodityService
|
|
|
return $inner_params;
|
|
|
}
|
|
|
|
|
|
- // TODO
|
|
|
public function syncUpdateCommodity($addBasSkus)
|
|
|
{
|
|
|
$owner_sku_map = [];
|
|
|
@@ -777,13 +727,22 @@ Class CommodityService
|
|
|
if (count($updateParams) > 0) $this->batchUpdate($updateParams);
|
|
|
$commodities = Commodity::query()->with('owner')->whereIn('owner_id', data_get($updateParams, '*.owner_id'))->whereIn('sku', data_get($updateParams, '*.sku'))->get();
|
|
|
$this->pushToCache($commodities);
|
|
|
- /**
|
|
|
- * @var CommodityBarcodeService $commodityBarcodeService
|
|
|
- */
|
|
|
+ /** @var CommodityBarcodeService $commodityBarcodeService */
|
|
|
$commodityBarcodeService = app(CommodityBarcodeService::class);
|
|
|
$commodityBarcodeService->updateBarcodeByWms($addBasSkus);
|
|
|
}
|
|
|
|
|
|
+ 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;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public function getAsnLastSyncAt($key, $type)
|
|
|
{
|
|
|
$last_time = ValueStore::query()->where('name', $key)->value('value');
|
|
|
@@ -846,37 +805,45 @@ Class CommodityService
|
|
|
Cache::put($set, true);
|
|
|
}
|
|
|
|
|
|
- public function filterByCommodityCache($basSkus)
|
|
|
- {
|
|
|
- if (count($basSkus) < 1) return null;
|
|
|
- $addBasSkus = collect();
|
|
|
- foreach ($basSkus as $basSku) {
|
|
|
- if (Cache::get("owner_code_{$basSku['customerid']}_sku_{$basSku['sku']}")) continue;
|
|
|
- $addBasSkus->add($basSku);
|
|
|
- }
|
|
|
- return $addBasSkus;
|
|
|
- }
|
|
|
-
|
|
|
-// function get_($paginate = 100, $page = 1, $ownerIds, $skus, $barcodes)
|
|
|
-// {
|
|
|
- //$paginate小于100,或取余数100不为0,异常 //取余函数fmod()
|
|
|
-// for (; $page <= $paginate / 100; $page++) {
|
|
|
-// switch () {
|
|
|
-// case 只有货主条件:
|
|
|
-// sort($ownerIds);
|
|
|
-// $md5 = md5(json_encode([$ownerIds, $paginate, $page]));
|
|
|
-// return Cache::remember('commodity_' . $md5)
|
|
|
-// case 有SKU:
|
|
|
-// $md5 = md5(json_encode([$skus, $paginate, $page]));
|
|
|
+ function update(){
|
|
|
+ //Cache
|
|
|
+ //Commodity
|
|
|
+ }
|
|
|
+ function updateMany(){
|
|
|
+ //Cache
|
|
|
+ //Commodity
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_($ownerIds = null, $skus = null, $barcodes = null,$paginate = 100, $page = 1,$isSyncWms = false)
|
|
|
+ {
|
|
|
+ if ($paginate < 100 || fmod($paginate, 100) != 0) return null; //$paginate小于100,或取余数100不为0,异常 //取余函数fmod()
|
|
|
+ $status = null;
|
|
|
+ if ($ownerIds && !$skus && !$barcodes) $status = '只有货主条件';
|
|
|
+ if ($skus) $status = '有SKU';
|
|
|
+ if ($barcodes && !$skus) $status = '有条码没SKU';
|
|
|
+ if (!$status)return null;
|
|
|
+ for (; $page <= $paginate / 100; $page++) {
|
|
|
+ switch ($status) {
|
|
|
+ case $status = '只有货主条件':
|
|
|
+ sort($ownerIds);
|
|
|
+ $md5 = md5(json_encode([$ownerIds, $paginate, $page]));
|
|
|
+// Cache::get('commodity_ownerId_'.$ownerId);
|
|
|
+ Cache::put('commodity_ownerIds_');
|
|
|
+ return Cache::remember('commodity_' . $md5,config('cache.expirations.forever'),function ()use($ownerIds,$paginate,$page){
|
|
|
+ return Commodity::query()->with('barcodes')->whereIn('owner_id',$ownerIds)->paginate($paginate,'[*]','page',$page);
|
|
|
+ });
|
|
|
+ case $status = '有SKU':
|
|
|
+ sort($skus);
|
|
|
+ $md5 = md5(json_encode([$skus]));
|
|
|
// return Cache::remember('commodity_' . $md5, 'time', function () {
|
|
|
// 在取出的记录用 $ownerIds和$barcodes筛选
|
|
|
// })
|
|
|
-// case 有条码没SKU:
|
|
|
-// $md5 = md5(json_encode([$barcodes, $paginate, $page]));
|
|
|
+ case $status = '有条码没SKU':
|
|
|
+ $md5 = md5(json_encode([$barcodes]));
|
|
|
// return Cache::remember('commodity_' . $md5, 'time', function () {
|
|
|
// 在取出的记录用 $ownerIds
|
|
|
// })
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|