|
|
@@ -8,6 +8,7 @@ use App\CommodityBarcode;
|
|
|
use App\OracleBasSKU;
|
|
|
use App\Owner;
|
|
|
use App\Services\common\BatchUpdateService;
|
|
|
+use App\Services\common\DataHandlerService;
|
|
|
use App\ValueStore;
|
|
|
use Carbon\Carbon;
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
@@ -396,57 +397,244 @@ Class CommodityService
|
|
|
$oracleBasSkuService = app(OracleBasSkuService::class);
|
|
|
$last_time = $this->getAsnLastSyncAt($created_at, 'create');
|
|
|
$basSkus = $oracleBasSkuService->getWmsCreatedCommodities($last_time);
|
|
|
- $last_time=$basSkus->first()['addtime'];
|
|
|
+ $last_time = $basSkus->first()['addtime'];
|
|
|
$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) $addBasSkus = $this->filterByCommodityCache($addBasSkus); //从缓存中过滤
|
|
|
if (count($addBasSkus) > 0) {
|
|
|
$this->syncCreateCommodity($addBasSkus);
|
|
|
$this->deleteCacheKey($create_set, $create_keys);
|
|
|
- $this->setLastRecordsByRedis($create_key,$create_set,$create_keys,$last_records);
|
|
|
- $this->setAsnLastSyncAt($created_at,$last_time);
|
|
|
+ $this->setLastRecordsByRedis($create_key, $create_set, $create_keys, $last_records);
|
|
|
+ $this->setAsnLastSyncAt($created_at, $last_time);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public function syncCommodityUpdated()
|
|
|
{
|
|
|
-
|
|
|
+ $updated_at = config('sync.commodity_sync.updated_at');
|
|
|
+ $update_set = config('sync.commodity_sync.cache_prefix.update_set');
|
|
|
+ $update_keys = config('sync.commodity_sync.cache_prefix.update_keys');
|
|
|
+ $update_key = config('sync.commodity_sync.cache_prefix.update');
|
|
|
+ /** @var OracleBasSkuService $oracleBasSkuService */
|
|
|
+ $oracleBasSkuService = app(OracleBasSkuService::class);
|
|
|
+ $last_time = $this->getAsnLastSyncAt($updated_at, 'update');
|
|
|
+ $basSkus = $oracleBasSkuService->getWmsUpdatedCommodities($last_time);
|
|
|
+ $last_time = $basSkus->first()['edittime'];
|
|
|
+ $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->syncCreateCommodity($addBasSkus);
|
|
|
+ $this->syncUpdateCommodity($addBasSkus);
|
|
|
+ $this->deleteCacheKey($update_set, $update_keys);
|
|
|
+ $this->setLastRecordsByRedis($update_key, $update_set, $update_keys, $last_records);
|
|
|
+ $this->setAsnLastSyncAt($updated_at, $last_time);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
// TODO
|
|
|
public function syncCreateCommodity($addBasSkus)
|
|
|
{
|
|
|
- $owner_codes = array_diff(array_unique(data_get($addBasSkus, '*.customerid')), ['', '*', null]);
|
|
|
- if (count($owner_codes)<1) return null;
|
|
|
- $owners = Owner::query()->whereIn('code', $owner_codes)->get();
|
|
|
- $owners_code_map = [];
|
|
|
- foreach ($owners as $owner) {
|
|
|
- $owners_code_map[$owner->code] = $owner;
|
|
|
+ if (count($addBasSkus) < 1) return null;
|
|
|
+ $insert_params = $this->getParamsByOwnerSkuMap($addBasSkus);
|
|
|
+ foreach (array_chunk($insert_params, 1000) as $item) {
|
|
|
+ try {
|
|
|
+ $bool = Commodity::query()->insert($item);
|
|
|
+ if ($bool) {
|
|
|
+ app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity Success " . count($insert_params) . ' || ' . json_encode($insert_params));
|
|
|
+ $commodities = Commodity::query()->with('owner')->whereIn('owner_id', data_get($item, '*.owner_id'))->whereIn('sku', data_get($item, '*.sku'))->get();
|
|
|
+ $this->pushToCache($commodities);
|
|
|
+ } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity FAILED " . ' || ' . json_encode($insert_params));
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity ERROR " . ' || ' . json_encode($insert_params) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
|
|
|
+ }
|
|
|
}
|
|
|
+ //同步商品条码
|
|
|
+// /**
|
|
|
+// * @var CommodityBarcodeService $commodityBarcodeService
|
|
|
+// */
|
|
|
+// $commodityBarcodeService = app(CommodityBarcodeService::class);
|
|
|
+// $commodityBarcodeService->createBarcodeByWms($addBasSkus);
|
|
|
}
|
|
|
+
|
|
|
// TODO
|
|
|
- public function getParamsByBasSku($addBasSkus, $owners_code_map)
|
|
|
- {
|
|
|
- $params = [];
|
|
|
- $commodities = Commodity::query()->with(['owner' => function ($query) use ($addBasSkus) {
|
|
|
- return $query->whereIn('code', data_get($addBasSkus, '*.customerid'));
|
|
|
- }])
|
|
|
- ->whereIn('sku', data_get($addBasSkus, '*.sku'))
|
|
|
+ public function getParamsByOwnerSkuMap($addBasSkus)
|
|
|
+ {
|
|
|
+ $owner_sku_map = [];
|
|
|
+ $sku = [];
|
|
|
+ $owner_code = [];
|
|
|
+ $addBasSkus->each(function ($addBasSku) use (&$owner_sku_map, &$sku, &$owner_code) {
|
|
|
+ if (!empty($addBasSku['customerid']) && !empty($addBasSku['sku'])) {
|
|
|
+ $key = "owner_code_{$addBasSku['customerid']}_sku_{$addBasSku['sku']}";
|
|
|
+ $owner_sku_map[$key] = ['owner_code' => $addBasSku['customerid'], 'sku' => $addBasSku['sku']];
|
|
|
+ $sku[] = $addBasSku['sku'];
|
|
|
+ $owner_code[] = $addBasSku['customerid'];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ /** @var OwnerService $ownerService */
|
|
|
+ $ownerService = app(OwnerService::class);
|
|
|
+
|
|
|
+ $owner_codes = (function () use ($owner_sku_map) {
|
|
|
+ $owner_codes = [];
|
|
|
+ if (count($owner_sku_map) == 0) return $owner_codes;
|
|
|
+ foreach ($owner_sku_map as $item) {
|
|
|
+ $owner_codes[$item['owner_code']] = $item['owner_code'];
|
|
|
+ }
|
|
|
+ return $owner_codes;
|
|
|
+ })();
|
|
|
+ $owner_id = (function () use ($ownerService, $owner_codes) {
|
|
|
+ $owners = $ownerService->getOwnerByCodes($owner_codes);
|
|
|
+ $map = [];
|
|
|
+ $owners->each(function ($owner) use (&$map) {
|
|
|
+ $map[] = $owner['id'];
|
|
|
+ });
|
|
|
+ return $map;
|
|
|
+ })();
|
|
|
+ $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;
|
|
|
+ })();
|
|
|
+ if (count($owner_sku_map) == 0) return null;
|
|
|
+ $commodities = Commodity::query()
|
|
|
+ ->whereIn('owner_id', array_unique($owner_id))
|
|
|
+ ->whereIn('sku', array_unique($sku))
|
|
|
+ ->groupBy('owner_id', 'sku')
|
|
|
->get();
|
|
|
- $commodity_map = [];
|
|
|
- foreach ($commodities as $commodity) {
|
|
|
- $commodity_map[$commodity['owner']['code'].$commodity['sku']] = $commodity;
|
|
|
- }
|
|
|
- foreach ($addBasSkus as $addBasSku) {
|
|
|
- if ($store_asn_code_map[$addBasSku->customerid.$addBasSku->sku] ?? false) continue;
|
|
|
- $owner = $owners_code_map[$addBasSku->customerid] ?? null;
|
|
|
-
|
|
|
- $params[] = [
|
|
|
|
|
|
+ $unexists = [];
|
|
|
+ foreach ($owner_sku_map as $item) {
|
|
|
+ $commodity = Cache::get("owner_code_{$item['owner_code']}_sku_{$item['sku']}");
|
|
|
+ if ($commodity) continue;
|
|
|
+ $commodity = $commodities->where('sku', $item['sku'])->where('owner_id', $owner_map[$item['owner_code']])->first();
|
|
|
+ if ($commodity) continue;
|
|
|
+ $items = [
|
|
|
+ 'owner_code' => $item['owner_code'],
|
|
|
+ 'sku' => $item['sku']
|
|
|
+ ];
|
|
|
+ $unexists[json_encode($items)] = true;
|
|
|
+ }
|
|
|
+ if (count($unexists) == 0) return null;
|
|
|
+ $BasSKUs = $addBasSkus->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 = [];
|
|
|
+ $BasSKUs->each(function ($basSku) use (&$map, $owner_map) {
|
|
|
+ $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' => $basSku->addtime,
|
|
|
+ 'updated_at' => $basSku->edittime,
|
|
|
+ 'pack_spec' => $basSku->pickid,
|
|
|
+ ];
|
|
|
+ });
|
|
|
+ return $map;
|
|
|
+ })();
|
|
|
+ if (count($inner_params) == 0) return null;
|
|
|
+ return $inner_params;
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO
|
|
|
+ public function syncUpdateCommodity($addBasSkus)
|
|
|
+ {
|
|
|
+ $owner_sku_map = [];
|
|
|
+ $sku = [];
|
|
|
+ $addBasSkus->each(function ($addBasSku) use (&$owner_sku_map, &$sku, &$owner_code) {
|
|
|
+ if (!empty($addBasSku['customerid']) && !empty($addBasSku['sku'])) {
|
|
|
+ $key = "owner_code_{$addBasSku['customerid']}_sku_{$addBasSku['sku']}";
|
|
|
+ $owner_sku_map[$key] = ['owner_code' => $addBasSku['customerid'], 'sku' => $addBasSku['sku']];
|
|
|
+ $sku[] = $addBasSku['sku'];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ /**
|
|
|
+ * @var OwnerService $ownerService
|
|
|
+ * @var DataHandlerService $dataHandlerService
|
|
|
+ */
|
|
|
+ $ownerService = app(OwnerService::class);
|
|
|
+ $owner_codes = (function () use ($owner_sku_map) {
|
|
|
+ $owner_codes = [];
|
|
|
+ if (count($owner_sku_map) == 0) return $owner_codes;
|
|
|
+ foreach ($owner_sku_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;
|
|
|
+ })();
|
|
|
+ $owner_id = (function () use ($ownerService, $owner_codes) {
|
|
|
+ $owners = $ownerService->getOwnerByCodes($owner_codes);
|
|
|
+ $map = [];
|
|
|
+ $owners->each(function ($owner) use (&$map) {
|
|
|
+ $map[] = $owner['id'];
|
|
|
+ });
|
|
|
+ return $map;
|
|
|
+ })();
|
|
|
+ $commodities = Commodity::query()
|
|
|
+ ->whereIn('owner_id', array_unique($owner_id))
|
|
|
+ ->whereIn('sku', array_unique($sku))
|
|
|
+ ->groupBy('owner_id', 'sku')
|
|
|
+ ->get();
|
|
|
+ $dataHandlerService = app(DataHandlerService::class);
|
|
|
+ $commodities_map = $dataHandlerService->dataHeader(['owner_id', 'sku'], $commodities);
|
|
|
+ $updateParams = [[
|
|
|
+ 'id', 'name', 'sku', 'owner_id', 'length', 'width', 'height', 'volumn', 'pack_spec', 'updated_at', 'created_at'
|
|
|
+ ]];
|
|
|
+ foreach ($addBasSkus as $basSku) {
|
|
|
+ $commodity = Cache::get("owner_code_{$basSku['customerid']}_sku_{$basSku['sku']}");
|
|
|
+ if (!$commodity) {
|
|
|
+ $commodity = $dataHandlerService->getKeyValue(['owner_id' => $owner_map[$basSku['customerid']], 'sku' => $basSku['sku']], $commodities_map);
|
|
|
+ if (!$commodity) continue;
|
|
|
+ }
|
|
|
+ if ($commodity->sku != $basSku->sku ||
|
|
|
+ $commodity->name != $basSku->descr_c ||
|
|
|
+ $commodity->length != $basSku->skulength ||
|
|
|
+ $commodity->width != $basSku->skuwidth ||
|
|
|
+ $commodity->height != $basSku->skuhigh ||
|
|
|
+ $commodity->volumn != $basSku->cube ||
|
|
|
+ $commodity->created_at != $basSku->addtime ||
|
|
|
+ $commodity->updated_at != $basSku->edittime ||
|
|
|
+ $commodity->pack_spec != $basSku->pickid) {
|
|
|
+ $updateParams[] = [
|
|
|
+ 'id' => $commodity->id,
|
|
|
+ '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' => $basSku->addtime,
|
|
|
+ 'updated_at' => $basSku->edittime,
|
|
|
+ 'pack_spec' => $basSku->pickid,
|
|
|
+ ];
|
|
|
+ }
|
|
|
}
|
|
|
- return $params;
|
|
|
+ if (count($updateParams) > 1) $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);
|
|
|
}
|
|
|
+
|
|
|
public function getAsnLastSyncAt($key, $type)
|
|
|
{
|
|
|
$last_time = ValueStore::query()->where('name', $key)->value('value');
|
|
|
@@ -478,7 +666,7 @@ Class CommodityService
|
|
|
if (Cache::get($set)) {
|
|
|
$addBasSkus = collect();
|
|
|
foreach ($basSkus as $basSku) {
|
|
|
- if (Cache::get($prefixKey . $basSkus->customerid . '_' . $basSkus->sku)) continue;
|
|
|
+ if (Cache::get($prefixKey . $basSku->customerid . '_' . $basSku->sku)) continue;
|
|
|
$addBasSkus->add($basSku);
|
|
|
}
|
|
|
return $addBasSkus;
|
|
|
@@ -500,25 +688,23 @@ Class CommodityService
|
|
|
|
|
|
public function setLastRecordsByRedis($prefixKey, $set, $keys, $last_records)
|
|
|
{
|
|
|
- if (Cache::get($set)) {
|
|
|
- $cacheKeys = [];
|
|
|
- foreach ($last_records as $last_record) {
|
|
|
- Cache::put($prefixKey . $last_record->customerid . '_' . $last_record->sku, true);
|
|
|
- array_push($cacheKeys, $prefixKey . $last_record->customerid . '_' . $last_record->sku);
|
|
|
- }
|
|
|
- Cache::put($keys, $cacheKeys);
|
|
|
- Cache::put($set, true);
|
|
|
+ $cacheKeys = [];
|
|
|
+ foreach ($last_records as $last_record) {
|
|
|
+ Cache::put($prefixKey . $last_record->customerid . '_' . $last_record->sku, true);
|
|
|
+ array_push($cacheKeys, $prefixKey . $last_record->customerid . '_' . $last_record->sku);
|
|
|
}
|
|
|
+ Cache::put($keys, $cacheKeys);
|
|
|
+ Cache::put($set, true);
|
|
|
}
|
|
|
+
|
|
|
public function filterByCommodityCache($basSkus)
|
|
|
{
|
|
|
- if (count($basSkus)<1)return null;
|
|
|
- $addBasSkus=collect();
|
|
|
- foreach ($basSkus as $basSku){
|
|
|
+ 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;
|
|
|
}
|
|
|
-
|
|
|
}
|